package org.insightech.er.editor.model.diagram_contents.element.node.table.unique_key;
import java.util.ArrayList;
import java.util.List;
import org.insightech.er.editor.model.AbstractModel;
import org.insightech.er.editor.model.diagram_contents.element.connection.Relation;
import org.insightech.er.editor.model.diagram_contents.element.node.table.ERTable;
import org.insightech.er.editor.model.diagram_contents.element.node.table.column.NormalColumn;
import org.insightech.er.util.Format;
public class ComplexUniqueKey extends AbstractModel {
private static final long serialVersionUID = -3970737521746421701L;
private List<NormalColumn> columnList;
private String uniqueKeyName;
public ComplexUniqueKey(String uniqueKeyName) {
this.uniqueKeyName = uniqueKeyName;
this.columnList = new ArrayList<NormalColumn>();
}
public String getUniqueKeyName() {
return uniqueKeyName;
}
public List<NormalColumn> getColumnList() {
return columnList;
}
public void addColumn(NormalColumn column) {
this.columnList.add(column);
}
public void setColumnList(List<NormalColumn> columnList) {
this.columnList = columnList;
}
public void setUniqueKeyName(String uniqueKeyName) {
this.uniqueKeyName = uniqueKeyName;
}
public boolean isRemoved(List<NormalColumn> tableColumnList) {
for (NormalColumn normalColumn : this.columnList) {
if (!tableColumnList.contains(normalColumn)) {
return true;
}
}
return false;
}
public String getLabel() {
StringBuilder sb = new StringBuilder();
sb.append(Format.null2blank(this.uniqueKeyName));
sb.append(" (");
boolean first = true;
for (NormalColumn normalColumn : this.getColumnList()) {
if (first) {
first = false;
} else {
sb.append(", ");
}
sb.append(normalColumn.getName());
}
sb.append(")");
return sb.toString();
}
public boolean isReferenced(ERTable table) {
boolean isReferenced = false;
ComplexUniqueKey target = this;
if (target instanceof CopyComplexUniqueKey) {
target = ((CopyComplexUniqueKey) target).getOriginal();
}
for (Relation relation : table.getOutgoingRelations()) {
if (relation.getReferencedComplexUniqueKey() == target) {
isReferenced = true;
break;
}
}
return isReferenced;
}
}