001 002package gudusoft.gsqlparser.dlineage.dataflow.model.xml; 003 004import gudusoft.gsqlparser.dlineage.dataflow.model.json.Coordinate; 005import gudusoft.gsqlparser.util.SQLUtil; 006 007import javax.xml.bind.annotation.XmlAttribute; 008import javax.xml.bind.annotation.XmlTransient; 009import javax.xml.bind.annotation.XmlType; 010import java.util.Comparator; 011import java.util.Objects; 012import java.util.TreeSet; 013 014@XmlType(propOrder = { "id", "name", "displayName", "coordinate", "source", "qualifiedTable", "isFunction", "dataType", "primaryKey", "unqiueKey", "indexKey", "foreignKey" }) 015public class column { 016 private String id; 017 018 private String name; 019 020 private String displayName; 021 022 @XmlTransient 023 private TreeSet<String> coordinateItems = new TreeSet<String>(new Comparator<String>() { 024 025 @Override 026 public int compare(String o1, String o2) { 027 Coordinate[] c1 = Coordinate.parse(o1); 028 Coordinate[] c2 = Coordinate.parse(o2); 029 if(c1[0].getY() == -1 && c2[0].getY()!=-1){ 030 return 1; 031 } 032 if(c1[0].getY() != -1 && c2[0].getY()==-1){ 033 return -1; 034 } 035 return Long.compare(c1[0].getY(), c1[0].getY()); 036 } 037 }); 038 039 private StringBuffer coordinate = new StringBuffer(); 040 041 private String source; 042 043 private String qualifiedTable; 044 045 private String isFunction; 046 047 private String dataType; 048 049 private Boolean primaryKey; 050 051 private Boolean unqiueKey; 052 053 private Boolean indexKey; 054 055 private Boolean foreignKey; 056 057 @XmlAttribute(required = false) 058 public String getCoordinate() { 059 String result = coordinate.toString(); 060 if(SQLUtil.isEmpty(result)) 061 return null; 062 return result; 063 } 064 065 public void appendCoordinate(String coordinate) { 066 if(SQLUtil.isEmpty(coordinate)){ 067 return; 068 } 069 if (!coordinateItems.contains(coordinate)) { 070 coordinateItems.add(coordinate); 071 this.coordinate.setLength(0); 072 for(String item:coordinateItems){ 073 if (this.coordinate.length() > 0) { 074 if (item.indexOf("-1") != -1) { 075 continue; 076 } 077 this.coordinate.append(","); 078 } 079 this.coordinate.append(item); 080 } 081 } 082 } 083 084 public void setCoordinate(String coordinate) { 085 if(SQLUtil.isEmpty(coordinate)){ 086 return; 087 } 088 this.coordinate.setLength(0); 089 this.coordinate.append(coordinate); 090 } 091 092 public void clearCoordinate() { 093 this.coordinate = new StringBuffer(); 094 } 095 096 097 @XmlAttribute(required = false) 098 public String getName() { 099 return name; 100 } 101 102 public void setName(String name) { 103 this.name = name; 104 } 105 106 @XmlAttribute(required = false) 107 public String getDisplayName() { 108 return displayName; 109 } 110 111 public void setDisplayName(String displayName) { 112 this.displayName = displayName; 113 } 114 115 @XmlAttribute(required = false) 116 public String getId() { 117 return id; 118 } 119 120 public void setId(String id) { 121 this.id = id; 122 } 123 124 @XmlAttribute(required = false) 125 public String getSource() { 126 return source; 127 } 128 129 public void setSource(String source) { 130 this.source = source; 131 } 132 133 @XmlAttribute(required = false) 134 public String getQualifiedTable() { 135 return qualifiedTable; 136 } 137 138 public void setQualifiedTable(String qualifiedTable) { 139 this.qualifiedTable = qualifiedTable; 140 } 141 142 @Override 143 public int hashCode() { 144 final int prime = 31; 145 int result = 1; 146 result = prime * result + ((coordinate == null) ? 0 : coordinate.toString().hashCode()); 147 result = prime * result + ((id == null) ? 0 : id.hashCode()); 148 result = prime * result + ((name == null) ? 0 : name.hashCode()); 149 result = prime * result + ((qualifiedTable == null) ? 0 : qualifiedTable.hashCode()); 150 result = prime * result + ((source == null) ? 0 : source.hashCode()); 151 return result; 152 } 153 154 @Override 155 public boolean equals(Object obj) { 156 if (this == obj) 157 return true; 158 if (obj == null) 159 return false; 160 if (getClass() != obj.getClass()) 161 return false; 162 column other = (column) obj; 163 if (coordinate == null) { 164 if (other.coordinate != null) 165 return false; 166 } else if (!Objects.equals(coordinate.toString(),other.coordinate.toString())) 167 return false; 168 if (id == null) { 169 if (other.id != null) 170 return false; 171 } else if (!id.equals(other.id)) 172 return false; 173 if (name == null) { 174 if (other.name != null) 175 return false; 176 } else if (!name.equals(other.name)) 177 return false; 178 if (qualifiedTable == null) { 179 if (other.qualifiedTable != null) 180 return false; 181 } else if (!qualifiedTable.equals(other.qualifiedTable)) 182 return false; 183 if (source == null) { 184 if (other.source != null) 185 return false; 186 } else if (!source.equals(other.source)) 187 return false; 188 return true; 189 } 190 191 @XmlAttribute(name = "isFunction", required = false) 192 public String getIsFunction() { 193 return isFunction; 194 } 195 196 public void setIsFunction(String isFunction) { 197 this.isFunction = isFunction; 198 } 199 200 public int getOccurrencesNumber() { 201 return PositionUtil.getOccurrencesNumber(coordinate.toString()); 202 } 203 204 public Coordinate getStartPos(int index) { 205 return PositionUtil.getStartPos(coordinate.toString(), index); 206 } 207 208 public Coordinate getEndPos(int index) { 209 return PositionUtil.getEndPos(coordinate.toString(), index); 210 } 211 212 @XmlAttribute(name = "primaryKey", required = false) 213 public Boolean isPrimaryKey() { 214 return primaryKey; 215 } 216 217 public void setPrimaryKey(Boolean primaryKey) { 218 if(primaryKey == null || Boolean.FALSE.equals(primaryKey)){ 219 return; 220 } 221 this.primaryKey = primaryKey; 222 } 223 224 @XmlAttribute(name = "unqiueKey", required = false) 225 public Boolean isUnqiueKey() { 226 return unqiueKey; 227 } 228 229 public void setUnqiueKey(Boolean unqiueKey) { 230 if(unqiueKey == null || Boolean.FALSE.equals(unqiueKey)){ 231 return; 232 } 233 this.unqiueKey = unqiueKey; 234 } 235 236 @XmlAttribute(name = "indexKey", required = false) 237 public Boolean isIndexKey() { 238 return indexKey; 239 } 240 241 public void setIndexKey(Boolean indexKey) { 242 if(indexKey == null || Boolean.FALSE.equals(indexKey)){ 243 return; 244 } 245 this.indexKey = indexKey; 246 } 247 248 @XmlAttribute(name = "foreignKey", required = false) 249 public Boolean isForeignKey() { 250 return foreignKey; 251 } 252 253 public void setForeignKey(Boolean foreignKey) { 254 if(foreignKey == null || Boolean.FALSE.equals(foreignKey)){ 255 return; 256 } 257 this.foreignKey = foreignKey; 258 } 259 260 @XmlAttribute(name = "dataType", required = false) 261 public String getDataType() { 262 return dataType; 263 } 264 265 public void setDataType(String dataType) { 266 this.dataType = dataType; 267 } 268}