1 package org.apache.continuum.dao;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.continuum.model.project.BuildDefinition;
23 import org.apache.maven.continuum.model.project.Project;
24 import org.apache.maven.continuum.model.project.ProjectGroup;
25 import org.apache.maven.continuum.store.ContinuumObjectNotFoundException;
26 import org.apache.maven.continuum.store.ContinuumStoreException;
27 import org.codehaus.plexus.jdo.PlexusJdoUtils;
28 import org.springframework.stereotype.Repository;
29
30 import java.util.ArrayList;
31 import java.util.Arrays;
32 import java.util.Collection;
33 import java.util.Collections;
34 import java.util.Iterator;
35 import java.util.List;
36 import javax.annotation.Resource;
37 import javax.jdo.Extent;
38 import javax.jdo.PersistenceManager;
39 import javax.jdo.Query;
40 import javax.jdo.Transaction;
41
42
43
44
45
46
47 @Repository( "projectGroupDao" )
48 public class ProjectGroupDaoImpl
49 extends AbstractDao
50 implements ProjectGroupDao
51 {
52
53
54
55 @Resource
56 private ProjectDao projectDao;
57
58 public ProjectGroup addProjectGroup( ProjectGroup group )
59 {
60 return (ProjectGroup) addObject( group );
61 }
62
63 public void removeProjectGroup( ProjectGroup projectGroup )
64 {
65 ProjectGroup pg = null;
66 try
67 {
68 pg = getProjectGroupWithBuildDetailsByProjectGroupId( projectGroup.getId() );
69 }
70 catch ( Exception e )
71 {
72
73 }
74
75 if ( pg != null )
76 {
77
78
79
80 for ( Project p : (List<Project>) pg.getProjects() )
81 {
82 projectDao.removeProject( p );
83 }
84
85 List<BuildDefinition> buildDefs = new ArrayList<BuildDefinition>();
86 Iterator<BuildDefinition> it = pg.getBuildDefinitions().listIterator();
87 boolean template = false;
88 while ( it.hasNext() )
89 {
90 BuildDefinition bd = it.next();
91 if ( bd.isTemplate() )
92 {
93 template = true;
94 }
95 else
96 {
97 buildDefs.add( bd );
98 }
99 }
100 if ( template )
101 {
102 try
103 {
104 pg.setBuildDefinitions( buildDefs );
105 updateProjectGroup( pg );
106 }
107 catch ( ContinuumStoreException e )
108 {
109
110 }
111 }
112
113 removeObject( pg );
114 }
115 }
116
117 public ProjectGroup getProjectGroup( int projectGroupId )
118 throws ContinuumStoreException
119 {
120 return (ProjectGroup) getObjectById( ProjectGroup.class, projectGroupId );
121 }
122
123 public ProjectGroup getProjectGroupByGroupId( String groupId )
124 throws ContinuumStoreException
125 {
126 return (ProjectGroup) getObjectFromQuery( ProjectGroup.class, "groupId", groupId, null );
127 }
128
129 public ProjectGroup getProjectGroupByGroupIdWithBuildDetails( String groupId )
130 throws ContinuumStoreException
131 {
132 return (ProjectGroup) getObjectFromQuery( ProjectGroup.class, "groupId", groupId,
133 PROJECT_BUILD_DETAILS_FETCH_GROUP );
134 }
135
136 public ProjectGroup getProjectGroupByGroupIdWithProjects( String groupId )
137 throws ContinuumStoreException
138 {
139 return (ProjectGroup) getObjectFromQuery( ProjectGroup.class, "groupId", groupId,
140 PROJECTGROUP_PROJECTS_FETCH_GROUP );
141 }
142
143 public ProjectGroup getProjectGroupByProjectId( int projectId )
144 throws ContinuumObjectNotFoundException
145 {
146 try
147 {
148 return projectDao.getProject( projectId ).getProjectGroup();
149 }
150 catch ( ContinuumStoreException e )
151 {
152 throw new ContinuumObjectNotFoundException(
153 "unable to find project group containing project with id: " + projectId );
154
155 }
156 }
157
158 public ProjectGroup getProjectGroupByProject( Project project )
159 throws ContinuumObjectNotFoundException
160 {
161 return getProjectGroupByProjectId( project.getId() );
162 }
163
164 public void updateProjectGroup( ProjectGroup group )
165 throws ContinuumStoreException
166 {
167 updateObject( group );
168 }
169
170 public ProjectGroup getProjectGroupWithProjects( int projectGroupId )
171 throws ContinuumStoreException
172 {
173 return (ProjectGroup) getObjectById( ProjectGroup.class, projectGroupId, PROJECTGROUP_PROJECTS_FETCH_GROUP );
174 }
175
176 public Collection<ProjectGroup> getAllProjectGroupsWithProjects()
177 {
178 return getAllObjectsDetached( ProjectGroup.class, "name ascending", PROJECTGROUP_PROJECTS_FETCH_GROUP );
179 }
180
181 public List<ProjectGroup> getAllProjectGroupsWithBuildDetails()
182 {
183 return getAllObjectsDetached( ProjectGroup.class, "name ascending", PROJECT_BUILD_DETAILS_FETCH_GROUP );
184 }
185
186 public List<ProjectGroup> getAllProjectGroups()
187 {
188 return getAllObjectsDetached( ProjectGroup.class, "name ascending", null );
189 }
190
191 public List<ProjectGroup> getAllProjectGroupsWithTheLot()
192 {
193 List fetchGroups = Arrays.asList(
194 new String[]{PROJECT_WITH_BUILDS_FETCH_GROUP, PROJECTGROUP_PROJECTS_FETCH_GROUP,
195 BUILD_RESULT_WITH_DETAILS_FETCH_GROUP, PROJECT_WITH_CHECKOUT_RESULT_FETCH_GROUP,
196 PROJECT_ALL_DETAILS_FETCH_GROUP, PROJECT_BUILD_DETAILS_FETCH_GROUP} );
197 return PlexusJdoUtils.getAllObjectsDetached( getPersistenceManager(), ProjectGroup.class, "name ascending",
198 fetchGroups );
199 }
200
201 public ProjectGroup getProjectGroupWithBuildDetailsByProjectGroupId( int projectGroupId )
202 throws ContinuumStoreException
203 {
204 return (ProjectGroup) getObjectById( ProjectGroup.class, projectGroupId, PROJECT_BUILD_DETAILS_FETCH_GROUP );
205 }
206
207 public List<ProjectGroup> getProjectGroupByRepository( int repositoryId )
208 {
209 PersistenceManager pm = getPersistenceManager();
210
211 Transaction tx = pm.currentTransaction();
212
213 try
214 {
215 tx.begin();
216
217 Extent extent = pm.getExtent( ProjectGroup.class, true );
218
219 Query query = pm.newQuery( extent );
220
221 query.declareParameters( "int repositoryId" );
222
223 query.setFilter( "this.localRepository.id == repositoryId" );
224
225 List result = (List) query.execute( repositoryId );
226
227 return result == null ? Collections.EMPTY_LIST : (List) pm.detachCopyAll( result );
228 }
229 finally
230 {
231 tx.commit();
232
233 rollback( tx );
234 }
235 }
236
237 }