001package gudusoft.gsqlparser.dlineage.dataflow.model.xml;
002
003import java.util.LinkedHashSet;
004import java.util.Set;
005
006import javax.xml.bind.annotation.XmlAttribute;
007import javax.xml.bind.annotation.XmlElement;
008import javax.xml.bind.annotation.XmlElementWrapper;
009import javax.xml.bind.annotation.XmlType;
010
011import gudusoft.gsqlparser.TSourceToken;
012import gudusoft.gsqlparser.dlineage.dataflow.model.ModelBindingManager;
013import gudusoft.gsqlparser.dlineage.dataflow.model.Transform;
014import gudusoft.gsqlparser.dlineage.util.Pair3;
015import gudusoft.gsqlparser.util.SQLUtil;
016
017@XmlType(propOrder = { "id", "server", "database", "schema", "name", "procedureName", "procedureId", "queryHashId", "type", "coordinate", "transforms"})
018public class process {
019
020        private String id;
021
022        private String server;
023
024        private String database;
025
026        private String schema;
027
028        private String name;
029        
030        private String procedureName;
031        
032        private String procedureId;
033        
034        private String queryHashId;
035
036        private String type;
037
038        private String coordinate;
039        
040        private Set<transform> transforms;
041        
042        public process() {
043        }
044
045        @XmlAttribute(required = false)
046        public String getCoordinate() {
047                if (ModelBindingManager.getGlobalOption()!=null && ModelBindingManager.getGlobalOption().isIgnoreCoordinate()) {
048                        return null;
049                }
050                return this.coordinate;
051        }
052
053        public void setCoordinate(String coordinate) {
054                if (ModelBindingManager.getGlobalOption()!=null && ModelBindingManager.getGlobalOption().isIgnoreCoordinate()) {
055                        return;
056                }
057                this.coordinate = coordinate;
058        }
059
060        @XmlAttribute(required = false)
061        public String getName() {
062                return this.name;
063        }
064
065        public void setName(String name) {
066                this.name = name;
067        }
068
069        @XmlAttribute(required = false)
070        public String getId() {
071                return this.id;
072        }
073
074        public void setId(String id) {
075                this.id = id;
076        }
077
078        @XmlAttribute(required = false)
079        public String getType() {
080                return this.type;
081        }
082
083        public void setType(String type) {
084                this.type = type;
085        }
086
087        @XmlAttribute(required = false)
088        public String getServer() {
089                return server;
090        }
091
092        public void setServer(String server) {
093                this.server = server;
094        }
095
096        @XmlAttribute(required = false)
097        public String getDatabase() {
098                return database;
099        }
100
101        public void setDatabase(String database) {
102                if (SQLUtil.parseNames(database).size() > 1) {
103                        database = "\"" + database + "\"";
104                }
105                this.database = database;
106        }
107
108        @XmlAttribute(required = false)
109        public String getSchema() {
110                return schema;
111        }
112
113        public void setSchema(String schema) {
114                if (SQLUtil.parseNames(schema).size() > 1) {
115                        schema = "\"" + schema + "\"";
116                }
117                this.schema = schema;
118        }
119
120        @XmlAttribute(required = false)
121        public String getProcedureName() {
122                return procedureName;
123        }
124
125        public void setProcedureName(String procedureName) {
126                this.procedureName = procedureName;
127        }
128        
129        @XmlAttribute(required = false)
130        public String getProcedureId() {
131                return procedureId;
132        }
133
134        public void setProcedureId(String procedureId) {
135                this.procedureId = procedureId;
136        }
137
138        @XmlAttribute(required = false)
139        public String getQueryHashId() {
140                return queryHashId;
141        }
142
143        public void setQueryHashId(String queryHashId) {
144                this.queryHashId = queryHashId;
145        }       
146        
147        @XmlElementWrapper(name="transforms") 
148        @XmlElement(name="transform", required = false)
149        public Set<transform> getTransforms() {
150                if (ModelBindingManager.getGlobalOption()!=null && !ModelBindingManager.getGlobalOption().isTransform()) {
151                        return null;
152                }
153                return transforms;
154        }
155        
156        public void setTransforms(Set<transform> transforms) {
157                if (ModelBindingManager.getGlobalOption()!=null && !ModelBindingManager.getGlobalOption().isTransform()) {
158                        return;
159                }
160                this.transforms = transforms;
161        }
162        
163        public void addTransform(Transform transform) {
164                if (ModelBindingManager.getGlobalOption() != null && !ModelBindingManager.getGlobalOption().isTransform()) {
165                        return;
166                }
167                if (transform == null)
168                        return;
169                if (transforms == null) {
170                        transforms = new LinkedHashSet<transform>();
171                }
172
173                transform t = new transform();
174                if (transform.getCode() != null) {
175                        if (ModelBindingManager.getGlobalOption().isTransformCoordinate()) {
176                                TSourceToken startToken = transform.getCode().getStartToken();
177                                TSourceToken endToken = transform.getCode().getEndToken();
178                                Pair3<Long, Long, String> startPosition = new Pair3<Long, Long, String>(startToken.lineNo,
179                                                startToken.columnNo, ModelBindingManager.getGlobalHash());
180                                Pair3<Long, Long, String> endPosition = new Pair3<Long, Long, String>(endToken.lineNo,
181                                                endToken.columnNo + SQLUtil.endTrim(endToken.astext).length(), ModelBindingManager.getGlobalHash());
182                                t.setCoordinate(convertCoordinate(startPosition) + "," + convertCoordinate(endPosition));
183                        }
184                        t.setCode(transform.getCode().toString());
185                } else if (!SQLUtil.isEmpty(transform.getCodeString())) {
186                        if (ModelBindingManager.getGlobalOption().isTransformCoordinate()) {
187                                TSourceToken startToken = transform.getStartToken();
188                                TSourceToken endToken = transform.getEndToken();
189                                Pair3<Long, Long, String> startPosition = new Pair3<Long, Long, String>(startToken.lineNo,
190                                                startToken.columnNo, ModelBindingManager.getGlobalHash());
191                                Pair3<Long, Long, String> endPosition = new Pair3<Long, Long, String>(endToken.lineNo,
192                                                endToken.columnNo + SQLUtil.endTrim(endToken.astext).length(), ModelBindingManager.getGlobalHash());
193                                t.setCoordinate(convertCoordinate(startPosition) + "," + convertCoordinate(endPosition));
194                        }
195                        t.setCode(transform.getCodeString());
196                }
197                t.setType(transform.getType());
198                transforms.add(t);
199        }
200        
201        private Pair3<Long, Long, Integer> convertCoordinate(Pair3<Long, Long, String> position) {
202                return new Pair3<Long, Long, Integer>(position.first, position.second,
203                                ModelBindingManager.getGlobalSqlInfo().getIndexOf(position.third));
204        }
205}