/*
GanttProject is an opensource project management tool.
Copyright (C) 2011 Dmitry Barashev
This program 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.
This program 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 this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package net.sourceforge.ganttproject;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import javax.annotation.Nonnull;
import java.util.HashMap;
import java.util.Map;
public class DefaultCustomPropertyDefinition implements CustomPropertyDefinition {
private String myName;
private final String myID;
private Object myDefaultValue;
private String myDefaultValueAsString;
private CustomPropertyClass myPropertyClass;
private String myTypeAsString;
private final Map<String, String> myAttributes = new HashMap<>();
public DefaultCustomPropertyDefinition(String name) {
myName = name;
myID = null;
myDefaultValue = null;
myDefaultValueAsString = null;
myPropertyClass = CustomPropertyClass.TEXT;
myTypeAsString = CustomPropertyClass.TEXT.getID();
}
public DefaultCustomPropertyDefinition(String name, String id, CustomPropertyDefinition stub) {
myName = name;
myID = id;
myDefaultValue = stub.getDefaultValue();
myDefaultValueAsString = stub.getDefaultValueAsString();
myPropertyClass = stub.getPropertyClass();
myTypeAsString = stub.getTypeAsString();
}
@Override
public Object getDefaultValue() {
return myDefaultValue;
}
@Override
public String getDefaultValueAsString() {
return myDefaultValueAsString;
}
@Override
public void setDefaultValueAsString(String value) {
CustomPropertyDefinition stub = CustomPropertyManager.PropertyTypeEncoder.decodeTypeAndDefaultValue(
getTypeAsString(), value);
myDefaultValue = stub.getDefaultValue();
myDefaultValueAsString = stub.getDefaultValueAsString();
}
@Nonnull
@Override
public Map<String, String> getAttributes() {
return myAttributes;
}
@Override
public String getID() {
return myID;
}
@Nonnull
@Override
public String getName() {
return myName;
}
@Override
public void setName(String name) {
myName = name;
}
@Override
public Class<?> getType() {
return myPropertyClass.getJavaClass();
}
@Nonnull
@Override
public CustomPropertyClass getPropertyClass() {
return myPropertyClass;
}
@Override
public String getTypeAsString() {
return myTypeAsString;
}
@Override
public IStatus canSetPropertyClass(CustomPropertyClass propertyClass) {
return Status.OK_STATUS;
}
@Override
public IStatus setPropertyClass(CustomPropertyClass propertyClass) {
myPropertyClass = propertyClass;
myTypeAsString = propertyClass.getID();
setDefaultValueAsString(getDefaultValueAsString());
return Status.OK_STATUS;
}
@Override
public int hashCode() {
return myID==null ? myName.hashCode() : myID.hashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof DefaultCustomPropertyDefinition == false) {
return false;
}
DefaultCustomPropertyDefinition that = (DefaultCustomPropertyDefinition) obj;
return this.myID.equals(that.myID);
}
}