]> source.dussan.org Git - archiva.git/blob
85ece4fdf6946b1ea5e5e2c10748ecbc07196760
[archiva.git] /
1 package org.apache.maven.archiva.web.startup;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
23 import org.apache.maven.archiva.configuration.ConfigurationNames;
24 import org.apache.maven.archiva.configuration.RepositoryConfiguration;
25 import org.apache.maven.archiva.database.ArchivaDAO;
26 import org.apache.maven.archiva.database.ArchivaDatabaseException;
27 import org.apache.maven.archiva.database.ObjectNotFoundException;
28 import org.apache.maven.archiva.model.ArchivaRepository;
29 import org.apache.maven.archiva.repository.ArchivaConfigurationAdaptor;
30 import org.codehaus.plexus.logging.AbstractLogEnabled;
31 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
32 import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
33 import org.codehaus.plexus.redback.role.RoleManager;
34 import org.codehaus.plexus.redback.role.RoleManagerException;
35 import org.codehaus.plexus.registry.Registry;
36 import org.codehaus.plexus.registry.RegistryListener;
37
38 import java.util.Iterator;
39 import java.util.List;
40
41 /**
42  * ConfigurationSynchronization 
43  *
44  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
45  * @version $Id$
46  * 
47  * @plexus.component 
48  *              role="org.apache.maven.archiva.web.startup.ConfigurationSynchronization"
49  *              role-hint="default"
50  */
51 public class ConfigurationSynchronization
52     extends AbstractLogEnabled
53     implements RegistryListener, Initializable
54 {
55     /**
56      * @plexus.requirement role-hint="jdo"
57      */
58     private ArchivaDAO dao;
59
60     /**
61      * @plexus.requirement role-hint="default"
62      */
63     private RoleManager roleManager;
64
65     /**
66      * @plexus.requirement
67      */
68     private ArchivaConfiguration archivaConfiguration;
69
70     public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
71     {
72         if ( ConfigurationNames.isRepositories( propertyName ) )
73         {
74             synchConfiguration();
75         }
76     }
77
78     public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )
79     {
80         /* do nothing */
81     }
82
83     private void synchConfiguration()
84     {
85         List repos = archivaConfiguration.getConfiguration().getRepositories();
86         Iterator it = repos.iterator();
87         while ( it.hasNext() )
88         {
89             RepositoryConfiguration repoConfig = (RepositoryConfiguration) it.next();
90             try
91             {
92                 try
93                 {
94                     ArchivaRepository repository = dao.getRepositoryDAO().getRepository( repoConfig.getId() );
95                     // Found repository.  Update it.
96
97                     repository.getModel().setName( repoConfig.getName() );
98                     repository.getModel().setUrl( repoConfig.getUrl() );
99                     repository.getModel().setLayoutName( repoConfig.getLayout() );
100                     repository.getModel().setCreationSource( "configuration" );
101                     repository.getModel().setReleasePolicy( repoConfig.isReleases() );
102                     repository.getModel().setSnapshotPolicy( repoConfig.isSnapshots() );
103
104                     dao.getRepositoryDAO().saveRepository( repository );
105                 }
106                 catch ( ObjectNotFoundException e )
107                 {
108                     // Add the repository to the database.
109                     getLogger().info( "Adding repository configuration to DB: " + repoConfig );
110                     ArchivaRepository drepo = ArchivaConfigurationAdaptor.toArchivaRepository( repoConfig );
111                     drepo.getModel().setCreationSource( "configuration" );
112                     dao.getRepositoryDAO().saveRepository( drepo );
113                 }
114             }
115             catch ( ArchivaDatabaseException e )
116             {
117                 // Log error.
118                 getLogger().error( "Unable to add configured repositories to the database: " + e.getMessage(), e );
119             }
120
121             // manage roles for repositories
122             try
123             {
124                 if ( !roleManager.templatedRoleExists( "archiva-repository-observer", repoConfig.getId() ) )
125                 {
126                     roleManager.createTemplatedRole( "archiva-repository-observer", repoConfig.getId() );
127                 }
128
129                 if ( !roleManager.templatedRoleExists( "archiva-repository-manager", repoConfig.getId() ) )
130                     ;
131                 {
132                     roleManager.createTemplatedRole( "archiva-repository-manager", repoConfig.getId() );
133                 }
134             }
135             catch ( RoleManagerException e )
136             {
137                 // Log error.
138                 getLogger().error( "Unable to create roles for configured repositories: " + e.getMessage(), e );
139             }
140
141         }
142     }
143
144     public void initialize()
145         throws InitializationException
146     {
147         synchConfiguration();
148         archivaConfiguration.addChangeListener( this );
149     }
150 }