001package gudusoft.gsqlparser.dlineage.dataflow.model.json;
002
003import gudusoft.gsqlparser.util.Logger;
004import gudusoft.gsqlparser.util.LoggerFactory;
005
006import java.util.ArrayList;
007import java.util.List;
008import java.util.regex.Matcher;
009import java.util.regex.Pattern;
010
011public class Coordinate {
012
013    private static final Logger logger = LoggerFactory.getLogger(Coordinate.class);
014
015        private long x;
016        private long y;
017        private String hashCode;
018
019    private static final Pattern p = Pattern.compile("\\[(\\-)*\\d+\\,(\\-)*\\d+(\\,)*.*?\\]");
020
021    public static Coordinate[] parse(String coordinate) {
022        if (coordinate != null) {
023            List<Coordinate> coordinates = new ArrayList<Coordinate>();
024            try {
025                Matcher m = p.matcher(coordinate);
026                while (m.find()) {
027                    String str = m.group();
028                    str = str.substring(1, str.length()-1);
029                    String[] segments = str.trim().split(",");
030                    if (segments.length == 3) {
031                        Coordinate item = new Coordinate();
032                        item.x = Long.parseLong(segments[0]);
033                        item.y = Long.parseLong(segments[1]);
034                        item.hashCode = segments[2];
035                        coordinates.add(item);
036                    }
037                    else if (segments.length == 2) {
038                        Coordinate item = new Coordinate();
039                        item.x = Long.parseLong(segments[0]);
040                        item.y = Long.parseLong(segments[1]);
041                        coordinates.add(item);
042                    }
043                }
044            } catch (NumberFormatException e) {
045                logger.error("parse coordinate failed.", e);
046            }
047
048            return coordinates.toArray(new Coordinate[0]);
049        }
050        return new Coordinate[0];
051    }
052
053        public long getX() {
054                return x;
055        }
056
057        public void setX(long x) {
058                this.x = x;
059        }
060
061        public long getY() {
062                return y;
063        }
064
065        public void setY(long y) {
066                this.y = y;
067        }
068
069        public String getHashCode() {
070                return hashCode;
071        }
072
073        public void setHashCode(String hashCode) {
074                this.hashCode = hashCode;
075        }
076        
077        public Coordinate(){
078                
079        }
080
081        public Coordinate(long x, long y, String hashCode){
082                this.x = x;
083                this.y = y;
084                this.hashCode = hashCode;
085        }
086}