/* 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 org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import net.sourceforge.ganttproject.CustomPropertyClass; import net.sourceforge.ganttproject.CustomPropertyDefinition; import net.sourceforge.ganttproject.CustomPropertyManager; import net.sourceforge.ganttproject.DefaultCustomPropertyDefinition; import javax.annotation.Nonnull; import java.util.HashMap; import java.util.Map; public class CustomColumn implements CustomPropertyDefinition { private String id = null; private String name = null; private Object defaultValue = null; private final CustomColumnsManager myManager; private CustomPropertyClass myPropertyClass; private final Map<String, String> myAttributes = new HashMap<>(); CustomColumn(CustomColumnsManager manager, String colName, CustomPropertyClass propertyClass, Object colDefaultValue) { name = colName; myPropertyClass = propertyClass; defaultValue = colDefaultValue; myManager = manager; } public String getId() { return id; } public void setId(String newId) { id = newId; } @Override public Object getDefaultValue() { return defaultValue; } public void setDefaultValue(Object defaultValue) { this.defaultValue = defaultValue; } @Override public void setDefaultValueAsString(String value) { CustomPropertyDefinition stub = CustomPropertyManager.PropertyTypeEncoder.decodeTypeAndDefaultValue( getTypeAsString(), value); defaultValue = stub.getDefaultValue(); } @Nonnull @Override public Map<String, String> getAttributes() { return myAttributes; } @Nonnull @Override public String getName() { return name; } @Override public void setName(String name) { String oldName = this.name; this.name = name; myManager.fireDefinitionChanged(this, oldName); } @Nonnull @Override public CustomPropertyClass getPropertyClass() { return myPropertyClass; } @Override public Class<?> getType() { return myPropertyClass.getJavaClass(); } @Override public String toString() { return this.name + " [" + getType() + "] <" + this.defaultValue + ">"; } @Override public String getDefaultValueAsString() { return this.defaultValue == null ? null : this.defaultValue.toString(); } @Override public String getID() { return getId(); } @Override public String getTypeAsString() { return CustomPropertyManager.PropertyTypeEncoder.encodeFieldType(getType()); } @Override public IStatus canSetPropertyClass(CustomPropertyClass propertyClass) { return Status.OK_STATUS; } @Override public IStatus setPropertyClass(CustomPropertyClass propertyClass) { CustomPropertyDefinition oldValue = new DefaultCustomPropertyDefinition(name, id, this); myPropertyClass = propertyClass; String defaultValue = getDefaultValueAsString(); if (defaultValue == null) { defaultValue = propertyClass.getDefaultValueAsString(); } setDefaultValueAsString(defaultValue); myManager.fireDefinitionChanged(CustomPropertyEvent.EVENT_TYPE_CHANGE, this, oldValue); return Status.OK_STATUS; } @Override public int hashCode() { return id.hashCode(); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof CustomColumn == false) { return false; } CustomColumn that = (CustomColumn) obj; return this.id.equals(that.id); } }