001 package org.apache.torque.util; 002 003 import java.util.Comparator; 004 005 import static org.apache.commons.lang.StringUtils.*; 006 007 import org.kuali.db.jdbc.Transaction; 008 009 /** 010 * 011 * 012 */ 013 public class TransactionComparator<T> implements Comparator<Transaction> { 014 015 String suffix = ".sql"; 016 String constraints = "-constraints"; 017 String artifactId; 018 019 public TransactionComparator() { 020 this(null); 021 } 022 023 public TransactionComparator(String artifactId) { 024 super(); 025 this.artifactId = artifactId; 026 } 027 028 @Override 029 public int compare(Transaction one, Transaction two) { 030 String loc1 = one.getResourceLocation(); 031 String loc2 = two.getResourceLocation(); 032 // If loc1 is ks-embedded-db.sql, loc1 goes before loc2 033 if (isSchemaSQL(loc1)) { 034 return -1; 035 } 036 // If loc2 is ks-embedded-db.sql, loc1 goes after loc2 037 if (isSchemaSQL(loc2)) { 038 return 1; 039 } 040 // If loc1 is ks-embedded-db-constraints.sql, loc1 goes after loc2 041 if (isSchemaConstraintsSQL(loc1)) { 042 return 1; 043 } 044 // If loc2 is ks-embedded-db-constraints.sql, loc1 goes before loc2 045 if (isSchemaConstraintsSQL(loc2)) { 046 return -1; 047 } 048 // They are both empty, it is a tie 049 if (isEmpty(loc1) && isEmpty(loc2)) { 050 return 0; 051 } 052 // Loc2 is empty but loc1 is not, loc1 goes after loc2 053 if (isEmpty(loc1) && !isEmpty(loc2)) { 054 return 1; 055 } 056 // Loc1 is empty but loc2 is not, loc1 goes before loc2 057 if (!isEmpty(loc1) && isEmpty(loc2)) { 058 return -1; 059 } 060 // Fall through to the normal string compare 061 return loc1.compareTo(loc2); 062 } 063 064 protected boolean isSchemaSQL(String location) { 065 if (isEmpty(location)) { 066 return false; 067 } else { 068 return location.endsWith(getArtifactId() + getSuffix()); 069 } 070 } 071 072 protected boolean isSchemaConstraintsSQL(String location) { 073 return location.endsWith(getArtifactId() + getConstraints() + getSuffix()); 074 } 075 076 public String getArtifactId() { 077 return artifactId; 078 } 079 080 public void setArtifactId(String schema) { 081 this.artifactId = schema; 082 } 083 084 public String getSuffix() { 085 return suffix; 086 } 087 088 public void setSuffix(String suffix) { 089 this.suffix = suffix; 090 } 091 092 public String getConstraints() { 093 return constraints; 094 } 095 096 public void setConstraints(String constraints) { 097 this.constraints = constraints; 098 } 099 100 }