/* Copyright 2003-2012 Dmitry Barashev, GanttProject Team This file is part of GanttProject, an opensource project management tool. GanttProject is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. GanttProject is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GanttProject. If not, see <http://www.gnu.org/licenses/>. */ package net.sourceforge.ganttproject.task; import java.util.ArrayList; import java.util.List; import java.util.Map; import net.sourceforge.ganttproject.CustomPropertyDefinition; import net.sourceforge.ganttproject.CustomPropertyListener; import net.sourceforge.ganttproject.CustomPropertyManager; /** * This class has to be used to add or remove new custom columns. It will * perform the changes to the linked treetable. * * @author bbaranne (Benoit Baranne) Mar 4, 2005 */ public class CustomColumnsManager implements CustomPropertyManager { private final CustomColumnsStorage myStorage; public CustomColumnsManager() { myStorage = new CustomColumnsStorage(this); } private void addNewCustomColumn(CustomColumn customColumn) { assert customColumn != null; myStorage.addCustomColumn(customColumn); } @Override public void addListener(CustomPropertyListener listener) { myStorage.addCustomColumnsListener(listener); } @Override public List<CustomPropertyDefinition> getDefinitions() { return new ArrayList<CustomPropertyDefinition>(myStorage.getCustomColums()); } @Override public CustomPropertyDefinition createDefinition(String id, String typeAsString, String name, String defaultValueAsString) { CustomPropertyDefinition stub = CustomPropertyManager.PropertyTypeEncoder.decodeTypeAndDefaultValue(typeAsString, defaultValueAsString); CustomColumn result = new CustomColumn(this, name, stub.getPropertyClass(), stub.getDefaultValue()); result.setId(id); addNewCustomColumn(result); return result; } @Override public CustomPropertyDefinition createDefinition(String typeAsString, String colName, String defValue) { return createDefinition(myStorage.createId(), typeAsString, colName, defValue); } @Override public Map<CustomPropertyDefinition, CustomPropertyDefinition> importData(CustomPropertyManager source) { return myStorage.importData(((CustomColumnsManager) source).myStorage); } @Override public CustomPropertyDefinition getCustomPropertyDefinition(String id) { return myStorage.getCustomColumnByID(id); } @Override public void deleteDefinition(CustomPropertyDefinition def) { myStorage.removeCustomColumn(def); } void fireDefinitionChanged(int event, CustomPropertyDefinition def, CustomPropertyDefinition oldDef) { myStorage.fireDefinitionChanged(event, def, oldDef); } void fireDefinitionChanged(CustomPropertyDefinition def, String oldName) { myStorage.fireDefinitionChanged(def, oldName); } @Override public void reset() { myStorage.reset(); } }