You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by jo...@apache.org on 2007/05/01 14:46:49 UTC
svn commit: r534044 [1/2] - in
/maven/archiva/branches/archiva-jpox-database-refactor:
archiva-base/archiva-configuration/src/main/mdo/
archiva-database/src/main/java/org/apache/maven/archiva/database/
archiva-database/src/main/java/org/apache/maven/ar...
Author: joakime
Date: Tue May 1 05:46:46 2007
New Revision: 534044
URL: http://svn.apache.org/viewvc?view=rev&rev=534044
Log:
Updates for admin screens
Added:
maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/MostRecentRepositoryScanStatistics.java (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/MostRecentRepositoryScanStatisticsTest.java (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/AbstractRepositoryAction.java (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/EditRepositoryAction.java (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/IndexRepositoryAction.java
- copied, changed from r533137, maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/RunRepositoryTaskAction.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/SaveRepositoryAction.java (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/models/
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/models/AdminModel.java
- copied, changed from r533137, maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/AdminModel.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/models/AdminRepositoryConfiguration.java (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/interceptor/WebworkIsDoingStrangeThingsInterceptor.java (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/CopyPasteSnippet.java (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/CopyPasteSnippetTag.java (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ContextUtils.java (with props)
Removed:
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/AbstractConfigureRepositoryAction.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/AdminModel.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/ConfigureProxiedRepositoryAction.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/ConfigureSyncedRepositoryAction.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/DeleteProxiedRepositoryAction.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/DeleteSyncedRepositoryAction.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/RunRepositoryTaskAction.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/component/
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addProxiedRepository.jsp
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addSyncedRepository.jsp
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteProxiedRepository.jsp
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteSyncedRepository.jsp
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editProxiedRepository.jsp
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editSyncedRepository.jsp
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/managedRepositories.jsp
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/proxiedRepositories.jsp
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/selectSyncedRepository.jsp
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/syncedRepositories.jsp
Modified:
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaDAO.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArchivaDAO.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/AbstractArchivaDatabaseTestCase.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/ArtifactsProcessedConstraintTest.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/ArchivaTaskQueue.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/ArchivaTaskScheduler.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/ConfigureAction.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/ConfigureRepositoryAction.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/RepositoriesAction.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/RepositoryServlet.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/resources/META-INF/plexus/application.xml
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/resources/META-INF/taglib.tld
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/resources/log4j.xml
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/resources/webwork.properties
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/resources/xwork.xml
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addRepository.jsp
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editRepository.jsp
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/managedRepositoryForm.jspf
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/decorators/default.jsp
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/tags/currentWWUrl.tag
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/web.xml
maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/webapp/css/maven-theme.css
Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo?view=diff&rev=534044&r1=534043&r2=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo Tue May 1 05:46:46 2007
@@ -257,7 +257,47 @@
</description>
<defaultValue>0 0,30 * * * ?</defaultValue>
</field>
- </fields>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.0.0+</version>
+ <code><![CDATA[
+ /**
+ * Utility method to help determine if configuration refers to a remote repository.
+ *
+ * @return true if configuration belongs to a remote repository.
+ * (note: false does not automatically mean this is a managed repository,
+ * you must use {@link #isManaged()} to test for that.)
+ */
+ public boolean isRemote()
+ {
+ if ( this.url == null )
+ {
+ return false;
+ }
+
+ return !this.url.startsWith( "file" );
+ }
+
+ /**
+ * Utility method to help determine if configuration refers to a managed repository.
+ *
+ * @return true if configuration belongs to a managed repository.
+ * (note: false does not automatically mean this is a remote repository,
+ * you must use {@link #isRemote()} to test for that.)
+ */
+ public boolean isManaged()
+ {
+ if ( this.url == null )
+ {
+ return false;
+ }
+
+ return this.url.startsWith( "file" );
+ }
+ ]]></code>
+ </codeSegment>
+ </codeSegments>
</class>
<!--
Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaDAO.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaDAO.java?view=diff&rev=534044&r1=534043&r2=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaDAO.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaDAO.java Tue May 1 05:46:46 2007
@@ -19,6 +19,7 @@
* under the License.
*/
+import java.io.Serializable;
import java.util.List;
/**
@@ -38,6 +39,14 @@
* @return the List of results.
*/
List query( SimpleConstraint constraint );
+
+ /**
+ * Perform a simple save of a peristable object to the database.
+ *
+ * @param o the serializable (persistable) object to save.
+ * @return the post-serialized object.
+ */
+ Object save( Serializable obj );
ArtifactDAO getArtifactDAO();
Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/MostRecentRepositoryScanStatistics.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/MostRecentRepositoryScanStatistics.java?view=auto&rev=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/MostRecentRepositoryScanStatistics.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/MostRecentRepositoryScanStatistics.java Tue May 1 05:46:46 2007
@@ -0,0 +1,54 @@
+package org.apache.maven.archiva.database.constraints;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.archiva.model.RepositoryContentStatistics;
+
+/**
+ * MostRecentRepositoryScanStatistics
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class MostRecentRepositoryScanStatistics
+ extends AbstractSimpleConstraint
+{
+ private String sql;
+
+ public MostRecentRepositoryScanStatistics( String repoId )
+ {
+ sql = "SELECT FROM " + RepositoryContentStatistics.class.getName()
+ + " WHERE repositoryId == repoId PARAMETERS String repoId"
+ + " ORDER BY whenGathered DESCENDING"
+ + " RANGE 1,1";
+
+ super.params = new Object[] { repoId };
+ }
+
+ public Class getResultClass()
+ {
+ return RepositoryContentStatistics.class;
+ }
+
+ public String getSelectSql()
+ {
+ return sql;
+ }
+}
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/MostRecentRepositoryScanStatistics.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/MostRecentRepositoryScanStatistics.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/MostRecentRepositoryScanStatistics.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArchivaDAO.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArchivaDAO.java?view=diff&rev=534044&r1=534043&r2=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArchivaDAO.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArchivaDAO.java Tue May 1 05:46:46 2007
@@ -27,6 +27,7 @@
import org.apache.maven.archiva.database.SimpleConstraint;
import org.codehaus.plexus.logging.AbstractLogEnabled;
+import java.io.Serializable;
import java.util.List;
/**
@@ -45,37 +46,42 @@
* @plexus.requirement role-hint="archiva"
*/
private JdoAccess jdo;
-
+
/**
* @plexus.requirement role-hint="jdo"
*/
private ArtifactDAO artifactDAO;
-
+
/**
* @plexus.requirement role-hint="jdo"
*/
private ProjectModelDAO projectModelDAO;
-
+
/**
* @plexus.requirement role-hint="jdo"
*/
private RepositoryDAO repositoryDAO;
-
+
/**
* @plexus.requirement role-hint="jdo"
*/
private RepositoryProblemDAO repositoryProblemDAO;
-
+
public List query( SimpleConstraint constraint )
{
return jdo.queryObjects( constraint );
}
+ public Object save( Serializable obj )
+ {
+ return jdo.saveObject( obj );
+ }
+
public ArtifactDAO getArtifactDAO()
{
return artifactDAO;
}
-
+
public ProjectModelDAO getProjectModelDAO()
{
return projectModelDAO;
Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/AbstractArchivaDatabaseTestCase.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/AbstractArchivaDatabaseTestCase.java?view=diff&rev=534044&r1=534043&r2=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/AbstractArchivaDatabaseTestCase.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/AbstractArchivaDatabaseTestCase.java Tue May 1 05:46:46 2007
@@ -26,6 +26,8 @@
import java.io.File;
import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
@@ -42,41 +44,43 @@
public class AbstractArchivaDatabaseTestCase
extends PlexusTestCase
{
+ private static final String TIMESTAMP = "yyyy/MM/dd HH:mm:ss";
+
protected ArchivaDAO dao;
-
+
protected void setUp()
throws Exception
{
super.setUp();
-
+
DefaultConfigurableJdoFactory jdoFactory = (DefaultConfigurableJdoFactory) lookup( JdoFactory.ROLE, "archiva" );
assertEquals( DefaultConfigurableJdoFactory.class.getName(), jdoFactory.getClass().getName() );
- jdoFactory.setPersistenceManagerFactoryClass( "org.jpox.PersistenceManagerFactoryImpl" );
+ jdoFactory.setPersistenceManagerFactoryClass( "org.jpox.PersistenceManagerFactoryImpl" );
/* derby version
- File derbyDbDir = new File( "target/plexus-home/testdb" );
- if ( derbyDbDir.exists() )
- {
- FileUtils.deleteDirectory( derbyDbDir );
- }
-
- jdoFactory.setDriverName( System.getProperty( "jdo.test.driver", "org.apache.derby.jdbc.EmbeddedDriver" ) );
- jdoFactory.setUrl( System.getProperty( "jdo.test.url", "jdbc:derby:" + derbyDbDir.getAbsolutePath() + ";create=true" ) );
- */
+ File derbyDbDir = new File( "target/plexus-home/testdb" );
+ if ( derbyDbDir.exists() )
+ {
+ FileUtils.deleteDirectory( derbyDbDir );
+ }
+
+ jdoFactory.setDriverName( System.getProperty( "jdo.test.driver", "org.apache.derby.jdbc.EmbeddedDriver" ) );
+ jdoFactory.setUrl( System.getProperty( "jdo.test.url", "jdbc:derby:" + derbyDbDir.getAbsolutePath() + ";create=true" ) );
+ */
- jdoFactory.setDriverName( System.getProperty( "jdo.test.driver", "org.hsqldb.jdbcDriver" ) );
+ jdoFactory.setDriverName( System.getProperty( "jdo.test.driver", "org.hsqldb.jdbcDriver" ) );
jdoFactory.setUrl( System.getProperty( "jdo.test.url", "jdbc:hsqldb:mem:" + getName() ) );
-
- jdoFactory.setUserName( System.getProperty( "jdo.test.user", "sa" ) );
- jdoFactory.setPassword( System.getProperty( "jdo.test.pass", "" ) );
+ jdoFactory.setUserName( System.getProperty( "jdo.test.user", "sa" ) );
+
+ jdoFactory.setPassword( System.getProperty( "jdo.test.pass", "" ) );
- jdoFactory.setProperty( "org.jpox.transactionIsolation", "READ_COMMITTED" );
+ jdoFactory.setProperty( "org.jpox.transactionIsolation", "READ_COMMITTED" );
- jdoFactory.setProperty( "org.jpox.poid.transactionIsolation", "READ_COMMITTED" );
+ jdoFactory.setProperty( "org.jpox.poid.transactionIsolation", "READ_COMMITTED" );
- jdoFactory.setProperty( "org.jpox.autoCreateSchema", "true" );
+ jdoFactory.setProperty( "org.jpox.autoCreateSchema", "true" );
jdoFactory.setProperty( "javax.jdo.option.RetainValues", "true" );
@@ -99,8 +103,7 @@
System.setProperty( (String) entry.getKey(), (String) entry.getValue() );
}
- URL jdoFileUrls[] = new URL[] { getClass()
- .getResource( "/org/apache/maven/archiva/model/package.jdo" ) };
+ URL jdoFileUrls[] = new URL[] { getClass().getResource( "/org/apache/maven/archiva/model/package.jdo" ) };
if ( ( jdoFileUrls == null ) || ( jdoFileUrls[0] == null ) )
{
@@ -122,5 +125,19 @@
pm.close();
this.dao = (ArchivaDAO) lookup( ArchivaDAO.class.getName(), "jdo" );
+ }
+
+ protected Date toDate( String txt )
+ throws Exception
+ {
+ SimpleDateFormat sdf = new SimpleDateFormat( TIMESTAMP );
+ return sdf.parse( txt );
+ }
+
+ protected String fromDate( Date date )
+ throws Exception
+ {
+ SimpleDateFormat sdf = new SimpleDateFormat( TIMESTAMP );
+ return sdf.format( date );
}
}
Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/ArtifactsProcessedConstraintTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/ArtifactsProcessedConstraintTest.java?view=diff&rev=534044&r1=534043&r2=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/ArtifactsProcessedConstraintTest.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/ArtifactsProcessedConstraintTest.java Tue May 1 05:46:46 2007
@@ -23,7 +23,6 @@
import org.apache.maven.archiva.database.ArtifactDAO;
import org.apache.maven.archiva.model.ArchivaArtifact;
-import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
@@ -57,13 +56,6 @@
return artifact;
}
- private Date toDate( String txt )
- throws Exception
- {
- SimpleDateFormat sdf = new SimpleDateFormat( "yyyy/MM/dd HH:mm:ss" );
- return sdf.parse( txt );
- }
-
public void assertResults( String type, List results, String expectedArtifacts[] )
{
assertNotNull( "Results[" + type + "] should not be null.", results );
Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/MostRecentRepositoryScanStatisticsTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/MostRecentRepositoryScanStatisticsTest.java?view=auto&rev=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/MostRecentRepositoryScanStatisticsTest.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/MostRecentRepositoryScanStatisticsTest.java Tue May 1 05:46:46 2007
@@ -0,0 +1,86 @@
+package org.apache.maven.archiva.database.constraints;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.archiva.database.AbstractArchivaDatabaseTestCase;
+import org.apache.maven.archiva.model.RepositoryContentStatistics;
+
+import java.util.List;
+
+/**
+ * MostRecentRepositoryScanStatisticsTest
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class MostRecentRepositoryScanStatisticsTest
+ extends AbstractArchivaDatabaseTestCase
+{
+ private RepositoryContentStatistics createStats( String repoId, String timestamp, long duration, long totalfiles,
+ long newfiles )
+ throws Exception
+ {
+ RepositoryContentStatistics stats = new RepositoryContentStatistics();
+ stats.setRepositoryId( repoId );
+ stats.setDuration( duration );
+ stats.setNewFileCount( newfiles );
+ stats.setTotalFileCount( totalfiles );
+ stats.setWhenGathered( toDate( timestamp ) );
+
+ return stats;
+ }
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ dao.save( createStats( "internal", "2007/02/21 10:00:00", 20000, 12000, 400 ) );
+ dao.save( createStats( "internal", "2007/02/20 10:00:00", 20000, 11800, 0 ) );
+ dao.save( createStats( "internal", "2007/02/19 10:00:00", 20000, 11800, 100 ) );
+ dao.save( createStats( "internal", "2007/02/18 10:00:00", 20000, 11700, 320 ) );
+ }
+
+ public void testNotProcessedYet()
+ throws Exception
+ {
+ List results = dao.query( new MostRecentRepositoryScanStatistics( "central" ) );
+ assertNotNull( "Not Processed Yet", results );
+ assertTrue( "Not Processed Yet", results.isEmpty() );
+ }
+
+ public void testStats()
+ throws Exception
+ {
+ List results = dao.query( new MostRecentRepositoryScanStatistics( "internal" ) );
+ assertNotNull( "Stats: results (not null)", results );
+ assertEquals( "Stats: results.size", 1, results.size() );
+
+ Object o = results.get( 0 );
+ assertTrue( "Stats: result[0] instanceof RepositoryScanStatistics", o instanceof RepositoryContentStatistics );
+ RepositoryContentStatistics stats = (RepositoryContentStatistics) o;
+ assertEquals( "Stats: id", "internal", stats.getRepositoryId() );
+ assertEquals( "Stats: when gathered", "2007/02/21 10:00:00", fromDate( stats.getWhenGathered() ) );
+ assertEquals( "Stats: duration", 20000, stats.getDuration() );
+ assertEquals( "Stats: total file count", 12000, stats.getTotalFileCount() );
+ assertEquals( "Stats: new file count", 400, stats.getNewFileCount() );
+ }
+
+}
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/MostRecentRepositoryScanStatisticsTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/MostRecentRepositoryScanStatisticsTest.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/MostRecentRepositoryScanStatisticsTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/ArchivaTaskQueue.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/ArchivaTaskQueue.java?view=diff&rev=534044&r1=534043&r2=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/ArchivaTaskQueue.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/ArchivaTaskQueue.java Tue May 1 05:46:46 2007
@@ -19,7 +19,15 @@
* under the License.
*/
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.archiva.scheduled.tasks.DatabaseTask;
+import org.apache.maven.archiva.scheduled.tasks.RepositoryTask;
import org.codehaus.plexus.taskqueue.DefaultTaskQueue;
+import org.codehaus.plexus.taskqueue.Task;
+import org.codehaus.plexus.taskqueue.TaskQueueException;
+
+import java.util.Iterator;
+import java.util.List;
/**
* ArchivaTaskQueue
@@ -38,5 +46,75 @@
{
super();
/* do nothing special */
+ }
+
+ public boolean hasDatabaseTaskInQueue()
+ {
+ try
+ {
+ List queue = getQueueSnapshot();
+ Iterator it = queue.iterator();
+ while ( it.hasNext() )
+ {
+ Task task = (Task) it.next();
+ if ( task instanceof DatabaseTask )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+ catch ( TaskQueueException e )
+ {
+ return false;
+ }
+ }
+
+ public boolean hasFilesystemTaskInQueue()
+ {
+ try
+ {
+ List queue = getQueueSnapshot();
+ Iterator it = queue.iterator();
+ while ( it.hasNext() )
+ {
+ Task task = (Task) it.next();
+ if ( task instanceof RepositoryTask )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+ catch ( TaskQueueException e )
+ {
+ return false;
+ }
+ }
+
+ public boolean hasRepositoryTaskInQueue( String repoid )
+ {
+ try
+ {
+ List queue = getQueueSnapshot();
+ Iterator it = queue.iterator();
+ while ( it.hasNext() )
+ {
+ Task task = (Task) it.next();
+ if ( task instanceof RepositoryTask )
+ {
+ RepositoryTask rtask = (RepositoryTask) task;
+ if ( StringUtils.equals( repoid, rtask.getRepositoryId() ) )
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ catch ( TaskQueueException e )
+ {
+ return false;
+ }
}
}
Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/ArchivaTaskScheduler.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/ArchivaTaskScheduler.java?view=diff&rev=534044&r1=534043&r2=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/ArchivaTaskScheduler.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/ArchivaTaskScheduler.java Tue May 1 05:46:46 2007
@@ -32,11 +32,15 @@
* The Plexus component role.
*/
public final static String ROLE = ArchivaTaskScheduler.class.getName();
+
+ public ArchivaTaskQueue getTaskQueue();
- public void runDatabaseTasks() throws TaskExecutionException;
+ public void scheduleAllRepositoryTasks()
+ throws TaskExecutionException;
- public void runAllRepositoryTasks() throws TaskExecutionException;
-
- public void runRepositoryTasks( String repositoryId ) throws TaskExecutionException;
-
-}
+ public void scheduleDatabaseTasks()
+ throws TaskExecutionException;
+
+ public void scheduleRepositoryTask( String repositoryId )
+ throws TaskExecutionException;
+}
Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java?view=diff&rev=534044&r1=534043&r2=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java Tue May 1 05:46:46 2007
@@ -20,12 +20,8 @@
*/
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
-import org.apache.maven.archiva.configuration.Configuration;
import org.apache.maven.archiva.configuration.RepositoryConfiguration;
-import org.apache.maven.archiva.database.ArchivaDatabaseException;
-import org.apache.maven.archiva.database.ObjectNotFoundException;
-import org.apache.maven.archiva.database.RepositoryDAO;
-import org.apache.maven.archiva.model.ArchivaRepository;
+import org.apache.maven.archiva.scheduled.tasks.ArchivaTask;
import org.codehaus.plexus.logging.AbstractLogEnabled;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Startable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.StartingException;
@@ -34,7 +30,6 @@
import org.codehaus.plexus.registry.RegistryListener;
import org.codehaus.plexus.scheduler.Scheduler;
import org.codehaus.plexus.taskqueue.TaskQueue;
-import org.codehaus.plexus.taskqueue.TaskQueueException;
import org.codehaus.plexus.taskqueue.execution.TaskExecutionException;
import org.quartz.CronTrigger;
import org.quartz.JobDataMap;
@@ -73,12 +68,12 @@
private ArchivaConfiguration archivaConfiguration;
- public static final String DATABASE_DISCOVERER_GROUP = "database-group";
+ public static final String DATABASE_SCAN_GROUP = "database-group";
public static final String DATABASE_JOB = "database-job";
public static final String DATABASE_JOB_TRIGGER = "database-job-trigger";
- public static final String REPOSITORY_DISCOVERER_GROUP = "repository-group";
+ public static final String REPOSITORY_SCAN_GROUP = "repository-group";
public static final String REPOSITORY_JOB = "repository-job";
public static final String REPOSITORY_JOB_TRIGGER = "repository-job-trigger";
@@ -119,17 +114,18 @@
// setup the unprocessed artifact job
JobDetail repositoryJob =
- new JobDetail( REPOSITORY_JOB + ":" + repoConfig.getId() , REPOSITORY_DISCOVERER_GROUP, RepositoryTaskJob.class );
+ new JobDetail( REPOSITORY_JOB + ":" + repoConfig.getId() , REPOSITORY_SCAN_GROUP, RepositoryTaskJob.class );
JobDataMap dataMap = new JobDataMap();
dataMap.put( RepositoryTaskJob.TASK_QUEUE, archivaTaskQueue );
+ dataMap.put( RepositoryTaskJob.TASK_QUEUE_POLICY, ArchivaTask.QUEUE_POLICY_WAIT );
dataMap.put( RepositoryTaskJob.TASK_REPOSITORY, repoConfig.getId() );
repositoryJob.setJobDataMap( dataMap );
try
{
CronTrigger trigger =
- new CronTrigger( REPOSITORY_JOB_TRIGGER + ":" + repoConfig.getId() , REPOSITORY_DISCOVERER_GROUP, cronString );
+ new CronTrigger( REPOSITORY_JOB_TRIGGER + ":" + repoConfig.getId() , REPOSITORY_SCAN_GROUP, cronString );
scheduler.scheduleJob( repositoryJob, trigger );
}
@@ -147,7 +143,7 @@
// setup the unprocessed artifact job
JobDetail databaseJob =
- new JobDetail( DATABASE_JOB, DATABASE_DISCOVERER_GROUP, DatabaseTaskJob.class );
+ new JobDetail( DATABASE_JOB, DATABASE_SCAN_GROUP, DatabaseTaskJob.class );
JobDataMap dataMap = new JobDataMap();
dataMap.put( DatabaseTaskJob.TASK_QUEUE, archivaTaskQueue );
@@ -156,7 +152,7 @@
try
{
CronTrigger trigger =
- new CronTrigger( DATABASE_JOB_TRIGGER, DATABASE_DISCOVERER_GROUP, cronString );
+ new CronTrigger( DATABASE_JOB_TRIGGER, DATABASE_SCAN_GROUP, cronString );
scheduler.scheduleJob( databaseJob, trigger );
}
@@ -172,7 +168,7 @@
{
try
{
- scheduler.unscheduleJob( DATABASE_JOB, DATABASE_DISCOVERER_GROUP );
+ scheduler.unscheduleJob( DATABASE_JOB, DATABASE_SCAN_GROUP );
}
catch ( SchedulerException e )
{
@@ -198,7 +194,7 @@
try
{
- scheduler.unscheduleJob( DATABASE_JOB, DATABASE_DISCOVERER_GROUP );
+ scheduler.unscheduleJob( DATABASE_JOB, DATABASE_SCAN_GROUP );
scheduleDatabaseJobs();
}
@@ -224,7 +220,7 @@
try
{
// unschedule handles jobs that might not exist
- scheduler.unscheduleJob( REPOSITORY_JOB + ":" + repoConfig.getId() , REPOSITORY_DISCOVERER_GROUP );
+ scheduler.unscheduleJob( REPOSITORY_JOB + ":" + repoConfig.getId() , REPOSITORY_SCAN_GROUP );
scheduleRepositoryJobs( repoConfig );
}
catch ( SchedulerException e )
@@ -236,7 +232,7 @@
}
}
- public void runAllRepositoryTasks() throws TaskExecutionException
+ public void scheduleAllRepositoryTasks() throws TaskExecutionException
{
try
{
@@ -256,7 +252,7 @@
}
}
- public void runDatabaseTasks() throws TaskExecutionException
+ public void scheduleDatabaseTasks() throws TaskExecutionException
{
try
{
@@ -269,7 +265,7 @@
}
}
- public void runRepositoryTasks( String repositoryId ) throws TaskExecutionException
+ public void scheduleRepositoryTask( String repositoryId ) throws TaskExecutionException
{
try
{
@@ -282,7 +278,9 @@
throw new TaskExecutionException( "Unable to schedule repository jobs: " + e.getMessage(), e );
}
}
-
-
+ public ArchivaTaskQueue getTaskQueue()
+ {
+ return (ArchivaTaskQueue) archivaTaskQueue;
+ }
}
Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/AbstractRepositoryAction.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/AbstractRepositoryAction.java?view=auto&rev=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/AbstractRepositoryAction.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/AbstractRepositoryAction.java Tue May 1 05:46:46 2007
@@ -0,0 +1,208 @@
+package org.apache.maven.archiva.web.action.admin;
+
+/*
+ * 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.
+ */
+
+import com.opensymphony.xwork.ActionContext;
+import com.opensymphony.xwork.ModelDriven;
+import com.opensymphony.xwork.Preparable;
+
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.InvalidConfigurationException;
+import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.security.ArchivaRoleConstants;
+import org.apache.maven.archiva.web.action.admin.models.AdminRepositoryConfiguration;
+import org.codehaus.plexus.rbac.profile.RoleProfileException;
+import org.codehaus.plexus.rbac.profile.RoleProfileManager;
+import org.codehaus.plexus.registry.RegistryException;
+import org.codehaus.plexus.security.authorization.AuthorizationException;
+import org.codehaus.plexus.security.authorization.AuthorizationResult;
+import org.codehaus.plexus.security.rbac.RbacManagerException;
+import org.codehaus.plexus.security.rbac.Resource;
+import org.codehaus.plexus.security.system.SecuritySession;
+import org.codehaus.plexus.security.system.SecuritySystem;
+import org.codehaus.plexus.security.ui.web.interceptor.SecureAction;
+import org.codehaus.plexus.security.ui.web.interceptor.SecureActionBundle;
+import org.codehaus.plexus.security.ui.web.interceptor.SecureActionException;
+import org.codehaus.plexus.xwork.action.PlexusActionSupport;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * AbstractRepositoryAction
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public abstract class AbstractRepositoryAction
+ extends PlexusActionSupport
+ implements ModelDriven, Preparable, SecureAction
+{
+ protected static final String SUCCESS = "success";
+
+ /**
+ * @plexus.requirement role-hint="archiva"
+ */
+ private RoleProfileManager roleProfileManager;
+
+ /**
+ * @plexus.requirement
+ */
+ private SecuritySystem securitySystem;
+
+ private String repoid;
+
+ private String mode;
+
+ /**
+ * @plexus.requirement
+ */
+ protected ArchivaConfiguration archivaConfiguration;
+
+ /**
+ * The model for this action.
+ */
+ protected AdminRepositoryConfiguration repository;
+
+ public String getMode()
+ {
+ return this.mode;
+ }
+
+ public Object getModel()
+ {
+ return getRepository();
+ }
+
+ public String getRepoid()
+ {
+ return repoid;
+ }
+
+ public SecureActionBundle getSecureActionBundle()
+ throws SecureActionException
+ {
+ SecureActionBundle bundle = new SecureActionBundle();
+
+ bundle.setRequiresAuthentication( true );
+ bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION, Resource.GLOBAL );
+
+ return bundle;
+ }
+
+ public String input()
+ {
+ getLogger().info( "input()" );
+ return INPUT;
+ }
+
+ public abstract void prepare()
+ throws Exception;
+
+ public void setMode( String mode )
+ {
+ this.mode = mode;
+ }
+
+ public void setRepoid( String repoid )
+ {
+ this.repoid = repoid;
+ }
+
+ protected void addRepository( AdminRepositoryConfiguration repository )
+ throws IOException, RoleProfileException
+ {
+ getLogger().info( ".addRepository(" + repository + ")" );
+
+ if ( repository.isManaged() )
+ {
+ // Normalize the path
+ File file = new File( repository.getDirectory() );
+ repository.setDirectory( file.getCanonicalPath() );
+ if ( !file.exists() )
+ {
+ file.mkdirs();
+ // TODO: error handling when this fails, or is not a directory!
+ }
+ }
+
+ archivaConfiguration.getConfiguration().addRepository( repository );
+
+ // TODO: double check these are configured on start up
+ roleProfileManager.getDynamicRole( "archiva-repository-manager", repository.getId() );
+
+ roleProfileManager.getDynamicRole( "archiva-repository-observer", repository.getId() );
+ }
+
+ protected AdminRepositoryConfiguration getRepository()
+ {
+ if ( repository == null )
+ {
+ repository = new AdminRepositoryConfiguration();
+ }
+
+ return repository;
+ }
+
+ protected boolean operationAllowed( String permission, String repoid )
+ {
+ ActionContext context = ActionContext.getContext();
+ SecuritySession securitySession = (SecuritySession) context.get( SecuritySession.ROLE );
+
+ AuthorizationResult authzResult;
+ try
+ {
+ authzResult = securitySystem.authorize( securitySession, permission, repoid );
+
+ return authzResult.isAuthorized();
+ }
+ catch ( AuthorizationException e )
+ {
+ getLogger().info(
+ "Unable to authorize permission: " + permission + " against repo: " + repoid
+ + " due to: " + e.getMessage() );
+ return false;
+ }
+ }
+
+ protected void removeRepository( String repoId )
+ {
+ getLogger().info( ".removeRepository()" );
+
+ RepositoryConfiguration toremove = archivaConfiguration.getConfiguration().findRepositoryById( repoId );
+ if ( toremove != null )
+ {
+ archivaConfiguration.getConfiguration().removeRepository( toremove );
+ }
+ }
+
+ protected String saveConfiguration()
+ throws IOException, InvalidConfigurationException, RbacManagerException, RoleProfileException,
+ RegistryException
+ {
+ getLogger().info( ".saveConfiguration()" );
+
+ archivaConfiguration.save( archivaConfiguration.getConfiguration() );
+
+ addActionMessage( "Successfully saved configuration" );
+
+ return SUCCESS;
+ }
+}
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/AbstractRepositoryAction.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/AbstractRepositoryAction.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/AbstractRepositoryAction.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/ConfigureAction.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/ConfigureAction.java?view=diff&rev=534044&r1=534043&r2=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/ConfigureAction.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/ConfigureAction.java Tue May 1 05:46:46 2007
@@ -60,6 +60,7 @@
public void validate()
{
+ getLogger().info( "validate()" );
//validate cron expression
}
@@ -67,6 +68,7 @@
throws IOException, RepositoryIndexException, RepositoryIndexSearchException, InvalidConfigurationException,
RegistryException
{
+ getLogger().info( "execute()" );
// TODO: if this didn't come from the form, go to configure.action instead of going through with re-saving what was just loaded
// TODO: if this is changed, do we move the index or recreate it?
Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/ConfigureRepositoryAction.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/ConfigureRepositoryAction.java?view=diff&rev=534044&r1=534043&r2=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/ConfigureRepositoryAction.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/ConfigureRepositoryAction.java Tue May 1 05:46:46 2007
@@ -19,9 +19,25 @@
* under the License.
*/
-//import org.apache.maven.archiva.configuration.AbstractRepositoryConfiguration;
+import com.opensymphony.xwork.ModelDriven;
+import com.opensymphony.xwork.Preparable;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.configuration.InvalidConfigurationException;
import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.security.ArchivaRoleConstants;
+import org.apache.maven.archiva.web.action.admin.models.AdminRepositoryConfiguration;
import org.codehaus.plexus.rbac.profile.RoleProfileException;
+import org.codehaus.plexus.rbac.profile.RoleProfileManager;
+import org.codehaus.plexus.registry.RegistryException;
+import org.codehaus.plexus.security.rbac.RbacManagerException;
+import org.codehaus.plexus.security.rbac.Resource;
+import org.codehaus.plexus.security.ui.web.interceptor.SecureAction;
+import org.codehaus.plexus.security.ui.web.interceptor.SecureActionBundle;
+import org.codehaus.plexus.security.ui.web.interceptor.SecureActionException;
+import org.codehaus.plexus.xwork.action.PlexusActionSupport;
import java.io.File;
import java.io.IOException;
@@ -32,44 +48,244 @@
* @plexus.component role="com.opensymphony.xwork.Action" role-hint="configureRepositoryAction"
*/
public class ConfigureRepositoryAction
- extends AbstractConfigureRepositoryAction
+ extends PlexusActionSupport
+ implements ModelDriven, Preparable, SecureAction
{
-// protected void removeRepository( AbstractRepositoryConfiguration existingRepository )
-// {
-// configuration.removeRepository( (RepositoryConfiguration) existingRepository );
-// }
-//
-// protected AbstractRepositoryConfiguration getRepository( String id )
-// {
-// return configuration.getRepositoryById( id );
-// }
+ /**
+ * @plexus.requirement
+ */
+ private ArchivaConfiguration archivaConfiguration;
+
+ /**
+ * @plexus.requirement role-hint="archiva"
+ */
+ private RoleProfileManager roleProfileManager;
+
+ /**
+ * The repository.
+ */
+ private AdminRepositoryConfiguration repository;
+
+ /**
+ * The repository ID to lookup when editing a repository.
+ */
+ private String repoId;
+
+ /**
+ * The previously read configuration.
+ */
+ private Configuration configuration;
+
+ public String add()
+ throws IOException, InvalidConfigurationException, RbacManagerException, RoleProfileException,
+ RegistryException
+ {
+ // TODO: if this didn't come from the form, go to configure.action instead of going through with re-saving what was just loaded
+ getLogger().info( ".add()" );
+
+ AdminRepositoryConfiguration existingRepository = getRepository( repository.getId() );
+ if ( existingRepository != null )
+ {
+ addFieldError( "id", "A repository with that id already exists" );
+ return INPUT;
+ }
+
+ return saveConfiguration();
+ }
+
+ public String edit()
+ throws IOException, InvalidConfigurationException, RbacManagerException, RoleProfileException,
+ RegistryException
+ {
+ // TODO: if this didn't come from the form, go to configure.action instead of going through with re-saving what was just loaded
+ getLogger().info( ".edit()" );
+
+ if ( StringUtils.isBlank( repository.getId() ) )
+ {
+ addFieldError( "id", "A repository with a blank id cannot be editted." );
+ return INPUT;
+ }
+
+ removeRepository( getRepository() );
+
+ addRepository();
+
+ return saveConfiguration();
+ }
+
+ public Configuration getConfiguration()
+ {
+ return configuration;
+ }
+
+ public Object getModel()
+ {
+ getLogger().info( ".getModel()" );
+ if( repository == null )
+ {
+ repository = createRepository();
+ }
+
+ return repository;
+ }
+
+ public String getRepoId()
+ {
+ return repoId;
+ }
+
+ public SecureActionBundle getSecureActionBundle()
+ throws SecureActionException
+ {
+ SecureActionBundle bundle = new SecureActionBundle();
+
+ bundle.setRequiresAuthentication( true );
- protected void addRepository()
+ if ( getRepoId() != null )
+ {
+ // TODO: this is not right. It needs to change based on method. But is this really the right way to restrict this area?
+ // TODO: not right. We only care about this permission on managed repositories. Otherwise, it's configuration
+ bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_EDIT_REPOSITORY, getRepoId() );
+ }
+ else
+ {
+ bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION, Resource.GLOBAL );
+ }
+
+ return bundle;
+ }
+
+ public String input()
+ {
+ getLogger().info( ".input()" );
+ return INPUT;
+ }
+
+ public String doDefault()
+ throws Exception
+ {
+ getLogger().info( ".doDefault()" );
+ return super.doDefault();
+ }
+
+ public String doInput()
+ throws Exception
+ {
+ getLogger().info( ".doInput()" );
+ return super.doInput();
+ }
+
+ public void validate()
+ {
+ getLogger().info( ".validate()" );
+ // super.validate();
+ }
+
+ public String execute()
+ throws Exception
+ {
+ getLogger().info( ".execute()" );
+ return super.execute();
+ }
+
+ public void prepare()
+ {
+ getLogger().info( ".prepare()" );
+ configuration = archivaConfiguration.getConfiguration();
+
+ if ( repository == null )
+ {
+ repository = getRepository( repoId );
+ }
+ if ( repository == null )
+ {
+ repository = createRepository();
+ }
+ }
+
+ public void setRepoId( String repoId )
+ {
+ this.repoId = repoId;
+ }
+
+ private void addRepository()
throws IOException, RoleProfileException
{
-// RepositoryConfiguration repository = (RepositoryConfiguration) getRepository();
-//
-// // Normalize the path
-// File file = new File( repository.getDirectory() );
-// repository.setDirectory( file.getCanonicalPath() );
-// if ( !file.exists() )
-// {
-// file.mkdirs();
-// // TODO: error handling when this fails, or is not a directory!
-// }
-//
-// configuration.addRepository( repository );
-//
-// // TODO: double check these are configured on start up
-// roleProfileManager.getDynamicRole( "archiva-repository-manager", repository.getId() );
-//
-// roleProfileManager.getDynamicRole( "archiva-repository-observer", repository.getId() );
- }
-
-// protected AbstractRepositoryConfiguration createRepository()
-// {
-// RepositoryConfiguration repository = new RepositoryConfiguration();
-// repository.setIndexed( false );
-// return repository;
-// }
+ getLogger().info( ".addRepository()" );
+ AdminRepositoryConfiguration repository = (AdminRepositoryConfiguration) getRepository();
+
+ if ( repository.isManaged() )
+ {
+ // Normalize the path
+ File file = new File( repository.getDirectory() );
+ repository.setDirectory( file.getCanonicalPath() );
+ if ( !file.exists() )
+ {
+ file.mkdirs();
+ // TODO: error handling when this fails, or is not a directory!
+ }
+ }
+
+ configuration.addRepository( repository );
+
+ // TODO: double check these are configured on start up
+ roleProfileManager.getDynamicRole( "archiva-repository-manager", repository.getId() );
+
+ roleProfileManager.getDynamicRole( "archiva-repository-observer", repository.getId() );
+ }
+
+ private AdminRepositoryConfiguration createRepository()
+ {
+ getLogger().info( ".createRepository()" );
+ AdminRepositoryConfiguration repository = new AdminRepositoryConfiguration();
+ repository.setIndexed( false );
+ return repository;
+ }
+
+ private AdminRepositoryConfiguration getRepository()
+ {
+ return repository;
+ }
+
+ private AdminRepositoryConfiguration getRepository( String id )
+ {
+ getLogger().info( ".getRepository(" + id + ")" );
+
+ RepositoryConfiguration repoconfig = configuration.findRepositoryById( id );
+ if ( repoconfig == null )
+ {
+ return createRepository();
+ }
+ return new AdminRepositoryConfiguration( repoconfig );
+ }
+
+ private boolean removeRepository( RepositoryConfiguration existingRepository )
+ {
+ getLogger().info( ".removeRepository()" );
+
+ RepositoryConfiguration toremove = configuration.findRepositoryById( existingRepository.getId() );
+ if ( toremove != null )
+ {
+ configuration.removeRepository( toremove );
+ return true;
+ }
+
+ return false;
+ }
+
+ private String saveConfiguration()
+ throws IOException, InvalidConfigurationException, RbacManagerException, RoleProfileException,
+ RegistryException
+ {
+ getLogger().info( ".saveConfiguration()" );
+ addRepository();
+
+ archivaConfiguration.save( configuration );
+
+ // TODO: do we need to check if indexing is needed?
+
+ addActionMessage( "Successfully saved configuration" );
+
+ return SUCCESS;
+ }
}
Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/EditRepositoryAction.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/EditRepositoryAction.java?view=auto&rev=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/EditRepositoryAction.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/EditRepositoryAction.java Tue May 1 05:46:46 2007
@@ -0,0 +1,71 @@
+package org.apache.maven.archiva.web.action.admin;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.security.ArchivaRoleConstants;
+import org.apache.maven.archiva.web.action.admin.models.AdminRepositoryConfiguration;
+
+/**
+ * EditRepositoryAction
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component role="com.opensymphony.xwork.Action" role-hint="editRepositoryAction"
+ */
+public class EditRepositoryAction
+ extends AbstractRepositoryAction
+{
+ public String edit()
+ {
+ getLogger().info( ".edit()" );
+
+ if ( operationAllowed( ArchivaRoleConstants.OPERATION_EDIT_REPOSITORY, getRepoid() ) )
+ {
+ addActionError( "You do not have the appropriate permissions to edit the " + getRepoid() + " repository." );
+ return ERROR;
+ }
+
+ return INPUT;
+ }
+
+ public void prepare()
+ throws Exception
+ {
+ String id = getRepoid();
+ if ( id == null )
+ {
+ // TODO: Throw error?
+ return;
+ }
+
+ RepositoryConfiguration repoconfig = archivaConfiguration.getConfiguration().findRepositoryById( id );
+ if ( repoconfig != null )
+ {
+ this.repository = new AdminRepositoryConfiguration( repoconfig );
+ }
+ }
+
+ public String getMode()
+ {
+ return "edit";
+ }
+}
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/EditRepositoryAction.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/EditRepositoryAction.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/EditRepositoryAction.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/IndexRepositoryAction.java (from r533137, maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/RunRepositoryTaskAction.java)
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/IndexRepositoryAction.java?view=diff&rev=534044&p1=maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/RunRepositoryTaskAction.java&r1=533137&p2=maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/IndexRepositoryAction.java&r2=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/RunRepositoryTaskAction.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/IndexRepositoryAction.java Tue May 1 05:46:46 2007
@@ -19,33 +19,81 @@
* under the License.
*/
-//import org.apache.maven.archiva.scheduler.RepositoryTaskScheduler;
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.archiva.scheduled.ArchivaTaskScheduler;
+import org.apache.maven.archiva.scheduled.DefaultArchivaTaskScheduler;
+import org.apache.maven.archiva.scheduled.tasks.ArchivaTask;
+import org.apache.maven.archiva.scheduled.tasks.RepositoryTask;
import org.apache.maven.archiva.security.ArchivaRoleConstants;
import org.codehaus.plexus.security.rbac.Resource;
import org.codehaus.plexus.security.ui.web.interceptor.SecureAction;
import org.codehaus.plexus.security.ui.web.interceptor.SecureActionBundle;
import org.codehaus.plexus.security.ui.web.interceptor.SecureActionException;
-//import org.codehaus.plexus.taskqueue.execution.TaskExecutionException;
+import org.codehaus.plexus.taskqueue.TaskQueueException;
import org.codehaus.plexus.xwork.action.PlexusActionSupport;
/**
* Configures the application.
*
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="runRepositoryTaskAction"
+ * @plexus.component role="com.opensymphony.xwork.Action" role-hint="indexRepositoryAction"
*/
-public class RunRepositoryTaskAction
+public class IndexRepositoryAction
extends PlexusActionSupport
implements SecureAction
{
-// /**
-// * @plexus.requirement
-// */
-// private RepositoryTaskScheduler taskScheduler;
+ /**
+ * @plexus.requirement
+ */
+ private ArchivaTaskScheduler taskScheduler;
- public String runRefresh()
+ private String repoid;
+
+ public String run()
{
-// taskScheduler.runDataRefresh();
+ if ( StringUtils.isBlank( repoid ) )
+ {
+ addActionError( "Cannot run indexer on blank repository id." );
+ return SUCCESS;
+ }
+
+ RepositoryTask task = new RepositoryTask();
+ task.setRepositoryId( repoid );
+ task.setName( DefaultArchivaTaskScheduler.REPOSITORY_JOB + ":" + repoid );
+ task.setQueuePolicy( ArchivaTask.QUEUE_POLICY_WAIT );
+
+ boolean scheduleTask = false;
+
+ if ( taskScheduler.getTaskQueue().hasFilesystemTaskInQueue() )
+ {
+ if ( taskScheduler.getTaskQueue().hasRepositoryTaskInQueue( repoid ) )
+ {
+ addActionError( "Repository [" + repoid + "] task was already queued." );
+ }
+ else
+ {
+ scheduleTask = true;
+ }
+ }
+ else
+ {
+ scheduleTask = true;
+ }
+
+ if ( scheduleTask )
+ {
+ try
+ {
+ taskScheduler.getTaskQueue().put( task );
+ addActionMessage( "Your request to have repository [" + repoid + "] be indexed has been queued." );
+ }
+ catch ( TaskQueueException e )
+ {
+ addActionError( "Unable to queue your request to have repository [" + repoid + "] be indexed: "
+ + e.getMessage() );
+ }
+ }
+ // Return to the repositories screen.
return SUCCESS;
}
@@ -58,5 +106,15 @@
bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_RUN_INDEXER, Resource.GLOBAL );
return bundle;
+ }
+
+ public String getRepoid()
+ {
+ return repoid;
+ }
+
+ public void setRepoid( String repoid )
+ {
+ this.repoid = repoid;
}
}
Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/RepositoriesAction.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/RepositoriesAction.java?view=diff&rev=534044&r1=534043&r2=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/RepositoriesAction.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/RepositoriesAction.java Tue May 1 05:46:46 2007
@@ -26,13 +26,21 @@
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.database.ArchivaDAO;
+import org.apache.maven.archiva.database.constraints.MostRecentRepositoryScanStatistics;
+import org.apache.maven.archiva.model.RepositoryContentStatistics;
import org.apache.maven.archiva.security.ArchivaRoleConstants;
+import org.apache.maven.archiva.web.action.admin.models.AdminModel;
+import org.apache.maven.archiva.web.action.admin.models.AdminRepositoryConfiguration;
+import org.apache.maven.archiva.web.util.ContextUtils;
import org.codehaus.plexus.security.rbac.Resource;
import org.codehaus.plexus.security.ui.web.interceptor.SecureAction;
import org.codehaus.plexus.security.ui.web.interceptor.SecureActionBundle;
import org.codehaus.plexus.security.ui.web.interceptor.SecureActionException;
import org.codehaus.plexus.xwork.action.PlexusActionSupport;
+import java.util.Iterator;
+import java.util.List;
+
import javax.servlet.http.HttpServletRequest;
/**
@@ -48,28 +56,29 @@
implements ModelDriven, Preparable, Validateable, SecureAction, ServletRequestAware
{
/**
- * @plexus.requirement
- */
- private ArchivaConfiguration archivaConfiguration;
-
- /**
* @plexus.requirement role-hint="jdo"
*/
private ArchivaDAO dao;
- private HttpServletRequest request;
+ /**
+ * @plexus.requirement
+ */
+ private ArchivaConfiguration archivaConfiguration;
private AdminModel model;
+ private String baseUrl;
+
public Object getModel()
{
- return model;
+ return getAdminModel();
}
public void prepare()
throws Exception
{
- model = new AdminModel( archivaConfiguration.getConfiguration() );
+ model = null;
+ getModel();
}
public void validate()
@@ -77,6 +86,13 @@
super.validate();
}
+ public String execute()
+ throws Exception
+ {
+ getLogger().info( ".execute()" );
+ return super.execute();
+ }
+
public SecureActionBundle getSecureActionBundle()
throws SecureActionException
{
@@ -90,22 +106,44 @@
public void setServletRequest( HttpServletRequest request )
{
- this.request = request;
- StringBuffer baseUrl = new StringBuffer();
+ this.baseUrl = ContextUtils.getBaseURL( request, "repository" );
+ }
- baseUrl.append( request.getScheme() );
- baseUrl.append( request.getServerName() );
- int portnum = request.getServerPort();
-
- // Only add port if non-standard.
- if ( ( "https".equalsIgnoreCase( request.getScheme() ) && ( portnum != 443 ) )
- || ( "http".equalsIgnoreCase( request.getScheme() ) && ( portnum != 80 ) ) )
+ public AdminModel getAdminModel()
+ {
+ if ( model == null )
{
- baseUrl.append( ":" ).append( String.valueOf( portnum ) );
+ model = new AdminModel( archivaConfiguration.getConfiguration() );
+ model.setBaseUrl( baseUrl );
+ updateLastIndexed( model.getManagedRepositories() );
}
- baseUrl.append( request.getContextPath() );
- baseUrl.append( "/repository" );
- model.setBaseUrl( baseUrl.toString() );
+ return model;
+ }
+
+ private void updateLastIndexed( List managedRepositories )
+ {
+ Iterator it = managedRepositories.iterator();
+ while ( it.hasNext() )
+ {
+ AdminRepositoryConfiguration config = (AdminRepositoryConfiguration) it.next();
+
+ List results = dao.query( new MostRecentRepositoryScanStatistics( config.getId() ) );
+ if ( !results.isEmpty() )
+ {
+ RepositoryContentStatistics stats = (RepositoryContentStatistics) results.get( 0 );
+ config.setStats( stats );
+ }
+ }
+ }
+
+ public String getBaseUrlB()
+ {
+ return baseUrl;
+ }
+
+ public void setBaseUrlB( String baseUrl )
+ {
+ this.baseUrl = baseUrl;
}
}
Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/SaveRepositoryAction.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/SaveRepositoryAction.java?view=auto&rev=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/SaveRepositoryAction.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/SaveRepositoryAction.java Tue May 1 05:46:46 2007
@@ -0,0 +1,93 @@
+package org.apache.maven.archiva.web.action.admin;
+
+/*
+ * 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.
+ */
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.archiva.configuration.InvalidConfigurationException;
+import org.codehaus.plexus.rbac.profile.RoleProfileException;
+import org.codehaus.plexus.registry.RegistryException;
+import org.codehaus.plexus.security.rbac.RbacManagerException;
+
+import java.io.IOException;
+
+/**
+ * SaveRepositoryAction
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component role="com.opensymphony.xwork.Action" role-hint="saveRepositoryAction"
+ */
+public class SaveRepositoryAction
+ extends AbstractRepositoryAction
+{
+ public void prepare()
+ throws Exception
+ {
+ /* nothing to do here */
+ }
+
+ public String save()
+ {
+ String mode = getMode();
+ String repoId = getRepository().getId();
+
+ getLogger().info( "edit(" + mode + ":" + repoId + ")" );
+
+ if ( StringUtils.isBlank( repository.getId() ) )
+ {
+ addFieldError( "id", "A repository with a blank id cannot be saved." );
+ return SUCCESS;
+ }
+
+ if( StringUtils.equalsIgnoreCase( "edit", mode ) )
+ {
+ removeRepository( repoId );
+ }
+
+ try
+ {
+ addRepository( getRepository() );
+ saveConfiguration();
+ }
+ catch ( IOException e )
+ {
+ addActionError( "I/O Exception: " + e.getMessage() );
+ }
+ catch ( RoleProfileException e )
+ {
+ addActionError( "Role Profile Exception: " + e.getMessage() );
+ }
+ catch ( InvalidConfigurationException e )
+ {
+ addActionError( "Invalid Configuration Exception: " + e.getMessage() );
+ }
+ catch ( RbacManagerException e )
+ {
+ addActionError( "RBAC Manager Exception: " + e.getMessage() );
+ }
+ catch ( RegistryException e )
+ {
+ addActionError( "Configuration Registry Exception: " + e.getMessage() );
+ }
+
+ return SUCCESS;
+ }
+}
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/SaveRepositoryAction.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/SaveRepositoryAction.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/SaveRepositoryAction.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/models/AdminModel.java (from r533137, maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/AdminModel.java)
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/models/AdminModel.java?view=diff&rev=534044&p1=maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/AdminModel.java&r1=533137&p2=maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/models/AdminModel.java&r2=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/AdminModel.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/models/AdminModel.java Tue May 1 05:46:46 2007
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.web.action.admin;
+package org.apache.maven.archiva.web.action.admin.models;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -21,11 +21,12 @@
import org.apache.maven.archiva.configuration.Configuration;
import org.apache.maven.archiva.configuration.RepositoryConfiguration;
-import org.apache.maven.archiva.model.RepositoryURL;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
/**
* AdminModel
@@ -36,11 +37,13 @@
public class AdminModel
{
private String baseUrl;
-
+
private List managedRepositories = new ArrayList();
private List remoteRepositories = new ArrayList();
+ private Map repoMap = new HashMap();
+
public AdminModel()
{
/* do nothing */
@@ -48,19 +51,25 @@
public AdminModel( Configuration configuration )
{
+ repoMap.putAll( configuration.createRepositoryMap() );
+
Iterator it = configuration.getRepositories().iterator();
while ( it.hasNext() )
{
RepositoryConfiguration repoconfig = (RepositoryConfiguration) it.next();
- RepositoryURL repourl = new RepositoryURL( repoconfig.getUrl() );
- if ( "file".equals( repourl.getProtocol() ) )
+ if ( repoconfig.isManaged() )
{
- managedRepositories.add( repoconfig );
+ managedRepositories.add( new AdminRepositoryConfiguration( repoconfig ) );
}
- else
+ else if ( repoconfig.isRemote() )
{
remoteRepositories.add( repoconfig );
}
+ else
+ {
+ // Should never occur, but it is possible that the configuration could
+ // contain a repository configuration which is null.
+ }
}
}
@@ -92,5 +101,10 @@
public void setBaseUrl( String baseUrl )
{
this.baseUrl = baseUrl;
+ }
+
+ public String toString()
+ {
+ return "[ActionModel]";
}
}
Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/models/AdminRepositoryConfiguration.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/models/AdminRepositoryConfiguration.java?view=auto&rev=534044
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/models/AdminRepositoryConfiguration.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/models/AdminRepositoryConfiguration.java Tue May 1 05:46:46 2007
@@ -0,0 +1,102 @@
+package org.apache.maven.archiva.web.action.admin.models;
+
+/*
+ * 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.
+ */
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.archiva.common.utils.PathUtil;
+import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.model.RepositoryContentStatistics;
+import org.apache.maven.archiva.model.RepositoryURL;
+
+import java.io.File;
+
+/**
+ * AdminRepositoryConfiguration
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class AdminRepositoryConfiguration
+ extends RepositoryConfiguration
+{
+ private String directory;
+
+ private RepositoryContentStatistics stats;
+
+ public AdminRepositoryConfiguration()
+ {
+ super();
+ }
+
+ /**
+ * Copy Constructor.
+ */
+ public AdminRepositoryConfiguration( RepositoryConfiguration repoconfig )
+ {
+ this.setId( repoconfig.getId() );
+ this.setName( repoconfig.getName() );
+ this.setUrl( repoconfig.getUrl() );
+ this.setLayout( repoconfig.getLayout() );
+ this.setIndexed( repoconfig.isIndexed() );
+ this.setReleases( repoconfig.isReleases() );
+ this.setSnapshots( repoconfig.isSnapshots() );
+
+ this.setIndexDir( repoconfig.getIndexDir() );
+ this.setRefreshCronExpression( repoconfig.getRefreshCronExpression() );
+
+ if ( repoconfig.isManaged() )
+ {
+ RepositoryURL url = new RepositoryURL( repoconfig.getUrl() );
+ this.setDirectory( url.getPath() );
+ }
+ }
+
+ public boolean isDirectoryExists()
+ {
+ if ( StringUtils.isBlank( directory ) )
+ {
+ return false;
+ }
+
+ File dir = new File( directory );
+ return ( dir.exists() && dir.isDirectory() );
+ }
+
+ public String getDirectory()
+ {
+ return directory;
+ }
+
+ public void setDirectory( String directory )
+ {
+ this.directory = directory;
+ this.setUrl( PathUtil.toUrl( directory ) );
+ }
+
+ public RepositoryContentStatistics getStats()
+ {
+ return stats;
+ }
+
+ public void setStats( RepositoryContentStatistics stats )
+ {
+ this.stats = stats;
+ }
+}
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/models/AdminRepositoryConfiguration.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/models/AdminRepositoryConfiguration.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/models/AdminRepositoryConfiguration.java
------------------------------------------------------------------------------
svn:mime-type = text/plain