]> source.dussan.org Git - archiva.git/commitdiff
[MRM-288] line up configuration so that it always works, regardless of the existence...
authorBrett Porter <brett@apache.org>
Thu, 8 Mar 2007 09:47:04 +0000 (09:47 +0000)
committerBrett Porter <brett@apache.org>
Thu, 8 Mar 2007 09:47:04 +0000 (09:47 +0000)
git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@515991 13f79535-47bb-0310-9956-ffa450edef68

archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java
archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/ArchivaConfigurationTest.java
archiva-configuration/src/test/resources/org/apache/maven/archiva/configuration/ArchivaConfigurationTest.xml
archiva-core/pom.xml
archiva-core/src/test/resources/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositoriesTest.xml
archiva-site/src/site/apt/guides/configuration.apt [new file with mode: 0644]
archiva-site/src/site/apt/guides/security-configuration.apt
archiva-site/src/site/site.xml
archiva-webapp/pom.xml
archiva-webapp/src/appserver-base/conf/archiva.xml [new file with mode: 0644]
archiva-webapp/src/main/resources/META-INF/plexus/application.xml

index 4a4f7fa50b85f9aa4b1660582834f40e02a09472..f3c50fbc0791caf1c6faff28f9d0963e9b75f397 100644 (file)
@@ -26,6 +26,7 @@ import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationExce
 import org.codehaus.plexus.registry.Registry;
 import org.codehaus.plexus.registry.RegistryException;
 import org.codehaus.plexus.registry.RegistryListener;
+import org.codehaus.plexus.util.StringUtils;
 
 import java.util.Iterator;
 
@@ -74,7 +75,11 @@ public class DefaultArchivaConfiguration
     public void save( Configuration configuration )
         throws RegistryException
     {
-        Registry section = registry.getSection( KEY );
+        Registry section = registry.getSection( KEY + ".user" );
+        if ( section == null )
+        {
+            section = registry.getSection( KEY + ".base" );
+        }
         new ConfigurationRegistryWriter().write( configuration, section );
         section.save();
 
@@ -83,8 +88,16 @@ public class DefaultArchivaConfiguration
 
     public void addChangeListener( RegistryListener listener )
     {
-        Registry section = registry.getSection( KEY );
-        section.addChangeListener( listener );
+        Registry section = registry.getSection( KEY + ".user" );
+        if ( section != null )
+        {
+            section.addChangeListener( listener );
+        }
+        section = registry.getSection( KEY + ".base" );
+        if ( section != null )
+        {
+            section.addChangeListener( listener );
+        }
     }
 
     public void initialize()
@@ -105,8 +118,10 @@ public class DefaultArchivaConfiguration
 
     private String removeExpressions( String directory )
     {
-        String value = org.codehaus.plexus.util.StringUtils.replace( directory, "${appserver.base}", registry.getString( "appserver.base", "${appserver.base}" ) );
-        value = org.codehaus.plexus.util.StringUtils.replace( value, "${appserver.home}", registry.getString( "appserver.home", "${appserver.home}" ) );
+        String value = StringUtils.replace( directory, "${appserver.base}",
+                                            registry.getString( "appserver.base", "${appserver.base}" ) );
+        value = StringUtils.replace( value, "${appserver.home}",
+                                     registry.getString( "appserver.home", "${appserver.home}" ) );
         return value;
     }
 
index 5c17abd6d116c3c97283b7a3116999d63efb1e86..4c21b15df4ba31ccb6bf71e4fce6a20b6fb8e660 100644 (file)
@@ -142,6 +142,68 @@ public class ArchivaConfigurationTest
         assertEquals( "check value", "index-path", configuration.getIndexPath() );
     }
 
+    public void testStoreConfigurationUser()
+        throws Exception
+    {
+        File baseFile = getTestFile( "target/test/test-file.xml" );
+        baseFile.delete();
+        assertFalse( baseFile.exists() );
+
+        File userFile = getTestFile( "target/test/test-file-user.xml" );
+        userFile.delete();
+        assertFalse( userFile.exists() );
+
+        // TODO: remove with commons-configuration 1.4
+        userFile.getParentFile().mkdirs();
+        org.codehaus.plexus.util.FileUtils.fileWrite( userFile.getAbsolutePath(), "<configuration/>" );
+
+        ArchivaConfiguration archivaConfiguration =
+            (ArchivaConfiguration) lookup( ArchivaConfiguration.class.getName(), "test-save-user" );
+
+        Configuration configuration = new Configuration();
+        configuration.setIndexPath( "index-path" );
+
+        archivaConfiguration.save( configuration );
+
+        assertTrue( "Check file exists", userFile.exists() );
+        assertFalse( "Check file not created", baseFile.exists() );
+
+        // check it
+        configuration = archivaConfiguration.getConfiguration();
+        assertEquals( "check value", "index-path", configuration.getIndexPath() );
+    }
+
+    public void testStoreConfigurationFallback()
+        throws Exception
+    {
+        File baseFile = getTestFile( "target/test/test-file.xml" );
+        baseFile.delete();
+        assertFalse( baseFile.exists() );
+
+        File userFile = getTestFile( "target/test/test-file-user.xml" );
+        userFile.delete();
+        assertFalse( userFile.exists() );
+
+        // TODO: remove with commons-configuration 1.4
+        baseFile.getParentFile().mkdirs();
+        org.codehaus.plexus.util.FileUtils.fileWrite( baseFile.getAbsolutePath(), "<configuration/>" );
+
+        ArchivaConfiguration archivaConfiguration =
+            (ArchivaConfiguration) lookup( ArchivaConfiguration.class.getName(), "test-save-user" );
+
+        Configuration configuration = new Configuration();
+        configuration.setIndexPath( "index-path" );
+
+        archivaConfiguration.save( configuration );
+
+        assertTrue( "Check file exists", baseFile.exists() );
+        assertFalse( "Check file not created", userFile.exists() );
+
+        // check it
+        configuration = archivaConfiguration.getConfiguration();
+        assertEquals( "check value", "index-path", configuration.getIndexPath() );
+    }
+
     public void testRemoveProxiedRepositoryAndStoreConfiguration()
         throws Exception
     {
index 44319293d61c5123725b6eafca9a6d7470503fcf..00c6fceb1393c1ac040d34f2935209ca65bd6733 100644 (file)
       <configuration>
         <properties>
           <xml fileName="${basedir}/target/test/test-file.xml" config-optional="true" config-forceCreate="true"
-               config-name="org.apache.maven.archiva" config-at="org.apache.maven.archiva"/>
+               config-name="org.apache.maven.archiva.base" config-at="org.apache.maven.archiva"/>
+        </properties>
+      </configuration>
+    </component>
+
+    <component>
+      <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+      <role-hint>test-save-user</role-hint>
+      <implementation>org.apache.maven.archiva.configuration.DefaultArchivaConfiguration</implementation>
+      <requirements>
+        <requirement>
+          <role>org.codehaus.plexus.registry.Registry</role>
+          <role-hint>save-user</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+    <component>
+      <role>org.codehaus.plexus.registry.Registry</role>
+      <role-hint>save-user</role-hint>
+      <implementation>org.codehaus.plexus.registry.commons.CommonsConfigurationRegistry</implementation>
+      <configuration>
+        <properties>
+          <xml fileName="${basedir}/target/test/test-file-user.xml" config-optional="true" config-forceCreate="true"
+               config-name="org.apache.maven.archiva.user" config-at="org.apache.maven.archiva"/>
+          <xml fileName="${basedir}/target/test/test-file.xml" config-optional="true" config-forceCreate="true"
+               config-name="org.apache.maven.archiva.base" config-at="org.apache.maven.archiva"/>
         </properties>
       </configuration>
     </component>
       <configuration>
         <properties>
           <xml fileName="${basedir}/target/test/test-file.xml" config-optional="true" config-forceCreate="true"
-               config-name="org.apache.maven.archiva" config-at="org.apache.maven.archiva"/>
+               config-name="org.apache.maven.archiva.base" config-at="org.apache.maven.archiva"/>
         </properties>
       </configuration>
     </component>
       <configuration>
         <properties>
           <xml fileName="${basedir}/target/test/with-proxied-repos.xml"
-               config-name="org.apache.maven.archiva" config-at="org.apache.maven.archiva"/>
+               config-name="org.apache.maven.archiva.base" config-at="org.apache.maven.archiva"/>
         </properties>
       </configuration>
     </component>
       <configuration>
         <properties>
           <xml fileName="${basedir}/target/test/with-proxied-repos.xml"
-               config-name="org.apache.maven.archiva" config-at="org.apache.maven.archiva"/>
+               config-name="org.apache.maven.archiva.base" config-at="org.apache.maven.archiva"/>
         </properties>
       </configuration>
     </component>
index ed730ec37262a78b50fbb2943c77eeadfb38be6d..09daa2d485b0944dec0813d0639c5e7c0a2abb97 100644 (file)
@@ -71,7 +71,7 @@
     <dependency>
       <groupId>org.codehaus.plexus.registry</groupId>
       <artifactId>plexus-registry-commons</artifactId>
-      <version>1.0-alpha-1</version>
+      <version>1.0-alpha-2-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <!-- TEST DEPS -->
index 34d15023a0dcee7c89934ab959a6e34876492305..1fa2e7e1d862de007f9127ab8b1b4158cab54056 100644 (file)
@@ -27,7 +27,7 @@
       <configuration>
         <properties>
           <xml fileName="${basedir}/src/test/conf/archiva.xml"
-               config-name="org.apache.maven.archiva" config-at="org.apache.maven.archiva"/>
+               config-name="org.apache.maven.archiva.base" config-at="org.apache.maven.archiva"/>
         </properties>
       </configuration>
     </component>
diff --git a/archiva-site/src/site/apt/guides/configuration.apt b/archiva-site/src/site/apt/guides/configuration.apt
new file mode 100644 (file)
index 0000000..c307dff
--- /dev/null
@@ -0,0 +1,63 @@
+ ------
+ Archiva Configuration
+ ------
+ The Maven Team
+ ------
+ 8 March 2007
+ ------
+
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements.  See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership.  The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License.  You may obtain a copy of the License at
+~~
+~~   http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied.  See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+~~ NOTE: For help with the syntax of this file, see:
+~~ http://maven.apache.org/guides/mini/guide-apt-format.html
+
+Archiva Configuration
+
+* Web Configuration
+
+  Archiva can be fully configured from the web interface (with the exception of the {{{security-configuration.html} security properties, presently}}).
+
+  ...
+
+~~TODO: more details needed, but I wanted to get this started
+
+* File system configuration
+
+  While Archiva can be fully configred by the web interface, the configuration will be saved to the file system and can be edited from there if needed.
+
+  Archiva's configuration is loaded from the following files, in order of most precedent:
+
+    * <<<~/.m2/archiva.xml>>>
+
+    * <<<$ARCHIVA_BASE/conf/archiva.xml>>>
+
+    * <<<$ARCHIVA_HOME/conf/archiva.xml>>>
+
+  When Archiva saves it's configuration, all configuration is stored to a single file. The file chosen is by the following rules:
+
+    * If <<<~/.m2/archiva.xml>>> exists, it is saved there
+
+    * Otherwise, it is saved to <<<$ARCHIVA_BASE/conf/archiva.xml>>>, regardless of whether it previously existed.
+
+  The configuration will never be saved in <<<$ARCHIVA_HOME>>>.
+
+  Note that the configuration can be edited, but only when Archiva is not running as it will not reload a changed configuration file, and will save over it
+  if something is changed in the web interface.
+
+~~TODO: format?
+
index 8c587610388d17eb591312abe6dd410fc1137466..6c94918b688ce9f4b23268331751531bc0625c22 100644 (file)
@@ -39,8 +39,6 @@ Archiva Security Configuration
  
  * <<<$ARCHIVA_HOME/conf/security.properties>>>
  
- * <<<$ARCHIVA_HOME/apps/archiva/conf/security.properties>>>
  []
  
  (In the above list, <<<~>>> is the home directory of the user who is running
index b2d1b5567a3e54ebee14f48376f5f2b3aa901d61..9c71480cedb6b8a70ad353eb0699a0cb8d29f450 100644 (file)
@@ -30,6 +30,7 @@
       <item name="FAQ" href="http://docs.codehaus.org/display/MAVENUSER/Archiva+FAQ"/>
       <item name="Maven Configuration" href="/guides/getting-started/maven-configuration.html"/>
       <item name="Security Configuration" href="/guides/security-configuration.html"/>
+      <item name="Other Configuration" href="/guides/configuration.html"/>
       <item name="Developing" href="/guides/developing/index.html"/>
     </menu>
     
index 31de092339318aeddada5104e0e5721ec6b4c454..ac94a47e9364cf23df5a68b3fc198b70f55d14d4 100644 (file)
           </instrumentation>
         </configuration>
       </plugin>
+      <plugin>
+        <artifactId>maven-antrun-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>generate-resources</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+            <configuration>
+              <tasks>
+                <copy todir="${project.build.directory}/appserver-base">
+                  <fileset dir="src/appserver-base" />
+                </copy>
+              </tasks>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
   </build>
 </project>
diff --git a/archiva-webapp/src/appserver-base/conf/archiva.xml b/archiva-webapp/src/appserver-base/conf/archiva.xml
new file mode 100644 (file)
index 0000000..9afb833
--- /dev/null
@@ -0,0 +1 @@
+<configuration />
index 9b0d313bf5e2a4417643513da22f464aae502688..e6725c0a61e5f84ba1b2986a89cac58fd2b6d84c 100644 (file)
@@ -29,8 +29,8 @@
         <properties>
           <system/>
           <jndi prefix="java:comp/env" config-optional="true"/>
-          <xml fileName="${user.home}/.m2/archiva.xml" config-optional="true" config-name="org.apache.maven.archiva"
-               config-at="org.apache.maven.archiva" config-forceCreate="true"/>
+          <xml fileName="${user.home}/.m2/archiva.xml" config-optional="true" config-name="org.apache.maven.archiva.user"
+               config-at="org.apache.maven.archiva" />
           <xml fileName="${user.home}/.m2/shared.xml" config-optional="true"
                config-name="org.apache.maven.shared.app" config-at="org.apache.maven.shared.app"
                config-forceCreate="true"/>
@@ -38,7 +38,7 @@
                       config-at="org.codehaus.plexus.security"/>
           <properties fileName="${user.home}/.m2/archiva.properties" config-optional="true"
                       config-at="org.codehaus.plexus.security"/>
-          <xml fileName="${appserver.base}/conf/archiva.xml" config-optional="true"
+          <xml fileName="${appserver.base}/conf/archiva.xml" config-optional="true" config-name="org.apache.maven.archiva.base"
                config-at="org.apache.maven.archiva"/>
           <xml fileName="${appserver.base}/conf/common.xml" config-optional="true"/>
           <properties fileName="${appserver.base}/conf/security.properties" config-optional="true"