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