/*
This file belongs to the Servoy development and deployment environment, Copyright (C) 1997-2010 Servoy BV
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU Affero General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at your option) any
later version.
This program 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 Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along
with this program; if not, see http://www.gnu.org/licenses or write to the Free
Software Foundation,Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
*/
package com.servoy.j2db.persistence;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import com.servoy.j2db.documentation.persistence.docs.DocsInsetList;
import com.servoy.j2db.persistence.ContentSpec.Element;
import com.servoy.j2db.util.ComponentFactoryHelper;
import com.servoy.j2db.util.Debug;
import com.servoy.j2db.util.PersistHelper;
import com.servoy.j2db.util.UUID;
import com.servoy.j2db.util.Utils;
/**
* @author jblok
*/
public class RepositoryHelper
{
public static final int MAX_SQL_NAME_LENGTH = 50;
public static final int BASIC_FILTER = 0;
public static final int ADVANCED_FILTER = 1;
public static final int WEB_FILTER = 2;
public static String limitSQLName(String name)
{
return name.substring(0, Math.min(name.length(), MAX_SQL_NAME_LENGTH));
}
private final IDeveloperRepository developerRepository;
public RepositoryHelper(IDeveloperRepository dr)
{
developerRepository = dr;
}
private static final Map<Class< ? >, Map<String, Method>> setterCache = Collections.synchronizedMap(new HashMap<Class< ? >, Map<String, Method>>());
/**
* Get all the setMethods on the specified object via introspection
*
* @param the object
* @return a map with name -> java.lang.reflect.Method
*/
static Map<String, Method> getSettersViaIntrospection(Object obj) throws IntrospectionException
{
if (obj == null) return Collections.<String, Method> emptyMap();
return getSettersViaIntrospection(obj.getClass());
}
/**
* Get all the setMethods on the specified class via introspection
*
* @param clazz the class
* @return a map with name -> java.lang.reflect.Method
*/
static Map<String, Method> getSettersViaIntrospection(Class< ? > clazz) throws IntrospectionException
{
Map<String, Method> retval = setterCache.get(clazz);
if (retval == null)
{
retval = new HashMap<String, Method>();
BeanInfo bi = Introspector.getBeanInfo(clazz);
PropertyDescriptor[] pds = bi.getPropertyDescriptors();
for (PropertyDescriptor pd : pds)
{
Method m = pd.getWriteMethod();
if (m != null)
{
try
{
m.setAccessible(true);
}
catch (Exception e)
{
}
retval.put(pd.getName(), m);
}
}
setterCache.put(clazz, retval);
}
return retval;
}
private static final Map<Class< ? >, Map<String, Method>> getterCache = Collections.synchronizedMap(new HashMap<Class< ? >, Map<String, Method>>());
/**
* Get all the getMethods on the specified object via introspection
*
* @param the object
* @return a map with name -> java.lang.reflect.Method
*/
static Map<String, Method> getGettersViaIntrospection(Object obj) throws IntrospectionException
{
if (obj == null) return Collections.<String, Method> emptyMap();
Class< ? > clazz = obj.getClass();
Map<String, Method> retval = getterCache.get(clazz);
if (retval == null)
{
retval = new HashMap<String, Method>();
BeanInfo bi = Introspector.getBeanInfo(clazz);
PropertyDescriptor[] pds = bi.getPropertyDescriptors();
for (PropertyDescriptor pd : pds)
{
Method m = pd.getReadMethod();
if (m != null)
{
try
{
m.setAccessible(true);
}
catch (Exception e)
{
}
retval.put(pd.getName(), m);
}
}
getterCache.put(clazz, retval);
}
return retval;
}
public static void initClone(IPersist clone, IPersist original, boolean flattenOverrides)
{
if (flattenOverrides && original instanceof ISupportExtendsID && PersistHelper.isOverrideElement((ISupportExtendsID)original) &&
(!(original instanceof Form)))
{
// copy all properties from element hierarchy into copy, make copy non-override
List<AbstractBase> overrideHierarchy = PersistHelper.getOverrideHierarchy((ISupportExtendsID)original);
// top-most super-element first
for (int i = overrideHierarchy.size() - 1; i >= 0; i--)
{
((AbstractBase)clone).copyPropertiesMap(overrideHierarchy.get(i).getPropertiesMap(), false);
}
// no longer an override
((AbstractBase)clone).clearTypedProperty(StaticContentSpecLoader.PROPERTY_EXTENDSID);
}
else
{
((AbstractBase)clone).copyPropertiesMap(((AbstractBase)original).getPropertiesMap(), false);
}
}
public static String getObjectTypeName(int objectTypeId)
{
switch (objectTypeId)
{
case IRepository.SOLUTIONS :
return "solution"; //$NON-NLS-1$
case IRepository.STYLES :
return "style"; //$NON-NLS-1$
case IRepository.TEMPLATES :
return "template"; //$NON-NLS-1$
case IRepository.FORMS :
return "form"; //$NON-NLS-1$
case IRepository.FIELDS :
return "field"; //$NON-NLS-1$
case IRepository.GRAPHICALCOMPONENTS :
return "graphical component"; //$NON-NLS-1$
case IRepository.TABPANELS :
return "tab panel"; //$NON-NLS-1$
case IRepository.PORTALS :
return "portal"; //$NON-NLS-1$
case IRepository.RELATIONS :
return "relation"; //$NON-NLS-1$
case IRepository.VALUELISTS :
return "valuelist"; //$NON-NLS-1$
case IRepository.MEDIA :
return "media"; //$NON-NLS-1$
default :
// TODO: add other known object types if this method ever becomes used
// for objects which are not root objects.
return "<unknown object type>"; //$NON-NLS-1$
}
}
public List<RootObjectReference> getActiveSolutionModuleMetaDatas(int solutionId) throws RepositoryException
{
Map<UUID, RootObjectReference> referencedModules = new HashMap<UUID, RootObjectReference>();
// get the main solution;
try
{
Solution sol = (Solution)developerRepository.getActiveRootObject(solutionId);
if (sol != null)
{
referencedModules.put(sol.getUUID(), new RootObjectReference(sol.getName(), sol.getUUID(), sol.getRootObjectMetaData(), sol.getReleaseNumber()));
loadObjectMetaDatas(sol.getModulesNames(), referencedModules, SolutionMetaData.isImportHook(sol.getSolutionMetaData()));
}
}
catch (Exception e)
{
throw new RepositoryException(e);
}
return new ArrayList<RootObjectReference>(referencedModules.values());
}
private void loadObjectMetaDatas(String moduleNames, Map<UUID, RootObjectReference> referencedModules, boolean loadImportHooks) throws RepositoryException
{
if (moduleNames == null) return;
StringTokenizer tk = new StringTokenizer(moduleNames, ";,"); //$NON-NLS-1$
int count = tk.countTokens();
if (count > 0)
{
while (tk.hasMoreTokens())
{
try
{
String moduleDescriptor = tk.nextToken();
SolutionMetaData metaData;
int releaseNumber = 0;
int i = moduleDescriptor.indexOf(':');
String name;
UUID uuid;
if (i != -1)
{
releaseNumber = Integer.parseInt(moduleDescriptor.substring(i + 1));
moduleDescriptor = moduleDescriptor.substring(0, i);
}
if (moduleDescriptor.indexOf('-') != -1)
{
// A uuid reference.
uuid = UUID.fromString(moduleDescriptor);
metaData = (SolutionMetaData)developerRepository.getRootObjectMetaData(uuid);
if (metaData == null)
{
continue;
}
name = metaData.getName();
}
else
{
// A module name; for backwards compatibility.
name = moduleDescriptor;
metaData = (SolutionMetaData)developerRepository.getRootObjectMetaData(name, IRepository.SOLUTIONS);
if (metaData == null)
{
continue;
}
uuid = metaData.getRootObjectUuid();
}
if (referencedModules.get(uuid) == null && (loadImportHooks || !SolutionMetaData.isImportHook(metaData)))
{
referencedModules.put(uuid, new RootObjectReference(name, uuid, metaData, releaseNumber));
Solution sol = (Solution)developerRepository.getRootObject(metaData.getRootObjectId(), releaseNumber);
loadObjectMetaDatas(sol.getModulesNames(), referencedModules, loadImportHooks);
}
}
catch (RemoteException e)
{
throw new RepositoryException(e);
}
}
}
}
//-- STATIC HELPER METHODS ------------------------------------------------------------------------------------
private static boolean hideForFilter(String name)
{
int filter = ADVANCED_FILTER; // TODO application.getFilter();
boolean retval = false;
if ((filter & ADVANCED_FILTER) == BASIC_FILTER) //basic
{
if (name.equals("useSeparateFoundSet")) //$NON-NLS-1$
{
retval = true;
}
}
if ((filter & WEB_FILTER) == WEB_FILTER) //web
{
//button
if (name.equals("rolloverImageMediaID")) retval = true; //$NON-NLS-1$
else if (name.equals("rolloverCursor")) retval = true; //$NON-NLS-1$
// else if (name.equals("verticalAlignment")) retval = true; //$NON-NLS-1$
else if (name.equals("rotation")) retval = true; //$NON-NLS-1$
else if (name.equals("showFocus")) retval = true; //$NON-NLS-1$
// else if (name.startsWith("onFocus")) retval = true; //$NON-NLS-1$
else if (name.equals("anchors")) retval = true; //$NON-NLS-1$
//field
// else if (name.equals("onAction") && persist instanceof Field) retval = true; //$NON-NLS-1$
else if (name.equals("selectOnEnter")) retval = true; //$NON-NLS-1$
//form
else if (name.endsWith("CmdMethodID")) retval = true; //$NON-NLS-1$
//portal
else if (name.equals("resizeble")) retval = true; //$NON-NLS-1$
else if (name.equals("reorderable")) retval = true; //$NON-NLS-1$
else if (name.equals("multiLine")) retval = true; //$NON-NLS-1$
else if (name.equals("intercellSpacing")) retval = true; //$NON-NLS-1$
else if (name.equals("showVerticalLines")) retval = true; //$NON-NLS-1$
else if (name.equals("showHorizontalLines")) retval = true; //$NON-NLS-1$
//tabpanel
// HIDE/Show (only top) is supported, else if (name.equals("tabOrientation")) retval = true;
else if (name.equals("scrollTabs")) retval = true; //$NON-NLS-1$
}
return retval;
}
@SuppressWarnings("nls")
public static boolean forceHideInDocs(String name, Class< ? > persistClass, int displayType)
{
if (persistClass.equals(TableNode.class) && name.equals("dataSource"))
{
return true;
}
if (persistClass.equals(Field.class) &&
name.equals(StaticContentSpecLoader.PROPERTY_SCROLLBARS.getPropertyName()) &&
(displayType == Field.TEXT_FIELD || displayType == Field.CALENDAR || displayType == Field.COMBOBOX || displayType == Field.PASSWORD ||
displayType == Field.SPINNER || displayType == Field.TYPE_AHEAD))
{
return true;
}
return false;
}
@SuppressWarnings("nls")
public static boolean forceShowInDocs(String name, Class< ? > persistClass)
{
if (persistClass.equals(Tab.class) && name.equals("containsFormID")) // handled in combined property table //$NON-NLS-1$
{
return true;
}
if (persistClass.equals(RelationItem.class))
{
return name.equals("foreignColumnName") || name.equals("operator") || name.equals("primaryDataProviderID"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
}
if (persistClass.equals(ScriptMethod.class) || persistClass.equals(AbstractScriptProvider.class))
{
return name.equals("name") || name.equals("showInMenu") || name.equals("declaration"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
}
if (persistClass.equals(ISupportDataProviderID.class))
{
return name.equals("valuelistID"); //$NON-NLS-1$
}
if (persistClass.equals(ValueList.class))
{
return name.equals("serverName") || name.equals("tableName") || name.equals("addEmptyValue") || name.equals("customValues") ||
name.equals("dataSource") || name.equals("relationName") || name.equals("separator") || name.equals("sortOptions") ||
name.equals("useTableFilter") || name.equals("valueListType");
}
if (persistClass.equals(Part.class))
{
return name.equals("groupbyDataProviderIDs") || name.equals("partType");
}
if (persistClass.equals(ISupportPrinting.class))
{
return name.equals("printable");
}
if (persistClass.equals(ISupportBounds.class))
{
return name.equals("location");
}
if (persistClass.equals(ISupportSize.class))
{
return name.equals("size");
}
if (persistClass.equals(ISupportName.class))
{
return name.equals("name");
}
if (persistClass.equals(Form.class))
{
return name.equals("serverName") || name.equals("tableName");
}
if (persistClass.equals(Solution.class))
{
return name.equals("loginSolutionName");
}
if (persistClass.equals(ColumnInfo.class))
{
return name.equals("autoEnterSubType") || name.equals("autoEnterType") || name.equals("converterName") || name.equals("converterProperties") ||
name.equals("databaseDefaultValue") || name.equals("databaseSequenceName") || name.equals("defaultFormat") || name.equals("defaultValue") ||
name.equals("description") || name.equals("foreignType") || name.equals("lookupValue") || name.equals("titleText") ||
name.equals("validatorName") || name.equals("validatorProperties");
}
return false;
}
// Some properties should be created(for undo/redo) but not visible in the properties view
public static boolean hideForProperties(String name, Class< ? > persistClass, IPersist persist)
{
if (name.equals("groupbyDataProviderIDs") && Part.class.isAssignableFrom(persistClass)) //$NON-NLS-1$
{
return true;
}
if (name.equals("containsFormID")) // handled in combined property table //$NON-NLS-1$
{
return true;
}
if (name.equals("foreground") && Portal.class.isAssignableFrom(persistClass)) //$NON-NLS-1$
{
return true;
}
if (name.equals("lineNumberOffset")) //$NON-NLS-1$
{
return true;
}
if (name.equals("extendsID") && LayoutContainer.class.isAssignableFrom(persistClass)) //$NON-NLS-1$
{
return true;
}
if (name.equals("groupID")) //$NON-NLS-1$
{
return true;
}
if (name.equals("customProperties")) //$NON-NLS-1$
{
return true;//not implemented yet
}
if (name.equals("location") && Tab.class.isAssignableFrom(persistClass)) // set in ChangeBoundsCommand //$NON-NLS-1$
{
return true;
}
if (name.equals("rowBGColorCalculation") && persist != null) //$NON-NLS-1$
{
String rowBGColorCalculation = null;
if (persist.getTypeID() == IRepository.FORMS)
{
rowBGColorCalculation = ((Form)persist).getRowBGColorCalculation();
}
else if (persist.getTypeID() == IRepository.PORTALS)
{
rowBGColorCalculation = ((Portal)persist).getRowBGColorCalculation();
}
return rowBGColorCalculation == null;
}
return false;
}
public static boolean shouldShow(String name, Element element, Class< ? > persistClass, int displayType)
{
if (element == null)
{
// no content spec (example: form.width), some properties are set via another property.
if (Form.class.isAssignableFrom(persistClass) && "width".equals(name)) //$NON-NLS-1$
{
return true;
}
if (Portal.class.isAssignableFrom(persistClass) && IContentSpecConstants.PROPERTY_NG_READONLY_MODE.equals(name))
{
return true;
}
return false;
}
else if (element.isDeprecated())
{
return false;
}
if (name.equals("locked")) //$NON-NLS-1$
{
return false;
}
if (name.equals("beanClassName")) //$NON-NLS-1$
{
return false;
}
if (hideForFilter(name))
{
return false;
}
if (name.equals("relationName") && !(DocsInsetList.class.isAssignableFrom(persistClass) || Portal.class.isAssignableFrom(persistClass) || Tab.class.isAssignableFrom(persistClass))) //$NON-NLS-1$
{
return false;
}
if (name.equals("selectedTabColor")) //$NON-NLS-1$
{
return false;//not correctly impl by sun //TODO
}
if (name.equals("anchors") && Shape.class.isAssignableFrom(persistClass)) //$NON-NLS-1$
{
return false;
}
if (name.equals("verticalAlignment") && Field.class.isAssignableFrom(persistClass)) //$NON-NLS-1$
{
return false;
}
if (name.equals("styleClass") && (RectShape.class.isAssignableFrom(persistClass) || Shape.class.isAssignableFrom(persistClass))) //$NON-NLS-1$
{
return false;
}
if (name.equals("size") && (Form.class.isAssignableFrom(persistClass) || Part.class.isAssignableFrom(persistClass))) //$NON-NLS-1$
{
return false;
}
if (name.equals("background") && (Form.class.isAssignableFrom(persistClass) || Tab.class.isAssignableFrom(persistClass))) //$NON-NLS-1$
{
return false;
}
if (name.equals("size") && Tab.class.isAssignableFrom(persistClass)) //$NON-NLS-1$
{
return false;
}
if (name.equals("sequence") && Part.class.isAssignableFrom(persistClass)) //$NON-NLS-1$
{
return false;
}
if (name.equals("partType") && Part.class.isAssignableFrom(persistClass)) //$NON-NLS-1$
{
return false;
}
if (name.equals("containsFormID") && RectShape.class.isAssignableFrom(persistClass)) //$NON-NLS-1$
{
return false;
}
if (name.equals("fontType") && (Portal.class.isAssignableFrom(persistClass))) //$NON-NLS-1$
{
return false;
}
if (name.equals("style")) //$NON-NLS-1$
{
return false;
}
if (name.equals("aliases")) //$NON-NLS-1$
{
return false; //aliases concept is dumped in favor of useNewFormInstance on tab
}
if (name.equals("useNewFormInstance")) //$NON-NLS-1$
{
return false;//TODO impl
}
if (name.equals("closeOnTabs")) //$NON-NLS-1$
{
return false;//TODO impl
}
if (name.equals("useRTF")) //useRTF is not longer used //$NON-NLS-1$
{
return false;
}
if (RectShape.class.isAssignableFrom(persistClass) && name.endsWith("font")) //$NON-NLS-1$
{
return false;
}
if ((Shape.class.isAssignableFrom(persistClass)) &&
(name.endsWith("transparent") || name.endsWith("background") || name.endsWith("name") || name.endsWith("border") || name.endsWith("shapeType") || //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
name.endsWith("font") || name.endsWith("size") || name.endsWith("location") || name.endsWith("points"))) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
{
return false;
}
if (Solution.class.isAssignableFrom(persistClass) && (name.equals("repository") || name.equals("serverProxies"))) //$NON-NLS-1$ //$NON-NLS-2$
{
return false;
}
if (Relation.class.isAssignableFrom(persistClass) &&
(name.equals("valid") || name.equals("duplicateRelatedRecords") || name.equals("sortOptions") || name.equals("existsInDB"))) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
{
return false;
}
if (Solution.class.isAssignableFrom(persistClass) && name.equals("onInitMethodID")) //$NON-NLS-1$
{
return false;
}
if (Bean.class.isAssignableFrom(persistClass) &&
(name.equals("parameters") || name.equals("usesUI") || name.equals("beanXML") || name.equals("onActionMethodID"))) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
{
return false;
}
if ("methodCode".equals(name) || "declaration".equals(name)) //$NON-NLS-1$ //$NON-NLS-2$
{
return false;
}
if ("blobId".equals(name)) //$NON-NLS-1$
{
return false;
}
if (ValueList.class.isAssignableFrom(persistClass) &&
!"name".equals(name) && !StaticContentSpecLoader.PROPERTY_ENCAPSULATION.getPropertyName().equals(name) && !StaticContentSpecLoader.PROPERTY_DEPRECATED.getPropertyName().equals(name)) //$NON-NLS-1$
{
return false;
}
if (name.equals(StaticContentSpecLoader.PROPERTY_EXTENDSID.getPropertyName()) &&
(Portal.class.isAssignableFrom(persistClass) || TabPanel.class.isAssignableFrom(persistClass) || Bean.class.isAssignableFrom(persistClass) ||
WebComponent.class.isAssignableFrom(persistClass) || Field.class.isAssignableFrom(persistClass) ||
GraphicalComponent.class.isAssignableFrom(persistClass) || Tab.class.isAssignableFrom(persistClass) ||
Shape.class.isAssignableFrom(persistClass) || RectShape.class.isAssignableFrom(persistClass) || Part.class.isAssignableFrom(persistClass)))
{
return false;
}
if (name.equals(StaticContentSpecLoader.PROPERTY_PLACEHOLDERTEXT.getPropertyName()) && displayType != Field.TEXT_FIELD &&
displayType != Field.PASSWORD && displayType != Field.TYPE_AHEAD && displayType != Field.TEXT_AREA && displayType >= 0)
{
return false;
}
if (name.equals(StaticContentSpecLoader.PROPERTY_SCROLLBARS.getPropertyName()) &&
(displayType == Field.TEXT_FIELD || displayType == Field.CALENDAR || displayType == Field.COMBOBOX || displayType == Field.PASSWORD ||
displayType == Field.SPINNER || displayType == Field.TYPE_AHEAD))
{
return false;
}
if ("selectOnEnter".equals(name) && (displayType == Field.CHECKS || displayType == Field.RADIOS)) //$NON-NLS-1$
{
return false;
}
if (StaticContentSpecLoader.PROPERTY_LABELS.getPropertyName().equals(name))
{
return false;
}
if (StaticContentSpecLoader.PROPERTY_JSON.getPropertyName().equals(name))
{
return false;
}
if (StaticContentSpecLoader.PROPERTY_TYPENAME.getPropertyName().equals(name))
{
return false;
}
return true;
}
public static boolean hideForMobileProperties(String name, Class< ? > persistClass, int displayType, boolean isButton)
{
if (name.equals(StaticContentSpecLoader.PROPERTY_GROUPID.getPropertyName()))
{
return true;
}
if (name.equals(StaticContentSpecLoader.PROPERTY_I18NDATASOURCE.getPropertyName()))
{
return true;
}
if (GraphicalComponent.class.isAssignableFrom(persistClass) && name.equals(StaticContentSpecLoader.PROPERTY_ONACTIONMETHODID.getPropertyName()) &&
!isButton)
{
return true;
}
// there is no style support for labels & text fields on mobile client
if (name.equals(StaticContentSpecLoader.PROPERTY_STYLECLASS.getPropertyName()))
{
if (GraphicalComponent.class.isAssignableFrom(persistClass))
{
return !isButton;
}
if (Field.class.isAssignableFrom(persistClass))
{
return displayType != Field.CHECKS && displayType != Field.RADIOS && displayType != Field.COMBOBOX && displayType >= 0;
}
if (Part.class.isAssignableFrom(persistClass))
{
return false;
}
return true;
}
if (name.equals(StaticContentSpecLoader.PROPERTY_VALUELISTID.getPropertyName()) && Field.class.isAssignableFrom(persistClass) &&
(displayType == Field.TEXT_FIELD || displayType == Field.TEXT_AREA || displayType == Field.PASSWORD))
{
return true;
}
return false;
}
public static String getDisplayName(String displayName, Class< ? > persistClass)
{
if (displayName.equals("extendsID") && Form.class.isAssignableFrom(persistClass)) //$NON-NLS-1$
{
return "extendsForm"; //$NON-NLS-1$
}
if (displayName.endsWith("CmdMethodID")) //$NON-NLS-1$
{
return displayName.substring(0, displayName.length() - 11);
}
if (displayName.endsWith("MethodID")) //$NON-NLS-1$
{
return displayName.substring(0, displayName.length() - 8);
}
if (displayName.endsWith("ID")) //$NON-NLS-1$
{
return displayName.substring(0, displayName.length() - 2);
}
if (Field.class.isAssignableFrom(persistClass) && displayName.equals("text")) //$NON-NLS-1$
{
return "titleText"; //$NON-NLS-1$
}
return displayName;
}
/**
* @deprecated
*/
@Deprecated
public static String generateCSSText(AbstractRepository repository, Map properties) throws RepositoryException
{
// props == object_type_id -> HashMap(content_id,prop_value)
StringBuffer retval = new StringBuffer();
ContentSpec cs = repository.getContentSpec();
Iterator it = properties.keySet().iterator();
while (it.hasNext())
{
Integer object_type_id = (Integer)it.next();
int ioid = object_type_id.intValue();
HashMap n_v = (HashMap)properties.get(object_type_id);
// map id to a name in cloned map
HashMap values = (HashMap)n_v.clone();
Iterator it2 = n_v.keySet().iterator();
while (it2.hasNext())
{
Integer c_id = (Integer)it2.next();
ContentSpec.Element cse = cs.getElementByContentID(c_id.intValue());
values.put(cse.getName(), n_v.get(c_id));
}
switch (ioid)
{
case IRepository.PORTALS :
{
retval.append("portal\n"); //$NON-NLS-1$
retval.append("{\r\n"); //$NON-NLS-1$
addBGColor(values, retval);
addFGColor(values, retval);
addBorder(values, retval);
retval.append("}\n\n"); //$NON-NLS-1$
break;
}
case IRepository.FIELDS :
{
retval.append("field\n"); //$NON-NLS-1$
retval.append("{\n"); //$NON-NLS-1$
addBGColor(values, retval);
addFGColor(values, retval);
addBorder(values, retval);
addFont(values, retval);
addHAlign(values, retval);
addMargin(values, retval);
retval.append("}\n\n"); //$NON-NLS-1$
break;
}
case IRepository.GRAPHICALCOMPONENTS :
{
retval.append("label\n"); //$NON-NLS-1$
retval.append("{\n"); //$NON-NLS-1$
addBGColor(values, retval);
addFGColor(values, retval);
addBorder(values, retval);
addFont(values, retval);
addHAlign(values, retval);
addVAlign(values, retval);
addMargin(values, retval);
retval.append("}\n\n"); //$NON-NLS-1$
retval.append("button\n"); //$NON-NLS-1$
retval.append("{\n"); //$NON-NLS-1$
addBGColor(values, retval);
addFGColor(values, retval);
addBorder(values, retval);
addFont(values, retval);
addHAlign(values, retval);
addVAlign(values, retval);
addMargin(values, retval);
retval.append("}\n\n"); //$NON-NLS-1$
break;
}
case IRepository.TABS :
{
retval.append("field\n"); //$NON-NLS-1$
retval.append("{\n"); //$NON-NLS-1$
addBGColor(values, retval);
addFGColor(values, retval);
addBorder(values, retval);
retval.append("}\n\n"); //$NON-NLS-1$
break;
}
}
}
if (Debug.tracing())
{
Debug.trace(retval.toString());
}
return retval.toString();
}
private static void addMargin(Map values, StringBuffer retval)
{
String margin = (String)values.get("margin"); //$NON-NLS-1$
if (margin != null)
{
StringTokenizer tk = new StringTokenizer(margin, ","); //$NON-NLS-1$
if (tk.hasMoreTokens())
{
int top = Utils.getAsInteger(tk.nextToken());
int right = Utils.getAsInteger(tk.nextToken());
int bottom = Utils.getAsInteger(tk.nextToken());
int left = Utils.getAsInteger(tk.nextToken());
retval.append("\t"); //$NON-NLS-1$
retval.append("margin: "); //$NON-NLS-1$
retval.append(top);
retval.append("px "); //$NON-NLS-1$
retval.append(right);
retval.append("px "); //$NON-NLS-1$
retval.append(bottom);
retval.append("px "); //$NON-NLS-1$
retval.append(left);
retval.append("px"); //$NON-NLS-1$
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
}
}
}
private static void addHAlign(Map values, StringBuffer retval)
{
String halign = (String)values.get("horizontalAlignment"); //$NON-NLS-1$
if (halign != null)
{
int ihalign = Utils.getAsInteger(halign);
retval.append("\t"); //$NON-NLS-1$
retval.append("text-align: "); //$NON-NLS-1$
if (ihalign == 2)
{
retval.append("left"); //$NON-NLS-1$
}
else if (ihalign == 4)
{
retval.append("right"); //$NON-NLS-1$
}
else
{
retval.append("center"); //$NON-NLS-1$
}
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
}
}
private static void addVAlign(Map values, StringBuffer retval)
{
String valign = (String)values.get("verticalAlignment"); //$NON-NLS-1$
if (valign != null)
{
int ivalign = Utils.getAsInteger(valign);
retval.append("\t"); //$NON-NLS-1$
retval.append("vertical-align: "); //$NON-NLS-1$
if (ivalign == 1)
{
retval.append("text-top"); //$NON-NLS-1$
}
else if (ivalign == 3)
{
retval.append("text-bottom"); //$NON-NLS-1$
}
else
{
retval.append("middle"); //$NON-NLS-1$
}
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
}
}
private static void addFont(Map values, StringBuffer retval)
{
String fontType = (String)values.get("fontType"); //$NON-NLS-1$
if (fontType != null)
{
StringTokenizer tk = new StringTokenizer(fontType, ","); //$NON-NLS-1$
if (tk.countTokens() >= 3)
{
String name = tk.nextToken();
String style = tk.nextToken();
String size = tk.nextToken();
retval.append("\t"); //$NON-NLS-1$
retval.append("font-family: "); //$NON-NLS-1$
retval.append("\""); //$NON-NLS-1$
retval.append(name);
retval.append("\""); //$NON-NLS-1$
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
retval.append("\t"); //$NON-NLS-1$
retval.append("font: "); //$NON-NLS-1$
if ((Utils.getAsInteger(style) & 1) == 1)
{
retval.append("bold "); //$NON-NLS-1$
}
else if ((Utils.getAsInteger(style) & 2) == 2)
{
retval.append("italic "); //$NON-NLS-1$
}
retval.append(size);
retval.append("pt"); //$NON-NLS-1$
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
}
}
}
private static void addBGColor(Map values, StringBuffer retval)
{
String bgcolor = (String)values.get("background"); //$NON-NLS-1$
String transparent = (String)values.get("transparent"); //$NON-NLS-1$
if (bgcolor != null && !"".equals(bgcolor)) //$NON-NLS-1$
{
retval.append("\t"); //$NON-NLS-1$
retval.append("background-color: "); //$NON-NLS-1$
retval.append((Utils.getAsBoolean(transparent) ? "transparent" : bgcolor)); //$NON-NLS-1$
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
}
}
private static void addFGColor(Map values, StringBuffer retval)
{
String fgcolor = (String)values.get("foreground"); //$NON-NLS-1$
if (fgcolor != null)
{
retval.append("\t"); //$NON-NLS-1$
retval.append("color: "); //$NON-NLS-1$
retval.append(fgcolor);
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
}
}
private static void addBorder(Map values, StringBuffer retval)
{
String border = (String)values.get("borderType"); //$NON-NLS-1$
if (border != null)
{
StringTokenizer tk = new StringTokenizer(border, ","); //$NON-NLS-1$
if (tk.hasMoreTokens())
{
try
{
String type = tk.nextToken();
if (type.equals(ComponentFactoryHelper.EMPTY_BORDER))
{
int top = Utils.getAsInteger(tk.nextToken());
int right = Utils.getAsInteger(tk.nextToken());
int bottom = Utils.getAsInteger(tk.nextToken());
int left = Utils.getAsInteger(tk.nextToken());
retval.append("\t"); //$NON-NLS-1$
retval.append("border-color: "); //$NON-NLS-1$
retval.append("transparent"); //$NON-NLS-1$
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
retval.append("\t"); //$NON-NLS-1$
retval.append("border-width: "); //$NON-NLS-1$
retval.append(top);
retval.append("px "); //$NON-NLS-1$
retval.append(right);
retval.append("px "); //$NON-NLS-1$
retval.append(bottom);
retval.append("px "); //$NON-NLS-1$
retval.append(left);
retval.append("px"); //$NON-NLS-1$
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
retval.append("\t"); //$NON-NLS-1$
retval.append("border-style: "); //$NON-NLS-1$
retval.append("solid"); //$NON-NLS-1$
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
}
else if (type.equals(ComponentFactoryHelper.BEVEL_BORDER))
{
int beveltype = Utils.getAsInteger(tk.nextToken());
retval.append("\t"); //$NON-NLS-1$
retval.append("border-style: "); //$NON-NLS-1$
retval.append((beveltype == 0 ? "outset" : "inset")); //$NON-NLS-1$ //$NON-NLS-2$
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
if (tk.hasMoreTokens())
{
String highlightO = tk.nextToken();
if ("null".equals(highlightO)) highlightO = null; //$NON-NLS-1$
String highlightI = tk.nextToken();
if ("null".equals(highlightI)) highlightI = null; //$NON-NLS-1$
String shadowO = tk.nextToken();
if ("null".equals(shadowO)) shadowO = null; //$NON-NLS-1$
String shadowI = tk.nextToken();
if ("null".equals(shadowI)) shadowI = null; //$NON-NLS-1$
if (highlightO != null)
{
retval.append("\t"); //$NON-NLS-1$
retval.append("border-color: "); //$NON-NLS-1$
retval.append(highlightO);
retval.append(" "); //$NON-NLS-1$
retval.append(highlightI);
retval.append(" "); //$NON-NLS-1$
retval.append(shadowO);
retval.append(" "); //$NON-NLS-1$
retval.append(shadowI);
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
}
}
}
else if (type.equals(ComponentFactoryHelper.ETCHED_BORDER))
{
/* int beveltype = */Utils.getAsInteger(tk.nextToken());
/* String highlight = */tk.nextToken();
/* String shadow = */tk.nextToken();
retval.append("\t"); //$NON-NLS-1$
retval.append("border-style: "); //$NON-NLS-1$
retval.append("groove"); //$NON-NLS-1$
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
}
else if (type.equals(ComponentFactoryHelper.LINE_BORDER))
{
int thick = Utils.getAsInteger(tk.nextToken());
String color = tk.nextToken();
if ("null".equals(color)) color = null; //$NON-NLS-1$
if (color != null)
{
retval.append("\t"); //$NON-NLS-1$
retval.append("border-color: "); //$NON-NLS-1$
retval.append(color);
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
}
retval.append("\t"); //$NON-NLS-1$
retval.append("border-style: "); //$NON-NLS-1$
retval.append("solid"); //$NON-NLS-1$
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
retval.append("\t"); //$NON-NLS-1$
retval.append("border-width: "); //$NON-NLS-1$
retval.append(thick);
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
}
else if (type.equals(ComponentFactoryHelper.MATTE_BORDER))
{
int top = Utils.getAsInteger(tk.nextToken());
int right = Utils.getAsInteger(tk.nextToken());
int bottom = Utils.getAsInteger(tk.nextToken());
int left = Utils.getAsInteger(tk.nextToken());
String color = tk.nextToken();
if ("null".equals(color)) color = null; //$NON-NLS-1$
if (color != null)
{
retval.append("\t"); //$NON-NLS-1$
retval.append("border-color: "); //$NON-NLS-1$
retval.append(color);
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
}
retval.append("\t"); //$NON-NLS-1$
retval.append("border-width: "); //$NON-NLS-1$
retval.append(top);
retval.append("px "); //$NON-NLS-1$
retval.append(right);
retval.append("px "); //$NON-NLS-1$
retval.append(bottom);
retval.append("px "); //$NON-NLS-1$
retval.append(left);
retval.append("px"); //$NON-NLS-1$
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
}
else if (type.equals(ComponentFactoryHelper.SPECIAL_MATTE_BORDER))
{
int top = (int)Utils.getAsFloat(tk.nextToken());
int right = (int)Utils.getAsFloat(tk.nextToken());
int bottom = (int)Utils.getAsFloat(tk.nextToken());
int left = (int)Utils.getAsFloat(tk.nextToken());
String topColor = tk.nextToken();
if ("null".equals(topColor)) topColor = null; //$NON-NLS-1$
String rightColor = tk.nextToken();
if ("null".equals(rightColor)) rightColor = null; //$NON-NLS-1$
String bottomColor = tk.nextToken();
if ("null".equals(bottomColor)) bottomColor = null; //$NON-NLS-1$
String leftColor = tk.nextToken();
if ("null".equals(leftColor)) leftColor = null; //$NON-NLS-1$
if (topColor != null)
{
retval.append("\t"); //$NON-NLS-1$
retval.append("border-color: "); //$NON-NLS-1$
retval.append(topColor);
retval.append(" "); //$NON-NLS-1$
retval.append(rightColor);
retval.append(" "); //$NON-NLS-1$
retval.append(bottomColor);
retval.append(" "); //$NON-NLS-1$
retval.append(leftColor);
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
}
retval.append("\t"); //$NON-NLS-1$
retval.append("border-width: "); //$NON-NLS-1$
retval.append(top);
retval.append("px "); //$NON-NLS-1$
retval.append(right);
retval.append("px "); //$NON-NLS-1$
retval.append(bottom);
retval.append("px "); //$NON-NLS-1$
retval.append(left);
retval.append("px"); //$NON-NLS-1$
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
retval.append("\t"); //$NON-NLS-1$
retval.append("border-style: "); //$NON-NLS-1$
retval.append("solid"); //$NON-NLS-1$
retval.append(";"); //$NON-NLS-1$
retval.append("\n"); //$NON-NLS-1$
}
}
catch (Exception ex)
{
Debug.error(ex);
}
}
}
}
}