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}