/* * Created on Sep 13, 2005 */ package org.openedit.data; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.openedit.Data; import com.openedit.WebPageRequest; import com.openedit.page.manage.TextLabelManager; public class PropertyDetail implements Data, ViewItem, Comparable { protected String fieldId; protected String fieldExternalId; protected String fieldExternalType; protected String fieldCatalogId; protected String fieldView; protected String fieldText; protected boolean fieldIndex; //this can be searched as a Lucene field protected boolean fieldIsStored; protected boolean fieldEditable = false; protected boolean fieldFilter; //This means export it to a list or something protected boolean fieldSortable = false; protected boolean fieldKeyword; //this is added to the Keyword string private String fieldDateFormatString; protected String fieldDataType; //boolean, long, permission, etc... protected DateFormat fieldDateFormat; protected Map fieldProperties; protected TextLabelManager fieldTextLabelManager; public PropertyDetail() { } public TextLabelManager getTextLabelManager() { return fieldTextLabelManager; } public void setTextLabelManager(TextLabelManager inTextLabelManager) { fieldTextLabelManager = inTextLabelManager; } public String getSearchType() { return get("searchtype"); } public void setSearchType(String inSearchType) { setProperty("searchtype", inSearchType); } public String getView() { return fieldView; } public void setView(String inView) { fieldView = inView; } public Map getProperties() { if (fieldProperties == null) { fieldProperties = new HashMap(); } return fieldProperties; } public boolean isDataType(String inDataType) { String type = getDataType(); if( type == null || (!type.equals(inDataType ) && type.endsWith("join"))) { type = getViewType(); } if( type != null && type.equals(inDataType)) { return true; } return false; } public boolean isViewType(String inViewType) { return inViewType.equals(getViewType()); } public boolean isDate() { return isDataType("date"); } public boolean isList() { return isDataType("list") || isViewType("list"); } public boolean isMultiValue() { return isViewType("multiselect") || isDataType("multi") || isViewType("tageditor") || isViewType("libraries") || getId().equals("category") || getId().equals("keywords"); } public boolean isBoolean() { return isDataType("boolean") || isViewType("boolean"); } public String getListCatalogId() { String lid = get("listcatalogid"); if( lid == null) { return getCatalogId(); } return lid; } public String getListId() { String lid = get("listid"); if( lid == null) { return getId(); } return lid; } public void setListId(String inListId) { setProperty("listid", inListId); } public String getQuery() { return get("query"); } public void setQuery(String query) { setProperty("query", query); } /** * @deprecated use getDataType */ public String getType() { return getDataType(); } public String getViewType() { return get("viewtype"); } public void setViewType(String inViewType) { setProperty("viewtype", inViewType); } public String getDataType() { return get("datatype"); } public void setDataType(String inDataType) { setProperty("datatype", inDataType); } public String getId() { return fieldId; } public void setId(String inId) { fieldId = inId; } public boolean isIndex() { return fieldIndex; } public void setIndex(boolean inIndex) { fieldIndex = inIndex; } public DateFormat getDateFormat() { if (fieldDateFormat == null && getDateFormatString() != null) { fieldDateFormat = new SimpleDateFormat(getDateFormatString()); } return fieldDateFormat; } public void setDateFormat(DateFormat inDateFormat) { fieldDateFormat = inDateFormat; } public String getText() { return fieldText; } /** * Create a translation file here: /catalogid/configuration/_text_es.txt * @param inRequest * @return */ public String getText( WebPageRequest inRequest ) { String value = null; if( getTextLabelManager() != null) { value = getTextLabelManager().getAutoText("/" + getCatalogId() + "/data/fields/", getText(), inRequest.getLocale()); } if( value == null) { value = getText(); } return value; } public void setText(String inText) { fieldText = inText; } public boolean isKeyword() { return fieldKeyword; } public void setKeyword(boolean inKeyword) { fieldKeyword = inKeyword; } public boolean isStored() { return fieldIsStored; } public void setStored( boolean inStored) { fieldIsStored = inStored; } public boolean isEditable() { return fieldEditable; } public void setEditable(boolean inEditable) { fieldEditable = inEditable; } public String[] getExternalIds() { if( fieldExternalId != null) { return fieldExternalId.split(","); } return null; } public String getExternalId() { return fieldExternalId; } public void setExternalId(String inExternalId) { fieldExternalId = inExternalId; } // public boolean isSearchable() // { // return fieldIsSearchable; // } // public void setSearchable(boolean inSearchable) // { // fieldIsSearchable = inSearchable; // } public boolean isFilter() { // TODO Auto-generated method stub return fieldFilter; } public void setFilter(boolean inFilter) { fieldFilter = inFilter; } public String getExternalType() { return fieldExternalType; } public void setExternalType(String inExternalType) { fieldExternalType = inExternalType; } public boolean isRequired() { return Boolean.parseBoolean(get("required")); } public void setRequired(boolean required) { setProperty("required", Boolean.toString(required)); } public void setDateFormatString(String format) { fieldDateFormatString = format; } public String getDateFormatString() { return fieldDateFormatString; } public String getCatalogId(String inDefault) { if( fieldCatalogId == null) { return inDefault; } return getCatalogId(); } public String getCatalogId() { return fieldCatalogId; } public void setCatalogId(String inCatalogId) { fieldCatalogId = inCatalogId; } public String toString() { return getId(); } public String get(String inId) { if( inId.equals("id")) { return getId(); } else if ( inId.equals("boolean") || inId.equals("number") || inId.equals("date") || inId.equals("file") ) { return String.valueOf(inId.equals(getDataType())); } else if (inId.equals("list") || inId.equals("html") ) { return String.valueOf(inId.equals(getViewType())); } else if ( inId.equals("text")) { return getText(); } else if ( inId.equals("externalid")) { return getExternalId(); } else if ( inId.equals("stored")) { return String.valueOf(isStored()); } else if ( inId.equals("index")) { return String.valueOf(isIndex()); } else if ( inId.equals("keyword")) { return String.valueOf(isKeyword()); } else if ( inId.equals("editable")) { return String.valueOf(isEditable()); } else if ( inId.equals("sortable")) { return String.valueOf(isSortable()); } else if ( inId.equals("filter")) { return String.valueOf(isFilter()); } else if ( inId.equals("externaltype")) { return getExternalType(); } else if ( inId.equals("format")) { return getDateFormatString(); } else if (inId.equals("type")) { return getDataType(); } // else if (inId.equals("viewtype")) // { // return getViewType(); // } return (String)getProperties().get(inId); } public void setProperty(String inId, String inValue) { if( inId.equals("id")) { setId(inValue); } else if ( inId.equals("boolean") && inValue.equalsIgnoreCase("true")) { setDataType("boolean"); } else if ( inId.equals("text")) { setText(inValue); } else if ( inId.equals("externalid")) { setExternalId(inValue); } else if ( inId.equals("stored")) { setStored(Boolean.parseBoolean(inValue)); } else if ( inId.equals("index")) { setIndex(Boolean.parseBoolean(inValue)); } else if ( inId.equals("keyword")) { setKeyword(Boolean.parseBoolean(inValue)); } else if ( inId.equals("editable")) { setEditable(Boolean.parseBoolean(inValue)); } else if ( inId.equals("sortable")) { setSortable(Boolean.parseBoolean(inValue)); } else if ( inId.equals("filter")) { setFilter(Boolean.parseBoolean(inValue)); } else if (( inId.equals("list") || inId.equals("html")) && inValue.equalsIgnoreCase("true") ) { setViewType(inId); } else if (( inId.equals("number") || inId.equals("date") || inId.equals("file")) && inValue.equalsIgnoreCase("true") ) { setDataType(inId); } else if ( inId.equals("externaltype")) { setExternalType(inValue); } else if ( inId.equals("format")) { setDateFormatString(inValue); } else if ( inId.equals("type")) { setDataType(inValue); } // else if ( inId.equals("viewtype")) // { // setViewType(inValue); // } else if (inId.equals("catalogid")) { setCatalogId(inValue); } else { if(inValue == null) { getProperties().remove(inId); } else { getProperties().put(inId, inValue); } } } public void setProperties(Map<String,String> inProperties) { getProperties().putAll(inProperties); } public String getName() { return getText(); } public void setName(String inName) { setText(inName); } public PropertyDetail copy() { PropertyDetail d = new PropertyDetail(); d.fieldCatalogId = fieldCatalogId; d.fieldDateFormat = fieldDateFormat; d.fieldDateFormatString = fieldDateFormatString; d.fieldEditable = fieldEditable; d.fieldExternalId = fieldExternalId; d.fieldExternalType = fieldExternalType; d.fieldFilter = fieldFilter; d.fieldId = fieldId; d.fieldIndex = fieldIndex; d.fieldIsStored = fieldIsStored; d.fieldKeyword = fieldKeyword; d.fieldText = fieldText; d.fieldDataType = fieldDataType; d.fieldSortable = fieldSortable; d.fieldTextLabelManager = fieldTextLabelManager; d.getProperties().putAll(getProperties()); return d; } public boolean hasChildren() { return false; } public boolean isLeaf() { return true; } public String getSourcePath() { // TODO Auto-generated method stub return null; } public void setSourcePath(String inSourcepath) { // TODO Auto-generated method stub } public int compareTo(Object inO) { PropertyDetail detail = (PropertyDetail)inO; if( getName() == null) { return 1; } if( detail.getName() == null) { return -1; } return getName().compareTo(detail.getName()); } public boolean isExternalSort() { if( isDataType("date") || isDataType("boolean") || isNumber() ) { return false; } return fieldSortable; } public boolean isSortable() { //Make most things sortable automtically if( fieldSortable || isDataType("date") || isDataType("boolean") || isNumber() ) { return true; } return fieldSortable; } public void setSortable(boolean inSortable) { fieldSortable = inSortable; } public String getSortProperty() { if( isExternalSort() ) { return getId() + "_sorted"; //For lists only? } return getId(); } public boolean isNumber() { if (isDataType("double") || isDataType("number") || isDataType("long")) { return true; } return false; } 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()); } }