/* * Created on May 26, 2003 * * To change this generated comment go to * Window>Preferences>Java>Code Generation>Code Template */ package com.idega.block.dataquery.data.xml; import java.util.StringTokenizer; import com.idega.data.IDOEntityDefinition; import com.idega.data.IDOEntityField; import com.idega.data.IDOLookup; import com.idega.data.IDOLookupException; import com.idega.repository.data.RefactorClassRegistry; import com.idega.xml.XMLAttribute; import com.idega.xml.XMLElement; /** * <p>Title: idegaWeb</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2003</p> * <p>Company: idega Software</p> * @author aron * @version 1.0 */ public class QueryFieldPart implements QueryPart { private IDOEntityField idoField = null; private IDOEntityDefinition entityDef = null; private String name = null; private String aliasName = null; private String entity = null; private String path = null; private String columns = null; private String function = null; private String display = null; private String typeClass = null; private String handlerClass = null; private String handlerDescription = null; private boolean locked = false; private boolean hidden = false; // not used at the moment because function concat is not used at the moment // public QueryFieldPart(String name, String entity, String path, String[] columns,String function, String display,String typeClass, String handlerClass, String handlerDescription, String hidden){ // this(name,entity, path, "",function,display,typeClass, handlerClass, handlerDescription, Boolean.getBoolean(hidden)); // this.columns = stringArrayToCommaList(columns); // } public QueryFieldPart(String name, String aliasName, String entity,String path, String column,String function,String display,String typeClass, String handlerClass, String handlerDescription){ this( name, aliasName, entity, path, column, function, display, typeClass, handlerClass, handlerDescription, false); } public QueryFieldPart(String name, String aliasName, String entity,String path, String column,String function,String display,String typeClass, String handlerClass , String handlerDescription, boolean hidden){ this.name = convertNullStringToRealNull(name); this.aliasName = convertNullStringToRealNull(aliasName); this.entity = convertNullStringToRealNull(entity); this.path = convertNullStringToRealNull(path); this.columns = convertNullStringToRealNull(column); this.function = convertNullStringToRealNull(function); this.display = convertNullStringToRealNull(display); this.typeClass = convertNullStringToRealNull(typeClass); this.handlerClass = convertNullStringToRealNull(handlerClass); this.handlerDescription = convertNullStringToRealNull(handlerDescription); this.hidden = hidden; } public QueryFieldPart(XMLElement xml) { this.name = xml.getAttribute(QueryXMLConstants.NAME).getValue(); this.entity = xml.getAttribute(QueryXMLConstants.ENTITY).getValue(); this.path = xml.getAttribute(QueryXMLConstants.PATH).getValue(); this.columns = xml.getAttribute(QueryXMLConstants.PROPERTIES).getValue(); XMLAttribute func = xml.getAttribute(QueryXMLConstants.FUNCTION); if(func!=null) { this.function = func.getValue(); } this.typeClass = xml.getAttribute(QueryXMLConstants.TYPE).getValue(); if(xml.hasChildren()) { this.aliasName = xml.getTextTrim(QueryXMLConstants.ALIAS_NAME); this.handlerClass = xml.getTextTrim(QueryXMLConstants.HANDLER); this.handlerDescription = xml.getTextTrim(QueryXMLConstants.HANDLER_DESCRIPTION); this.display = xml.getTextTrim(QueryXMLConstants.DISPLAY); XMLElement xmlLock = xml.getChild(QueryXMLConstants.LOCK); this.locked = (xmlLock!=null); XMLElement hidden = xml.getChild(QueryXMLConstants.HIDDEN); this.hidden = (hidden!= null); } } /* (non-Javadoc) * @see com.idega.block.dataquery.business.QueryPart#getQueryElement() */ public XMLElement getQueryElement() { XMLElement el = new XMLElement(QueryXMLConstants.FIELD); el.setAttribute(QueryXMLConstants.NAME,this.name); el.setAttribute(QueryXMLConstants.ENTITY,this.entity); el.setAttribute(QueryXMLConstants.PATH, this.path); el.setAttribute(QueryXMLConstants.PROPERTIES,this.columns); if(this.function!=null && !this.function.equalsIgnoreCase("null")) { el.setAttribute(QueryXMLConstants.FUNCTION,this.function); } if(this.typeClass!=null && !this.typeClass.equalsIgnoreCase("null")) { el.setAttribute(QueryXMLConstants.TYPE,this.typeClass); } if (this.aliasName != null && !this.aliasName.equalsIgnoreCase("null")) { XMLElement xmlAliasName = new XMLElement(QueryXMLConstants.ALIAS_NAME); xmlAliasName.addContent(this.aliasName); el.addContent(xmlAliasName); } if (this.display != null && !this.display.equalsIgnoreCase("null")) { XMLElement xmlDisplay = new XMLElement(QueryXMLConstants.DISPLAY); xmlDisplay.addContent(this.display); el.addContent(xmlDisplay); } if (this.handlerClass != null && !this.handlerClass.equalsIgnoreCase("null")) { XMLElement xmlHandlerClass = new XMLElement(QueryXMLConstants.HANDLER); xmlHandlerClass.addContent(this.handlerClass); el.addContent(xmlHandlerClass); } if (this.handlerDescription != null && !this.handlerDescription.equalsIgnoreCase("null")) { XMLElement xmlHandlerDescription = new XMLElement(QueryXMLConstants.HANDLER_DESCRIPTION); xmlHandlerDescription.addContent(this.handlerDescription); el.addContent(xmlHandlerDescription); } if(this.locked) { el.addContent(new XMLElement(QueryXMLConstants.LOCK)); } if (this.hidden) { el.addContent(new XMLElement(QueryXMLConstants.HIDDEN)); } return el; } /** * @return */ public String getDisplay() { return this.display; } /** * @return */ public String getEntity() { return this.entity; } public String getPath() { return this.path; } /** * @return */ public String getFunction() { return this.function; } /** * @return */ public String getName() { return this.name; } public String getAliasName() { return (this.aliasName == null) ? this.name : this.aliasName; } /** * @return */ public String[] getColumns() { return commaListToArray(this.columns); } /** * @param string */ public void setDisplay(String string) { this.display = string; } /** * @param string */ public void setEntity(String string) { this.entity = string; } /** * @param string */ public void setFunction(String string) { this.function = string; } /** * @param string */ public void setName(String name) { this.name = name; } public void setAliasName(String aliasName) { this.aliasName = aliasName; } public void setHandlerClass(String handlerClass) { this.handlerClass = handlerClass; } public void setHandlerDescription(String handlerDescription) { this.handlerDescription = handlerDescription; } public String getHandlerClass() { return this.handlerClass; } public String getHandlerDescription() { return this.handlerDescription; } /** * @param strings */ public void setColumns(String[] columnStrings) { this.columns = stringArrayToCommaList(columnStrings); } public void addColumn(String column){ if(getColumns()!=null && getColumns().length>0){ this.columns+=","+column; } else { this.columns = column; } } public void addColumn(String[] columns){ if(columns!=null){ addColumn(stringArrayToCommaList(columns)); } } public String stringArrayToCommaList(String[] array){ StringBuffer buf = new StringBuffer(); for (int i = 0; i < array.length; i++) { if(i>0) { buf.append(","); } buf.append(array[i]); } return buf.toString(); } public String[] commaListToArray(String commaList){ StringTokenizer tokenizer = new StringTokenizer(commaList,","); String[] array = new String[tokenizer.countTokens()]; for (int i = 0; i < array.length; i++) { array[i] = tokenizer.nextToken(); } return array; } public String encode(){ StringBuffer buffer = new StringBuffer(); buffer.append(this.name).append(';'); // 1 buffer.append("null").append(';'); // 2 buffer.append(this.entity).append(';'); // 3 buffer.append(this.path).append(';'); // 4 buffer.append(this.columns).append(';'); // 5 buffer.append(this.function).append(';'); // 6 buffer.append(this.display).append(';'); // 7 buffer.append(this.typeClass).append(';'); // 8 buffer.append(this.handlerClass).append(';'); // 9 buffer.append(this.handlerDescription); // 10 // the property hidden is always set explicitly // do not add hidden (encode/decode is used for comparision) // buffer.append(hidden); return buffer.toString(); } public static QueryFieldPart decode(String encoded){ StringTokenizer toker = new StringTokenizer(encoded,";"); if(toker.countTokens()== 10){ return new QueryFieldPart(toker.nextToken(), toker.nextToken(), toker.nextToken(), toker.nextToken(), toker.nextToken(), toker.nextToken(), toker.nextToken(), toker.nextToken(), toker.nextToken(), // toker.nextToken(), toker.nextToken()); } return null; } /** * @return */ public String getTypeClass() { return this.typeClass; } /** * @param string */ public void setTypeClass(String string) { this.typeClass = string; } /* (non-Javadoc) * @see com.idega.block.dataquery.business.QueryPart#isLocked() */ public boolean isLocked() { return this.locked; } public boolean isHidden() { return this.hidden; } public void setHidden(boolean hidden) { this.hidden = hidden; } /* (non-Javadoc) * @see com.idega.block.dataquery.business.QueryPart#setLocked(boolean) */ public void setLocked(boolean locked) { this.locked = locked; } private IDOEntityDefinition getIDOEntityDefinition() throws IDOLookupException, ClassNotFoundException{ if(this.entityDef==null){ this.entityDef = IDOLookup.getEntityDefinitionForClass(RefactorClassRegistry.forName(this.entity)); } return this.entityDef; } public IDOEntityField getIDOEntityField() throws IDOLookupException, ClassNotFoundException{ if(this.idoField==null){ IDOEntityDefinition def = getIDOEntityDefinition(); if(def != null){ IDOEntityField[] fields = def.getFields(); for (int i = 0; i < fields.length; i++) { if(fields[i].getUniqueFieldName().equals(this.name)){ this.idoField = fields[i]; return this.idoField; } } } } return this.idoField; } private String convertNullStringToRealNull(String string) { return (string == null || string.equalsIgnoreCase("null")) ? null : string; } }