001package gudusoft.gsqlparser.dlineage.dataflow.model;
002
003import java.util.List;
004
005import gudusoft.gsqlparser.dlineage.DataFlowAnalyzer;
006import gudusoft.gsqlparser.dlineage.dataflow.model.json.Coordinate;
007import gudusoft.gsqlparser.dlineage.util.Pair;
008import gudusoft.gsqlparser.dlineage.util.Pair3;
009import gudusoft.gsqlparser.dlineage.util.SqlInfoHelper;
010
011public class ErrorInfo {
012
013        public final static String SYNTAX_ERROR = "SyntaxError";
014        public final static String SYNTAX_HINT = "SyntaxHint";
015        public final static String ANALYZE_ERROR = "AnalyzeError";
016        public final static String LINK_ORPHAN_COLUMN = "LinkOrphanColumn";
017        public final static String METADATA_ERROR = "MetadataError";
018
019        private String errorMessage;
020        private String errorType;
021        protected Pair3<Long, Long, String> startPosition;
022        protected Pair3<Long, Long, String> endPosition;
023
024        private String fileName;
025        private String filePath;
026        private Pair<Long, Long> originStartPosition;
027        private Pair<Long, Long> originEndPosition;
028
029        public String getErrorMessage() {
030                return errorMessage;
031        }
032
033        public void setErrorMessage(String errorMessage) {
034                this.errorMessage = errorMessage;
035        }
036
037        public Pair3<Long, Long, String> getStartPosition() {
038                return startPosition;
039        }
040
041        public void setStartPosition(Pair3<Long, Long, String> startPosition) {
042                this.startPosition = startPosition;
043        }
044
045        public Pair3<Long, Long, String> getEndPosition() {
046                return endPosition;
047        }
048
049        public void setEndPosition(Pair3<Long, Long, String> endPosition) {
050                this.endPosition = endPosition;
051        }
052
053        public String getErrorType() {
054                return errorType;
055        }
056
057        public void setErrorType(String errorType) {
058                this.errorType = errorType;
059        }
060
061        public String getFileName() {
062                return fileName;
063        }
064
065        public void setFileName(String fileName) {
066                this.fileName = fileName;
067        }
068
069        public String getFilePath() {
070                return filePath;
071        }
072
073        public void setFilePath(String filePath) {
074                this.filePath = filePath;
075        }
076
077        public Pair<Long, Long> getOriginStartPosition() {
078                return originStartPosition;
079        }
080
081        public void setOriginStartPosition(Pair<Long, Long> originStartPosition) {
082                this.originStartPosition = originStartPosition;
083        }
084
085        public Pair<Long, Long> getOriginEndPosition() {
086                return originEndPosition;
087        }
088
089        public void setOriginEndPosition(Pair<Long, Long> originEndPosition) {
090                this.originEndPosition = originEndPosition;
091        }
092
093        public void fillInfo(DataFlowAnalyzer dataFlowAnalyzer) {
094                if (startPosition == null || endPosition == null)
095                        return;
096                SqlInfoHelper helper = new SqlInfoHelper(dataFlowAnalyzer);
097                DbObjectPosition position = helper.getSelectedDbObjectInfo(
098                                new Coordinate(startPosition.first, startPosition.second, startPosition.third),
099                                new Coordinate(endPosition.first, endPosition.second, endPosition.third));
100                if (position != null) {
101                        if (position.getPositions() != null && position.getPositions().size() > 1) {
102                                this.originStartPosition = new Pair<Long, Long>(position.getPositions().get(0).first.longValue(),
103                                                position.getPositions().get(0).second.longValue());
104                                this.originEndPosition = new Pair<Long, Long>(position.getPositions().get(1).first.longValue(),
105                                                position.getPositions().get(1).second.longValue());
106                        }
107                        if (position.getFile() != null) {
108                                this.fileName = position.getFile();
109                        }
110                        if (position.getFilePath() != null) {
111                                this.filePath = position.getFilePath();
112                        }
113                }
114                else {
115                        List<SqlInfo> sqlInfos = dataFlowAnalyzer.getSqlInfos().get(startPosition.third);
116                        if (sqlInfos != null && sqlInfos.size()>0) {
117                                this.fileName = sqlInfos.get(0).getFileName();
118                                this.filePath = sqlInfos.get(0).getFilePath();
119                        }
120                }
121        }
122        
123        @Override
124        public String toString() {
125                StringBuilder sb = new StringBuilder();
126                sb.append("Error Message: ").append(errorMessage).append("\n");
127                sb.append("Error Type   : ").append(errorType).append("\n");
128
129                if (startPosition != null) {
130                        sb.append("Start Position: ").append(startPosition.first).append(", ").append(startPosition.second).append("\n");
131                } 
132
133                if (endPosition != null) {
134                        sb.append("End Position: ").append(endPosition.first).append(", ").append(endPosition.second).append("\n");
135                } 
136                sb.append("File Path   : ").append(filePath).append("\n");
137                return sb.toString();
138        }
139}