/* 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; import biz.ganttproject.core.time.CalendarFactory; import net.sourceforge.ganttproject.language.GanttLanguage; import net.sourceforge.ganttproject.util.StringUtils; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.w3c.util.DateParser; import org.w3c.util.InvalidDateException; import javax.annotation.Nonnull; import java.util.Collections; import java.util.Date; import java.util.GregorianCalendar; import java.util.List; import java.util.Map; public interface CustomPropertyManager { List<CustomPropertyDefinition> getDefinitions(); CustomPropertyDefinition createDefinition(String id, String typeAsString, String name, String defaultValueAsString); CustomPropertyDefinition createDefinition(String typeAsString, String colName, String defValue); CustomPropertyDefinition getCustomPropertyDefinition(String id); void deleteDefinition(CustomPropertyDefinition def); Map<CustomPropertyDefinition, CustomPropertyDefinition> importData(CustomPropertyManager source); void addListener(CustomPropertyListener listener); void reset(); class PropertyTypeEncoder { public static String encodeFieldType(Class<?> fieldType) { String result = null; if (fieldType.equals(String.class)) { result = "text"; } else if (fieldType.equals(Boolean.class)) { result = "boolean"; } else if (fieldType.equals(Integer.class)) { result = "int"; } else if (fieldType.equals(Double.class)) { result = "double"; } else if (GregorianCalendar.class.isAssignableFrom(fieldType)) { result = "date"; } return result; } public static CustomPropertyDefinition decodeTypeAndDefaultValue( final String typeAsString, final String valueAsString) { final CustomPropertyClass propertyClass; final Object defaultValue; if (typeAsString.equals("text")) { propertyClass = CustomPropertyClass.TEXT; defaultValue = valueAsString == null ? null : valueAsString.toString(); } else if (typeAsString.equals("boolean")) { propertyClass = CustomPropertyClass.BOOLEAN; defaultValue = valueAsString == null ? null : Boolean.valueOf(valueAsString); } else if (typeAsString.equals("int") || "integer".equals(typeAsString)) { propertyClass = CustomPropertyClass.INTEGER; Integer intValue; try { intValue = valueAsString == null ? null : Integer.valueOf(valueAsString); } catch (NumberFormatException e) { intValue = null; } defaultValue = intValue; } else if (typeAsString.equals("double")) { propertyClass = CustomPropertyClass.DOUBLE; Double doubleValue; try { doubleValue = valueAsString == null ? null : Double.valueOf(valueAsString); } catch (NumberFormatException e) { doubleValue = null; } defaultValue = doubleValue; } else if (typeAsString.equals("date")) { propertyClass = CustomPropertyClass.DATE; if (StringUtils.isEmptyOrNull(valueAsString)) { defaultValue = null; } else { Date defaultDate = null; try { defaultDate = DateParser.parse(valueAsString); } catch (InvalidDateException e) { defaultDate = GanttLanguage.getInstance().parseDate(valueAsString); } defaultValue = defaultDate == null ? null : CalendarFactory.createGanttCalendar(defaultDate); } } else { propertyClass = CustomPropertyClass.TEXT; defaultValue = ""; } return new CustomPropertyDefinition() { @Override public Object getDefaultValue() { return defaultValue; } @Override public String getDefaultValueAsString() { return valueAsString; } @Override public void setDefaultValueAsString(String value) { throw new UnsupportedOperationException(); } @Nonnull @Override public Map<String, String> getAttributes() { return Collections.emptyMap(); } @Override public String getID() { return null; } @Nonnull @Override public String getName() { return null; } @Override public void setName(String name) { throw new UnsupportedOperationException(); } @Override public Class<?> getType() { return propertyClass.getJavaClass(); } @Override public String getTypeAsString() { return typeAsString; } @Nonnull @Override public CustomPropertyClass getPropertyClass() { return propertyClass; } @Override public IStatus canSetPropertyClass(CustomPropertyClass propertyClass) { return Status.CANCEL_STATUS; } @Override public IStatus setPropertyClass(CustomPropertyClass propertyClass) { throw new UnsupportedOperationException(); } }; } } }