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 at...@apache.org on 2009/01/28 01:04:44 UTC

svn commit: r738308 - in /portals/jetspeed-2/applications/j2-admin/trunk/src: main/java/org/apache/jetspeed/portlets/profiler/ webapp/WEB-INF/

Author: ate
Date: Wed Jan 28 00:04:43 2009
New Revision: 738308

URL: http://svn.apache.org/viewvc?rev=738308&view=rev
Log:
JS2-880: Full Wicket implementation of the admin portlets
See: https://issues.apache.org/jira/browse/JS2-880

Niels van Kampenhout contributed a Wicket rewrite of the Profiler admin portlet,
see: https://issues.apache.org/jira/browse/JS2-880?focusedCommentId=12667338#action_12667338

Great work Niels, this really helps us getting the job done!

Added:
    portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$ActionPanel.html   (with props)
    portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$RuleEditPanel$CriterionEditPanel.html   (with props)
    portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$RuleEditPanel.html   (with props)
    portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin.html   (with props)
    portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin.java   (with props)
    portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdminApplication.java   (with props)
Modified:
    portals/jetspeed-2/applications/j2-admin/trunk/src/webapp/WEB-INF/portlet.xml
    portals/jetspeed-2/applications/j2-admin/trunk/src/webapp/WEB-INF/web.xml

Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$ActionPanel.html
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin%24ActionPanel.html?rev=738308&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$ActionPanel.html (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$ActionPanel.html Wed Jan 28 00:04:43 2009
@@ -0,0 +1,21 @@
+<!-- 
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<wicket:panel>
+    <a href="#" wicket:id="link">
+        <span wicket:id="label">link</span>
+    </a>
+</wicket:panel>

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$ActionPanel.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$ActionPanel.html
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$ActionPanel.html
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$RuleEditPanel$CriterionEditPanel.html
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin%24RuleEditPanel%24CriterionEditPanel.html?rev=738308&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$RuleEditPanel$CriterionEditPanel.html (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$RuleEditPanel$CriterionEditPanel.html Wed Jan 28 00:04:43 2009
@@ -0,0 +1,81 @@
+<!-- 
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<wicket:panel>
+
+    <div style="border:1px solid black; margin:4px; padding:4px;">
+
+	    <form wicket:id="criterionEditForm">
+	    
+	        <span wicket:id="feedbackPanel">feedback message</span>
+	    
+	        <table cellpadding="2">
+	            <tr>
+	                <td>
+	                    <span wicket:id="criterionNameLabel">Name</span>
+	                </td>
+	                <td>
+	                    <input wicket:id="criterionNameField"/>
+	                </td>
+	            </tr>
+	            <tr>
+	                <td>
+	                    <span wicket:id="criterionValueLabel">Name</span>
+	                </td>
+	                <td>
+	                    <input wicket:id="criterionValueField"/>
+	                </td>
+	            </tr>
+	            <tr>
+	                <td>
+	                    <span wicket:id="criterionResolverTypeLabel">ResolverType</span>
+	                </td>
+	                <td>
+	                    <select wicket:id="criterionResolverTypeField">
+	                        <option>option 1</option>
+	                        <option>option 2</option>
+	                    </select>
+	                </td>
+	            </tr>
+	            <tr>
+	                <td>
+	                    <span wicket:id="criterionFallbackLabel">Fallback</span>
+	                </td>
+	                <td>
+	                    <select wicket:id="criterionFallbackField">
+	                        <option>option 1</option>
+	                        <option>option 2</option>
+	                    </select>
+	                </td>
+	            </tr>
+	            <tr>
+	                <td>
+	                    <span wicket:id="criterionOrderLabel">Order</span>
+	                </td>
+	                <td>
+	                    <input wicket:id="criterionOrderField"/>
+	                </td>
+	            </tr>
+	        </table>
+	        
+	        <input type="submit" value="Save Criterion" wicket:id="saveCriterionButton"/>
+	        <input type="submit" value="Remove Criterion" wicket:id="removeCriterionButton"/>
+	    
+	    </form>
+
+    </div>
+
+</wicket:panel>
\ No newline at end of file

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$RuleEditPanel$CriterionEditPanel.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$RuleEditPanel$CriterionEditPanel.html
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$RuleEditPanel$CriterionEditPanel.html
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$RuleEditPanel.html
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin%24RuleEditPanel.html?rev=738308&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$RuleEditPanel.html (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$RuleEditPanel.html Wed Jan 28 00:04:43 2009
@@ -0,0 +1,64 @@
+<!-- 
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<wicket:panel>
+    <div style="border:1px solid black; margin:4px; padding: 4px;">
+	    <form wicket:id="ruleEditForm">
+	        <span wicket:id="feedbackPanel">feedback message</span>
+	
+	        <table cellpadding="2">
+	            <tr>
+	                <td>
+	                    <span wicket:id="ruleIdLabel">rule id</span>
+	                </td>
+	                <td>
+	                    <input wicket:id="ruleIdField"/>
+	                </td>
+	            </tr>
+	            <tr>
+	                <td>
+	                    <span wicket:id="ruleTitleLabel">rule id</span>
+	                </td>
+	                <td>
+	                    <input wicket:id="ruleTitleField"/>
+	                </td>
+	            </tr>
+	            <tr>
+	                <td>
+	                    <span wicket:id="ruleClassLabel">rule class</span>
+	                </td>
+	                <td>
+				        <select wicket:id="ruleClassField">
+				            <option>option 1</option>
+				            <option>option 2</option>
+				        </select>                
+	                </td>
+	            </tr>
+	        </table>
+	        
+	        <span wicket:id="ruleCriteriaLabel">rule criteria</span>
+	        <table wicket:id="ruleCriteriaTable" cellpadding="2"></table>
+	
+	        <input type="submit" value="New Criterion" wicket:id="newCriterionButton"/>
+	        
+            <div wicket:id="criterionEditPanel">criterionEditPanel</div>
+	        
+	        <input type="submit" value="Save Rule" wicket:id="ruleSaveButton"/>
+	        <input type="submit" value="Remove Rule" wicket:id="ruleRemoveButton"/>
+	        
+	    </form>
+    </div>
+</wicket:panel>
\ No newline at end of file

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$RuleEditPanel.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$RuleEditPanel.html
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin$RuleEditPanel.html
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin.html
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin.html?rev=738308&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin.html (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin.html Wed Jan 28 00:04:43 2009
@@ -0,0 +1,38 @@
+<!-- 
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" >
+
+    <table>
+        <tr>
+            <td>
+			    <form wicket:id="rulesForm">
+			        <table cellpadding="2" width="100%">
+			            <tr wicket:id="rules">
+			                <td><span wicket:id="ruleId"></span></td>
+			            </tr>
+			        </table>
+			        <div wicket:id="rulesPaging"></div>
+			        <input type="submit" value="New Rule" wicket:id="newRuleButton"/>
+			    </form>
+            </td>
+            <td>
+                <div wicket:id="ruleEditPanel">ruleEditPanel</div>
+            </td>
+        </tr>
+    </table>
+
+</html>

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin.html
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin.html
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin.java?rev=738308&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin.java (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin.java Wed Jan 28 00:04:43 2009
@@ -0,0 +1,492 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.portlet.PortletRequest;
+
+import org.apache.jetspeed.CommonPortletServices;
+import org.apache.jetspeed.profiler.Profiler;
+import org.apache.jetspeed.profiler.ProfilerException;
+import org.apache.jetspeed.profiler.rules.ProfilingRule;
+import org.apache.jetspeed.profiler.rules.RuleCriterion;
+import org.apache.wicket.RequestContext;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.HeadersToolbar;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.NavigationToolbar;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
+import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Button;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.PageableListView;
+import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
+import org.apache.wicket.markup.html.panel.FeedbackPanel;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.protocol.http.portlet.PortletRequestContext;
+
+public class WicketProfilerAdmin extends WebPage {
+
+    List<ProfilingRule> rules;
+    protected ProfilingRule profilingRule;
+
+    public WicketProfilerAdmin() {
+
+        final RuleEditPanel ruleEditPanel = new RuleEditPanel("ruleEditPanel");
+
+        rules = new ArrayList<ProfilingRule>(getProfiler().getRules());
+
+        Form rulesForm = new Form("rulesForm");
+
+        // list of existing rules
+        PageableListView rulesList = new PageableListView("rules", new PropertyModel(this, "rules"), 10) {
+
+            @Override
+            protected void populateItem(ListItem item) {
+                final ProfilingRule rule = (ProfilingRule) item.getModelObject();
+                
+                item.add(new ActionPanel("ruleId", new Model(rule), new Link("link", new Model(rule)) {
+
+                    @Override
+                    public void onClick() {
+                        ProfilingRule rule = (ProfilingRule) getModelObject();
+                        setProfilingRule(rule);
+                        ruleEditPanel.setVisible(true);
+                        ruleEditPanel.hideCriterionEditPanel();
+                        ruleEditPanel.ruleIdFieldReadOnly(true);
+                    }
+                }, "id"));
+                
+            }
+
+        };
+        
+        rulesForm.add(rulesList);
+        rulesForm.add(new PagingNavigator("rulesPaging", rulesList));
+        add(rulesForm);
+
+        // button the create a new rule
+        Button newRuleButton = new Button("newRuleButton") {
+
+            @Override
+            public void onSubmit() {
+                System.out.println("newRuleButton.onSubmit");
+                Profiler profiler = getProfiler();
+                try
+                {
+                    Class defaultClass = profiler.getClass().getClassLoader().loadClass("org.apache.jetspeed.profiler.rules.impl.StandardProfilingRule");
+                    setProfilingRule((ProfilingRule)defaultClass.newInstance());
+                    ruleEditPanel.setVisible(true);
+                    ruleEditPanel.hideCriterionEditPanel();
+                    ruleEditPanel.ruleIdFieldReadOnly(false);
+                }
+                catch (Exception e)
+                {
+                    System.out.println("Failed to CREATE NEW: rule = " + profilingRule.getId());
+                    // TODO add error message to feedback panel            
+                }
+            }
+            
+            
+            
+        };
+        rulesForm.add(newRuleButton);
+        
+        // form to edit new or selected rule
+        add(ruleEditPanel);
+        ruleEditPanel.setVisible(false);
+
+    }
+
+    public ProfilingRule getProfilingRule() {
+        return profilingRule;
+    }
+
+    public void setProfilingRule(ProfilingRule profilingRule) {
+        this.profilingRule = profilingRule;
+    }
+
+    protected PortletRequest getPortletRequest() {
+        return ((PortletRequestContext) RequestContext.get()).getPortletRequest();
+    }
+
+    protected Profiler getProfiler() {
+        return (Profiler) getPortletRequest().getAttribute(CommonPortletServices.CPS_PROFILER_COMPONENT);
+    }
+
+    
+    /**
+     * A panel containing a link with a label.
+     */
+    class ActionPanel extends Panel
+    {
+        public ActionPanel(String id, IModel model, Link link, String propertyExpression)
+        {
+            super(id, model);
+            link.add(new Label("label", new PropertyModel(model.getObject(), propertyExpression)));
+            add(link);
+        }
+    }    
+    
+    /**
+     * The form to edit the selected profiling rule.
+     *
+     */
+    protected class RuleEditPanel extends Panel {
+
+        private List<String> classNames = Arrays.asList(new String[] {
+                "org.apache.jetspeed.profiler.rules.impl.StandardProfilingRule",
+                "org.apache.jetspeed.profiler.rules.impl.RoleFallbackProfilingRule" });
+        protected RuleCriterion criterion;
+        protected CriterionEditPanel criterionEditPanel;
+        protected TextField ruleIdField;
+
+        public RuleEditPanel(String id) {
+            super(id);
+            
+            Form ruleEditForm = new Form("ruleEditForm");
+            
+            FeedbackPanel feedbackPanel = new FeedbackPanel("feedbackPanel");
+            ruleEditForm.add(feedbackPanel);
+            
+            ruleEditForm.add(new Label("ruleIdLabel", "Rule ID"));
+            ruleEditForm.add(new Label("ruleTitleLabel", "Rule Title"));
+            ruleEditForm.add(new Label("ruleClassLabel", "Rule Class"));
+            
+            ruleIdField = new TextField("ruleIdField", new PropertyModel(WicketProfilerAdmin.this, "profilingRule.id"));
+            ruleIdField.setRequired(true);
+            TextField ruleTitleField = new TextField("ruleTitleField", new PropertyModel(WicketProfilerAdmin.this, "profilingRule.title"));
+            
+            DropDownChoice ruleClassField = new DropDownChoice("ruleClassField", classNames);
+            ruleClassField.setModel(new PropertyModel(WicketProfilerAdmin.this, "profilingRule.classname"));
+            
+            Button ruleSaveButton = new Button("ruleSaveButton") {
+
+                @Override
+                public void onSubmit() {
+                    Profiler profiler = getProfiler();
+                    try {
+                        profiler.storeProfilingRule(profilingRule);
+                        if (!rules.contains(profilingRule)) {
+                            rules.add(profilingRule);
+                        }
+                    } catch (ProfilerException e) {
+                        System.out.println("Failed to UPDATE: rule = " + profilingRule.getId());
+                        e.printStackTrace();
+                        // TODO add error message to feedback panel
+                    }
+                }
+                
+            };
+
+            Button ruleRemoveButton = new Button("ruleRemoveButton") {
+
+                @Override
+                public void onSubmit() {
+                    Profiler profiler = getProfiler();
+                    try {
+                        if (rules.contains(profilingRule)) {
+                            rules.remove(profilingRule);
+                        }
+                        profiler.deleteProfilingRule(profilingRule);
+                        profilingRule = null;
+                        RuleEditPanel.this.setVisible(false);
+                    } catch (ProfilerException e) {
+                        System.out.println("Failed to REMOVE: rule = " + profilingRule.getId());
+                        e.printStackTrace();
+                        // TODO add error message to feedback panel
+                    }
+                }
+                
+            };
+            
+            ruleEditForm.add(ruleIdField);
+            ruleEditForm.add(ruleTitleField);
+            ruleEditForm.add(ruleClassField);
+            ruleEditForm.add(ruleSaveButton);
+            ruleEditForm.add(ruleRemoveButton);
+
+            
+            // the list of criteria for the selected rule
+            
+            ruleEditForm.add(new Label("ruleCriteriaLabel", "Rule Criteria"));
+            
+            SortableDataProvider dataProvider = new SortableDataProvider()
+            {
+                public int size()
+                {
+                    return profilingRule.getRuleCriteria().size();
+                }
+
+                public IModel model(Object object)
+                {
+                    RuleCriterion ruleCriterion = (RuleCriterion) object;
+                    return new Model(ruleCriterion);
+                }
+
+                public Iterator iterator(int first, int count)
+                {
+                    return new ArrayList(profilingRule.getRuleCriteria()).subList(first, first + count).iterator();
+                }
+            };
+            IColumn[] columns = { new AbstractColumn(new Model("Name")) {
+
+                public void populateItem(Item cellItem, String componentId, IModel rowModel) {
+                    //cellItem.add(new CriterionLink(componentId, rowModel));
+                    cellItem.add(new ActionPanel(componentId, rowModel, new Link("link", rowModel) {
+                        public void onClick()
+                        {
+                            setCriterion((RuleCriterion) getModelObject());
+                            criterionEditPanel.setVisible(true);
+                        }
+                    }, "name"));
+                }
+                
+            }, 
+                    new PropertyColumn(new Model("Value"), "value"),
+                    new PropertyColumn(new Model("Resolver Type"), "type"),
+                    new PropertyColumn(new Model("Fallback Type"), "fallbackType"),
+                    new PropertyColumn(new Model("Order"), "fallbackOrder") };
+            
+            DataTable ruleCriteriaTable = new DataTable("ruleCriteriaTable", columns, dataProvider, 10);
+
+            ruleCriteriaTable.addTopToolbar(new HeadersToolbar(ruleCriteriaTable, dataProvider));
+            ruleCriteriaTable.addBottomToolbar(new NavigationToolbar(ruleCriteriaTable));
+            ruleEditForm.add(ruleCriteriaTable);
+
+            Button newCriterionButton = new Button("newCriterionButton") {
+
+                @Override
+                public void onSubmit() {
+                    Profiler profiler = getProfiler();
+                    try {
+                        criterion = profiler.createRuleCriterion();
+                        criterionEditPanel.setVisible(true);
+                    } catch (ClassNotFoundException e) {
+                        // TODO put message on feedback panel
+                        e.printStackTrace();
+                        System.out.println("Could not create new rule criterion: " + e.getMessage());
+                    }
+                }
+                
+            };
+            ruleEditForm.add(newCriterionButton);
+            
+            setCriterion(null);
+            criterionEditPanel = new CriterionEditPanel("criterionEditPanel");
+            ruleEditForm.add(criterionEditPanel);
+
+            criterionEditPanel.setVisible(false);
+            
+            add(ruleEditForm);
+            
+        }
+
+        public RuleCriterion getCriterion() {
+            return criterion;
+        }
+
+        public void setCriterion(RuleCriterion criterion) {
+            this.criterion = criterion;
+        }
+        
+        
+        protected void hideCriterionEditPanel() {
+            criterionEditPanel.setVisible(false);
+        }
+
+        protected void ruleIdFieldReadOnly(boolean readOnly) {
+            ruleIdField.setEnabled(!readOnly);
+        }
+        
+        /**
+         * Form to edit selected rule criterion.
+         *
+         */
+        protected class CriterionEditPanel extends Panel {
+
+            private static final String FALLBACK_CONTINUE = "Continue";
+            private static final String FALLBACK_STOP = "Stop";
+            private static final String FALLBACK_LOOP = "Loop";
+            
+            private List<String> resolvers = Arrays.asList(new String[] {
+                    "request",
+                    "session",
+                    "request.session",
+                    "hard.coded",
+                    "group.role.user",
+                    "user",
+                    "group",
+                    "role",
+                    "mediatype",
+                    "country",
+                    "language",
+                    "roles",
+                    "path",
+                    "page",
+                    "path.session",
+                    "user.attribute",
+                    "navigation",
+                    "ip",
+                    "hostname" });
+
+            private List<Integer> fallbackTypes = Arrays.asList(new Integer[] {
+                    new Integer(RuleCriterion.FALLBACK_CONTINUE), 
+                    new Integer(RuleCriterion.FALLBACK_STOP), 
+                    new Integer(RuleCriterion.FALLBACK_LOOP)
+            });
+
+            public CriterionEditPanel(String id) {
+                super(id);
+                
+                Form criterionEditForm = new Form("criterionEditForm");
+
+                FeedbackPanel feedbackPanel = new FeedbackPanel("feedbackPanel");
+                criterionEditForm.add(feedbackPanel);
+                
+                criterionEditForm.add(new Label("criterionNameLabel", "Name"));
+                criterionEditForm.add(new Label("criterionValueLabel", "Value"));
+                criterionEditForm.add(new Label("criterionResolverTypeLabel", "Resolver Type"));
+                criterionEditForm.add(new Label("criterionFallbackLabel", "Fallback"));
+                criterionEditForm.add(new Label("criterionOrderLabel", "Order"));
+                
+                TextField criterionNameField = new TextField("criterionNameField", new PropertyModel(RuleEditPanel.this, "criterion.name"));
+                criterionNameField.setRequired(true);
+
+                TextField criterionValueField = new TextField("criterionValueField", new PropertyModel(RuleEditPanel.this, "criterion.value"));
+
+                DropDownChoice criterionResolverTypeField = new DropDownChoice("criterionResolverTypeField", resolvers);
+                criterionResolverTypeField.setModel(new PropertyModel(RuleEditPanel.this, "criterion.type"));
+                criterionResolverTypeField.setRequired(true);
+                
+                DropDownChoice criterionFallbackField = new DropDownChoice("criterionFallbackField", fallbackTypes, new FallbackTypeChoiceRenderer());
+                criterionFallbackField.setModel(new PropertyModel(RuleEditPanel.this, "criterion.fallbackType"));
+                criterionFallbackField.setRequired(true);
+                
+                TextField criterionOrderField = new TextField("criterionOrderField", new PropertyModel(RuleEditPanel.this, "criterion.fallbackOrder"));
+                criterionOrderField.setRequired(true);
+                
+                criterionEditForm.add(criterionNameField);
+                criterionEditForm.add(criterionValueField);
+                criterionEditForm.add(criterionResolverTypeField);
+                criterionEditForm.add(criterionFallbackField);
+                criterionEditForm.add(criterionOrderField);
+
+                Button saveCriterionButton = new Button("saveCriterionButton") {
+
+                    @Override
+                    public void onSubmit() {
+                        if (criterion.getValue() != null)
+                        {
+                            String value = criterion.getValue();
+                            value = value.trim();
+                            if (value.equals(""))
+                            {
+                                criterion.setValue(null);
+                            }
+                        }
+                        if (!profilingRule.getRuleCriteria().contains(criterion)) {
+                            profilingRule.getRuleCriteria().add(criterion);
+                        }
+                        try {
+                            Profiler profiler = getProfiler();
+                            profiler.storeProfilingRule(profilingRule);
+                        }
+                        catch (ProfilerException e) {
+                            // TODO set feeback message
+                            e.printStackTrace();
+                            System.out.println("Could not save rule criterion " + criterion.getName() + ": " + e.getMessage());
+                        }
+                    }
+                    
+                };
+                
+                Button removeCriterionButton = new Button("removeCriterionButton") {
+
+                    @Override
+                    public void onSubmit() {
+                        if (profilingRule.getRuleCriteria().contains(criterion)) {
+                            profilingRule.getRuleCriteria().remove(criterion);
+                        }
+                        try {
+                            Profiler profiler = getProfiler();
+                            profiler.storeProfilingRule(profilingRule);
+                        }
+                        catch (ProfilerException e) {
+                            // TODO set feeback message
+                            e.printStackTrace();
+                            System.out.println("Could not save rule criterion " + criterion.getName() + ": " + e.getMessage());
+                        }
+                    }
+                    
+                };
+                
+                criterionEditForm.add(saveCriterionButton);
+                criterionEditForm.add(removeCriterionButton);
+                
+                add(criterionEditForm);
+            }
+
+            /**
+             * ChoiceRenderer for fallback types.
+             */
+            private final class FallbackTypeChoiceRenderer extends ChoiceRenderer
+            {
+                /**
+                 * Constructor.
+                 */
+                public FallbackTypeChoiceRenderer()
+                {
+                }
+
+                /**
+                 * @see org.apache.wicket.markup.html.form.IChoiceRenderer#getDisplayValue(Object)
+                 */
+                public Object getDisplayValue(Object object)
+                {
+                    Integer fallbackType = (Integer) object;
+                    switch (fallbackType)
+                    {
+                    case RuleCriterion.FALLBACK_CONTINUE:
+                        return FALLBACK_CONTINUE;
+                    case RuleCriterion.FALLBACK_LOOP:
+                        return FALLBACK_LOOP;
+                    default:
+                        return FALLBACK_STOP;
+                    }
+                }
+            }            
+        }
+
+    }
+}

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdmin.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdminApplication.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdminApplication.java?rev=738308&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdminApplication.java (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdminApplication.java Wed Jan 28 00:04:43 2009
@@ -0,0 +1,12 @@
+package org.apache.jetspeed.portlets.profiler;
+
+import org.apache.jetspeed.portlets.wicket.AbstractAdminWebApplication;
+
+public class WicketProfilerAdminApplication extends AbstractAdminWebApplication {
+
+    @Override
+    public Class getHomePage() {
+        return WicketProfilerAdmin.class;
+    }
+
+}

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdminApplication.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdminApplication.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/profiler/WicketProfilerAdminApplication.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/webapp/WEB-INF/portlet.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/webapp/WEB-INF/portlet.xml?rev=738308&r1=738307&r2=738308&view=diff
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/webapp/WEB-INF/portlet.xml (original)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/webapp/WEB-INF/portlet.xml Wed Jan 28 00:04:43 2009
@@ -2168,7 +2168,35 @@
         <keywords>admin,security,roles,role</keywords>            
     </portlet-info>
    </portlet>
-   <custom-portlet-mode>
+
+    <portlet>
+        <description>wicket profiler admin</description>
+        <portlet-name>WicketProfilerAdmin</portlet-name>
+        <display-name>Wicket Profiler Admin</display-name>
+        <portlet-class>org.apache.jetspeed.portlets.wicket.AdminWicketPortlet</portlet-class>
+        <init-param>
+            <name>wicketFilterPath</name>
+            <value>/profileradmin</value>
+        </init-param>
+        <init-param>
+            <name>serviceComponentNames</name>
+            <value>cps:UserManager,cps:JetspeedPrincipalManagerProvider,cps:RoleManager,cps:GroupManager,cps:Profiler,cps:AuditActivity</value>
+        </init-param>
+        <supports>
+            <mime-type>*/*</mime-type>
+            <portlet-mode>VIEW</portlet-mode>
+        </supports>
+        <supported-locale>en</supported-locale>
+        <!--<resource-bundle>org.apache.jetspeed.portlets.security.JetspeedPrincipalManagementUsers</resource-bundle> -->
+        <portlet-info>
+            <title>Wicket Profiler Admin</title>
+            <short-title>ProfilerAdmin</short-title>
+            <keywords>admin,profiler</keywords>            
+        </portlet-info>
+    </portlet>
+    
+    
+    <custom-portlet-mode>
         <description>a Custom Edit_defaults Mode</description>            
         <portlet-mode>edit_defaults</portlet-mode>
     </custom-portlet-mode>

Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/webapp/WEB-INF/web.xml?rev=738308&r1=738307&r2=738308&view=diff
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/webapp/WEB-INF/web.xml (original)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/webapp/WEB-INF/web.xml Wed Jan 28 00:04:43 2009
@@ -114,7 +114,16 @@
         <param-value>org.apache.jetspeed.portlets.security.users.WicketUserDetailsApplication</param-value>
       </init-param>
     </filter>
-    
+
+  <filter>
+    <filter-name>WicketProfilerAdminApplication</filter-name>
+    <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
+    <init-param>
+      <param-name>applicationClassName</param-name>
+      <param-value>org.apache.jetspeed.portlets.profiler.WicketProfilerAdminApplication</param-value>
+    </init-param>
+  </filter>
+
     <filter>
       <filter-name>PortalSiteManagerApplication</filter-name>
       <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
@@ -151,7 +160,14 @@
       <dispatcher>REQUEST</dispatcher>
       <dispatcher>INCLUDE</dispatcher>
     </filter-mapping>
-    
+
+  <filter-mapping>
+    <filter-name>WicketProfilerAdminApplication</filter-name>
+    <url-pattern>/profileradmin/*</url-pattern>
+    <dispatcher>REQUEST</dispatcher>
+    <dispatcher>INCLUDE</dispatcher>
+  </filter-mapping>
+  
     <listener>
       <listener-class>org.apache.jetspeed.webapp.logging.Log4JConfigurator</listener-class>
     </listener>



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org