You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by we...@apache.org on 2005/06/13 18:49:52 UTC
svn commit: r190427 - in /portals/jetspeed-2/trunk/applications/pam/src:
java/org/apache/jetspeed/portlets/entityeditor/ webapp/WEB-INF/view/pemp/
webapp/javascript/
Author: weaver
Date: Mon Jun 13 09:49:51 2005
New Revision: 190427
URL: http://svn.apache.org/viewcvs?rev=190427&view=rev
Log:
JS2-283: A portlet entity preference editor written using Ajax approach.
It's not the next killer app, but it gives a good example of how to use
Ajax services in J2.
Added:
portals/jetspeed-2/trunk/applications/pam/src/java/org/apache/jetspeed/portlets/entityeditor/PortletEntityBrowserPortlet.java
portals/jetspeed-2/trunk/applications/pam/src/java/org/apache/jetspeed/portlets/entityeditor/PortletEntityEditorPortlet.java
portals/jetspeed-2/trunk/applications/pam/src/webapp/WEB-INF/view/pemp/browser_view.vm
portals/jetspeed-2/trunk/applications/pam/src/webapp/WEB-INF/view/pemp/editor_view.vm
portals/jetspeed-2/trunk/applications/pam/src/webapp/javascript/ajax.js
Added: portals/jetspeed-2/trunk/applications/pam/src/java/org/apache/jetspeed/portlets/entityeditor/PortletEntityBrowserPortlet.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/pam/src/java/org/apache/jetspeed/portlets/entityeditor/PortletEntityBrowserPortlet.java?rev=190427&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/applications/pam/src/java/org/apache/jetspeed/portlets/entityeditor/PortletEntityBrowserPortlet.java (added)
+++ portals/jetspeed-2/trunk/applications/pam/src/java/org/apache/jetspeed/portlets/entityeditor/PortletEntityBrowserPortlet.java Mon Jun 13 09:49:51 2005
@@ -0,0 +1,113 @@
+package org.apache.jetspeed.portlets.entityeditor;
+
+import java.io.IOException;
+import java.util.Collection;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletContext;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+
+import org.apache.jetspeed.CommonPortletServices;
+import org.apache.jetspeed.components.portletentity.PortletEntityAccessComponent;
+import org.apache.jetspeed.components.portletentity.PortletEntityNotStoredException;
+import org.apache.jetspeed.components.portletregistry.PortletRegistry;
+import org.apache.pluto.om.entity.PortletEntity;
+import org.apache.pluto.om.portlet.PortletDefinition;
+import org.apache.portals.bridges.velocity.GenericVelocityPortlet;
+import org.apache.velocity.context.Context;
+
+public class PortletEntityBrowserPortlet extends GenericVelocityPortlet
+{
+
+ private PortletEntityAccessComponent entityAccess;
+ private PortletRegistry registry;
+
+
+ /* (non-Javadoc)
+ * @see org.apache.portals.bridges.velocity.GenericVelocityPortlet#init(javax.portlet.PortletConfig)
+ */
+ public void init(PortletConfig config) throws PortletException
+ {
+ super.init(config);
+ PortletContext context = getPortletContext();
+ entityAccess = (PortletEntityAccessComponent)context.getAttribute(CommonPortletServices.CPS_ENTITY_ACCESS_COMPONENT);
+ registry = (PortletRegistry)context.getAttribute(CommonPortletServices.CPS_REGISTRY_COMPONENT);
+ }
+
+ public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException
+ {
+ Collection portletApps = registry.getPortletApplications();
+ Context context = getContext(request);
+ context.put("portletApps", portletApps);
+ context.put("entityAccess", entityAccess);
+ context.put("portletContext", getPortletContext());
+ super.doView(request, response);
+ }
+
+ protected final void doCreate(ActionRequest request, ActionResponse response) throws PortletException
+ {
+ try
+ {
+ PortletDefinition pd = getPortletDefintion(request);
+ String newId = request.getParameter("newEntityId");
+ PortletEntity entity = null;
+
+ if(newId != null)
+ {
+ entity = entityAccess.newPortletEntityInstance(pd, newId);
+ }
+ else
+ {
+ entity = entityAccess.newPortletEntityInstance(pd);
+ }
+
+ entityAccess.storePortletEntity(entity);
+ }
+ catch (PortletEntityNotStoredException e)
+ {
+ throw new PortletException(e.getMessage(), e);
+ }
+ catch (PortletException e)
+ {
+ throw new PortletException(e.getMessage(), e);
+ }
+ }
+
+ protected final PortletDefinition getPortletDefintion(ActionRequest request) throws PortletException
+ {
+ String portletUniqueName = request.getParameter("selectedPortlet");
+ if(portletUniqueName == null)
+ {
+ throw new PortletException("There was no 'portletUniqueName' parameter specified in the request.");
+ }
+ else
+ {
+ return registry.getPortletDefinitionByUniqueName(portletUniqueName);
+ }
+ }
+
+ public void processAction(ActionRequest request, ActionResponse actionResponse) throws PortletException, IOException
+ {
+ String action = request.getParameter("action");
+
+ if(action == null)
+ {
+ throw new PortletException("Requires that action either be 'edit' or 'create'");
+ }
+ else if(action.equals("create"))
+ {
+ doCreate(request, actionResponse);
+ }
+ else
+ {
+ throw new PortletException("Requires that action to be 'create'");
+ }
+ }
+
+
+
+}
Added: portals/jetspeed-2/trunk/applications/pam/src/java/org/apache/jetspeed/portlets/entityeditor/PortletEntityEditorPortlet.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/pam/src/java/org/apache/jetspeed/portlets/entityeditor/PortletEntityEditorPortlet.java?rev=190427&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/applications/pam/src/java/org/apache/jetspeed/portlets/entityeditor/PortletEntityEditorPortlet.java (added)
+++ portals/jetspeed-2/trunk/applications/pam/src/java/org/apache/jetspeed/portlets/entityeditor/PortletEntityEditorPortlet.java Mon Jun 13 09:49:51 2005
@@ -0,0 +1,162 @@
+package org.apache.jetspeed.portlets.entityeditor;
+
+import java.io.IOException;
+import java.util.Arrays;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletContext;
+import javax.portlet.PortletException;
+
+import org.apache.jetspeed.CommonPortletServices;
+import org.apache.jetspeed.components.portletentity.PortletEntityAccessComponent;
+import org.apache.jetspeed.components.portletentity.PortletEntityNotStoredException;
+import org.apache.jetspeed.components.portletregistry.PortletRegistry;
+import org.apache.jetspeed.om.common.preference.PreferenceComposite;
+import org.apache.jetspeed.om.common.preference.PreferenceSetComposite;
+import org.apache.pluto.om.entity.PortletEntity;
+import org.apache.portals.bridges.velocity.GenericVelocityPortlet;
+
+public class PortletEntityEditorPortlet extends GenericVelocityPortlet
+{
+
+ private PortletEntityAccessComponent entityAccess;
+ private PortletRegistry registry;
+
+ /* (non-Javadoc)
+ * @see org.apache.portals.bridges.velocity.GenericVelocityPortlet#init(javax.portlet.PortletConfig)
+ */
+ public void init(PortletConfig config) throws PortletException
+ {
+ super.init(config);
+ PortletContext context = getPortletContext();
+ entityAccess = (PortletEntityAccessComponent)context.getAttribute(CommonPortletServices.CPS_ENTITY_ACCESS_COMPONENT);
+ registry = (PortletRegistry)context.getAttribute(CommonPortletServices.CPS_REGISTRY_COMPONENT);
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.portals.bridges.velocity.GenericVelocityPortlet#processAction(javax.portlet.ActionRequest, javax.portlet.ActionResponse)
+ */
+ public void processAction(ActionRequest request, ActionResponse response) throws PortletException, IOException
+ {
+ String action = request.getParameter("action");
+
+ if(action == null)
+ {
+ throw new PortletException("This editor requires an action parameter");
+ }
+ else if(action.equals("updateValue"))
+ {
+ doUpdateValue(request, response);
+ }
+ else if(action.equals("addValue"))
+ {
+ doAddValue(request, response);
+ }
+ else if(action.equals("removeValue"))
+ {
+ doRemoveValue(request, response);
+ }
+ else if(action.equals("addPref"))
+ {
+ doAddPref(request, response);
+ }
+ else if(action.equals("removePref"))
+ {
+ doRemovePref(request, response);
+ }
+ else
+ {
+ throw new PortletException("'"+action+"' is not a valid editor action.");
+ }
+ }
+
+ protected final void doAddPref(ActionRequest request, ActionResponse response) throws PortletException
+ {
+ PortletEntity entity = getPortletEntity(request);
+ String newName = request.getParameter("newPreferenceName");
+ if(newName == null || newName.length() < 1)
+ {
+ throw new PortletException("You must specify a name for a new preference.");
+ }
+
+ String[] newValues = request.getParameterValues("newPreferenceValue");
+ if(newValues == null || newValues.length == 0)
+ {
+ throw new PortletException("You must specfiy a value for the new preference "+newName);
+ }
+
+ PreferenceSetComposite prefSet = (PreferenceSetComposite) entity.getPreferenceSet();
+ prefSet.add(newName, Arrays.asList(newValues));
+ try
+ {
+ entityAccess.storePortletEntity(entity);
+ }
+ catch (PortletEntityNotStoredException e)
+ {
+ throw new PortletException(e.getMessage(), e);
+ }
+ }
+
+ protected final void doAddValue(ActionRequest request, ActionResponse response) throws PortletException
+ {
+ PortletEntity entity = getPortletEntity(request);
+ String prefString= request.getParameter("selectedPref");
+ String newValue = request.getParameter("newPrefValue");
+ String prefName = prefString.split("::")[1];
+ PreferenceComposite pref = (PreferenceComposite) entity.getPreferenceSet().get(prefName);
+ pref.addValue(newValue);
+ }
+
+ protected final void doRemovePref(ActionRequest request, ActionResponse response) throws PortletException
+ {
+ PortletEntity entity = getPortletEntity(request);
+ String prefString= request.getParameter("selectedPref");
+ String prefName = prefString.split("::")[1];
+ ((PreferenceSetComposite)entity.getPreferenceSet()).remove(prefName);
+
+ }
+
+ protected final void doUpdateValue(ActionRequest request, ActionResponse response) throws PortletException
+ {
+ PortletEntity entity = getPortletEntity(request);
+ String prefString= request.getParameter("selectedPref");
+ String updatedValue = request.getParameter("selectedPrefValue");
+ if(updatedValue.trim().length() == 0)
+ {
+ throw new PortletException("Preference values cannot be empty.");
+ }
+ String[] info = prefString.split("::");
+ String prefName = info[1];
+ int valueIndex = Integer.parseInt(info[2]);
+ PreferenceComposite pref = (PreferenceComposite) entity.getPreferenceSet().get(prefName);
+ pref.setValueAt(valueIndex, updatedValue);
+ }
+
+ protected final void doRemoveValue(ActionRequest request, ActionResponse response) throws PortletException
+ {
+ PortletEntity entity = getPortletEntity(request);
+ String prefString= request.getParameter("selectedPref");
+ String updatedValue = request.getParameter("selectedPrefValue");
+ String[] info = prefString.split("::");
+ String prefName = info[1];
+ int valueIndex = Integer.parseInt(info[2]);
+ PreferenceComposite pref = (PreferenceComposite) entity.getPreferenceSet().get(prefName);
+ pref.removeValueAt(valueIndex);
+ }
+
+
+ protected final PortletEntity getPortletEntity(ActionRequest request) throws PortletException
+ {
+ String entityId = request.getParameter("portletEntityId");
+ if(entityId == null)
+ {
+ throw new PortletException("There was no 'entityId' parameter specified in the request.");
+ }
+ else
+ {
+ return entityAccess.getPortletEntity(entityId);
+ }
+ }
+}
Added: portals/jetspeed-2/trunk/applications/pam/src/webapp/WEB-INF/view/pemp/browser_view.vm
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/pam/src/webapp/WEB-INF/view/pemp/browser_view.vm?rev=190427&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/applications/pam/src/webapp/WEB-INF/view/pemp/browser_view.vm (added)
+++ portals/jetspeed-2/trunk/applications/pam/src/webapp/WEB-INF/view/pemp/browser_view.vm Mon Jun 13 09:49:51 2005
@@ -0,0 +1,106 @@
+#set($locale = $request.locale)
+
+<script language="javascript" src="${request.contextPath}/javascript/ajax.js"></script>
+
+<script language="javascript">
+
+var currentApp;
+
+
+function Portlet(portletId, title)
+{
+ this.portletId = portletId;
+ this.title = title;
+ this.asOption = new Option("("+this.portletId+") "+this.title , this.portletId);
+ this.portletEntites = new Array();
+}
+
+function onAppSelected(app)
+{
+ hide("PortletEntityEditor");
+ currentApp = app;
+ var sList = document.getElementById("selectedPortlet");
+
+ //Clear out all old options
+ var optsLen = sList.options.length;
+
+ for(i=0; i<optsLen; i++)
+ {
+ sList.remove(0);
+ }
+
+ //add in new options
+ new PortletDefinitionLoader("selectedPortlet").load(app);
+
+ hide("selectEntityBlock,createEntityButton");
+ show("selectPortletBlock");
+}
+
+function onPortletSelected(portlet)
+{
+ hide("PortletEntityEditor");
+ var sList = document.getElementById("selectedEntity");
+
+ //Clear out all old options
+ var optsLen = sList.options.length;
+
+ for(i=0; i<optsLen; i++)
+ {
+ sList.remove(0);
+ }
+
+ //add in new options
+ PortletEntityLoader
+ entityLoader = new PortletEntityLoader("selectedEntity", "selectEntityBlock");
+ entityLoader.load(portlet);
+
+ show("createEntityButton");
+}
+
+function onEntitySelected(entity)
+{
+ var editButton = document.getElementById("editEntityButton");
+ var entityAccess = new InitEntityEditor("portletEntityId", "selectedPref", "entityIdLabel");
+ entityAccess.load(entity);
+ show("PortletEntityEditor");
+}
+
+
+</script>
+
+
+#set($createUrl = $renderResponse.createActionURL())
+$!createUrl.setParameter("action", "create")
+
+<form name="appSelection" method="post" action="${createUrl}">
+
+<h2 class="portlet-section-header">Portlet Entity Browser</h2>
+
+<h3 class="portlet-section-subheader">Choose a Portlet Application...</h3>
+
+<select id="portletApp" name="portletApp" style="width:350px;" size="6" onChange="onAppSelected(this.options[this.selectedIndex].value);">
+
+</select>
+
+<div id="selectPortletBlock" style="display:none">
+ <h3 class="portlet-section-subheader">Choose a Portlet...</h3>
+
+ <select class="portlet-form-field-label" id="selectedPortlet" name="selectedPortlet" style="width:350px;" size="6" onChange="onPortletSelected(this.options[this.selectedIndex].value)">
+ </select>
+ <br />
+ <input type="submit" class="portlet-form-button" id="createEntityButton" name="createEntityButton" style="display:none" value="Create New Portlet Enitity"/>
+</div>
+
+<div id="selectEntityBlock" style="display:none">
+ <h3 class="portlet-section-subheader">Choose a Portlet Entity to Edit...</h3>
+ <select class="portlet-form-field-label" id="selectedEntity" name="selectedEntity" style="width:350px;" size="6" onChange="onEntitySelected(this.options[this.selectedIndex].value)"></select>
+ <br />
+ <input type="button" class="portlet-form-button" id="editEntityButton" name="editEntityButton" style="display:none" value="Edit Portlet Enitity"/>
+</div>
+
+</form>
+
+<script>
+new PortletAppLoader("portletApp");
+
+</script>
\ No newline at end of file
Added: portals/jetspeed-2/trunk/applications/pam/src/webapp/WEB-INF/view/pemp/editor_view.vm
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/pam/src/webapp/WEB-INF/view/pemp/editor_view.vm?rev=190427&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/applications/pam/src/webapp/WEB-INF/view/pemp/editor_view.vm (added)
+++ portals/jetspeed-2/trunk/applications/pam/src/webapp/WEB-INF/view/pemp/editor_view.vm Mon Jun 13 09:49:51 2005
@@ -0,0 +1,77 @@
+<script language="javascript">
+
+function onPrefEntrySelected(selectedOption)
+{
+ var sVal = selectedOption.value.split("::");
+ if(sVal[0] == "prefvalue")
+ {
+ document.getElementById("addPrefValueBlock").style.display="none";
+ document.getElementById("editPrefValueBlock").style.display="inline";
+ document.getElementById("selectedPrefValue").value=sVal[3];
+ }
+ else if(sVal[0] == "pref")
+ {
+ document.getElementById("addPrefValueBlock").style.display="inline";
+ document.getElementById("editPrefValueBlock").style.display="none"
+ }
+ else
+ {
+ document.getElementById("editPrefValueBlock").style.display="none"
+ document.getElementById("addPrefValueBlock").style.display="none";
+ }
+
+}
+
+function onRemovePref()
+{
+ if(confirm("Are you sure you want to delete this preference?"))
+ {
+ getElement('EditFormAction').value='removePref';
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+</script>
+
+#set($url = $renderResponse.createActionURL())
+
+<div id="PortletEntityEditor" style="display:none">
+ <p>
+ <span style="font-weight: bold">You are Editing Entity: </span><span id="entityIdLabel"></span>
+ </p>
+ <form name="EditForm" method="POST" action="${url}">
+ <input type="hidden" id="EditFormAction" name="action" />
+ <input type="hidden" id="portletEntityId" name="portletEntityId" />
+ <h2 class="portlet-section-subheader">Add New Preference</h2>
+ Name: <input class="portlet-form-field-label" type="text" id="newPreferenceName" name="newPreferenceName" onKeyUp="enableIfComplete('newPreferenceName,newPreferenceValue', 'addPrefButton');" />
+ <br/>
+ Value: <input class="portlet-form-field-label" type="text" id="newPreferenceValue" name="newPreferenceValue" onKeyUp="enableIfComplete('newPreferenceName,newPreferenceValue', 'addPrefButton');" />
+ <br/>
+ <input type="Submit" value="Done" class="portlet-form-button" id="addPrefButton" style="display:none;" onClick="this.form.elements['action'].value='addPref'"/>
+
+ <h2 class="portlet-section-subheader">Update Existing Prefences</h2>
+ <select size="4" class="portlet-form-field-label" name="selectedPref" id="selectedPref" style="width:350px;" onChange="onPrefEntrySelected(this.options[this.selectedIndex]);"></select>
+
+
+ <div id="editPrefValueBlock" style="display:none">
+ <p>
+ <input type="text" class="portlet-form-field-label" name="selectedPrefValue" id="selectedPrefValue" onKeyUp="enableIfComplete('selectedPrefValue', 'updatePrefValueButton');"/>
+ <input type="submit" id="updatePrefValueButton" value="Update Value" class="portlet-form-button" onClick="this.form.elements['action'].value='updateValue'" />
+ <input type="submit" value="Remove Value" class="portlet-form-button" onClick="this.form.elements['action'].value='removeValue'" />
+ </p>
+ </div>
+
+ <div id="addPrefValueBlock" style="display:none">
+ <p>
+ <span style="font-weight: bold">New Value:</span>
+ <input type="text" class="portlet-form-field-label" name="newPrefValue" id="newPrefValue" onKeyUp="enableIfComplete('newPrefValue', 'addValueButton');"/>
+ <input type="submit" class="portlet-form-button" id="addValueButton" value="Add Value" style="display:none;" onClick="this.form.elements['action'].value='addValue'" />
+ <input type="submit" class="portlet-form-button" id="removePrefButton" value="Remove Preference " onClick="return onRemovePref();" />
+ </p>
+ </div>
+ </form>
+</div>
\ No newline at end of file
Added: portals/jetspeed-2/trunk/applications/pam/src/webapp/javascript/ajax.js
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/pam/src/webapp/javascript/ajax.js?rev=190427&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/applications/pam/src/webapp/javascript/ajax.js (added)
+++ portals/jetspeed-2/trunk/applications/pam/src/webapp/javascript/ajax.js Mon Jun 13 09:49:51 2005
@@ -0,0 +1,341 @@
+/**
+ * Browser independent XMLHttpRequestLoader
+ */
+function XMLHttpRequestCaller(url, caller)
+{
+ this.url = url;
+ this.caller = caller;
+
+ this.serviceRequest = function()
+ {
+ // branch for native XMLHttpRequest object
+ var _caller = this.caller;
+ var _url = this.url;
+
+ xmlRequest = getHTTPObject();
+ xmlRequest.onreadystatechange = function()
+ {
+ if (xmlRequest.readyState == 4)
+ {
+ // only if "OK"
+ if (xmlRequest.status == 200)
+ {
+ _caller.invoke(xmlRequest);
+ }
+ else
+ {
+ alert("There was a problem retrieving the XML data:\n" + xmlRequest.statusText +
+ " for url: \n" + _url);
+ }
+ }
+ };
+
+ xmlRequest.open("GET", _url, true);
+ xmlRequest.send(null);
+ }
+}
+
+
+function PortletAppLoader(elementId)
+{
+
+
+ this.invoke = function(xmlRequest)
+ {
+
+ response = xmlRequest.responseXML.documentElement;
+ portletApps = response.getElementsByTagName('portletApp');
+ list = document.getElementById(elementId);
+ for(i=0; i<portletApps.length; i++)
+ {
+ name = new EZDom(portletApps[i]).getChildValue('name');
+ list.options[i] = new Option(name, name);
+ }
+ }
+
+ var requestCaller = new XMLHttpRequestCaller("/jetspeed/ajax/portlet_apps.ajax?ajax_service=portletRegistry.getPortletApplications" ,this);
+ requestCaller.serviceRequest();
+}
+
+function PortletDefinitionLoader(elementId)
+{
+
+ this.appName;
+
+ this.invoke = function(xmlRequest)
+ {
+
+ response = xmlRequest.responseXML.documentElement;
+ portletDefs = response.getElementsByTagName('portletDefinition');
+ list = document.getElementById(elementId);
+ for(i=0; i<portletDefs.length; i++)
+ {
+ name = new EZDom(portletDefs[i]).getChildValue('name');
+ list.options[i] = new Option(name, this.appName+"::"+name);
+ }
+ }
+
+ this.load = function(appName)
+ {
+ this.appName = appName;
+ var requestCaller = new XMLHttpRequestCaller("/jetspeed/ajax/portlet_definitions.ajax?ajax_service=portletRegistry.getPortletApplication&ajax_param_0_str="+appName ,this);
+ requestCaller.serviceRequest();
+ }
+}
+
+function PortletEntityLoader(elementId, blockId)
+{
+
+ this.invoke = function(xmlRequest)
+ {
+ response = xmlRequest.responseXML.documentElement;
+ portletEntities = response.getElementsByTagName('portletEntity');
+ list = document.getElementById(elementId);
+ hasEntities=false;
+ for(i=0; i<portletEntities.length; i++)
+ {
+ id = new EZDom(portletEntities[i]).getChildValue('id');
+ list.options[i] = new Option(id, id);
+ hasEntities = true;
+ }
+
+ if(hasEntities && blockId)
+ {
+ show(blockId);
+ }
+ else if( blockId )
+ {
+ hide(blockId);
+ }
+ }
+
+ this.load = function(portletName)
+ {
+ var requestCaller = new XMLHttpRequestCaller("/jetspeed/ajax/portlet_entities.ajax?ajax_service=entityAccess.getPortletEntities&ajax_param_0_str="+portletName ,this);
+ requestCaller.serviceRequest();
+ }
+}
+
+function InitEntityEditor(nameId, prefListId, labelId)
+{
+ this.nameId = nameId;
+ this.prefListId = prefListId;
+ this.labelId = labelId;
+
+ this.invoke = function(xmlRequest)
+ {
+ var portletEntity = new PortletEntity(xmlRequest.responseXML.documentElement);
+ var nameElem = getElement(this.nameId);
+ nameElem.value = portletEntity.getId();
+ var list = getElement(this.prefListId);
+ var prefs = portletEntity.getPreferences();
+ var indent = String.fromCharCode(160, 160, 160, 160);
+ var cIndex = 0;
+ clearList(list);
+ for(var i=0; i<prefs.length; i++)
+ {
+ var pref = prefs[i];
+
+ list.options[cIndex] = new Option(pref.getName(), "pref::"+pref.getName());
+
+ cIndex++;
+ list.options[cIndex] = new Option(indent+" ------------------------- Values for "+pref.getName()+" -------------------------");
+
+ var values = pref.getValues();
+ for(j=0; j<values.length; j++)
+ {
+ ++cIndex;
+ list.options[cIndex] = new Option(indent+values[j], "prefvalue::"+pref.getName()+"::"+j+"::"+values[j]);
+ }
+
+ ++cIndex;
+
+ }
+
+ setHTML(this.labelId, portletEntity.getId());
+ }
+
+ this.load = function(entityName)
+ {
+ var requestCaller = new XMLHttpRequestCaller("/jetspeed/ajax/portlet_entity.ajax?ajax_service=entityAccess.getPortletEntity&ajax_param_0_str="+entityName,this);
+ requestCaller.serviceRequest();
+ }
+
+
+}
+
+function EZDom(anElement)
+{
+ this.anElement = anElement;
+
+ this.getChildValue = function(name)
+ {
+ return this.anElement.getElementsByTagName(name)[0].firstChild.data;
+ }
+}
+
+function PortletEntity(element)
+{
+ this.parentClass = EZDom;
+ this.parentClass(element);
+ this.prefs = new Array();
+
+ var prefElements = element.getElementsByTagName('preference');
+ for(i=0; i<prefElements.length; i++)
+ {
+ this.prefs[i] = new Preference(prefElements[i]);
+ }
+
+ this.getId = function()
+ {
+ return this.getChildValue('id');
+ }
+
+ this.getPreferences = function()
+ {
+ return this.prefs;
+ }
+}
+
+function Preference(element)
+{
+ this.parentClass = EZDom;
+ this.parentClass(element);
+
+ this.getName = function()
+ {
+ return this.getChildValue('name');
+ }
+
+ this.getValues = function()
+ {
+ var valueElements = this.anElement.getElementsByTagName('value');
+ var values = new Array(valueElements.length);
+ for(i=0; i<valueElements.length; i++)
+ {
+ values[i] = valueElements[i].firstChild.data;
+ }
+ return values;
+ }
+}
+
+
+
+function clearList(selectList)
+{
+ for(i=0; i<selectList.length; i++)
+ {
+ selectList.options[i] = null;
+ }
+}
+
+function hide(elementIds)
+{
+ var elementArrayId = elementIds.split(",");
+ for(i=0; i<elementArrayId.length; i++)
+ {
+ getElement(elementArrayId[i]).style.display="none";
+ }
+}
+
+function show(elementIds)
+{
+ var elementArrayId = elementIds.split(",");
+ for(i=0; i<elementArrayId.length; i++)
+ {
+ getElement(elementArrayId[i]).style.display="inline";
+ }
+}
+
+function getElement(eid)
+{
+ return document.getElementById(eid);
+}
+
+function setHTML(eid, htmlValue)
+{
+ getElement(eid).innerHTML = htmlValue;
+}
+
+function enableIfComplete(valuesToCheck, elementsToShow)
+{
+ var checkArray = valuesToCheck.split(",");
+ var ok = false;
+ for(i=0; i<checkArray.length; i++)
+ {
+ var checkValue = getElement(checkArray[i]).value;
+ if(checkValue.length > 0 && isNotWhiteSpace(checkValue))
+ {
+ ok = true;
+ }
+ else
+ {
+ ok = false;
+ break;
+ }
+
+ }
+
+ var enableArray = elementsToShow.split(",");
+ for(i=0; i<enableArray.length; i++)
+ {
+ if(ok)
+ {
+ getElement(enableArray[i]).style.display="inline";
+ }
+ else
+ {
+ getElement(enableArray[i]).style.display="none";
+ }
+ }
+}
+
+function isNotWhiteSpace(value)
+{
+ var regex = /^\s*$/i;
+ return !regex.test(value);
+}
+
+function trim(value)
+{
+ return value.replace(/^(\s+)?(.*\S)(\s+)?$/, '$2')
+}
+
+
+/** Cross browser XMLHttpObject creator */
+function getHTTPObject()
+{
+ var xmlhttp;
+ /*@cc_on
+ @if (@_jscript_version >= 5)
+ try
+ {
+ xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
+ } catch (e)
+ {
+ try
+ {
+ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
+ }
+ catch (E)
+ {
+ xmlhttp = false;
+ }
+ }
+ @else
+ xmlhttp = false;
+ @end @*/
+ if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
+ try
+ {
+ xmlhttp = new XMLHttpRequest();
+ }
+ catch (e)
+ {
+ xmlhttp = false;
+ }
+ }
+ return xmlhttp;
+}
+
+
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org