package jetbrains.mps.lang.editor.table.runtime; /*Generated by MPS */ import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.mps.openapi.language.SContainmentLink; import jetbrains.mps.util.annotation.ToRemove; import org.jetbrains.annotations.NotNull; import jetbrains.mps.smodel.adapter.MetaAdapterByDeclaration; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.internal.collections.runtime.ListSequence; import org.jetbrains.mps.openapi.language.SAbstractConcept; import jetbrains.mps.smodel.action.SNodeFactoryOperations; import java.util.List; public class HierarchycalTableModel extends AbstractTableModel { private SNode myTableNode; private SContainmentLink myRowsLinkDeclaration; private SContainmentLink myColumnsLinkDeclaration; private int myColumnCount; private int myRowCount; /** * * @deprecated */ @Deprecated @ToRemove(version = 3.5) public HierarchycalTableModel(@NotNull SNode tableNode, @NotNull SNode rowsLinkDeclaration, @NotNull SNode cellsLinkDeclaration) { this(tableNode, MetaAdapterByDeclaration.getContainmentLink(rowsLinkDeclaration), MetaAdapterByDeclaration.getContainmentLink(cellsLinkDeclaration)); } public HierarchycalTableModel(@NotNull SNode tableNode, @NotNull SContainmentLink rowsLink, @NotNull SContainmentLink cellsLink) { myTableNode = tableNode; myRowsLinkDeclaration = rowsLink; assert SNodeOperations.getConcept(myTableNode).getContainmentLinks().contains(myRowsLinkDeclaration); myColumnsLinkDeclaration = cellsLink; assert myRowsLinkDeclaration.getTargetConcept().getContainmentLinks().contains(myColumnsLinkDeclaration); myRowCount = ListSequence.fromList(getRows()).count(); myColumnCount = ListSequence.fromList(getColumns(ListSequence.fromList(getRows()).first())).count(); for (SNode row : ListSequence.fromList(getRows())) { assert myColumnCount == ListSequence.fromList(getColumns(row)).count(); } } @Override public SNode getValueAt(int row, int column) { assert row >= 0; assert column >= 0; return ListSequence.fromList(getColumns(ListSequence.fromList(getRows()).getElement(row))).getElement(column); } @Override public int getRowCount() { return myRowCount; } @Override public int getColumnCount() { return myColumnCount; } @Override public void deleteRow(int rowNumber) { deleteElementAt(getRows(), rowNumber); } @Override public void insertRow(int rowNumber) { SAbstractConcept crow = myRowsLinkDeclaration.getTargetConcept(); SNode newRow = SNodeFactoryOperations.createNewNode(SNodeFactoryOperations.asInstanceConcept(crow), null); for (int i = 0; i < getColumnCount(); i++) { SAbstractConcept cCol = myColumnsLinkDeclaration.getTargetConcept(); newRow.addChild(myColumnsLinkDeclaration, SNodeFactoryOperations.createNewNode(SNodeFactoryOperations.asInstanceConcept(cCol), null)); } Utils.insertElementAt(getRows(), newRow, rowNumber); } @Override public void deleteColumn(int columnNumber) { for (SNode row : ListSequence.fromList(getRows())) { deleteElementAt(getColumns(row), columnNumber); } } @Override public void insertColumn(int columnNumber) { for (SNode row : ListSequence.fromList(getRows())) { SAbstractConcept concept = myColumnsLinkDeclaration.getTargetConcept(); SNode newColumn = SNodeFactoryOperations.createNewNode(SNodeFactoryOperations.asInstanceConcept(concept), null); Utils.insertElementAt(getColumns(row), newColumn, columnNumber); } } protected SNode getTableNode() { return myTableNode; } protected void deleteElementAt(List<SNode> list, int index) { assert index >= 0 && index < ListSequence.fromList(list).count(); ListSequence.fromList(list).removeElementAt(index); } private List<SNode> getRows() { return SNodeOperations.getChildren(myTableNode, myRowsLinkDeclaration); } private List<SNode> getColumns(SNode row) { return SNodeOperations.getChildren(row, myColumnsLinkDeclaration); } }