001package gudusoft.gsqlparser.dlineage.dataflow.model;
002
003import gudusoft.gsqlparser.EParameterMode;
004import gudusoft.gsqlparser.TSourceToken;
005import gudusoft.gsqlparser.dlineage.util.Pair3;
006import gudusoft.gsqlparser.nodes.TParameterDeclaration;
007import gudusoft.gsqlparser.nodes.TTypeName;
008import gudusoft.gsqlparser.util.SQLUtil;
009
010public class Argument {
011        private OraclePackage oraclePackage;
012        private Procedure procedure;
013        private long id;
014        private String name;
015        private Pair3<Long, Long, String> startPosition;
016        private Pair3<Long, Long, String> endPosition;
017        private TParameterDeclaration parameterObject;
018        private EParameterMode mode;
019        private TTypeName dataType;
020
021        public Argument(Procedure procedure, TParameterDeclaration parameterObject, int index) {
022                if (procedure != null && parameterObject != null) {
023                        this.id = ++ModelBindingManager.get().TABLE_COLUMN_ID;
024                        this.parameterObject = parameterObject;
025                        TSourceToken startToken = parameterObject.getStartToken();
026                        TSourceToken endToken = parameterObject.getEndToken();
027                        this.startPosition = new Pair3<Long, Long, String>(startToken.lineNo, startToken.columnNo, ModelBindingManager.getGlobalHash());
028                        this.endPosition = new Pair3<Long, Long, String>(endToken.lineNo,
029                                        endToken.columnNo + (long) SQLUtil.endTrim(endToken.astext).length(), ModelBindingManager.getGlobalHash());
030                        
031                        if (parameterObject.getParameterName() != null) {
032                                if (parameterObject.getParameterName().getColumnNameOnly() != null
033                                                && !"".equals(parameterObject.getParameterName().getColumnNameOnly())) {
034                                        this.name = parameterObject.getParameterName().getColumnNameOnly();
035                                } else {
036                                        this.name = parameterObject.getParameterName().toString();
037                                }
038                        }
039                        else if (parameterObject.getDataType() != null) {
040                                this.name = "$" + index;
041                        }
042
043                        this.procedure = procedure;
044                        this.mode = this.parameterObject.getParameterMode();
045                        this.dataType = this.parameterObject.getDataType();
046                        procedure.addArgument(this);
047                } else {
048                        throw new IllegalArgumentException("Procedure Argument arguments can't be null.");
049                }
050        }
051        
052        public Argument(OraclePackage oraclePackage, TParameterDeclaration parameterObject, int index) {
053                if (procedure != null && parameterObject != null) {
054                        this.id = ++ModelBindingManager.get().TABLE_COLUMN_ID;
055                        this.parameterObject = parameterObject;
056                        TSourceToken startToken = parameterObject.getStartToken();
057                        TSourceToken endToken = parameterObject.getEndToken();
058                        this.startPosition = new Pair3<Long, Long, String>(startToken.lineNo, startToken.columnNo, ModelBindingManager.getGlobalHash());
059                        this.endPosition = new Pair3<Long, Long, String>(endToken.lineNo,
060                                        endToken.columnNo + (long) SQLUtil.endTrim(endToken.astext).length(), ModelBindingManager.getGlobalHash());
061                        
062                        if (parameterObject.getParameterName() != null) {
063                                if (parameterObject.getParameterName().getColumnNameOnly() != null
064                                                && !"".equals(parameterObject.getParameterName().getColumnNameOnly())) {
065                                        this.name = parameterObject.getParameterName().getColumnNameOnly();
066                                } else {
067                                        this.name = parameterObject.getParameterName().toString();
068                                }
069                        }
070                        else if (parameterObject.getDataType() != null) {
071                                this.name = "$" + index;
072                        }
073
074                        this.oraclePackage = oraclePackage;
075                        this.mode = this.parameterObject.getParameterMode();
076                        this.dataType = this.parameterObject.getDataType();
077                        procedure.addArgument(this);
078                } else {
079                        throw new IllegalArgumentException("Procedure Argument arguments can't be null.");
080                }
081        }
082
083        public long getId() {
084                return this.id;
085        }
086
087        public String getName() {
088                return this.name;
089        }
090
091        public Pair3<Long, Long, String> getStartPosition() {
092                return this.startPosition;
093        }
094
095        public Pair3<Long, Long, String> getEndPosition() {
096                return this.endPosition;
097        }
098
099        public Procedure getProcedure() {
100                return this.procedure;
101        }
102
103        public void setProcedure(Procedure procedure) {
104                this.procedure = procedure;
105        }
106        
107        public OraclePackage getOraclePackage() {
108                return oraclePackage;
109        }
110
111        public void setOraclePackage(OraclePackage oraclePackage) {
112                this.oraclePackage = oraclePackage;
113        }
114
115        public void setId(int id) {
116                this.id = id;
117        }
118
119        public void setName(String name) {
120                this.name = name;
121        }
122
123        public void setStartPosition(Pair3<Long, Long, String> startPosition) {
124                this.startPosition = startPosition;
125        }
126
127        public void setEndPosition(Pair3<Long, Long, String> endPosition) {
128                this.endPosition = endPosition;
129        }
130
131        public TParameterDeclaration getParameterObject() {
132                return this.parameterObject;
133        }
134
135        public void setParameterObject(TParameterDeclaration parameterObject) {
136                this.parameterObject = parameterObject;
137        }
138
139        public EParameterMode getMode() {
140                return this.mode;
141        }
142
143        public void setMode(EParameterMode mode) {
144                this.mode = mode;
145        }
146
147        public TTypeName getDataType() {
148                return this.dataType;
149        }
150
151        public void setDataType(TTypeName dataType) {
152                this.dataType = dataType;
153        }
154}