]> source.dussan.org Git - archiva.git/commitdiff
PR: MRM-67
authorMaria Odea B. Ching <oching@apache.org>
Thu, 15 Jun 2006 11:05:04 +0000 (11:05 +0000)
committerMaria Odea B. Ching <oching@apache.org>
Thu, 15 Jun 2006 11:05:04 +0000 (11:05 +0000)
Created ConfigurationManager class that creates and updates the xml configuration file. Added web interface for setting and updating configuration used for indexing and discovery.

git-svn-id: https://svn.apache.org/repos/asf/maven/repository-manager/trunk@414556 13f79535-47bb-0310-9956-ffa450edef68

maven-repository-webapp/pom.xml
maven-repository-webapp/src/main/java/org/apache/maven/repository/manager/web/action/BaseAction.java
maven-repository-webapp/src/main/java/org/apache/maven/repository/manager/web/action/IndexConfigurationAction.java [new file with mode: 0644]
maven-repository-webapp/src/main/java/org/apache/maven/repository/manager/web/utils/ConfigurationManager.java [new file with mode: 0644]
maven-repository-webapp/src/main/resources/xwork.xml
maven-repository-webapp/src/main/webapp/WEB-INF/jsp/index.jsp
maven-repository-webapp/src/main/webapp/WEB-INF/jsp/indexConfigUpdateSuccess.jsp [new file with mode: 0644]
maven-repository-webapp/src/main/webapp/WEB-INF/jsp/indexconfig.jsp [new file with mode: 0644]

index 070b49098151d73e8c71ce33b171705989d681c1..4d3a7abfac411d10bed209c15b3e3c3e3d368a57 100644 (file)
       <artifactId>plexus-quartz</artifactId>
       <version>1.0-alpha-2</version>
     </dependency>
+    <dependency>
+      <groupId>dom4j</groupId>
+      <artifactId>dom4j</artifactId>
+      <version>1.6.1</version>
+    </dependency>
   </dependencies>
   <build>
     <finalName>maven-repository-webapp</finalName>
index 79d5f7d685b9e488807979380fdd550f601b8cf4..5c104dac47ac0c658cd001435caf1e532e4cff0c 100644 (file)
@@ -16,12 +16,16 @@ package org.apache.maven.repository.manager.web.action;
  * limitations under the License.\r
  */\r
 \r
-import com.opensymphony.xwork.Action;\r
+import com.opensymphony.xwork.ActionSupport;\r
+import com.opensymphony.webwork.interceptor.ParameterAware;\r
 import org.apache.maven.repository.configuration.Configuration;\r
 import org.apache.maven.repository.manager.web.execution.DiscovererExecution;\r
 import org.apache.maven.repository.manager.web.job.DiscovererScheduler;\r
+import org.apache.maven.repository.manager.web.utils.ConfigurationManager;\r
 \r
 import java.io.File;\r
+import java.util.Map;\r
+import java.util.HashMap;\r
 \r
 /**\r
  * This is the Action class of index.jsp, which is the initial page of the web application.\r
@@ -30,7 +34,8 @@ import java.io.File;
  * @plexus.component role="com.opensymphony.xwork.Action" role-hint="org.apache.maven.repository.manager.web.action.BaseAction"\r
  */\r
 public class BaseAction\r
-    implements Action\r
+    extends ActionSupport\r
+    implements ParameterAware\r
 {\r
     /**\r
      * @plexus.requirement\r
@@ -42,6 +47,21 @@ public class BaseAction
      */\r
     private DiscovererScheduler discovererScheduler;\r
 \r
+    /**\r
+     * @plexus.requirement\r
+     */\r
+    private ConfigurationManager configManager;\r
+\r
+    private Map parameters;\r
+\r
+    public Map getParameters() {\r
+        return parameters;\r
+    }\r
+\r
+    public void setParameters(Map parameters) {\r
+        this.parameters = parameters;\r
+    }\r
+\r
     /**\r
      * Method that executes the action\r
      *\r
@@ -51,9 +71,17 @@ public class BaseAction
     {\r
         try\r
         {\r
-            Configuration configuration = new Configuration(); // TODO!\r
-            execution.executeDiscovererIfIndexDoesNotExist( new File( configuration.getIndexPath() ) );\r
-            discovererScheduler.setSchedule( configuration.getDiscoveryCronExpression() );\r
+            Configuration config = configManager.getConfiguration();\r
+            Map parameters = new HashMap();\r
+            parameters.put( ConfigurationManager.INDEXPATH, config.getIndexPath() );\r
+            parameters.put( ConfigurationManager.MIN_INDEXPATH, config.getMinimalIndexPath() );\r
+            parameters.put( ConfigurationManager.DISCOVERY_BLACKLIST_PATTERNS, config.getDiscoveryBlackListPatterns() );\r
+            parameters.put( ConfigurationManager.DISCOVER_SNAPSHOTS, new Boolean( config.isDiscoverSnapshots() ) );\r
+            setParameters( parameters );\r
+\r
+            //Configuration configuration = new Configuration(); // TODO!\r
+            execution.executeDiscovererIfIndexDoesNotExist( new File( config.getIndexPath() ) );\r
+            discovererScheduler.setSchedule( config.getDiscoveryCronExpression() );\r
         }\r
         catch ( Exception e )\r
         {\r
diff --git a/maven-repository-webapp/src/main/java/org/apache/maven/repository/manager/web/action/IndexConfigurationAction.java b/maven-repository-webapp/src/main/java/org/apache/maven/repository/manager/web/action/IndexConfigurationAction.java
new file mode 100644 (file)
index 0000000..bcec9d4
--- /dev/null
@@ -0,0 +1,74 @@
+package org.apache.maven.repository.manager.web.action;
+
+import com.opensymphony.xwork.Action;
+import com.opensymphony.webwork.interceptor.ParameterAware;
+
+import java.util.Map;
+import java.util.HashMap;
+
+import org.apache.maven.repository.manager.web.utils.ConfigurationManager;
+
+
+/**
+ * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
+ *
+ * @plexus.component role="com.opensymphony.xwork.Action" role-hint="org.apache.maven.repository.manager.web.action.IndexConfigurationAction"
+ */
+public class IndexConfigurationAction
+    implements Action, ParameterAware
+{
+    private Map parameters;
+
+    /**
+     * @plexus.requirement
+     */
+    private ConfigurationManager configManager;
+
+    public Map getParameters() {
+        return parameters;
+    }
+
+    public void setParameters(Map parameters) {
+        this.parameters = parameters;
+    }
+
+    /**
+     * Method that is executed when the action is invoked.
+     *
+     * @return  a String that specifies where to go to next
+     * @throws Exception
+     */
+    public String execute()
+        throws Exception
+    {
+        String[] indexPath = (String[]) parameters.get( ConfigurationManager.INDEXPATH );
+        Map map = new HashMap();
+
+        if ( indexPath != null && indexPath.length == 1 && indexPath[0] != null )
+        {
+            String[] discoverSnapshots = (String[]) parameters.get( ConfigurationManager.DISCOVER_SNAPSHOTS );
+            String[] minimalIndexPath = (String[]) parameters.get( ConfigurationManager.MIN_INDEXPATH );
+            if( minimalIndexPath != null && minimalIndexPath.length == 1 && minimalIndexPath[0] != null )
+            {
+                map.put( ConfigurationManager.MIN_INDEXPATH, minimalIndexPath[0] );
+            }
+
+            map.put( ConfigurationManager.INDEXPATH, indexPath[0] );
+            map.put( ConfigurationManager.DISCOVER_SNAPSHOTS, discoverSnapshots[0] );
+
+            String[] blacklistPatterns = ( String[] ) parameters.get( ConfigurationManager.DISCOVERY_BLACKLIST_PATTERNS );
+            if( blacklistPatterns != null && blacklistPatterns.length == 1 && blacklistPatterns[0] != null )
+            {                 
+                map.put( ConfigurationManager.DISCOVERY_BLACKLIST_PATTERNS, blacklistPatterns[0] );
+            }
+
+            configManager.updateConfiguration( map );
+
+            return SUCCESS;
+        }
+        else
+        {
+            return ERROR;
+        }
+    }
+}
diff --git a/maven-repository-webapp/src/main/java/org/apache/maven/repository/manager/web/utils/ConfigurationManager.java b/maven-repository-webapp/src/main/java/org/apache/maven/repository/manager/web/utils/ConfigurationManager.java
new file mode 100644 (file)
index 0000000..849245d
--- /dev/null
@@ -0,0 +1,296 @@
+package org.apache.maven.repository.manager.web.utils;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.apache.maven.repository.configuration.Configuration;
+import org.apache.maven.repository.configuration.io.xpp3.ConfigurationXpp3Writer;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * This class updates the configuration in plexus.xml
+ *
+ * @plexus.component role="org.apache.maven.repository.manager.web.utils.ConfigurationManager"
+ */
+public class ConfigurationManager
+{
+    public static final String WEB_XML_FILE = "web.xml";
+
+    public static final String INDEX_CONFIG_FILE = "mrm-admin-config.xml";
+
+    public static final String CONFIGURATION = "configuration";
+
+    public static final String DISCOVER_SNAPSHOTS = "discoverSnapshots";
+
+    public static final String DISCOVERY_CRON_EXPRESSION = "discoveryCronExpression";
+
+    public static final String INDEXPATH = "indexPath";
+
+    public static final String MIN_INDEXPATH = "minimalIndexPath";
+
+    public static final String REPOSITORY_LAYOUT = "repositoryLayout";
+
+    public static final String REPOSITORY_DIRECTORY = "repositoryDirectory";
+
+    public static final String DISCOVERY_BLACKLIST_PATTERNS = "discoveryBlacklistPatterns";
+
+
+    private Configuration config;
+
+    private File plexusDescriptor;
+
+    private Document document;
+
+    /**
+     * Method for updating the configuration in plexus.xml
+     *
+     * @param map   contains the fields and the values to be updated in the configuration
+     */
+    public void updateConfiguration( Map map )
+        throws IOException
+    {
+        File file = getConfigFile();
+
+        try
+        {
+            document = readXmlDocument( file );
+        }
+        catch ( DocumentException de )
+        {
+            de.printStackTrace();
+        }
+
+        Element rootElement = document.getRootElement();
+        for( Iterator iter2 = rootElement.elementIterator(); iter2.hasNext(); )
+        {
+            Element field = (Element) iter2.next();
+            if( !map.containsKey( field.getName() ) )
+            {
+                map.put( field.getName(), field.getData() );
+            }
+        }
+
+        for( Iterator iter = map.entrySet().iterator();iter.hasNext(); )
+        {
+            Map.Entry entry = (Map.Entry) iter.next();
+            String name = (String) entry.getKey();
+            String value = ( String ) entry.getValue();
+
+            if( name.equals( DISCOVERY_CRON_EXPRESSION ) )
+            {
+                config.setDiscoveryCronExpression( value );
+            }
+            if( name.equals( REPOSITORY_LAYOUT ) )
+            {
+                config.setRepositoryLayout( value );
+            }
+            if( name.equals( DISCOVER_SNAPSHOTS ) )
+            {
+                config.setDiscoverSnapshots( Boolean.getBoolean( value ) );
+            }
+            if( name.equals( REPOSITORY_DIRECTORY ) )
+            {
+                config.setRepositoryDirectory( value );
+            }
+            if( name.equals( INDEXPATH ) )
+            {
+                config.setIndexPath( value );
+            }
+            if( name.equals( MIN_INDEXPATH ) )
+            {
+                config.setMinimalIndexPath( value );
+            }
+            if( name.equals( DISCOVERY_BLACKLIST_PATTERNS ) )
+            {
+                config.setDiscoveryBlackListPatterns( value );
+            }
+        }
+
+        writeXmlDocument( getConfigFile() );
+    }
+
+    /**
+     * Method that gets the properties set in the index-config.xml for the configuration fields
+     * used in the schedule, indexing and discovery
+     *
+     * @return a Map that contains the elements in the properties of the configuration object
+     */
+    public Configuration getConfiguration()
+        throws IOException
+    {
+        Map map = null;
+        File file = getConfigFile();
+        config = new Configuration();
+
+        if( !file.exists() )
+        {
+            writeXmlDocument( getConfigFile() );
+        }
+        else
+        {
+            try
+            {
+                document = readXmlDocument( file );
+            }
+            catch ( DocumentException de )
+            {
+                de.printStackTrace();
+            }
+
+            map = new HashMap();
+            Element rootElement = document.getRootElement();
+            for( Iterator iter2 = rootElement.elementIterator(); iter2.hasNext(); )
+            {
+                Element field = (Element) iter2.next();
+                map.put( field.getName(), field.getData() );
+            }
+
+            if( map.get( DISCOVERY_CRON_EXPRESSION ) != null && !"".equals( map.get( DISCOVERY_CRON_EXPRESSION ) ) )
+            {
+                 config.setDiscoveryCronExpression( ( String ) map.get( DISCOVERY_CRON_EXPRESSION ) );
+            }
+
+            if( map.get( REPOSITORY_LAYOUT ) != null && !"".equals( map.get( REPOSITORY_LAYOUT ) ) )
+            {
+                config.setRepositoryLayout( (String ) map.get( REPOSITORY_LAYOUT ) );
+            }
+
+            if( map.get( DISCOVER_SNAPSHOTS ) != null && !"".equals( map.get( DISCOVER_SNAPSHOTS ) ) )
+            {
+                config.setDiscoverSnapshots( ( ( Boolean ) map.get( DISCOVER_SNAPSHOTS ) ).booleanValue() );
+            }
+
+            if( map.get( REPOSITORY_DIRECTORY ) != null && !"".equals( map.get( REPOSITORY_DIRECTORY ) ) )
+            {
+                config.setRepositoryDirectory( ( String ) map.get( REPOSITORY_DIRECTORY ) );
+            }
+
+            if( map.get( INDEXPATH ) != null && !"".equals( map.get( INDEXPATH ) ) )
+            {
+                config.setIndexPath( ( String ) map.get( INDEXPATH ) );
+            }
+
+            if( map.get( MIN_INDEXPATH ) != null && !"".equals( map.get( MIN_INDEXPATH ) ) )
+            {
+                config.setMinimalIndexPath( ( String ) map.get( MIN_INDEXPATH ) );
+            }
+
+            if( map.get( DISCOVERY_BLACKLIST_PATTERNS ) != null && !"".equals( map.get( DISCOVERY_BLACKLIST_PATTERNS ) ) )
+            {
+                config.setDiscoveryBlackListPatterns( ( String ) map.get( DISCOVERY_BLACKLIST_PATTERNS ) );
+            }
+        }
+
+        return config;
+    }
+
+    /**
+     * Method that reads the xml file and puts it in a Document object
+     *
+     * @param file  the xml file to be read
+     * @return      a Document object that represents the contents of the xml file
+     * @throws DocumentException
+     */
+    protected Document readXmlDocument( File file )
+        throws DocumentException
+    {
+        SAXReader reader = new SAXReader();
+        if ( file.exists() )
+        {
+            return reader.read( file );
+        }
+
+        return null;
+    }
+
+    /**
+     * Method for removing the specified element from the document
+     *
+     * @param element
+     * @param name
+     */
+    protected void removeElement( Element element, String name )
+    {
+        for( Iterator children = element.elementIterator(); children.hasNext(); )
+        {
+            Element child = (Element) children.next();
+            if( child.getName().equals( name ) )
+            {
+                element.remove( child );
+            }
+        }
+    }
+
+    protected Element addElement( Element element, String name )
+    {
+        return element.addElement( name );
+    }
+
+    protected void setElementValue( Element element, String value )
+    {
+        element.setText( value );
+    }
+
+    protected Element addAndSetElement( Element element, String elementName, String elementValue )
+    {
+        Element retElement = addElement( element, elementName );
+
+        setElementValue( retElement, elementValue );
+
+        return retElement;
+    }
+
+    /**
+     * Method for writing the document object into its corresponding
+     * xml file.
+     *
+     * @param file      the file where the document will be written to
+     */
+    protected void writeXmlDocument( File file )
+        throws IOException
+    {
+        Writer writer = new FileWriter( file );
+        ConfigurationXpp3Writer configWriter = new ConfigurationXpp3Writer();
+        configWriter.write( writer, config );
+    }
+
+    /**
+     * Method that returns the index-config.xml file
+     *
+     * @return a File that references the plexus.xml
+     */
+    protected File getConfigFile()
+    {
+        URL indexConfigXml = getClass().getClassLoader().getResource( "../" + INDEX_CONFIG_FILE );
+
+        if( indexConfigXml != null )
+        {
+            plexusDescriptor = new File( indexConfigXml.getFile() );
+        }
+        else
+        {
+            URL xmlPath = getClass().getClassLoader().getResource( "../" + WEB_XML_FILE );
+            String path = xmlPath.getFile();
+            int lastIndex = path.lastIndexOf( '/' );
+            path = path.substring( 0, lastIndex + 1 );
+            path = path + INDEX_CONFIG_FILE;
+            plexusDescriptor = new File ( path );
+        }
+
+        return plexusDescriptor;
+    }
+
+    protected Document getDocument()
+    {
+        return document;
+    }
+}
index 7e65ca10e8eb03f0370ac632be7d80dd1a04ebad..d4c200439362554a2747a7225736f463ed73d6d0 100644 (file)
       <result name="success" type="dispatcher">/WEB-INF/jsp/browse.jsp</result>
       <result name="error" type="dispatcher">/WEB-INF/jsp/browse.jsp</result>
     </action>
+
+    <action name="configureIndex" class="org.apache.maven.repository.manager.web.action.IndexConfigurationAction">
+      <result name="success" type="dispatcher">/WEB-INF/jsp/indexConfigUpdateSuccess.jsp</result>
+      <result name="error" type="dispatcher">/WEB-INF/jsp/index.jsp</result>
+    </action>
+
   </package>
 </xwork>
 
index 0ae0ab76856419e00a5540053e84879ce277a209..a4cddfae9bdf1c39e47f7c4a58b85745436d0b4a 100644 (file)
@@ -25,6 +25,9 @@
 <h1>Maven Repository Manager</h1>
 
 <%@ include file="form.jspf" %>
+<p/>
+<%@ include file="indexconfig.jsp" %>
+<p/>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/maven-repository-webapp/src/main/webapp/WEB-INF/jsp/indexConfigUpdateSuccess.jsp b/maven-repository-webapp/src/main/webapp/WEB-INF/jsp/indexConfigUpdateSuccess.jsp
new file mode 100644 (file)
index 0000000..ca8555f
--- /dev/null
@@ -0,0 +1,24 @@
+<%@ taglib uri="webwork" prefix="ww" %>
+<html>
+<head>
+  <title>Maven Repository Manager</title>
+</head>
+
+<body>
+
+<h1>Index Configuration</h1>
+<br>
+Index configuration was updated successfully.
+<br>
+<%--
+Index Path: <ww:property value="parameters.indexPath"/>
+<br>
+Blacklist Patterns: <ww:property value="parameters.blacklistPatterns"/>
+<br>
+Include Snapshots: <ww:property value="parameters.includeSnapshots"/>
+<br>
+Convert Snapshots: <ww:property value="parameters.convertSnapshots"/>
+--%>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/maven-repository-webapp/src/main/webapp/WEB-INF/jsp/indexconfig.jsp b/maven-repository-webapp/src/main/webapp/WEB-INF/jsp/indexconfig.jsp
new file mode 100644 (file)
index 0000000..e12630a
--- /dev/null
@@ -0,0 +1,36 @@
+<%--
+  ~ Copyright 2006 The Apache Software Foundation.
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  --%>
+
+<%@ taglib uri="webwork" prefix="ww" %>
+
+<br>
+<p>
+<b>INDEX CONFIGURATION:</b>
+</p>
+
+<form action="configureIndex.action" method="get">
+  Index Path: <input type="text" name="indexPath" value="<ww:property value="parameters.indexPath"/>"/>
+  <br>
+  Minimal Index Path: <input type="text" name="minimalIndexPath" value="<ww:property value="parameters.minimalIndexPath"/>"/>
+  <br>
+  Blacklist Patterns: <input type="text" name="discoveryBlacklistPatterns" value="<ww:property value="parameters.discoveryBlacklistPatterns"/>"/>
+  <br>
+  Discover Snapshots: <input type="text" name="discoverSnapshots" value="<ww:property value="parameters.discoverSnapshots"/>"/>
+  <input type="submit" value="Update"/>
+</form>
+
+