package org.openedit.data; import java.util.Arrays; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.openedit.Data; import org.openedit.MultiValued; import com.openedit.OpenEditException; public class BaseData implements MultiValued, Comparable, Cloneable { public static final Data NULL = new BaseData(); protected Map fieldMap; public BaseData() { } public BaseData(Map inMap) { fieldMap = inMap; } public String get(String inId) { if( fieldMap == null) { return null; } Object object = getMap().get(inId); if (object == null) { return null; } if (object instanceof String) { return (String) object; } if (object instanceof Date) { return String.valueOf((Date) object); } if (object instanceof Boolean) { return String.valueOf((Boolean) object); } if (object instanceof Integer) { return String.valueOf((Integer) object); } if (object instanceof Float) { return String.valueOf((Float) object); } return String.valueOf(object); } public boolean getBoolean(String inId) { String val = get(inId); if( val != null) { return Boolean.parseBoolean(val); } return false; } public float getFloat(String inId) { String val = get(inId); if( val != null) { return Float.parseFloat(val); } return 0; } public String getId() { String name = get("id"); return name; } public String getName() { String name = get("name"); return name; } public void setName(String inName) { setProperty("name", inName); } public String toString() { String name = getName(); if (name == null) { return super.toString(); } return name; } public void setProperty(String inId, String inValue) { // if ("id".equals(inId)) { // setId(inValue); // return; // } if (inValue == null) { getMap().remove(inId); } else { getMap().put(inId, inValue); } } /** * @deprecated This API should be String based for now * @param inId * @param inValue */ public void setPropertyValues(String inId, String[] inValues) { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < inValues.length; i++) { if( i > 0) { buffer.append(" | "); } buffer.append(inValues[i]); } setProperty(inId, buffer.toString()); } public Object clone() { try { return super.clone(); } catch (CloneNotSupportedException e) { throw new OpenEditException(e); } } protected Map getMap() { if (fieldMap == null) { fieldMap = new HashMap(5); } return fieldMap; } public void setId(int inNewid) { setProperty("id", String.valueOf( inNewid) ); } public void setId(String inNewid) { setProperty("id", inNewid); } public String getSourcePath() { return get("sourcepath"); } public void setSourcePath(String inSourcepath) { setProperty("sourcepath", inSourcepath); } public Map getProperties() { return getMap(); } public void setProperties(Map<String,String> inProperties) { getMap().putAll(inProperties); } public int compareTo(Object inO) { BaseData inData = (BaseData) inO; if (getName() != null && inData.getName() != null) { return getName().compareTo(inData.getName()); } return 0; } public Collection<String> getValues(String inPreference) { String val = get(inPreference); if (val == null) { return null; } String[] vals = null; if( val.contains("|") ) { vals = VALUEDELMITER.split(val); } else { vals = val.split("\\s+"); //legacy } Collection collection = Arrays.asList(vals); //if null check parent return collection; } public void setValues(String inKey, Collection<String> inValues) { StringBuffer values = new StringBuffer(); for (Iterator iterator = inValues.iterator(); iterator.hasNext();) { String detail = (String) iterator.next(); values.append(detail); if( iterator.hasNext()) { values.append(" | "); } } setProperty(inKey,values.toString()); } }