001
002package gudusoft.gsqlparser.dlineage.dataflow.model;
003
004import gudusoft.gsqlparser.ESqlClause;
005import gudusoft.gsqlparser.nodes.TParseTreeNode;
006
007import java.util.ArrayList;
008import java.util.List;
009
010public class TableColumnRelationshipElement implements RelationshipElement<TableColumn> {
011
012    private TableColumn column;
013
014    private String tableAlias;
015
016    private Integer columnIndex;
017
018    private ESqlClause relationLocation;
019
020    private List<Transform> transforms = new ArrayList<Transform>();
021
022    public TableColumnRelationshipElement(TableColumn column) {
023        this.column = column;
024        if (column.getColumnObject() != null && column.getColumnObject().getTableString() != null) {
025            if (column.getTable().getAliasList().contains(column.getColumnObject().getTableString())) {
026                this.tableAlias = column.getColumnObject().getTableString();
027            } else {
028                this.tableAlias = column.getTable().getCurrentAlias();
029            }
030        } else {
031            this.tableAlias = column.getTable().getCurrentAlias();
032        }
033    }
034
035    public TableColumnRelationshipElement(TableColumn column, int index) {
036        this.column = column;
037        this.columnIndex = index;
038        if (column.getColumnObject().getTableString() != null) {
039            if (column.getTable().getAliasList().contains(column.getColumnObject().getTableString())) {
040                this.tableAlias = column.getColumnObject().getTableString();
041            } else {
042                this.tableAlias = column.getTable().getCurrentAlias();
043            }
044        } else {
045            this.tableAlias = column.getTable().getCurrentAlias();
046        }
047    }
048
049    public TableColumnRelationshipElement(TableColumn column,
050                                          ESqlClause relationLocation) {
051        this.column = column;
052        this.relationLocation = relationLocation;
053        if (column.getColumnObject() != null && column.getColumnObject().getTableString() != null) {
054            if (column.getTable().getAliasList().contains(column.getColumnObject().getTableString())) {
055                this.tableAlias = column.getColumnObject().getTableString();
056            } else {
057                this.tableAlias = column.getTable().getCurrentAlias();
058            }
059        } else {
060            this.tableAlias = column.getTable().getCurrentAlias();
061        }
062    }
063
064    @Override
065    public TableColumn getElement() {
066        return column;
067    }
068
069    public ESqlClause getRelationLocation() {
070        return relationLocation;
071    }
072
073    @Override
074    public int hashCode() {
075        final int prime = 31;
076        int result = 1;
077        result = prime
078                * result
079                + ((column == null) ? 0 : column.hashCode());
080        result = prime
081                * result
082                + ((relationLocation == null) ? 0
083                : relationLocation.hashCode());
084        return result;
085    }
086
087    @Override
088    public boolean equals(Object obj) {
089        if (this == obj)
090            return true;
091        if (obj == null)
092            return false;
093        if (getClass() != obj.getClass())
094            return false;
095        TableColumnRelationshipElement other = (TableColumnRelationshipElement) obj;
096        if (column == null) {
097            if (other.column != null)
098                return false;
099        } else if (!column.equals(other.column))
100            return false;
101        if (relationLocation != other.relationLocation)
102            return false;
103        return true;
104    }
105
106    public Integer getColumnIndex() {
107        return columnIndex;
108    }
109
110    @Override
111    public List<Transform> getTransforms() {
112        return transforms;
113    }
114
115    public void addTransform(String type, TParseTreeNode code) {
116        if (ModelBindingManager.getGlobalOption() != null && !ModelBindingManager.getGlobalOption().isTransform()) {
117            return;
118        }
119        Transform transform = new Transform();
120        transform.setType(type);
121        transform.setCode(code);
122        transforms.add(transform);
123    }
124
125    public String getTableAlias() {
126        return tableAlias;
127    }
128}