/*
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.gui.options.model;
import java.util.Date;
import org.w3c.util.DateParser;
import biz.ganttproject.core.option.DefaultBooleanOption;
import biz.ganttproject.core.option.DefaultDateOption;
import biz.ganttproject.core.option.DefaultDoubleOption;
import biz.ganttproject.core.option.DefaultIntegerOption;
import biz.ganttproject.core.option.DefaultStringOption;
import biz.ganttproject.core.option.GPOption;
import net.sourceforge.ganttproject.CustomPropertyClass;
import net.sourceforge.ganttproject.CustomPropertyDefinition;
public abstract class CustomPropertyDefaultValueAdapter {
public static GPOption createDefaultValueOption(final CustomPropertyClass propertyClass,
final CustomPropertyDefinition def) {
switch (propertyClass) {
case TEXT:
class TextDefaultValue extends DefaultStringOption {
TextDefaultValue() {
super("customPropertyDialog.defaultValue.text", def.getDefaultValueAsString());
}
@Override
public void commit() {
if (isChanged()) {
assert propertyClass == def.getPropertyClass();
super.commit();
def.setDefaultValueAsString(getValue());
}
}
@Override
public void setValue(String value) {
super.setValue(value);
commit();
}
}
return new TextDefaultValue();
case BOOLEAN:
class BooleanDefaultValue extends DefaultBooleanOption {
BooleanDefaultValue() {
super("customPropertyDialog.defaultValue.boolean", def.getDefaultValue() == null ? Boolean.FALSE
: (Boolean) def.getDefaultValue());
}
@Override
public void commit() {
if (isChanged()) {
assert propertyClass == def.getPropertyClass() : "property class mismatch: " + propertyClass + " vs "
+ def.getPropertyClass();
super.commit();
def.setDefaultValueAsString(String.valueOf(getValue()));
}
}
@Override
public void setValue(Boolean value) {
super.setValue(value);
commit();
}
}
return new BooleanDefaultValue();
case INTEGER:
class IntegerDefaultValue extends DefaultIntegerOption {
IntegerDefaultValue() {
super("customPropertyDialog.defaultValue.integer", (Integer) def.getDefaultValue());
}
@Override
public void commit() {
if (isChanged()) {
assert propertyClass == def.getPropertyClass();
super.commit();
def.setDefaultValueAsString(String.valueOf(getValue()));
}
}
@Override
public void setValue(Integer value) {
super.setValue(value);
commit();
}
}
return new IntegerDefaultValue();
case DOUBLE:
class DoubleDefaultValue extends DefaultDoubleOption {
DoubleDefaultValue() {
super("customPropertyDialog.defaultValue.double", (Double) def.getDefaultValue());
}
@Override
public void commit() {
if (isChanged()) {
assert propertyClass == def.getPropertyClass();
super.commit();
def.setDefaultValueAsString(String.valueOf(getValue()));
}
}
@Override
public void setValue(Double value) {
super.setValue(value);
commit();
}
}
return new DoubleDefaultValue();
case DATE:
class DateDefaultValue extends DefaultDateOption {
DateDefaultValue() {
super("customPropertyDialog.defaultValue.date", (Date) def.getDefaultValue());
}
@Override
public void commit() {
if (isChanged()) {
assert propertyClass == def.getPropertyClass();
super.commit();
def.setDefaultValueAsString(DateParser.getIsoDate(getValue()));
}
}
@Override
public void setValue(Date value) {
super.setValue(value);
commit();
}
}
return new DateDefaultValue();
default:
return null;
}
}
}