1 package org.apache.maven.continuum.initialization;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.continuum.dao.LocalRepositoryDao;
23 import org.apache.continuum.dao.ProjectGroupDao;
24 import org.apache.continuum.dao.RepositoryPurgeConfigurationDao;
25 import org.apache.continuum.dao.SystemConfigurationDao;
26 import org.apache.continuum.model.repository.LocalRepository;
27 import org.apache.continuum.model.repository.RepositoryPurgeConfiguration;
28 import org.apache.maven.continuum.builddefinition.BuildDefinitionService;
29 import org.apache.maven.continuum.builddefinition.BuildDefinitionServiceException;
30 import org.apache.maven.continuum.model.project.BuildDefinitionTemplate;
31 import org.apache.maven.continuum.model.project.ProjectGroup;
32 import org.apache.maven.continuum.model.system.SystemConfiguration;
33 import org.apache.maven.continuum.store.ContinuumObjectNotFoundException;
34 import org.apache.maven.continuum.store.ContinuumStoreException;
35 import org.apache.maven.settings.MavenSettingsBuilder;
36 import org.apache.maven.settings.Settings;
37 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
38 import org.jpox.SchemaTool;
39 import org.slf4j.Logger;
40 import org.slf4j.LoggerFactory;
41
42 import java.io.IOException;
43 import java.util.Collection;
44
45
46
47
48
49
50
51
52 public class DefaultContinuumInitializer
53 implements ContinuumInitializer
54 {
55 private static final Logger log = LoggerFactory.getLogger( DefaultContinuumInitializer.class );
56
57
58
59
60
61
62
63
64 private LocalRepositoryDao localRepositoryDao;
65
66
67
68
69 private RepositoryPurgeConfigurationDao repositoryPurgeConfigurationDao;
70
71
72
73
74 private ProjectGroupDao projectGroupDao;
75
76
77
78
79 private SystemConfigurationDao systemConfigurationDao;
80
81
82
83
84 private BuildDefinitionService buildDefinitionService;
85
86
87
88
89 private MavenSettingsBuilder mavenSettingsBuilder;
90
91
92
93
94
95 public void initialize()
96 throws ContinuumInitializationException
97 {
98 log.info( "Continuum initializer running ..." );
99
100 if ( log.isDebugEnabled() )
101 {
102 log.debug( "Dumping JPOX/JDO Schema Details ..." );
103 try
104 {
105 SchemaTool.outputDBInfo( null, true );
106 SchemaTool.outputSchemaInfo( null, true );
107 }
108 catch ( Exception e )
109 {
110 log.debug( "Error while dumping the database schema", e );
111 }
112 }
113
114 try
115 {
116
117 SystemConfiguration systemConf = systemConfigurationDao.getSystemConfiguration();
118
119 if ( systemConf == null )
120 {
121 systemConf = new SystemConfiguration();
122
123 systemConf = systemConfigurationDao.addSystemConfiguration( systemConf );
124 }
125
126 createDefaultLocalRepository();
127
128 createDefaultProjectGroup();
129 }
130 catch ( ContinuumStoreException e )
131 {
132 throw new ContinuumInitializationException( "Can't initialize default schedule.", e );
133 }
134 catch ( BuildDefinitionServiceException e )
135 {
136 throw new ContinuumInitializationException( "Can't get default build definition", e );
137 }
138 log.info( "Continuum initializer end running ..." );
139 }
140
141
142 private void createDefaultProjectGroup()
143 throws ContinuumStoreException, BuildDefinitionServiceException
144 {
145 ProjectGroup group;
146 try
147 {
148 group = projectGroupDao.getProjectGroupByGroupId( DEFAULT_PROJECT_GROUP_GROUP_ID );
149 log.info( "Default Project Group exists" );
150 }
151 catch ( ContinuumObjectNotFoundException e )
152 {
153 Collection<ProjectGroup> pgs = projectGroupDao.getAllProjectGroups();
154 if ( pgs != null && pgs.isEmpty() )
155 {
156 log.info( "create Default Project Group" );
157
158 group = new ProjectGroup();
159
160 group.setName( "Default Project Group" );
161
162 group.setGroupId( DEFAULT_PROJECT_GROUP_GROUP_ID );
163
164 group.setDescription( "Contains all projects that do not have a group of their own" );
165
166 LocalRepository localRepository = localRepositoryDao.getLocalRepositoryByName( "DEFAULT" );
167
168 group.setLocalRepository( localRepository );
169
170 group = projectGroupDao.addProjectGroup( group );
171
172 BuildDefinitionTemplate bdt = buildDefinitionService.getDefaultMavenTwoBuildDefinitionTemplate();
173
174 buildDefinitionService.addBuildDefinitionTemplateToProjectGroup( group.getId(), bdt );
175 }
176 }
177 }
178
179 private void createDefaultLocalRepository()
180 throws ContinuumStoreException, ContinuumInitializationException
181 {
182 LocalRepository repository;
183
184 repository = localRepositoryDao.getLocalRepositoryByName( "DEFAULT" );
185
186 Settings settings = getSettings();
187
188 if ( repository == null )
189 {
190 log.info( "create Default Local Repository" );
191
192 repository = new LocalRepository();
193
194 repository.setName( "DEFAULT" );
195
196 repository.setLocation( settings.getLocalRepository() );
197
198 repository = localRepositoryDao.addLocalRepository( repository );
199
200 createDefaultPurgeConfiguration( repository );
201 }
202 else if ( !repository.getLocation().equals( settings.getLocalRepository() ) )
203 {
204 log.info( "updating location of Default Local Repository" );
205
206 repository.setLocation( settings.getLocalRepository() );
207
208 localRepositoryDao.updateLocalRepository( repository );
209 }
210 }
211
212 private void createDefaultPurgeConfiguration( LocalRepository repository )
213 throws ContinuumStoreException
214 {
215 RepositoryPurgeConfiguration repoPurge = new RepositoryPurgeConfiguration();
216
217 repoPurge.setRepository( repository );
218
219 repoPurge.setDefaultPurge( true );
220
221 repositoryPurgeConfigurationDao.addRepositoryPurgeConfiguration( repoPurge );
222 }
223
224 private Settings getSettings()
225 throws ContinuumInitializationException
226 {
227 try
228 {
229 return mavenSettingsBuilder.buildSettings( false );
230 }
231 catch ( IOException e )
232 {
233 throw new ContinuumInitializationException( "Error reading settings file", e );
234 }
235 catch ( XmlPullParserException e )
236 {
237 throw new ContinuumInitializationException( e.getMessage(), e );
238 }
239 }
240 }