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}