taylor 2004/10/20 18:45:50 Modified: applications/pam/src/webapp/WEB-INF/view profiler-admin.jsp applications/pam/src/java/org/apache/jetspeed/portlets/profiler ProfileRulesExtent.java ProfileRuleForm.java applications/pam/src/webapp/WEB-INF faces-config.xml portlet.xml Added: applications/pam/src/webapp/WEB-INF/view profiler-help.html profiler-criterion.jsp applications/pam/src/java/org/apache/jetspeed/portlets/profiler/resources ProfilerResources.properties applications/pam/src/java/org/apache/jetspeed/portlets/profiler ProfileCriterionForm.java Log: Profiler Admin basic operations completed. Its pretty ugly, but my first real MyFaces-bridged portlet. Most JSF operations seem to be functioning including navigations, beans, keeping state. Having an issue with validation message not printing I really need to spend some time working on the styles and layouts. Its pretty damn ugly. Problem is my designer skills are crap. If anyone is willing to help me out here, I think we set a precedent for style and use it in other admin portlets... Revision Changes Path 1.7 +83 -35 jakarta-jetspeed-2/applications/pam/src/webapp/WEB-INF/view/profiler-admin.jsp Index: profiler-admin.jsp =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/applications/pam/src/webapp/WEB-INF/view/profiler-admin.jsp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- profiler-admin.jsp 15 Oct 2004 21:46:46 -0000 1.6 +++ profiler-admin.jsp 21 Oct 2004 01:45:50 -0000 1.7 @@ -1,5 +1,3 @@ -<%@ page import="net.sourceforge.myfaces.custom.tree.DefaultMutableTreeNode, - net.sourceforge.myfaces.custom.tree.model.DefaultTreeModel"%> <%@ page session="true" contentType="text/html;charset=utf-8"%> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> @@ -23,59 +21,109 @@ */ //--> -<link href='css/security-admin.css' type='text/css'/> +<f:loadBundle basename="org.apache.jetspeed.portlets.profiler.resources.ProfilerResources" var="MESSAGE" /> <f:view> <h:panelGrid columns='2'> <h:panelGroup> <h:dataTable value="#{rules.extent}" - var="erule" + var="mRule" styleClass="portlet-section-body" - headerClass="portlet-form-button" - rowClasses="portlet-menu-item-selected,portlet-MintyBlue" + headerClass="portlet-section-subheader" > <h:column> <f:facet name="header"> - <h:outputText value="Rule Id" /> + <h:outputText styleClass='portlet-section-header' value="#{MESSAGE['profiler.title.rules']}" /> </f:facet> <x:commandLink actionListener="#{rule.listen}" immediate="true" > - <h:outputText value="#{erule.id}" /> - <f:param name='selectedRule' value="#{erule.id}"/> + <h:outputText value="#{mRule.id}" /> + <f:param name='selectedRule' value="#{mRule.id}"/> </x:commandLink> </h:column> - - <h:column> - <f:facet name="header"> - <h:outputText value="Description" - style="font-weight: bold"/> - </f:facet> - <h:outputText value='#{erule.title}'/> - </h:column> - <h:column> - <h:selectBooleanCheckbox value="false"/> - </h:column> </h:dataTable> </h:panelGroup> -<h:panelGroup> +<h:panelGroup rendered="#{rule != null && rule.id != '{empty}'}"> + <h:form id="ruleForm" name="ruleForm"> - <h:panelGrid columns="2" > - <f:facet name="header"> - <h:outputText id="cfH" value="Edit Rule"/> - </f:facet> - <f:facet name="footer"> - <h:outputText value="End"/> - </f:facet> - - <h:outputLabel for="title" value="Title"/> - <h:panelGroup> - <h:inputText id="title" value="#{rule.title}" required="true" /> - <h:message for="title" styleClass="error" showDetail="true" showSummary="false" /> - </h:panelGroup> + <h:panelGrid columns="3"> - </h:panelGrid> + <h:outputLabel for="xid" value="#{MESSAGE['profiler.rule.id']}: "/> + <h:inputText readonly='#{rule.updating}' id="xid" styleClass='portlet-form-label' value="#{rule.id}" size='80'/> + <h:message for="xid" styleClass="error" showDetail="true" showSummary="false" /> + + <h:outputLabel for="title" value="#{MESSAGE['profiler.rule.title']}: "/> + <h:inputText id="title" styleClass='portlet-section-header' value="#{rule.title}" size='100'/> + <h:message for="title" styleClass="error" showDetail="true" showSummary="false" /> + + <h:outputLabel for="classname" value="#{MESSAGE['profiler.rule.class']}: "/> + <h:selectOneMenu id="classname" styleClass='portlet-section-header' value="#{rule.classname}"> + <f:selectItems value="#{rule.classnames}"/> + </h:selectOneMenu> + <h:message for="classname" styleClass="error" showDetail="true" showSummary="false" /> + + </h:panelGrid> + + <h:panelGroup/> + <h:commandButton id="saveProfile" value="#{MESSAGE['profiler.rule.save']}" action="#{rule.saveProfile}"/> + <h:commandButton id="newProfile" value="#{MESSAGE['profiler.rule.new']}" action="#{rule.createNewProfile}"/> + <h:commandButton id="removeProfile" value="#{MESSAGE['profiler.rule.remove']}" action="#{rule.removeProfile}"/> + <h:panelGroup/> + </h:form> +<!-- criteria --> + <br/> + <h:outputText styleClass='portlet-section-header' value="#{MESSAGE['criteria.title']}"/> + <br/> + + <h:dataTable + value="#{rule.criteria}" + var="mCriterion" + styleClass="portlet-section-body" + headerClass="portlet-section-body" + > + <h:column> + <f:facet name="header"> + <h:outputText styleClass="portlet-section-body" value="#{MESSAGE['criterion.name']}" /> + </f:facet> + <x:commandLink action='gotoCriterionForm' actionListener="#{criterion.listen}" immediate="true" > + <h:outputText value="#{mCriterion.name}" /> + <f:param name='selectedCriterion' value="#{mCriterion.name}"/> + <f:param name='selectedRule' value="#{rule.id}"/> + </x:commandLink> + </h:column> + <h:column> + <f:facet name="header"> + <h:outputText styleClass="portlet-section-body" value="#{MESSAGE['criterion.value']}" /> + </f:facet> + <h:outputText value="#{mCriterion.value}" /> + </h:column> + <h:column> + <f:facet name="header"> + <h:outputText styleClass="portlet-section-body" value="#{MESSAGE['criterion.resolver']}" /> + </f:facet> + <h:outputText value="#{mCriterion.type}" /> + </h:column> + <h:column> + <f:facet name="header"> + <h:outputText styleClass="portlet-section-body" value="#{MESSAGE['criterion.fallback.order']}" /> + </f:facet> + <h:outputText value="#{mCriterion.fallbackOrder}" /> + </h:column> + + </h:dataTable> + + <h:panelGroup/> + <h:commandLink id="addCriterion" value="#{MESSAGE['criteria.new']}" immediate='true' + action="gotoCriterionForm" actionListener="#{criterion.listen}"> + <f:param name='selectedRule' value="#{rule.id}" /> + </h:commandLink> + <h:panelGroup/> + + </h:panelGroup> + </h:panelGrid> + </f:view> 1.1 jakarta-jetspeed-2/applications/pam/src/webapp/WEB-INF/view/profiler-help.html Index: profiler-help.html =================================================================== <h1> Profiler Help </h1> <h3>NOTE: This help file is in English Only. TODO: add a option to locate by locale to the GenericServletPortlet</h3> <h3>NOTE: Please DO NOT TRANSLATE since its still under construction.</h3> <p> The Profiler locates portal resources given a set of request parameters, properties, and attributes The Profiler is invoked during the request processing pipeline. It requires that the request context is already populated with the portal request and response, and capability and user information. The request context parameters, properties and attributes make up the profile criterion which the profiler uses to locate portal resources: <ul> <li>page <li>navigations <li>document lists </ul> The profiler does not actually locate the document. It creates a Profile Locator, an abstract definition of a resource locator. </p> <h2>Rules</h2> Rules define how a resource locator is created. A rule is an ordered sequence of one or more criterion. The profiler will apply all criteria for a given rule in fallback order. It will start from the lowest fallback number for a criteria, and continue trying to locate until it either locates a resource, or until the fallback type of the criteria dictates that it either stop or continue to loop. <h2>Resolvers</h2> Resolvers are Java classes associated with a criterion. A resolver determines what runtime parameters and state to look at when building a profile locator. <table> <tr> <td> path </td> <td> <ul> <li>Looks at the Request Path of the request. </ul> </td> </tr> <tr> <td> group </td> <td> <ul> <li>Looks in HTTP Request Parameter (Standard) for the named parameter. <li>Next looks at current authenticated subject, finding all group principals for the subject. </ul> </td> </tr> <tr> <td> role </td> <td> <ul> <li>Looks in HTTP Request Parameter (Standard) for the named parameter. <li>Next looks at current authenticated subject, finding all role principals for the subject. </ul> </td> </tr> <tr> <td> user </td> <td> <ul> <li>Looks in HTTP Request Parameter (Standard) for the named parameter. <li>Next looks at current authenticated subject, finding all user principals for the subject. </ul> </td> </tr> <tr> <td> language </td> <td> <ul> <li>Looks in HTTP Request Parameter (Standard) for the named parameter. <li>Next looks at the Locale.LanguageCode for the current request. </ul> </td> </tr> <tr> <td> mediatype </td> <td> <ul> <li>Looks in HTTP Request Parameter (Standard) for the named parameter. <li>Next looks at the Mediatype (Mime Type) for the current request. </ul> </td> </tr> <tr> <td> country </td> <td> <ul> <li>Looks in HTTP Request Parameter (Standard) for the named parameter. <li>Next looks at the Locale.CountryCode for the current request. </ul> </td> </tr> <tr> <td> hard.coded </td> <td> <ul> <li>Applies the value specified in this rule as a constant. </ul> </td> </tr> <tr> <td> path.session </td> <td> <ul> <li>Looks in HTTP Request Parameter (Standard) for the named parameter. <li>Looks in Portal's Servlet Session for the named attribute. </ul> </td> </tr> <tr> <td> group.user.role </td> <td> <ul> <li>todo </ul> </td> </tr> </tr> </table> <h2>Fallback Types</h2> <table> <tr> <td> </td> </tr> </table> 1.1 jakarta-jetspeed-2/applications/pam/src/webapp/WEB-INF/view/profiler-criterion.jsp Index: profiler-criterion.jsp =================================================================== <%@ page session="true" contentType="text/html;charset=utf-8"%> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="http://myfaces.sourceforge.net/tld/myfaces_ext_0_9.tld" prefix="x"%> <!-- /* * Copyright 2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ //--> <f:loadBundle basename="org.apache.jetspeed.portlets.profiler.resources.ProfilerResources" var="MESSAGE" /> <f:view> <h:panelGrid> <h:panelGroup> <br/> <h:outputText styleClass='portlet-section-header' value="#{MESSAGE['criteria.title']}"/> <br/> <h:form id="criterionForm" name="criterionForm"> <h:panelGrid columns="3"> <h:outputLabel for="name" value="#{MESSAGE['criterion.name']}: "/> <h:inputText required='true' id="name" styleClass='portlet-form-label' value="#{criterion.name}" size='80'/> <h:message for="name" styleClass="error" showDetail="true" showSummary="false" /> <h:outputLabel for="value" value="#{MESSAGE['criterion.value']}: "/> <h:inputText id="value" styleClass='portlet-form-label' value="#{criterion.value}" size='128'/> <h:message for="value" styleClass="error" showDetail="true" showSummary="false" /> <h:outputLabel for="resolver" value="#{MESSAGE['criterion.resolver']}: "/> <h:selectOneMenu id="resolver" styleClass='portlet-form-label' value="#{criterion.resolver}"> <f:selectItems value="#{criterion.resolvers}"/> </h:selectOneMenu> <h:message for="resolver" styleClass="error" showDetail="true" showSummary="false" /> <h:outputLabel for="fallbackType" value="#{MESSAGE['criterion.fallback.type']}: "/> <h:selectOneMenu id="fallbackType" styleClass='portlet-form-label' value="#{criterion.fallbackType}"> <f:selectItems value="#{criterion.fallbackTypes}"/> </h:selectOneMenu> <h:message for="fallbackType" styleClass="error" showDetail="true" showSummary="false" /> <h:outputLabel for="fallbackOrder" value="#{MESSAGE['criterion.fallback.order']}: "/> <h:inputText id="fallbackOrder" styleClass='portlet-form-label' value="#{criterion.fallbackOrder}" /> <h:message for="fallbackOrder" styleClass="error" showDetail="true" showSummary="false" /> </h:panelGrid> <h:panelGroup/> <h:commandButton id="saveCriterion" value="#{MESSAGE['profiler.rule.save']}" action="#{criterion.saveCriterion}"/> <h:commandButton id="removeCriteria" value="#{MESSAGE['criteria.remove']}" action="#{criterion.removeCriterion}"/> <h:commandButton id="cancelCriterion" value="#{MESSAGE['profiler.rule.cancel']}" action="returnFromCriterion" immediate='true'> </h:commandButton> <h:panelGroup/> </h:form> </h:panelGroup> </h:panelGrid> </f:view> 1.1 jakarta-jetspeed-2/applications/pam/src/java/org/apache/jetspeed/portlets/profiler/resources/ProfilerResources.properties Index: ProfilerResources.properties =================================================================== # Copyright 2004 The Apache Software Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # $Id: ProfilerResources.properties,v 1.1 2004/10/21 01:45:50 taylor Exp $ # profiler.title.rules=Rules profiler.rule.title=Rule Title profiler.rule.id=Rule Id profiler.rule.class=Rule Class profiler.rule.save=Save profiler.rule.new=New profiler.rule.cancel=Cancel profiler.rule.remove=Remove criteria.title=Rule Criteria criteria.new=New Criteria criteria.remove=Remove Criteria criterion.name=Name criterion.value=Value criterion.fallback.order=Order criterion.resolver=Resolver Type criterion.fallback.type=Fallback 1.2 +2 -1 jakarta-jetspeed-2/applications/pam/src/java/org/apache/jetspeed/portlets/profiler/ProfileRulesExtent.java Index: ProfileRulesExtent.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/applications/pam/src/java/org/apache/jetspeed/portlets/profiler/ProfileRulesExtent.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ProfileRulesExtent.java 15 Oct 2004 21:46:46 -0000 1.1 +++ ProfileRulesExtent.java 21 Oct 2004 01:45:50 -0000 1.2 @@ -17,6 +17,7 @@ // import java.io.Serializable; import java.util.Collection; +//import java.util.LinkedList; import java.util.Map; import javax.faces.context.FacesContext; 1.2 +110 -4 jakarta-jetspeed-2/applications/pam/src/java/org/apache/jetspeed/portlets/profiler/ProfileRuleForm.java Index: ProfileRuleForm.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/applications/pam/src/java/org/apache/jetspeed/portlets/profiler/ProfileRuleForm.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ProfileRuleForm.java 15 Oct 2004 21:46:46 -0000 1.1 +++ ProfileRuleForm.java 21 Oct 2004 01:45:50 -0000 1.2 @@ -16,17 +16,20 @@ package org.apache.jetspeed.portlets.profiler; import java.io.Serializable; +import java.util.Collection; import java.util.Map; import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; +import javax.faces.model.SelectItem; import org.apache.jetspeed.portlets.pam.PortletApplicationResources; import org.apache.jetspeed.profiler.Profiler; +import org.apache.jetspeed.profiler.ProfilerException; import org.apache.jetspeed.profiler.rules.ProfilingRule; /** - * User state. + * Profile state. * * @author <a href="mailto:[EMAIL PROTECTED]">David Sean Taylor</a> * @version $Id$ @@ -34,11 +37,26 @@ public class ProfileRuleForm implements Serializable { + private boolean isNew = false; private transient Profiler profiler = null; private transient ProfilingRule rule = null; + private transient SelectItem[] classnames = + { + new SelectItem("org.apache.jetspeed.profiler.rules.impl.StandardProfilingRule"), + new SelectItem("org.apache.jetspeed.profiler.rules.impl.RoleFallbackProfilingRule") + }; public ProfileRuleForm() { + } + + public boolean getUpdating() + { + return !isNew; + } + + public void listen(ActionEvent event) + { Map appMap = (Map)FacesContext.getCurrentInstance().getExternalContext().getApplicationMap(); profiler = (Profiler)appMap.get(PortletApplicationResources.CPS_PROFILER_COMPONENT); Map params = (Map)FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); @@ -46,11 +64,13 @@ if (selected != null && profiler != null) { rule = profiler.getRule(selected); - } + isNew = false; + } } - public void listen(ActionEvent event) + public SelectItem[] getClassnames() { + return classnames; } public String getTitle() @@ -62,6 +82,31 @@ return rule.getTitle(); } + public void setTitle(String title) + { + if (rule != null) + { + this.rule.setTitle(title); + } + } + + public String getClassname() + { + if (rule == null) + { + return "{empty}"; + } + return rule.getClassname(); + } + + public void setClassname(String classname) + { + if (rule != null) + { + this.rule.setClassname(classname); + } + } + public String getId() { if (rule == null) @@ -71,5 +116,66 @@ return rule.getId(); } + public void setId(String id) + { + if (rule != null) + { + this.rule.setId(id); + } + } + + // actions + + public String saveProfile() + { + try + { + profiler.storeProfilingRule(this.rule); + isNew = false; + } + catch (ProfilerException e) + { + System.out.println("Failed to UPDATE: rule = " + rule.getId()); + // TODO: forward to an error page + } + return null; + } + + public String removeProfile() + { + try + { + profiler.deleteProfilingRule(rule); + } + catch (ProfilerException e) + { + System.out.println("Failed to REMOVE: rule = " + rule.getId()); + // TODO: forward to an error page + } + return null; + } + + public String createNewProfile() + { + try + { + Class defaultClass = profiler.getClass().getClassLoader().loadClass("org.apache.jetspeed.profiler.rules.impl.StandardProfilingRule"); + this.rule = (ProfilingRule)defaultClass.newInstance(); + } + catch (Exception e) + { + System.out.println("Failed to CREATE NEW: rule = " + rule.getId()); + // TODO: forward to an error page + } + this.setId(""); + this.setTitle(""); + this.setClassname("org.apache.jetspeed.profiler.rules.impl.StandardProfilingRule"); + isNew = true; + return null; + } + public Collection getCriteria() + { + return rule.getRuleCriteria(); + } } 1.1 jakarta-jetspeed-2/applications/pam/src/java/org/apache/jetspeed/portlets/profiler/ProfileCriterionForm.java Index: ProfileCriterionForm.java =================================================================== /* * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jetspeed.portlets.profiler; import java.io.Serializable; import java.util.Iterator; import java.util.Map; import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; import javax.faces.model.SelectItem; import org.apache.jetspeed.portlets.pam.PortletApplicationResources; import org.apache.jetspeed.profiler.Profiler; import org.apache.jetspeed.profiler.rules.ProfilingRule; import org.apache.jetspeed.profiler.rules.RuleCriterion; /** * Criterion state. * * @author <a href="mailto:[EMAIL PROTECTED]">David Sean Taylor</a> * @version $Id: ProfileCriterionForm.java,v 1.1 2004/10/21 01:45:50 taylor Exp $ */ public class ProfileCriterionForm implements Serializable { private boolean isNew = false; private transient Profiler profiler = null; private transient RuleCriterion criterion = null; private transient ProfilingRule rule = null; private static final String FALLBACK_CONTINUE = "Continue"; private static final String FALLBACK_STOP = "Stop"; private static final String FALLBACK_LOOP = "Loop"; private transient SelectItem[] resolvers = { new SelectItem("request"), new SelectItem("session"), new SelectItem("request.session"), new SelectItem("hard.coded"), new SelectItem("group.role.user"), new SelectItem("user"), new SelectItem("group"), new SelectItem("role"), new SelectItem("mediatype"), new SelectItem("country"), new SelectItem("language"), new SelectItem("roles"), new SelectItem("path"), new SelectItem("page"), new SelectItem("path.session") }; private transient SelectItem[] fallbackTypes = { new SelectItem(FALLBACK_CONTINUE), new SelectItem(FALLBACK_LOOP), new SelectItem(FALLBACK_STOP) }; public ProfileCriterionForm() { } public boolean getUpdating() { return !isNew; } public SelectItem[] getResolvers() { return resolvers; } public SelectItem[] getFallbackTypes() { return fallbackTypes; } public void listen(ActionEvent event) { Map appMap = (Map)FacesContext.getCurrentInstance().getExternalContext().getApplicationMap(); profiler = (Profiler)appMap.get(PortletApplicationResources.CPS_PROFILER_COMPONENT); Map params = (Map)FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); String selectedRule = (String)params.get("selectedRule"); if (selectedRule != null && profiler != null) { rule = profiler.getRule(selectedRule); if (rule != null) { String selected = (String)params.get("selectedCriterion"); if (selected == null || selected.length() == 0) { isNew = true; try { Class defaultClass = profiler.getClass().getClassLoader().loadClass("org.apache.jetspeed.profiler.rules.impl.RuleCriterionImpl"); this.criterion = (RuleCriterion)defaultClass.newInstance(); } catch (Exception e) { System.out.println("Failed to CREATE NEW: rule = " + rule.getId()); // TODO: forward to an error page } } else { Iterator it = rule.getRuleCriteria().iterator(); while (it.hasNext()) { RuleCriterion c = (RuleCriterion)it.next(); if (c.getName().equals(selected)) { criterion = c; isNew = false; break; } } } } } } public String getName() { if (criterion == null) { return "{empty}"; } return criterion.getName(); } public void setName(String name) { if (criterion != null) { this.criterion.setName(name); } } public String getValue() { if (criterion == null) { return "{empty}"; } return criterion.getValue(); } public void setValue(String value) { if (criterion != null) { this.criterion.setValue(value); } } public String getResolver() { if (criterion == null) { return "{empty}"; } return criterion.getType(); } public void setResolver(String resolver) { if (criterion != null) { this.criterion.setType(resolver); } } public int getFallbackOrder() { if (criterion == null) { return 0; } return criterion.getFallbackOrder(); } public void setFallbackOrder(int order) { if (criterion != null) { this.criterion.setFallbackOrder(order); } } public String getFallbackType() { if (criterion == null) { return FALLBACK_CONTINUE; } int type = criterion.getFallbackType(); switch (type) { case RuleCriterion.FALLBACK_CONTINUE: return FALLBACK_CONTINUE; case RuleCriterion.FALLBACK_LOOP: return FALLBACK_LOOP; default: return FALLBACK_STOP; } } public void setFallbackType(String type) { if (criterion != null) { if (type.equals(FALLBACK_CONTINUE)) { this.criterion.setFallbackType(RuleCriterion.FALLBACK_CONTINUE); } else if (type.equals(FALLBACK_LOOP)) { this.criterion.setFallbackType(RuleCriterion.FALLBACK_LOOP); } else { this.criterion.setFallbackType(RuleCriterion.FALLBACK_STOP); } } } // actions public String saveCriterion() { try { if (isNew) { criterion.setRuleId(rule.getId()); rule.getRuleCriteria().add(criterion); } profiler.storeProfilingRule(rule); isNew = false; } catch (Exception e) { // TODO: handle errors better System.out.println("Failed to UPDATE: rule = " + rule.getId()); return "gotoCriterionForm"; } return "returnFromCriterion"; } public String removeCriterion() { try { if (!isNew) { rule.getRuleCriteria().remove(criterion); profiler.storeProfilingRule(rule); isNew = true; } } catch (Exception e) { // TODO: handle errors better System.out.println("Failed to UPDATE: rule = " + rule.getId()); return "gotoCriterionForm"; } return "returnFromCriterion"; } } 1.5 +23 -1 jakarta-jetspeed-2/applications/pam/src/webapp/WEB-INF/faces-config.xml Index: faces-config.xml =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/applications/pam/src/webapp/WEB-INF/faces-config.xml,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- faces-config.xml 15 Oct 2004 21:46:46 -0000 1.4 +++ faces-config.xml 21 Oct 2004 01:45:50 -0000 1.5 @@ -31,6 +31,22 @@ </locale-config> </application> + <navigation-rule> + <from-view-id>/WEB-INF/view/profiler-admin.jsp</from-view-id> + <navigation-case> + <from-outcome>gotoCriterionForm</from-outcome> + <to-view-id>/WEB-INF/view/profiler-criterion.jsp</to-view-id> + </navigation-case> + </navigation-rule> + + <navigation-rule> + <from-view-id>/WEB-INF/view/profiler-criterion.jsp</from-view-id> + <navigation-case> + <from-outcome>returnFromCriterion</from-outcome> + <to-view-id>/WEB-INF/view/profiler-admin.jsp</to-view-id> + </navigation-case> + </navigation-rule> + <managed-bean> <managed-bean-name>tableData</managed-bean-name> <managed-bean-class>org.apache.jetspeed.portlets.site.beans.TableData</managed-bean-class> @@ -59,7 +75,13 @@ <managed-bean> <managed-bean-name>rule</managed-bean-name> <managed-bean-class>org.apache.jetspeed.portlets.profiler.ProfileRuleForm</managed-bean-class> - <managed-bean-scope>request</managed-bean-scope> + <managed-bean-scope>session</managed-bean-scope> + </managed-bean> + + <managed-bean> + <managed-bean-name>criterion</managed-bean-name> + <managed-bean-class>org.apache.jetspeed.portlets.profiler.ProfileCriterionForm</managed-bean-class> + <managed-bean-scope>session</managed-bean-scope> </managed-bean> </faces-config> 1.14 +6 -2 jakarta-jetspeed-2/applications/pam/src/webapp/WEB-INF/portlet.xml Index: portlet.xml =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/applications/pam/src/webapp/WEB-INF/portlet.xml,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- portlet.xml 12 Oct 2004 21:27:57 -0000 1.13 +++ portlet.xml 21 Oct 2004 01:45:50 -0000 1.14 @@ -142,7 +142,12 @@ <init-param> <description>This parameter sets the template used in view mode.</description> <name>ViewPage</name> - <value>/WEB-INF/view/profiler-admin.jsp</value> + <value>/WEB-INF/view/profiler-admin.jsp</value> + </init-param> + <init-param> + <description>This parameter sets the template used in help mode.</description> + <name>HelpPage</name> + <value>/WEB-INF/view/profiler-help.html</value> </init-param> <portlet-name>ProfilerAdmin</portlet-name> <display-name>Profiler Admin</display-name> @@ -151,7 +156,6 @@ <expiration-cache>-1</expiration-cache> <supports> <mime-type>text/html</mime-type> - <portlet-mode>EDIT</portlet-mode> <portlet-mode>VIEW</portlet-mode> <portlet-mode>HELP</portlet-mode> </supports>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]