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