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 private Boolean nullable; 058 059 private Boolean identity; 060 061 private Boolean computed; 062 063 private Boolean persisted; 064 065 private String computedDefinition; 066 067 private String defaultValue; 068 069 private String defaultName; 070 071 @XmlAttribute(required = false) 072 public String getCoordinate() { 073 String result = coordinate.toString(); 074 if(SQLUtil.isEmpty(result)) 075 return null; 076 return result; 077 } 078 079 public void appendCoordinate(String coordinate) { 080 if(SQLUtil.isEmpty(coordinate)){ 081 return; 082 } 083 if (!coordinateItems.contains(coordinate)) { 084 coordinateItems.add(coordinate); 085 this.coordinate.setLength(0); 086 for(String item:coordinateItems){ 087 if (this.coordinate.length() > 0) { 088 if (item.indexOf("-1") != -1) { 089 continue; 090 } 091 this.coordinate.append(","); 092 } 093 this.coordinate.append(item); 094 } 095 } 096 } 097 098 public void setCoordinate(String coordinate) { 099 if(SQLUtil.isEmpty(coordinate)){ 100 return; 101 } 102 this.coordinate.setLength(0); 103 this.coordinate.append(coordinate); 104 } 105 106 public void clearCoordinate() { 107 this.coordinate = new StringBuffer(); 108 } 109 110 111 @XmlAttribute(required = false) 112 public String getName() { 113 return name; 114 } 115 116 public void setName(String name) { 117 this.name = name; 118 } 119 120 @XmlAttribute(required = false) 121 public String getDisplayName() { 122 return displayName; 123 } 124 125 public void setDisplayName(String displayName) { 126 this.displayName = displayName; 127 } 128 129 @XmlAttribute(required = false) 130 public String getId() { 131 return id; 132 } 133 134 public void setId(String id) { 135 this.id = id; 136 } 137 138 @XmlAttribute(required = false) 139 public String getSource() { 140 return source; 141 } 142 143 public void setSource(String source) { 144 this.source = source; 145 } 146 147 @XmlAttribute(required = false) 148 public String getQualifiedTable() { 149 return qualifiedTable; 150 } 151 152 public void setQualifiedTable(String qualifiedTable) { 153 this.qualifiedTable = qualifiedTable; 154 } 155 156 @Override 157 public int hashCode() { 158 final int prime = 31; 159 int result = 1; 160 result = prime * result + ((coordinate == null) ? 0 : coordinate.toString().hashCode()); 161 result = prime * result + ((id == null) ? 0 : id.hashCode()); 162 result = prime * result + ((name == null) ? 0 : name.hashCode()); 163 result = prime * result + ((qualifiedTable == null) ? 0 : qualifiedTable.hashCode()); 164 result = prime * result + ((source == null) ? 0 : source.hashCode()); 165 return result; 166 } 167 168 @Override 169 public boolean equals(Object obj) { 170 if (this == obj) 171 return true; 172 if (obj == null) 173 return false; 174 if (getClass() != obj.getClass()) 175 return false; 176 column other = (column) obj; 177 if (coordinate == null) { 178 if (other.coordinate != null) 179 return false; 180 } else if (!Objects.equals(coordinate.toString(),other.coordinate.toString())) 181 return false; 182 if (id == null) { 183 if (other.id != null) 184 return false; 185 } else if (!id.equals(other.id)) 186 return false; 187 if (name == null) { 188 if (other.name != null) 189 return false; 190 } else if (!name.equals(other.name)) 191 return false; 192 if (qualifiedTable == null) { 193 if (other.qualifiedTable != null) 194 return false; 195 } else if (!qualifiedTable.equals(other.qualifiedTable)) 196 return false; 197 if (source == null) { 198 if (other.source != null) 199 return false; 200 } else if (!source.equals(other.source)) 201 return false; 202 return true; 203 } 204 205 @XmlAttribute(name = "isFunction", required = false) 206 public String getIsFunction() { 207 return isFunction; 208 } 209 210 public void setIsFunction(String isFunction) { 211 this.isFunction = isFunction; 212 } 213 214 public int getOccurrencesNumber() { 215 return PositionUtil.getOccurrencesNumber(coordinate.toString()); 216 } 217 218 public Coordinate getStartPos(int index) { 219 return PositionUtil.getStartPos(coordinate.toString(), index); 220 } 221 222 public Coordinate getEndPos(int index) { 223 return PositionUtil.getEndPos(coordinate.toString(), index); 224 } 225 226 @XmlAttribute(name = "primaryKey", required = false) 227 public Boolean isPrimaryKey() { 228 return primaryKey; 229 } 230 231 public void setPrimaryKey(Boolean primaryKey) { 232 if(primaryKey == null || Boolean.FALSE.equals(primaryKey)){ 233 return; 234 } 235 this.primaryKey = primaryKey; 236 } 237 238 @XmlAttribute(name = "unqiueKey", required = false) 239 public Boolean isUnqiueKey() { 240 return unqiueKey; 241 } 242 243 public void setUnqiueKey(Boolean unqiueKey) { 244 if(unqiueKey == null || Boolean.FALSE.equals(unqiueKey)){ 245 return; 246 } 247 this.unqiueKey = unqiueKey; 248 } 249 250 @XmlAttribute(name = "indexKey", required = false) 251 public Boolean isIndexKey() { 252 return indexKey; 253 } 254 255 public void setIndexKey(Boolean indexKey) { 256 if(indexKey == null || Boolean.FALSE.equals(indexKey)){ 257 return; 258 } 259 this.indexKey = indexKey; 260 } 261 262 @XmlAttribute(name = "foreignKey", required = false) 263 public Boolean isForeignKey() { 264 return foreignKey; 265 } 266 267 public void setForeignKey(Boolean foreignKey) { 268 if(foreignKey == null || Boolean.FALSE.equals(foreignKey)){ 269 return; 270 } 271 this.foreignKey = foreignKey; 272 } 273 274 @XmlAttribute(name = "dataType", required = false) 275 public String getDataType() { 276 return dataType; 277 } 278 279 public void setDataType(String dataType) { 280 this.dataType = dataType; 281 } 282 283 @XmlAttribute(name = "nullable", required = false) 284 public Boolean isNullable() { 285 return nullable; 286 } 287 288 public void setNullable(Boolean nullable) { 289 this.nullable = nullable; 290 } 291 292 @XmlAttribute(name = "identity", required = false) 293 public Boolean isIdentity() { 294 return identity; 295 } 296 297 public void setIdentity(Boolean identity) { 298 this.identity = identity; 299 } 300 301 @XmlAttribute(name = "computed", required = false) 302 public Boolean isComputed() { 303 return computed; 304 } 305 306 public void setComputed(Boolean computed) { 307 this.computed = computed; 308 } 309 310 @XmlAttribute(name = "persisted", required = false) 311 public Boolean isPersisted() { 312 return persisted; 313 } 314 315 public void setPersisted(Boolean persisted) { 316 this.persisted = persisted; 317 } 318 319 @XmlAttribute(name = "computedDefinition", required = false) 320 public String getComputedDefinition() { 321 return computedDefinition; 322 } 323 324 public void setComputedDefinition(String computedDefinition) { 325 this.computedDefinition = computedDefinition; 326 } 327 328 @XmlAttribute(name = "defaultValue", required = false) 329 public String getDefaultValue() { 330 return defaultValue; 331 } 332 333 public void setDefaultValue(String defaultValue) { 334 this.defaultValue = defaultValue; 335 } 336 337 @XmlAttribute(name = "defaultName", required = false) 338 public String getDefaultName() { 339 return defaultName; 340 } 341 342 public void setDefaultName(String defaultName) { 343 this.defaultName = defaultName; 344 } 345}