You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by ag...@apache.org on 2007/04/30 21:10:14 UTC

svn commit: r533830 - in /roller/trunk: src/org/apache/roller/ui/admin/struts2/ src/org/apache/roller/ui/authoring/struts2/ src/org/apache/roller/ui/common/ src/org/apache/roller/ui/common/struts2/ web/WEB-INF/ web/WEB-INF/classes/ web/WEB-INF/jsps/adm...

Author: agilliland
Date: Mon Apr 30 12:10:12 2007
New Revision: 533830

URL: http://svn.apache.org/viewvc?view=rev&rev=533830
Log:
struts2 versions of ping target controls, both common and custom.


Added:
    roller/trunk/src/org/apache/roller/ui/admin/struts2/CommonPingTargetAdd.java
    roller/trunk/src/org/apache/roller/ui/admin/struts2/CommonPingTargetEdit.java
    roller/trunk/src/org/apache/roller/ui/admin/struts2/CommonPingTargets.java
    roller/trunk/src/org/apache/roller/ui/authoring/struts2/CustomPingTargetAdd.java
    roller/trunk/src/org/apache/roller/ui/authoring/struts2/CustomPingTargetEdit.java
    roller/trunk/src/org/apache/roller/ui/authoring/struts2/CustomPingTargets.java
    roller/trunk/src/org/apache/roller/ui/common/
    roller/trunk/src/org/apache/roller/ui/common/struts2/
    roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetAddBase.java
    roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetEditBase.java
    roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetFormBean.java
    roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetsBase.java
    roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargetAdd.jsp
    roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargetConfirm.jsp
    roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargetEdit.jsp
    roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargets.jsp
    roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargetAdd.jsp
    roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargetConfirm.jsp
    roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargetEdit.jsp
    roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargets.jsp
Modified:
    roller/trunk/src/org/apache/roller/ui/admin/struts2/admin-menu.xml
    roller/trunk/src/org/apache/roller/ui/authoring/struts2/editor-menu.xml
    roller/trunk/web/WEB-INF/classes/struts.xml
    roller/trunk/web/WEB-INF/tiles.xml

Added: roller/trunk/src/org/apache/roller/ui/admin/struts2/CommonPingTargetAdd.java
URL: http://svn.apache.org/viewvc/roller/trunk/src/org/apache/roller/ui/admin/struts2/CommonPingTargetAdd.java?view=auto&rev=533830
==============================================================================
--- roller/trunk/src/org/apache/roller/ui/admin/struts2/CommonPingTargetAdd.java (added)
+++ roller/trunk/src/org/apache/roller/ui/admin/struts2/CommonPingTargetAdd.java Mon Apr 30 12:10:12 2007
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.ui.admin.struts2;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.pojos.PingTargetData;
+import org.apache.roller.ui.common.struts2.PingTargetAddBase;
+
+
+/**
+ * Action for adding a common ping target.
+ */
+public class CommonPingTargetAdd extends PingTargetAddBase {
+    
+    private static Log log = LogFactory.getLog(CommonPingTargetAdd.class);
+    
+    
+    public CommonPingTargetAdd() {
+        this.actionName = "commonPingTargetAdd";
+        this.desiredMenu = "admin";
+        this.pageTitle = "pingTarget.pingTarget";
+    }
+    
+    
+    public String requiredUserRole() {
+        return "admin";
+    }
+    
+    // no weblog required
+    public boolean isWeblogRequired() {
+        return false;
+    }
+    
+    
+    protected Log getLogger() {
+        return log;
+    }
+    
+    
+    protected PingTargetData createPingTarget() {
+        
+        return new PingTargetData(
+                null, 
+                getBean().getName(), 
+                getBean().getPingUrl(), 
+                null, 
+                false);
+    }
+    
+}

Added: roller/trunk/src/org/apache/roller/ui/admin/struts2/CommonPingTargetEdit.java
URL: http://svn.apache.org/viewvc/roller/trunk/src/org/apache/roller/ui/admin/struts2/CommonPingTargetEdit.java?view=auto&rev=533830
==============================================================================
--- roller/trunk/src/org/apache/roller/ui/admin/struts2/CommonPingTargetEdit.java (added)
+++ roller/trunk/src/org/apache/roller/ui/admin/struts2/CommonPingTargetEdit.java Mon Apr 30 12:10:12 2007
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.ui.admin.struts2;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.ui.common.struts2.PingTargetEditBase;
+
+
+/**
+ * Action for modifying a common ping target.
+ */
+public class CommonPingTargetEdit extends PingTargetEditBase {
+    
+    private static Log log = LogFactory.getLog(CommonPingTargetEdit.class);
+    
+    
+    public CommonPingTargetEdit() {
+        this.actionName = "commonPingTargetEdit";
+        this.desiredMenu = "admin";
+        this.pageTitle = "pingTarget.pingTarget";
+    }
+    
+    
+    public String requiredUserRole() {
+        return "admin";
+    }
+    
+    // no weblog required
+    public boolean isWeblogRequired() {
+        return false;
+    }
+    
+    
+    protected Log getLogger() {
+        return log;
+    }
+    
+}

Added: roller/trunk/src/org/apache/roller/ui/admin/struts2/CommonPingTargets.java
URL: http://svn.apache.org/viewvc/roller/trunk/src/org/apache/roller/ui/admin/struts2/CommonPingTargets.java?view=auto&rev=533830
==============================================================================
--- roller/trunk/src/org/apache/roller/ui/admin/struts2/CommonPingTargets.java (added)
+++ roller/trunk/src/org/apache/roller/ui/admin/struts2/CommonPingTargets.java Mon Apr 30 12:10:12 2007
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.ui.admin.struts2;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.RollerException;
+import org.apache.roller.business.RollerFactory;
+import org.apache.roller.business.pings.PingTargetManager;
+import org.apache.roller.ui.common.struts2.PingTargetsBase;
+
+
+/**
+ * Admin action for managing global ping targets.
+ */
+public class CommonPingTargets extends PingTargetsBase {
+    
+    private static Log log = LogFactory.getLog(CommonPingTargets.class);
+    
+    
+    public CommonPingTargets() {
+        this.actionName = "commonPingTargets";
+        this.desiredMenu = "admin";
+        this.pageTitle = "commonPingTargets.commonPingTargets";
+    }
+    
+    
+    public String requiredUserRole() {
+        return "admin";
+    }
+    
+    // no weblog required
+    public boolean isWeblogRequired() {
+        return false;
+    }
+    
+    
+    protected Log getLogger() {
+        return log;
+    }
+    
+    
+    public void loadPingTargets() {
+        try {
+            PingTargetManager pingTargetMgr = RollerFactory.getRoller().getPingTargetManager();
+            setPingTargets(pingTargetMgr.getCommonPingTargets());
+        } catch (RollerException ex) {
+            log.error("Error loading common ping targets", ex);
+            // TODO: i18n
+            addError("Error loading common ping targets");
+        }
+    }
+    
+    
+    /**
+     * Set a ping target auto enabled to true.
+     */
+    public String enable() {
+        
+        if(getPingTarget() != null) {
+            try {
+                getPingTarget().setAutoEnabled(true);
+                
+                PingTargetManager pingTargetMgr = RollerFactory.getRoller().getPingTargetManager();
+                pingTargetMgr.savePingTarget(getPingTarget());
+                RollerFactory.getRoller().flush();
+            } catch (Exception ex) {
+                getLogger().error("Error saving ping target", ex);
+                // TODO: i18n
+                addError("Error saving ping target.");
+            }
+        } else {
+            // TODO: i18n
+            addError("Cannot enable ping target - "+getPingTargetId());
+        }
+        
+        return LIST;
+    }
+    
+    
+    /**
+     * Set a ping target auto-enable to false.
+     */
+    public String disable() {
+        
+        if(getPingTarget() != null) {
+            try {
+                getPingTarget().setAutoEnabled(false);
+                
+                PingTargetManager pingTargetMgr = RollerFactory.getRoller().getPingTargetManager();
+                pingTargetMgr.savePingTarget(getPingTarget());
+                RollerFactory.getRoller().flush();
+            } catch (Exception ex) {
+                getLogger().error("Error saving ping target", ex);
+                // TODO: i18n
+                addError("Error saving ping target.");
+            }
+        } else {
+            // TODO: i18n
+            addError("Cannot disable ping target - "+getPingTargetId());
+        }
+        
+        return LIST;
+    }
+    
+}

Modified: roller/trunk/src/org/apache/roller/ui/admin/struts2/admin-menu.xml
URL: http://svn.apache.org/viewvc/roller/trunk/src/org/apache/roller/ui/admin/struts2/admin-menu.xml?view=diff&rev=533830&r1=533829&r2=533830
==============================================================================
--- roller/trunk/src/org/apache/roller/ui/admin/struts2/admin-menu.xml (original)
+++ roller/trunk/src/org/apache/roller/ui/admin/struts2/admin-menu.xml Mon Apr 30 12:10:12 2007
@@ -24,7 +24,8 @@
         
         <menu-item action="commonPingTargets"  
                    name="tabbedmenu.admin.pingTargets"
-                   roles="admin" />
+                   roles="admin" 
+                   subactions="commonPingTargetAdd,commonPingTargetEdit" />
         
         <menu-item action="cacheInfo"          
                    name="tabbedmenu.admin.cacheInfo"

Added: roller/trunk/src/org/apache/roller/ui/authoring/struts2/CustomPingTargetAdd.java
URL: http://svn.apache.org/viewvc/roller/trunk/src/org/apache/roller/ui/authoring/struts2/CustomPingTargetAdd.java?view=auto&rev=533830
==============================================================================
--- roller/trunk/src/org/apache/roller/ui/authoring/struts2/CustomPingTargetAdd.java (added)
+++ roller/trunk/src/org/apache/roller/ui/authoring/struts2/CustomPingTargetAdd.java Mon Apr 30 12:10:12 2007
@@ -0,0 +1,55 @@
+/*
+ * CustomPingTargetAdd.java
+ *
+ * Created on April 30, 2007, 9:52 AM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.apache.roller.ui.authoring.struts2;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.pojos.PermissionsData;
+import org.apache.roller.pojos.PingTargetData;
+import org.apache.roller.ui.common.struts2.PingTargetAddBase;
+
+
+/**
+ * Action for adding a custom weblog ping target.
+ */
+public class CustomPingTargetAdd extends PingTargetAddBase {
+    
+    private static Log log = LogFactory.getLog(CustomPingTargetAdd.class);
+    
+    
+    public CustomPingTargetAdd() {
+        this.actionName = "customPingTargetAdd";
+        this.desiredMenu = "editor";
+        this.pageTitle = "pingTarget.pingTarget";
+    }
+    
+    
+    // admin perms required
+    public short requiredWeblogPermission() {
+        return PermissionsData.ADMIN;
+    }
+    
+    
+    protected Log getLogger() {
+        return log;
+    }
+    
+    
+    protected PingTargetData createPingTarget() {
+        
+        return new PingTargetData(
+                null, 
+                getBean().getName(), 
+                getBean().getPingUrl(), 
+                getActionWeblog(), 
+                false);
+    }
+    
+}

Added: roller/trunk/src/org/apache/roller/ui/authoring/struts2/CustomPingTargetEdit.java
URL: http://svn.apache.org/viewvc/roller/trunk/src/org/apache/roller/ui/authoring/struts2/CustomPingTargetEdit.java?view=auto&rev=533830
==============================================================================
--- roller/trunk/src/org/apache/roller/ui/authoring/struts2/CustomPingTargetEdit.java (added)
+++ roller/trunk/src/org/apache/roller/ui/authoring/struts2/CustomPingTargetEdit.java Mon Apr 30 12:10:12 2007
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.ui.authoring.struts2;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.pojos.PermissionsData;
+import org.apache.roller.ui.common.struts2.PingTargetEditBase;
+
+
+/**
+ * Action for modifying a weblog custom ping target.
+ */
+public class CustomPingTargetEdit extends PingTargetEditBase {
+    
+    private static Log log = LogFactory.getLog(CustomPingTargetEdit.class);
+    
+    
+    public CustomPingTargetEdit() {
+        this.actionName = "customPingTargetEdit";
+        this.desiredMenu = "editor";
+        this.pageTitle = "pingTarget.pingTarget";
+    }
+    
+    
+    // admin perms required
+    public short requiredWeblogPermissions() {
+        return PermissionsData.ADMIN;
+    }
+    
+    
+    protected Log getLogger() {
+        return log;
+    }
+    
+}

Added: roller/trunk/src/org/apache/roller/ui/authoring/struts2/CustomPingTargets.java
URL: http://svn.apache.org/viewvc/roller/trunk/src/org/apache/roller/ui/authoring/struts2/CustomPingTargets.java?view=auto&rev=533830
==============================================================================
--- roller/trunk/src/org/apache/roller/ui/authoring/struts2/CustomPingTargets.java (added)
+++ roller/trunk/src/org/apache/roller/ui/authoring/struts2/CustomPingTargets.java Mon Apr 30 12:10:12 2007
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.ui.authoring.struts2;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.RollerException;
+import org.apache.roller.business.RollerFactory;
+import org.apache.roller.business.pings.PingTargetManager;
+import org.apache.roller.config.PingConfig;
+import org.apache.roller.pojos.PermissionsData;
+import org.apache.roller.ui.common.struts2.PingTargetsBase;
+
+
+/**
+ * Action for managing weblog custom ping targets.
+ */
+public class CustomPingTargets extends PingTargetsBase {
+    
+    private static Log log = LogFactory.getLog(CustomPingTargets.class);
+    
+    
+    public CustomPingTargets() {
+        this.actionName = "customPingTargets";
+        this.desiredMenu = "editor";
+        this.pageTitle = "customPingTargets.customPingTargets";
+    }
+    
+    
+    // no weblog required
+    public boolean isWeblogRequired() {
+        return true;
+    }
+    
+    public short requiredWeblogPermissions() {
+        return PermissionsData.ADMIN;
+    }
+    
+    
+    protected Log getLogger() {
+        return log;
+    }
+    
+    
+    public void loadPingTargets() {
+        
+        if(!PingConfig.getDisallowCustomTargets()) try {
+            PingTargetManager pingTargetMgr = RollerFactory.getRoller().getPingTargetManager();
+            setPingTargets(pingTargetMgr.getCustomPingTargets(getActionWeblog()));
+        } catch (RollerException ex) {
+            log.error("Error loading common ping targets", ex);
+            // TODO: i18n
+            addError("Error loading common ping targets");
+        }
+    }
+    
+}

Modified: roller/trunk/src/org/apache/roller/ui/authoring/struts2/editor-menu.xml
URL: http://svn.apache.org/viewvc/roller/trunk/src/org/apache/roller/ui/authoring/struts2/editor-menu.xml?view=diff&rev=533830&r1=533829&r2=533830
==============================================================================
--- roller/trunk/src/org/apache/roller/ui/authoring/struts2/editor-menu.xml (original)
+++ roller/trunk/src/org/apache/roller/ui/authoring/struts2/editor-menu.xml Mon Apr 30 12:10:12 2007
@@ -95,10 +95,11 @@
                    perms="admin" 
                    disabledProperty="pings.disablePingUsage" />
         
-        <menu-item action="pingTargets" 
+        <menu-item action="customPingTargets" 
                    name="tabbedmenu.weblog.customPingTargets" 
                    roles="editor"
                    perms="admin" 
+                   subactions="customPingTargetAdd,customPingTargetEdit"
                    disabledProperty="pings.disallowCustomTargets" />        
         
         <menu-item action="maintenance"      

Added: roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetAddBase.java
URL: http://svn.apache.org/viewvc/roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetAddBase.java?view=auto&rev=533830
==============================================================================
--- roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetAddBase.java (added)
+++ roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetAddBase.java Mon Apr 30 12:10:12 2007
@@ -0,0 +1,113 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.ui.common.struts2;
+
+import org.apache.commons.logging.Log;
+import org.apache.roller.RollerException;
+import org.apache.roller.business.RollerFactory;
+import org.apache.roller.business.pings.PingTargetManager;
+import org.apache.roller.pojos.PingTargetData;
+import org.apache.roller.ui.core.util.struts2.UIAction;
+
+
+/**
+ * Base implementation for action that can add a new ping target.
+ */
+public abstract class PingTargetAddBase extends UIAction {
+    
+    // a bean for managing submitted data
+    private PingTargetFormBean bean = new PingTargetFormBean();
+    
+    
+    // get logger
+    protected abstract Log getLogger();
+    
+    // create a new ping target
+    protected abstract PingTargetData createPingTarget();
+    
+    
+    public String execute() {
+        return INPUT;
+    }
+    
+    
+    /**
+     * Save a new ping target.
+     */
+    public String save() {
+        
+        PingTargetData pingTarget = createPingTarget();
+        
+        // Call private helper to validate ping target
+        // If there are errors, go back to the target edit page.
+        myValidate(pingTarget);
+        
+        if(!hasActionErrors()) try {
+            // Appears to be ok.  Save it and flush.
+            PingTargetManager pingTargetMgr = RollerFactory.getRoller().getPingTargetManager();
+            pingTargetMgr.savePingTarget(pingTarget);
+            RollerFactory.getRoller().flush();
+            
+            addMessage("pingTarget.saved");
+            
+            return SUCCESS;
+            
+        } catch (RollerException ex) {
+            getLogger().error("Error adding ping target", ex);
+            // TODO: i18n
+            addError("Error adding ping target.");
+        }
+        
+        return INPUT;
+    }
+    
+    
+    /**
+     * Private helper to validate a ping target.
+     */
+    protected void myValidate(PingTargetData pingTarget) {
+        
+        try {
+            PingTargetManager pingTargetMgr = RollerFactory.getRoller().getPingTargetManager();
+            if (!pingTargetMgr.isNameUnique(pingTarget)) {
+                addError("pingTarget.nameNotUnique");
+            }
+            
+            if (!pingTargetMgr.isUrlWellFormed(pingTarget)) {
+                addError("pingTarget.malformedUrl");
+            } else if (!pingTargetMgr.isHostnameKnown(pingTarget)) {
+                addError("pingTarget.unknownHost");
+            }
+        } catch (RollerException ex) {
+            getLogger().error("Error validating ping target", ex);
+            // TODO: i18n
+            addError("Error doing ping target validation");
+        }
+    }
+    
+    
+    public PingTargetFormBean getBean() {
+        return bean;
+    }
+
+    public void setBean(PingTargetFormBean bean) {
+        this.bean = bean;
+    }
+    
+}

Added: roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetEditBase.java
URL: http://svn.apache.org/viewvc/roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetEditBase.java?view=auto&rev=533830
==============================================================================
--- roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetEditBase.java (added)
+++ roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetEditBase.java Mon Apr 30 12:10:12 2007
@@ -0,0 +1,163 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.ui.common.struts2;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.roller.RollerException;
+import org.apache.roller.business.RollerFactory;
+import org.apache.roller.business.pings.PingTargetManager;
+import org.apache.roller.pojos.PingTargetData;
+import org.apache.roller.ui.core.util.struts2.UIAction;
+
+
+/**
+ * Base implementation for action that can edit an existing ping target.
+ */
+public abstract class PingTargetEditBase extends UIAction {
+    
+    // ping target we are working on, if any
+    private PingTargetData pingTarget = null;
+    
+    // a bean for managing submitted data
+    private PingTargetFormBean bean = new PingTargetFormBean();
+    
+    
+    // get logger
+    protected abstract Log getLogger();
+    
+    
+    /**
+     * Prepare action by loading ping target to work on.
+     */
+    public void myPrepare() {
+        
+        PingTargetManager pingTargetMgr = RollerFactory.getRoller().getPingTargetManager();
+        if(!StringUtils.isEmpty(getBean().getId())) {
+            
+            try {
+                setPingTarget(pingTargetMgr.getPingTarget(getBean().getId()));
+            } catch (RollerException ex) {
+                getLogger().error("Error looking up ping target - "+getBean().getId());
+            }
+            
+            if(getPingTarget() == null) {
+                // TODO: i18n
+                addError("No such ping target id: " + getBean().getId());
+            }
+            
+        } else {
+            // TODO: i18n
+            addError("Missing ping target id: " + getBean().getId());
+        }
+    }
+    
+    
+    public String execute() {
+        
+        if(!hasActionErrors()) {
+            // load bean with data from ping target
+            getBean().copyFrom(getPingTarget());
+        } else {
+            // if we already have an error then that means we couldn't load
+            // an existing ping target to work on, so return ERROR result
+            return ERROR;
+        }
+        
+        return INPUT;
+    }
+    
+    
+    /**
+     * Save ping target.
+     */
+    public String save() {
+        
+        if(hasActionErrors()) {
+            // if we already have an error then that means we couldn't load
+            // an existing ping target to work on, so return ERROR result
+            return INPUT;
+        }
+        
+        // copy data from form into ping target
+        getBean().copyTo(getPingTarget());
+        
+        // Call private helper to validate ping target
+        // If there are errors, go back to the target edit page.
+        myValidate(getPingTarget());
+        
+        if(!hasActionErrors()) try {
+            // Appears to be ok.  Save it and flush.
+            PingTargetManager pingTargetMgr = RollerFactory.getRoller().getPingTargetManager();
+            pingTargetMgr.savePingTarget(getPingTarget());
+            RollerFactory.getRoller().flush();
+            
+            addMessage("pingTarget.saved");
+            
+        } catch (RollerException ex) {
+            getLogger().error("Error saving ping target", ex);
+            // TODO: i18n
+            addError("Error saving ping target.");
+        }
+        
+        return INPUT;
+    }
+    
+    
+    /**
+     * Private helper to validate a ping target.
+     */
+    protected void myValidate(PingTargetData pingTarget) {
+        
+        try {
+            PingTargetManager pingTargetMgr = RollerFactory.getRoller().getPingTargetManager();
+            if (!pingTargetMgr.isNameUnique(pingTarget)) {
+                addError("pingTarget.nameNotUnique");
+            }
+            
+            if (!pingTargetMgr.isUrlWellFormed(pingTarget)) {
+                addError("pingTarget.malformedUrl");
+            } else if (!pingTargetMgr.isHostnameKnown(pingTarget)) {
+                addError("pingTarget.unknownHost");
+            }
+        } catch (RollerException ex) {
+            getLogger().error("Error validating ping target", ex);
+            // TODO: i18n
+            addError("Error doing ping target validation");
+        }
+    }
+    
+    
+    public PingTargetData getPingTarget() {
+        return pingTarget;
+    }
+
+    public void setPingTarget(PingTargetData pingTarget) {
+        this.pingTarget = pingTarget;
+    }
+    
+    public PingTargetFormBean getBean() {
+        return bean;
+    }
+
+    public void setBean(PingTargetFormBean bean) {
+        this.bean = bean;
+    }
+    
+}

Added: roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetFormBean.java
URL: http://svn.apache.org/viewvc/roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetFormBean.java?view=auto&rev=533830
==============================================================================
--- roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetFormBean.java (added)
+++ roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetFormBean.java Mon Apr 30 12:10:12 2007
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.ui.common.struts2;
+
+import org.apache.roller.pojos.PingTargetData;
+
+
+/**
+ * Form bean used by ping target actions.
+ */
+public class PingTargetFormBean {
+    
+    private String id = null;
+    private String name = null;
+    private String pingUrl = null;
+    
+    
+    public String getId() {
+        return this.id;
+    }
+    
+    public void setId( String id ) {
+        this.id = id;
+    }
+    
+    public String getName() {
+        return this.name;
+    }
+    
+    public void setName( String name ) {
+        this.name = name;
+    }
+    
+    public String getPingUrl() {
+        return this.pingUrl;
+    }
+    
+    public void setPingUrl( String pingUrl ) {
+        this.pingUrl = pingUrl;
+    }
+    
+    
+    public void copyTo(PingTargetData dataHolder) {
+        
+        dataHolder.setName(this.name);
+        dataHolder.setPingUrl(this.pingUrl);
+    }
+    
+    
+    public void copyFrom(PingTargetData dataHolder) {
+        
+        this.id = dataHolder.getId();
+        this.name = dataHolder.getName();
+        this.pingUrl = dataHolder.getPingUrl();
+    }
+    
+}

Added: roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetsBase.java
URL: http://svn.apache.org/viewvc/roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetsBase.java?view=auto&rev=533830
==============================================================================
--- roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetsBase.java (added)
+++ roller/trunk/src/org/apache/roller/ui/common/struts2/PingTargetsBase.java Mon Apr 30 12:10:12 2007
@@ -0,0 +1,155 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.ui.common.struts2;
+
+import java.util.Collections;
+import java.util.List;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.roller.RollerException;
+import org.apache.roller.business.RollerFactory;
+import org.apache.roller.business.pings.PingTargetManager;
+import org.apache.roller.pojos.PingTargetData;
+import org.apache.roller.ui.core.util.struts2.UIAction;
+
+
+/**
+ * Base implementation for action that lists available ping targets and can
+ * handle deletion of a single ping target (with confirmation).
+ */
+public abstract class PingTargetsBase extends UIAction {
+    
+    // list of available ping targets
+    private List pingTargets = Collections.EMPTY_LIST;
+    
+    // ping target we are working on, if any
+    private PingTargetData pingTarget = null;
+    
+    // id of the ping target to work on
+    private String pingTargetId = null;
+    
+    
+    // get logger
+    protected abstract Log getLogger();
+    
+    // load up list of ping targets
+    protected abstract void loadPingTargets();
+    
+    
+    // prepare method needs to set ping targets list
+    public void myPrepare() {
+        
+        // load list of ping targets
+        loadPingTargets();
+        
+        // load specified ping target if possible
+        if(!StringUtils.isEmpty(getPingTargetId())) {
+            try {
+                PingTargetManager pingTargetMgr = RollerFactory.getRoller().getPingTargetManager();
+                setPingTarget(pingTargetMgr.getPingTarget(getPingTargetId()));
+            } catch (RollerException ex) {
+                getLogger().error("Error looking up ping target - "+getPingTargetId(), ex);
+            }
+        }
+    }
+    
+    
+    /**
+     * Display the ping targets.
+     */
+    public String execute() {
+        return LIST;
+    }
+
+    
+    /**
+     * Delete a ping target (load delete confirmation view).
+     */
+    public String deleteConfirm() {
+        
+        if(getPingTarget() != null) {
+            setPageTitle("pingTarget.confirmRemoveTitle");
+            
+            return "confirm";
+        } else {
+            // TODO: i18n
+            addError("Cannot delete ping target: " + getPingTargetId());
+        }
+        
+        return LIST;
+    }
+    
+    
+    /**
+     * Delete a ping target.
+     */
+    public String delete() {
+        
+        if(getPingTarget() != null) {
+            
+            try {
+                PingTargetManager pingTargetMgr = RollerFactory.getRoller().getPingTargetManager();
+                pingTargetMgr.removePingTarget(getPingTarget());
+                RollerFactory.getRoller().flush();
+                
+                // remove deleted target from list
+                getPingTargets().remove(getPingTarget());
+                
+                // TODO: i18n
+                addMessage("Successfully deleted ping target: "+getPingTarget().getName());
+                
+            } catch (RollerException ex) {
+                getLogger().error("Error deleting ping target - "+getPingTargetId(), ex);
+                // TODO: i18n
+                addError("Error deleting ping target - "+getPingTargetId());
+            }
+        } else {
+            // TODO: i18n
+            addError("Cannot delete ping target: " + getPingTargetId());
+        }
+        
+        return LIST;
+    }
+    
+    
+    public List getPingTargets() {
+        return pingTargets;
+    }
+
+    public void setPingTargets(List pingTargets) {
+        this.pingTargets = pingTargets;
+    }
+
+    public PingTargetData getPingTarget() {
+        return pingTarget;
+    }
+
+    public void setPingTarget(PingTargetData pingTarget) {
+        this.pingTarget = pingTarget;
+    }
+    
+    public String getPingTargetId() {
+        return pingTargetId;
+    }
+
+    public void setPingTargetId(String pingTargetId) {
+        this.pingTargetId = pingTargetId;
+    }
+    
+}

Modified: roller/trunk/web/WEB-INF/classes/struts.xml
URL: http://svn.apache.org/viewvc/roller/trunk/web/WEB-INF/classes/struts.xml?view=diff&rev=533830&r1=533829&r2=533830
==============================================================================
--- roller/trunk/web/WEB-INF/classes/struts.xml (original)
+++ roller/trunk/web/WEB-INF/classes/struts.xml Mon Apr 30 12:10:12 2007
@@ -116,6 +116,23 @@
             <result name="success" type="tiles">.CacheInfo</result>
         </action>
         
+        <action name="commonPingTargets!*" method="{1}"
+                class="org.apache.roller.ui.admin.struts2.CommonPingTargets">
+            <result name="list" type="tiles">.CommonPingTargets</result>
+            <result name="confirm" type="tiles">.CommonPingTargetConfirm</result>
+        </action>
+        
+        <action name="commonPingTargetAdd!*" method="{1}"
+                class="org.apache.roller.ui.admin.struts2.CommonPingTargetAdd">
+            <result name="input" type="tiles">.CommonPingTargetAdd</result>
+            <result name="success" type="chain">commonPingTargets</result>
+        </action>
+        
+        <action name="commonPingTargetEdit!*" method="{1}"
+                class="org.apache.roller.ui.admin.struts2.CommonPingTargetEdit">
+            <result name="input" type="tiles">.CommonPingTargetEdit</result>
+            <result name="error" type="chain">commonPingTargets</result>
+        </action>
         
         <!--
         <action name="commentManagement!*" method="{1}"
@@ -130,13 +147,6 @@
             <result name="commentManagementGlobal.page">.CommentManagementGlobal</result>
         </action>
         
-        <action name="commonPingTargets!*" method="{1}"
-                class="org.apache.roller.ui.admin.struts2.CommonPingTargetsAction">
-            <result name="pingTargets.page">.CommonPingTargets</result>
-            <result name="pingTargetEdit.page">.CommonPingTargetEdit</result>
-            <result name="pingTargetDeleteOK.page">.CommonPingTargetDeleteOK</result>
-        </action>
-        
         <action name="planetConfig!*" method="{1}"
                 class="org.apache.roller.planet.ui.admin.struts2.PlanetConfigAction">
             <result name="planetConfig.page">.PlanetConfig</result>
@@ -226,8 +236,22 @@
             <result>/roller-ui/authoring/pingSetup.do</result>
         </action>
         
-        <action name="pingTargets">
-            <result>/roller-ui/authoring/customPingTargets.do</result>
+        <action name="customPingTargets!*" method="{1}"
+                class="org.apache.roller.ui.authoring.struts2.CustomPingTargets">
+            <result name="list" type="tiles">.CustomPingTargets</result>
+            <result name="confirm" type="tiles">.CustomPingTargetConfirm</result>
+        </action>
+        
+        <action name="customPingTargetAdd!*" method="{1}"
+                class="org.apache.roller.ui.authoring.struts2.CustomPingTargetAdd">
+            <result name="input" type="tiles">.CustomPingTargetAdd</result>
+            <result name="success" type="chain">customPingTargets</result>
+        </action>
+        
+        <action name="customPingTargetEdit!*" method="{1}"
+                class="org.apache.roller.ui.authoring.struts2.CustomPingTargetEdit">
+            <result name="input" type="tiles">.CustomPingTargetEdit</result>
+            <result name="error" type="chain">customPingTargets</result>
         </action>
         
         <action name="maintenance">
@@ -240,12 +264,6 @@
                 class="org.apache.roller.ui.authoring.struts2.PingSetupAction">
             <result name="pingSetup.page">.Pings</result>
             <result name="pingResult.page">.PingResult</result>
-        </action>
-        <action name="customPingTargets!*" method="{1}"
-                class="org.apache.roller.ui.authoring.struts2.CustomPingTargetsAction">
-            <result name="pingTargets.page">.CustomPingTargets</result>
-            <result name="pingTargetEdit.page">.CustomPingTargetEdit</result>
-            <result name="pingTargetDeleteOK.page">.CustomPingTargetDeleteOK</result>
         </action>
         
         <action name="importBookmarks!*" method="{1}"

Added: roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargetAdd.jsp
URL: http://svn.apache.org/viewvc/roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargetAdd.jsp?view=auto&rev=533830
==============================================================================
--- roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargetAdd.jsp (added)
+++ roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargetAdd.jsp Mon Apr 30 12:10:12 2007
@@ -0,0 +1,42 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  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.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<p class="subtitle">
+<s:text name="commonPingTarget.subtitle"/>
+</p>
+
+<s:form action="commonPingTargetAdd!save" >
+
+    <div class="formrow">
+       <label for="name" class="formrow"><s:text name="pingTarget.name" /></label>
+       <s:textfield name="bean.name" size="30" maxlength="30" />
+    </div>
+
+    <div class="formrow">
+       <label for="pingUrl" class="formrow"><s:text name="pingTarget.pingUrl" /></label>
+       <s:textfield name="bean.pingUrl" size="100" maxlength="255" />
+    </div>
+
+    <p/>
+    <div class="formrow">
+       <label for="" class="formrow">&nbsp;</label>
+       <s:submit key="pingTarget.save" />
+    </div>
+
+</s:form>

Added: roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargetConfirm.jsp
URL: http://svn.apache.org/viewvc/roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargetConfirm.jsp?view=auto&rev=533830
==============================================================================
--- roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargetConfirm.jsp (added)
+++ roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargetConfirm.jsp Mon Apr 30 12:10:12 2007
@@ -0,0 +1,43 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  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.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<br />
+<h1><s:text name="" /></h1>
+
+<p/>
+<s:text name="pingTarget.confirmCommonRemove" />
+<p/>
+
+<table>
+    <tr><td><s:text name="pingTarget.name" />&nbsp;&nbsp;</td><td><b><s:property value="pingTarget.name" /></b></td></tr>
+    <tr><td><s:text name="pingTarget.pingUrl" />&nbsp;&nbsp;</td><td><b><s:property value="pingTarget.pingUrl" /></b></td></tr>
+</table>
+
+<br/>
+
+<div class="control">
+    <s:form action="commonPingTargets!delete">
+        <s:hidden name="pingTargetId" />
+        <s:submit key="pingTarget.removeOK" />
+    </s:form>
+    &nbsp;
+    <s:form action="commonPingTargets">
+        <s:submit key="pingTarget.cancel" />
+    </s:form>
+</div>

Added: roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargetEdit.jsp
URL: http://svn.apache.org/viewvc/roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargetEdit.jsp?view=auto&rev=533830
==============================================================================
--- roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargetEdit.jsp (added)
+++ roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargetEdit.jsp Mon Apr 30 12:10:12 2007
@@ -0,0 +1,44 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  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.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<p class="subtitle">
+<s:text name="commonPingTarget.subtitle"/>
+</p>
+
+<s:form action="commonPingTargetEdit!save" >
+    <s:hidden name="bean.id" />
+    
+    <div class="formrow">
+       <label for="name" class="formrow"><s:text name="pingTarget.name" /></label>
+       <s:textfield name="bean.name" size="30" maxlength="30" />
+    </div>
+
+    <div class="formrow">
+       <label for="pingUrl" class="formrow"><s:text name="pingTarget.pingUrl" /></label>
+       <s:textfield name="bean.pingUrl" size="100" maxlength="255" />
+    </div>
+
+    <p/>
+    <div class="formrow">
+       <label for="" class="formrow">&nbsp;</label>
+       <s:submit key="pingTarget.save" />
+       <s:submit key="pingTarget.cancel" action="commonPingTargets" />
+    </div>
+
+</s:form>

Added: roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargets.jsp
URL: http://svn.apache.org/viewvc/roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargets.jsp?view=auto&rev=533830
==============================================================================
--- roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargets.jsp (added)
+++ roller/trunk/web/WEB-INF/jsps/admin/struts2/CommonPingTargets.jsp Mon Apr 30 12:10:12 2007
@@ -0,0 +1,105 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  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.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<p class="subtitle">
+    <s:text name="commonPingTargets.subtitle" />
+</p>
+
+<p/><s:text name="commonPingTargets.explanation"/><p/>
+
+<table class="rollertable">
+
+<%-- Headings --%>
+<tr class="rollertable">
+    <th class="rollertable" width="20%%"><s:text name="pingTarget.name" /></th>
+    <th class="rollertable" width="55%"><s:text name="pingTarget.pingUrl" /></th>
+    <th class="rollertable" width="15%" colspan="2"><s:text name="pingTarget.autoEnabled" /></th>
+    <th class="rollertable" width="5%"><s:text name="pingTarget.edit" /></th>
+    <th class="rollertable" width="5%"><s:text name="pingTarget.remove" /></th>
+</tr>
+
+<%-- Listing of current common targets --%>
+<s:iterator id="pingTarget" value="pingTargets" status="rowstatus">
+    
+    <s:if test="#rowstatus.odd == true">
+        <tr class="rollertable_odd">
+    </s:if>
+    <s:else>
+        <tr class="rollertable_even">
+    </s:else>
+    
+    <td class="rollertable"><s:property value="#pingTarget.name" /></td>
+    
+    <td class="rollertable"><s:property value="#pingTarget.pingUrl" /></td>
+    
+    <!-- TODO: Use icons here -->
+    <td class="rollertable" align="center" >
+        <s:if test="#pingTarget.autoEnabled">
+            <span style="{color: #00aa00; font-weight: bold;}"><s:text name="pingTarget.enabled"/></span>&nbsp;
+        </s:if>
+        <s:else>
+            <span style="{color: #aaaaaa; font-weight: bold;}"><s:text name="pingTarget.disabled"/></span>&nbsp;
+        </s:else>
+    </td>
+    
+    <!-- TODO: Use icons here -->
+    <td class="rollertable" align="center" >
+        <s:if test="#pingTarget.autoEnabled">
+            <s:url id="disablePing" action="commonPingTargets!disable">
+                <s:param name="pingTargetId" value="#pingTarget.id" />
+            </s:url>
+            <a href="<s:url value="%{disablePing}"/>"><s:text name="pingTarget.disable"/></a>
+        </s:if>
+        <s:else>
+            <s:url id="enablePing" action="commonPingTargets!enable">
+                <s:param name="pingTargetId" value="#pingTarget.id" />
+            </s:url>
+            <a href="<s:url value="%{enablePing}"/>"><s:text name="pingTarget.enable"/></a>
+        </s:else>
+    </td>
+    
+    <td class="rollertable" align="center">
+        <s:url id="editPing" action="commonPingTargetEdit">
+            <s:param name="bean.id" value="#pingTarget.id" />
+        </s:url>
+        <a href="<s:url value="%{editPing}"/>">
+            <img src='<c:url value="/images/page_white_edit.png"/>' border="0" alt="<s:text name="pingTarget.edit" />" />
+        </a>
+    </td>
+    
+    <td class="rollertable" align="center">
+        <s:url id="removePing" action="commonPingTargets!deleteConfirm">
+            <s:param name="pingTargetId" value="#pingTarget.id" />
+        </s:url>
+        <a href="<s:url value="%{removePing}"/>">
+            <img src='<c:url value="/images/delete.png"/>' border="0" alt="<s:text name="pingTarget.remove" />" />
+        </a>
+    </td>
+    
+    </tr>
+</s:iterator>
+
+</table>
+
+<br />
+
+<div class="control">
+    <s:url id="addPing" action="commonPingTargetAdd" />
+    <s:a href="%{addPing}">Add Ping Target</s:a>
+</div>

Added: roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargetAdd.jsp
URL: http://svn.apache.org/viewvc/roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargetAdd.jsp?view=auto&rev=533830
==============================================================================
--- roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargetAdd.jsp (added)
+++ roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargetAdd.jsp Mon Apr 30 12:10:12 2007
@@ -0,0 +1,45 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  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.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<p class="subtitle">
+    <s:text name="customPingTarget.subtitle">
+        <s:param value="actionWeblog.handle"/>
+    </s:text>
+</p>
+
+<s:form action="customPingTargetAdd!save" >
+    <s:hidden name="weblog" value="%{actionWeblog.handle}" />
+    
+    <div class="formrow">
+       <label for="name" class="formrow"><s:text name="pingTarget.name" /></label>
+       <s:textfield name="bean.name" size="30" maxlength="30" />
+    </div>
+
+    <div class="formrow">
+       <label for="pingUrl" class="formrow"><s:text name="pingTarget.pingUrl" /></label>
+       <s:textfield name="bean.pingUrl" size="100" maxlength="255" />
+    </div>
+
+    <p/>
+    <div class="formrow">
+       <label for="" class="formrow">&nbsp;</label>
+       <s:submit key="pingTarget.save" />
+    </div>
+
+</s:form>

Added: roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargetConfirm.jsp
URL: http://svn.apache.org/viewvc/roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargetConfirm.jsp?view=auto&rev=533830
==============================================================================
--- roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargetConfirm.jsp (added)
+++ roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargetConfirm.jsp Mon Apr 30 12:10:12 2007
@@ -0,0 +1,45 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  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.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<br />
+<h1><s:text name="" /></h1>
+
+<p/>
+<s:text name="pingTarget.confirmCustomRemove" />
+<p/>
+
+<table>
+    <tr><td><s:text name="pingTarget.name" />&nbsp;&nbsp;</td><td><b><s:property value="pingTarget.name" /></b></td></tr>
+    <tr><td><s:text name="pingTarget.pingUrl" />&nbsp;&nbsp;</td><td><b><s:property value="pingTarget.pingUrl" /></b></td></tr>
+</table>
+
+<br/>
+
+<div class="control">
+    <s:form action="customPingTargets!delete">
+        <s:hidden name="pingTargetId" />
+        <s:hidden name="weblog" value="%{actionWeblog.handle}" />
+        <s:submit key="pingTarget.removeOK" />
+    </s:form>
+    &nbsp;
+    <s:form action="customPingTargets">
+        <s:hidden name="weblog" value="%{actionWeblog.handle}" />
+        <s:submit key="pingTarget.cancel" />
+    </s:form>
+</div>

Added: roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargetEdit.jsp
URL: http://svn.apache.org/viewvc/roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargetEdit.jsp?view=auto&rev=533830
==============================================================================
--- roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargetEdit.jsp (added)
+++ roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargetEdit.jsp Mon Apr 30 12:10:12 2007
@@ -0,0 +1,47 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  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.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<p class="subtitle">
+    <s:text name="customPingTarget.subtitle">
+        <s:param value="actionWeblog.handle"/>
+    </s:text>
+</p>
+
+<s:form action="customPingTargetEdit!save" >
+    <s:hidden name="bean.id" />
+    <s:hidden name="weblog" value="%{actionWeblog.handle}" />
+    
+    <div class="formrow">
+       <label for="name" class="formrow"><s:text name="pingTarget.name" /></label>
+       <s:textfield name="bean.name" size="30" maxlength="30" />
+    </div>
+
+    <div class="formrow">
+       <label for="pingUrl" class="formrow"><s:text name="pingTarget.pingUrl" /></label>
+       <s:textfield name="bean.pingUrl" size="100" maxlength="255" />
+    </div>
+
+    <p/>
+    <div class="formrow">
+       <label for="" class="formrow">&nbsp;</label>
+       <s:submit key="pingTarget.save" />
+       <s:submit key="pingTarget.cancel" action="customPingTargets" />
+    </div>
+
+</s:form>

Added: roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargets.jsp
URL: http://svn.apache.org/viewvc/roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargets.jsp?view=auto&rev=533830
==============================================================================
--- roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargets.jsp (added)
+++ roller/trunk/web/WEB-INF/jsps/authoring/struts2/CustomPingTargets.jsp Mon Apr 30 12:10:12 2007
@@ -0,0 +1,95 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  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.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<p class="subtitle">
+   <s:text name="customPingTargets.subtitle" >
+       <s:param value="actionWeblog.handle" />
+   </s:text>
+</p>  
+
+<s:if test="getProp('pings.disallowCustomTargets')">
+    <!--  Otherwise custom targets are not allowed; explain the situation to the user -->
+    <p class="pagetip">
+        <s:text name="customPingTargets.disAllowedExplanation"/>
+    </p>
+</s:if>
+<s:else>
+<!-- Only show the form if custom targets are allowed -->
+<p class="pagetip">
+    <s:text name="customPingTargets.explanation"/>
+</p>
+
+<table class="rollertable">
+
+<%-- Headings --%>
+<tr class="rollertable">
+    <th class="rollertable" width="20%%"><s:text name="pingTarget.name" /></th>
+    <th class="rollertable" width="70%"><s:text name="pingTarget.pingUrl" /></th>
+    <th class="rollertable" width="5%"><s:text name="pingTarget.edit" /></th>
+    <th class="rollertable" width="5%"><s:text name="pingTarget.remove" /></th>
+</tr>
+
+<%-- Listing of current common targets --%>
+<s:iterator id="pingTarget" value="pingTargets" status="rowstatus">
+    
+    <s:if test="#rowstatus.odd == true">
+        <tr class="rollertable_odd">
+    </s:if>
+    <s:else>
+        <tr class="rollertable_even">
+    </s:else>
+    
+    <td class="rollertable"><s:property value="#pingTarget.name" /></td>
+    
+    <td class="rollertable"><s:property value="#pingTarget.pingUrl" /></td>
+    
+    <td class="rollertable" align="center">
+        <s:url id="editPing" action="customPingTargetEdit">
+            <s:param name="bean.id" value="#pingTarget.id" />
+            <s:param name="weblog" value="actionWeblog.handle" />
+        </s:url>
+        <s:a href="%{editPing}">
+            <img src='<c:url value="/images/page_white_edit.png"/>' border="0" alt="<s:text name="pingTarget.edit" />" />
+        </s:a>
+    </td>
+    
+    <td class="rollertable" align="center">
+        <s:url id="removePing" action="customPingTargets!deleteConfirm">
+            <s:param name="pingTargetId" value="#pingTarget.id" />
+            <s:param name="weblog" value="actionWeblog.handle" />
+        </s:url>
+        <s:a href="%{removePing}">
+            <img src='<c:url value="/images/delete.png"/>' border="0" alt="<s:text name="pingTarget.remove" />" />
+        </s:a>
+    </td>
+    
+    </tr>
+</s:iterator>
+
+</table>
+
+<br />
+
+<div class="control">
+    <s:url id="addPing" action="customPingTargetAdd">
+        <s:param name="weblog" value="actionWeblog.handle" />
+    </s:url>
+    <s:a href="%{addPing}">Add Ping Target</s:a>
+</div>
+</s:else>

Modified: roller/trunk/web/WEB-INF/tiles.xml
URL: http://svn.apache.org/viewvc/roller/trunk/web/WEB-INF/tiles.xml?view=diff&rev=533830&r1=533829&r2=533830
==============================================================================
--- roller/trunk/web/WEB-INF/tiles.xml (original)
+++ roller/trunk/web/WEB-INF/tiles.xml Mon Apr 30 12:10:12 2007
@@ -81,168 +81,195 @@
     </definition>
     
     
-    <!-- weblog design pages -->
-    <definition name=".Templates" extends=".tiles-tabbedpage"  >
-        <put name="content" value="/WEB-INF/jsps/authoring/struts2/Templates.jsp" />
-        <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-nosidebar.jsp" />
+    <!-- global admin pages (and associates) -->
+    <definition name=".GlobalConfig" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/admin/struts2/GlobalConfig.jsp" />
     </definition>
-    <definition name=".TemplateEditForm" extends=".tiles-tabbedpage"  >
-        <put name="content" value="/WEB-INF/jsps/authoring/struts2/TemplateEdit.jsp" />
-        <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-nosidebar.jsp" />
+    
+    <definition name=".UserAdmin" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/admin/struts2/UserAdmin.jsp" />
     </definition>
     
-    <definition name=".ThemeEdit" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/authoring/struts2/ThemeEdit.jsp" />
+    <definition name=".CreateUser" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/admin/struts2/CreateUser.jsp" />
     </definition>
     
+    <definition name=".ModifyUser" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/admin/struts2/ModifyUser.jsp" />
+    </definition>
+    
+    <definition name=".CommonPingTargets" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/admin/struts2/CommonPingTargets.jsp" />
+    </definition>
+    
+    <definition name=".CommonPingTargetConfirm" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/admin/struts2/CommonPingTargetConfirm.jsp" />
+    </definition>
+    
+    <definition name=".CommonPingTargetAdd" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/admin/struts2/CommonPingTargetAdd.jsp" />
+    </definition>
+    
+    <definition name=".CommonPingTargetEdit" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/admin/struts2/CommonPingTargetEdit.jsp" />
+    </definition>
+    
+    <definition name=".CacheInfo" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/admin/struts2/CacheInfo.jsp" />
+    </definition>
+    
+    <definition name=".PlanetSubscriptions" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/admin/PlanetSubscriptions.jsp" />
+    </definition>
+    
+    <definition name=".PlanetConfig" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/admin/PlanetConfig.jsp" />
+    </definition>
+    
+    <definition name=".PlanetGroups" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/admin/PlanetGroups.jsp" />
+    </definition>
+    
+    
     <!-- weblog editor pages (and associates) -->
     <definition name=".WeblogEdit" extends=".tiles-tabbedpage" >
         <put name="content" value="/WEB-INF/jsps/authoring/WeblogEdit.jsp" />
         <put name="sidebar" value="/WEB-INF/jsps/authoring/WeblogEditSidebar.jsp" />
         <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-sidebar.jsp" />
     </definition>
+    
+    <definition name=".WeblogEntryRemove" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/authoring/WeblogEntryRemove.jsp" />
+        <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-nosidebar.jsp" />
+    </definition>
+    
     <definition name=".WeblogEntryManagement" extends=".tiles-tabbedpage" >
         <put name="content" value="/WEB-INF/jsps/authoring/WeblogEntryManagement.jsp" />
         <put name="sidebar" value="/WEB-INF/jsps/authoring/WeblogEntryManagementSidebar.jsp" />
         <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-sidebar.jsp" />
     </definition>
+    
     <definition name=".CommentManagement" extends=".tiles-tabbedpage" >
         <put name="content" value="/WEB-INF/jsps/authoring/CommentManagement.jsp" />
         <put name="sidebar" value="/WEB-INF/jsps/authoring/CommentManagementSidebar.jsp" />
         <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-sidebar.jsp" />
     </definition>
+    
+    <definition name=".CommentManagementGlobal" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/authoring/CommentManagement.jsp" />
+        <put name="sidebar" value="/WEB-INF/jsps/authoring/CommentManagementSidebar.jsp" />
+        <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-sidebar.jsp" />
+    </definition>
+    
     <definition name=".CategoriesForm" extends=".tiles-tabbedpage" >
         <put name="content" value="/WEB-INF/jsps/authoring/CategoriesForm.jsp" />
         <put name="sidebar" value="/WEB-INF/jsps/authoring/CategoriesSidebar.jsp" />
         <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-sidebar.jsp" />
     </definition>
-    <definition name=".referers" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/authoring/referers.jsp" />
-    </definition>
-    <definition name=".BookmarksForm" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/authoring/BookmarksForm.jsp" />
-        <put name="sidebar" value="/WEB-INF/jsps/authoring/BookmarksSidebar.jsp" />
-        <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-sidebar.jsp" />
-    </definition>
-    <definition name=".upload-file" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/authoring/UploadFile.jsp" />
-    </definition>
     
-    <!-- subpages -->
-    <definition name=".WeblogEntryRemove" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/authoring/WeblogEntryRemove.jsp" />
-        <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-nosidebar.jsp" />
-    </definition>
     <definition name=".CategoryForm" extends=".tiles-tabbedpage" >
         <put name="content" value="/WEB-INF/jsps/authoring/CategoryForm.jsp" />
         <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-nosidebar.jsp" />
     </definition>
+    
     <definition name=".CategoryDeleteOK" extends=".tiles-tabbedpage" >
         <put name="content" value="/WEB-INF/jsps/authoring/CategoryDeleteOK.jsp" />
         <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-nosidebar.jsp" />
     </definition>
+    
+    <definition name=".BookmarksForm" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/authoring/BookmarksForm.jsp" />
+        <put name="sidebar" value="/WEB-INF/jsps/authoring/BookmarksSidebar.jsp" />
+        <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-sidebar.jsp" />
+    </definition>
+    
     <definition name=".BookmarkForm" extends=".tiles-tabbedpage" >
         <put name="content" value="/WEB-INF/jsps/authoring/BookmarkForm.jsp" />
         <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-nosidebar.jsp" />
     </definition>
+    
     <definition name=".FolderForm" extends=".tiles-tabbedpage" >
         <put name="content" value="/WEB-INF/jsps/authoring/FolderForm.jsp" />
         <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-nosidebar.jsp" />
     </definition>
+    
     <definition name=".import" extends=".tiles-tabbedpage" >
         <put name="content" value="/WEB-INF/jsps/authoring/import.jsp" />
         <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-nosidebar.jsp" />
     </definition>
     
+    <definition name=".upload-file" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/authoring/UploadFile.jsp" />
+    </definition>
+    
+    <definition name=".referers" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/authoring/referers.jsp" />
+    </definition>
+    
+    
     <!-- weblog admin pages (and associates) -->
     <definition name=".edit-website" extends=".tiles-tabbedpage" >
         <put name="content" value="/WEB-INF/jsps/authoring/edit-website.jsp" />
     </definition>
-    <definition name=".CommentManagementGlobal" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/authoring/CommentManagement.jsp" />
-        <put name="sidebar" value="/WEB-INF/jsps/authoring/CommentManagementSidebar.jsp" />
-        <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-sidebar.jsp" />
-    </definition>
-    <definition name=".MemberPermissions" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/authoring/MemberPermissions.jsp" />
-        <put name="sidebar" value="/WEB-INF/jsps/authoring/MemberPermissionsSidebar.jsp" />
-        <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-sidebar.jsp" />
-    </definition>
-    <definition name=".CustomPingTargets" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/authoring/CustomPingTargets.jsp" />
-    </definition>
-    <definition name=".PingResult" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/authoring/PingResult.jsp" />
-    </definition>
-    <definition name=".Pings" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/authoring/Pings.jsp" />
-    </definition>
-    <definition name=".Maintenance" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/authoring/Maintenance.jsp" />
-    </definition>
     
-    <!-- subpages -->
     <definition name=".WebsiteRemove" extends=".tiles-tabbedpage" >
         <put name="content" value="/WEB-INF/jsps/authoring/WebsiteRemove.jsp" />
         <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-nosidebar.jsp" />
     </definition>
-    <definition name=".InviteMember" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/authoring/InviteMember.jsp" />
-        <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-nosidebar.jsp" />
+    
+    <definition name=".ThemeEdit" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/authoring/struts2/ThemeEdit.jsp" />
     </definition>
-    <definition name=".InviteMemberDone" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/authoring/InviteMemberDone.jsp" />
+    
+    <definition name=".Templates" extends=".tiles-tabbedpage"  >
+        <put name="content" value="/WEB-INF/jsps/authoring/struts2/Templates.jsp" />
         <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-nosidebar.jsp" />
     </definition>
-    <definition name=".CustomPingTargetDeleteOK" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/authoring/CustomPingTargetDeleteOK.jsp" />
+    
+    <definition name=".TemplateEditForm" extends=".tiles-tabbedpage"  >
+        <put name="content" value="/WEB-INF/jsps/authoring/struts2/TemplateEdit.jsp" />
         <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-nosidebar.jsp" />
     </definition>
-    <definition name=".CustomPingTargetEdit" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/authoring/CustomPingTargetEdit.jsp" />
-        <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-nosidebar.jsp" />
+    
+    <definition name=".MemberPermissions" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/authoring/MemberPermissions.jsp" />
+        <put name="sidebar" value="/WEB-INF/jsps/authoring/MemberPermissionsSidebar.jsp" />
+        <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-sidebar.jsp" />
     </definition>
+    
     <definition name=".Invitations" extends=".tiles-tabbedpage"  >
         <put name="content" value="/WEB-INF/jsps/authoring/Invitations.jsp" />
         <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-nosidebar.jsp" />
     </definition>
     
-    
-    <!-- global admin pages (and associates) -->
-    <definition name=".GlobalConfig" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/admin/struts2/GlobalConfig.jsp" />
-    </definition>
-    <definition name=".UserAdmin" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/admin/struts2/UserAdmin.jsp" />
-    </definition>
-    <definition name=".CreateUser" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/admin/struts2/CreateUser.jsp" />
-    </definition>
-    <definition name=".ModifyUser" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/admin/struts2/ModifyUser.jsp" />
-    </definition>
-    <definition name=".CommonPingTargets" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/admin/CommonPingTargets.jsp" />
+    <definition name=".InviteMember" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/authoring/InviteMember.jsp" />
+        <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-nosidebar.jsp" />
     </definition>
-    <definition name=".CacheInfo" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/admin/struts2/CacheInfo.jsp" />
+    
+    <definition name=".InviteMemberDone" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/authoring/InviteMemberDone.jsp" />
+        <put name="styles" value="/WEB-INF/jsps/tiles/struts2/css-nosidebar.jsp" />
     </definition>
     
-    <definition name=".CommonPingTargetDeleteOK" extends=".tiles-simplepage" >
-        <put name="content" value="/WEB-INF/jsps/admin/CommonPingTargetDeleteOK.jsp" />
+    <definition name=".CustomPingTargets" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/authoring/struts2/CustomPingTargets.jsp" />
     </definition>
-    <definition name=".CommonPingTargetEdit" extends=".tiles-simplepage" >
-        <put name="content" value="/WEB-INF/jsps/admin/CommonPingTargetEdit.jsp" />
+    
+    <definition name=".CustomPingTargetConfirm" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/authoring/struts2/CustomPingTargetConfirm.jsp" />
     </definition>
     
-    <definition name=".PlanetSubscriptions" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/admin/PlanetSubscriptions.jsp" />
+    <definition name=".CustomPingTargetAdd" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/authoring/struts2/CustomPingTargetAdd.jsp" />
     </definition>
-    <definition name=".PlanetConfig" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/admin/PlanetConfig.jsp" />
+    
+    <definition name=".CustomPingTargetEdit" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/authoring/struts2/CustomPingTargetEdit.jsp" />
     </definition>
-    <definition name=".PlanetGroups" extends=".tiles-tabbedpage" >
-        <put name="content" value="/WEB-INF/jsps/admin/PlanetGroups.jsp" />
+    
+    <definition name=".Maintenance" extends=".tiles-tabbedpage" >
+        <put name="content" value="/WEB-INF/jsps/authoring/Maintenance.jsp" />
     </definition>