package er.directtoweb.components; import java.util.Enumeration; import com.webobjects.appserver.WOContext; import com.webobjects.appserver.WODisplayGroup; import com.webobjects.directtoweb.D2WComponent; import com.webobjects.directtoweb.D2WContext; import com.webobjects.eocontrol.EOEnterpriseObject; import com.webobjects.foundation.NSArray; import com.webobjects.foundation.NSDictionary; import com.webobjects.foundation.NSMutableArray; import com.webobjects.foundation.NSMutableDictionary; import er.directtoweb.ERD2WContextDictionary.Configuration; import er.extensions.appserver.ERXWOContext; /** * Given a configured D2WContext ((entity+task or pageconfig) and propertyKey) and * - depending on task - d2wContext.object or displayGroup displays all the * available components together with their configuration info. As this info is pulled from * the d2wclientConfiguration.plist, it is of high importance that you keep these files up to date. * They are also used by the D2WAssistant and ERD2Ws component debugging features. * * @author ak * @d2wKey object */ public class ERD2WCheatSheet extends D2WComponent { /** * Do I need to update serialVersionUID? * See section 5.6 <cite>Type Changes Affecting Serialization</cite> on page 51 of the * <a href="http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf">Java Object Serialization Spec</a> */ private static final long serialVersionUID = 1L; public static Configuration configuration; public String currentComponentName; public String currentEditorKey; public ERD2WCheatSheet(WOContext context) { super(context); if (configuration == null) { configuration = new Configuration(); } } @Override public boolean synchronizesVariablesWithBindings() { return false; } @Override public D2WContext localContext() { _localContext = (D2WContext) valueForBinding("localContext"); return _localContext; } @Override public D2WContext d2wContext() { return localContext(); } @Override public EOEnterpriseObject object() { return (EOEnterpriseObject) d2wContext().valueForKey("object"); } public WODisplayGroup displayGroup() { return (WODisplayGroup) valueForBinding("displayGroup"); } public NSArray keys() { NSMutableArray result = new NSMutableArray(d2wContext().componentsAvailable().toArray()); result.remove("ERD2WCustomComponentWithArgs"); result.remove("ERD2WStatelessCustomComponentWithArgs"); result.remove("D2WCustomComponent"); result.remove("D2WCustomQueryComponent"); //result.remove("ERDEditStringWithChoices"); //result.remove("ERDDisplayYearsMonths"); result = (NSMutableArray) result.valueForKey("@unique"); return result; } public NSDictionary editors() { NSMutableDictionary result = new NSMutableDictionary(); NSArray editors = (NSArray) componentConfiguration().objectForKey("editors"); if (editors != null) { for (Enumeration iter = editors.objectEnumerator(); iter.hasMoreElements();) { String key = (String) iter.nextElement(); NSDictionary dict = (NSDictionary) configuration.editors().objectForKey(key); if (dict != null) { result.setObjectForKey(dict, key); } } } return result; } public NSDictionary currentEditor() { return (NSDictionary) editors().objectForKey(currentEditorKey); } public Object currentContextValue() { return d2wContext().valueForKey(currentEditorKey); } public String componentName() { String result = currentComponentName; return d2wContext().componentName(); } public NSDictionary componentConfiguration() { return (NSDictionary) configuration.components().objectForKey(componentName()); } public void setComponentName(String value) { currentComponentName = value; d2wContext().takeValueForKey(currentComponentName, "componentName"); d2wContext().takeValueForKey(currentComponentName, "displayNameForProperty"); String key = "contextDictionary." + d2wContext().dynamicPage(); ERXWOContext.contextDictionary().removeObjectForKey(key); } public boolean useObject() { String task = d2wContext().task(); return "inspect".equals(task) || "edit".equals(task); } public boolean useDisplayGroup() { String task = d2wContext().task(); return "list".equals(task) || "query".equals(task) || "select".equals(task); } }