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}