/* Copyright (C) 2008 Christian Schneider
*
* This file is part of Nomad.
*
* Nomad 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 2 of the License, or
* (at your option) any later version.
*
* Nomad 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 Nomad; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
package net.sf.nmedit.nmutils.properties.type;
public abstract class Property<E>
{
private java.lang.String name;
private E defaultValue ;
private E value;
public Property(E defaultValue)
{
this.value = defaultValue;
this.defaultValue = defaultValue;
}
public E getValue()
{
return value;
}
public void setValue(E value)
{
this.value = value;
}
public E getDefaultValue()
{
return defaultValue;
}
public abstract Class<E> getType();
public java.lang.String getTypeName()
{
return getType().getSimpleName();
}
public java.lang.String getValueString()
{
return toString(value);
}
public java.lang.String getDefaultValueString()
{
return toString(defaultValue);
}
// returns null if the object is null
public abstract java.lang.String toString(E value) throws IllegalArgumentException;
public abstract E parseString(java.lang.String stringValue) throws IllegalArgumentException;
public boolean equals(Object o)
{
if (o == null) return false;
try
{
Property p = (Property) o;
return p.name.equals(name);
}
catch (ClassCastException e)
{
return false;
}
}
public int hashCode()
{
return name.hashCode();
}
public static java.lang.String intListToString(int ... values)
{
if (values == null)
return null;
StringBuilder sb = new StringBuilder(values.length*2-1);
java.lang.String stringValue = null;
if (values.length > 0)
{
sb.append(java.lang.String.valueOf(values[0]));
for (int i=1;i<values.length;i++)
{
sb.append(',');
sb.append(java.lang.String.valueOf(values[i]));
}
stringValue = sb.toString();
}
return stringValue;
}
public static int[] parseIntList(java.lang.String stringValue, int count)
{
if (stringValue == null) return null;
java.lang.String[] pieces = stringValue.split(",");
if (pieces.length!=count && count>=0)
return null;
int[] values = new int[pieces.length];
try
{
for (int i=0;i<pieces.length;i++)
{
values[i] = Integer.parseInt(pieces[i].trim());
}
}
catch (NumberFormatException e)
{
return null;
}
return values;
}
public static class String extends Property<java.lang.String>
{
public String(java.lang.String defaultValue)
{
super(defaultValue);
}
public Class<java.lang.String> getType()
{
return java.lang.String.class;
}
@Override
public java.lang.String parseString(java.lang.String stringValue)
throws IllegalArgumentException
{
return stringValue;
}
@Override
public java.lang.String toString(java.lang.String value) throws IllegalArgumentException
{
return value;
}
}
public static class Rectangle extends Property<java.awt.Rectangle>
{
public Rectangle(java.awt.Rectangle defaultValue)
{
super(defaultValue);
}
@Override
public java.awt.Rectangle parseString(java.lang.String stringValue)
throws IllegalArgumentException
{
if (stringValue == null)
return null;
int[] values = parseIntList(stringValue, 4);
if (values == null)
throw new IllegalArgumentException("invalid argument:"+stringValue);
return new java.awt.Rectangle(values[0], values[1], values[2], values[3]);
}
@Override
public java.lang.String toString(java.awt.Rectangle value) throws IllegalArgumentException
{
return value == null ? null : intListToString(value.x, value.y, value.width, value.height);
}
@Override
public Class<java.awt.Rectangle> getType()
{
return java.awt.Rectangle.class;
}
}
public static class Boolean extends Property<java.lang.Boolean>
{
public Boolean(java.lang.Boolean defaultValue)
{
super(defaultValue);
}
@Override
public java.lang.Boolean parseString(java.lang.String stringValue)
throws IllegalArgumentException
{
if (stringValue == null)
return null;
try
{
return java.lang.Boolean.parseBoolean(stringValue);
}
catch (NumberFormatException e)
{
throw new IllegalArgumentException(e);
}
}
@Override
public java.lang.String toString(java.lang.Boolean value) throws IllegalArgumentException
{
return value == null ? null : java.lang.String.valueOf(value);
}
@Override
public Class<java.lang.Boolean> getType()
{
return java.lang.Boolean.class;
}
}
public static class Dimension extends Property<java.awt.Dimension>
{
public Dimension(java.awt.Dimension defaultValue)
{
super(defaultValue);
}
@Override
public java.awt.Dimension parseString(java.lang.String stringValue)
throws IllegalArgumentException
{
if (stringValue == null)
return null;
int[] values = parseIntList(stringValue, 2);
if (values == null)
throw new IllegalArgumentException("invalid argument:"+stringValue);
return new java.awt.Dimension(values[0], values[1]);
}
@Override
public java.lang.String toString(java.awt.Dimension value) throws IllegalArgumentException
{
return value == null ? null : intListToString(value.width, value.height);
}
@Override
public Class<java.awt.Dimension> getType()
{
return java.awt.Dimension.class;
}
}
public static class Point extends Property<java.awt.Point>
{
public Point(java.awt.Point defaultValue)
{
super(defaultValue);
}
@Override
public java.awt.Point parseString(java.lang.String stringValue)
throws IllegalArgumentException
{
if (stringValue == null)
return null;
int[] values = parseIntList(stringValue, 2);
if (values == null)
throw new IllegalArgumentException("invalid argument:"+stringValue);
return values == null ? null : new java.awt.Point(values[0], values[1]);
}
@Override
public java.lang.String toString(java.awt.Point value) throws IllegalArgumentException
{
return value == null ? null : intListToString(value.x, value.y);
}
@Override
public Class<java.awt.Point> getType()
{
return java.awt.Point.class;
}
}
}