/******************************************************************************* * Copyright (c) 2012 Original authors and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Original authors and others - initial API and implementation ******************************************************************************/ package org.eclipse.nebula.widgets.nattable.columnCategories; import static org.eclipse.nebula.widgets.nattable.util.ObjectUtils.isNotNull; import java.io.Serializable; import org.eclipse.nebula.widgets.nattable.columnCategories.Node.Type; public class ColumnCategoriesModel implements Serializable { private static final long serialVersionUID = 4550L; /** Tree of the column category names */ private final Tree tree = new Tree(); public Node addRootCategory(String rootCategoryName) { if (isNotNull(this.tree.getRootElement())) { throw new IllegalStateException("Root has been set already. Clear using (clear()) to reset."); //$NON-NLS-1$ } Node root = new Node(rootCategoryName, Type.ROOT); this.tree.setRootElement(root); return root; } public Node addCategory(Node parentCategory, String newCategoryName) { if (this.tree.getRootElement() == null) { throw new IllegalStateException("Root node must be set (using addRootNode()) before children can be added"); //$NON-NLS-1$ } Node newNode = new Node(newCategoryName, Node.Type.CATEGORY); parentCategory.addChild(newNode); return newNode; } public void addColumnsToCategory(Node parentCategory, int... columnIndexes) { if (parentCategory.getType() != Type.CATEGORY) { throw new IllegalStateException("Columns can be added to a category node only."); //$NON-NLS-1$ } for (Integer columnIndex : columnIndexes) { parentCategory.addChild(new Node(String.valueOf(columnIndex), Type.COLUMN)); } } public void removeColumnIndex(Integer hiddenColumnIndex) { this.tree.remove(String.valueOf(hiddenColumnIndex)); } public Node getRootCategory() { return this.tree.getRootElement(); } @Override public String toString() { return this.tree.toString(); } public void dispose() { this.tree.clear(); } public void clear() { this.tree.clear(); } }