package org.insightech.er.editor.model.diagram_contents.element.node.table.index;
import java.util.ArrayList;
import java.util.List;
import org.insightech.er.editor.model.diagram_contents.element.node.table.ERTable;
import org.insightech.er.editor.model.diagram_contents.element.node.table.column.Column;
import org.insightech.er.editor.model.diagram_contents.element.node.table.column.CopyColumn;
import org.insightech.er.editor.model.diagram_contents.element.node.table.column.NormalColumn;
public class CopyIndex extends Index {
private static final long serialVersionUID = -7896024413398953097L;
private Index originalIndex;
public CopyIndex(ERTable copyTable, Index originalIndex,
List<Column> copyColumns) {
super(copyTable, originalIndex.getName(), originalIndex.isNonUnique(),
originalIndex.getType(), originalIndex.getDescription());
this.originalIndex = originalIndex;
List<Boolean> descs = originalIndex.getDescs();
int i = 0;
for (NormalColumn originalIndexColumn : originalIndex.getColumns()) {
Boolean desc = Boolean.FALSE;
if (descs.size() > i) {
desc = descs.get(i);
}
if (copyColumns != null) {
boolean isGroupColumn = true;
for (Column column : copyColumns) {
if (column instanceof CopyColumn) {
CopyColumn copyColumn = (CopyColumn) column;
if (copyColumn.getOriginalColumn().equals(
originalIndexColumn)) {
this.addColumn(copyColumn, desc);
isGroupColumn = false;
break;
}
}
}
if (isGroupColumn) {
this.addColumn(originalIndexColumn, desc);
}
} else {
this.addColumn(originalIndexColumn, desc);
}
i++;
}
}
public Index getRestructuredIndex(ERTable originalTable) {
if (this.originalIndex == null) {
this.originalIndex = new Index(originalTable, this.getName(), this
.isNonUnique(), this.getType(), this.getDescription());
}
copyData(this, this.originalIndex);
List<NormalColumn> indexColumns = new ArrayList<NormalColumn>();
for (NormalColumn column : this.originalIndex.getColumns()) {
if (column instanceof CopyColumn) {
CopyColumn copyColumn = (CopyColumn) column;
column = copyColumn.getOriginalColumn();
}
indexColumns.add(column);
}
this.originalIndex.setColumns(indexColumns);
this.originalIndex.setTable(originalTable);
return this.originalIndex;
}
public static void copyData(Index from, Index to) {
to.setName(from.getName());
to.setNonUnique(from.isNonUnique());
to.setFullText(from.isFullText());
to.setType(from.getType());
to.setDescription(from.getDescription());
to.getColumns().clear();
to.getDescs().clear();
List<Boolean> descs = from.getDescs();
int i = 0;
for (NormalColumn column : from.getColumns()) {
Boolean desc = Boolean.FALSE;
if (descs.size() > i) {
desc = descs.get(i);
}
to.addColumn(column, desc);
i++;
}
}
}