001package gudusoft.gsqlparser.dlineage.metadata; 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}