1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.releaser.service;
35
36 import java.util.Collection;
37 import java.util.Locale;
38
39 import javax.servlet.http.HttpServletRequest;
40
41 import org.apache.commons.collections.CollectionUtils;
42
43 import fr.paris.lutece.plugins.releaser.business.Component;
44 import fr.paris.lutece.plugins.releaser.business.Site;
45 import fr.paris.lutece.plugins.releaser.business.WorkflowReleaseContext;
46 import fr.paris.lutece.plugins.releaser.util.ConstanteUtils;
47 import fr.paris.lutece.plugins.releaser.util.ReleaserUtils;
48 import fr.paris.lutece.plugins.workflowcore.business.action.Action;
49 import fr.paris.lutece.plugins.workflowcore.business.state.State;
50 import fr.paris.lutece.portal.business.user.AdminUser;
51 import fr.paris.lutece.portal.service.util.AppException;
52 import fr.paris.lutece.portal.service.util.AppLogService;
53 import fr.paris.lutece.portal.service.workflow.WorkflowService;
54
55
56
57
58
59 public class ReleaseComponentTask implements Runnable
60 {
61
62
63 private static final long WAIT_TIME = 1000;
64
65
66 private int _nIdWorkflow;
67
68
69 private WorkflowReleaseContext _wfContext;
70
71
72 private HttpServletRequest _request;
73
74
75 private AdminUser _user;
76
77
78 private Locale _locale;
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94 public ReleaseComponentTask( int nIdWf, WorkflowReleaseContext context, HttpServletRequest request, AdminUser user, Locale locale )
95 {
96
97 _nIdWorkflow = nIdWf;
98 _wfContext = context;
99 _request = request;
100 _user = user;
101 _locale = locale;
102 }
103
104
105
106
107 public void run( )
108 {
109
110 State state = WorkflowService.getInstance( ).getState( _wfContext.getId( ), WorkflowReleaseContext.WORKFLOW_RESOURCE_TYPE, _nIdWorkflow,
111 ConstanteUtils.CONSTANTE_ID_NULL );
112 ReleaserUtils.startCommandResult( _wfContext );
113
114 try
115 {
116
117
118 if ( _wfContext.getSite( ) != null )
119 {
120 while ( !testAllComponentReleased( _wfContext.getSite( ) ) )
121 {
122
123 try
124 {
125 Thread.sleep( WAIT_TIME );
126 }
127 catch( InterruptedException e )
128 {
129 AppLogService.error( e );
130 }
131 }
132
133 if ( hasErrorDuringReleaseComponent( _wfContext.getSite( ) ) )
134 {
135 ReleaserUtils.addTechnicalError( _wfContext.getCommandResult( ),
136 "The site can not be retrieved because one of component of the site is in error" );
137 }
138 }
139
140 Collection<Action> listActions = WorkflowService.getInstance( ).getActions( _wfContext.getId( ), WorkflowReleaseContext.WORKFLOW_RESOURCE_TYPE,
141 _nIdWorkflow, _user );
142
143 for ( Action action : listActions )
144 {
145 WorkflowService.getInstance( ).doProcessAction( _wfContext.getId( ), WorkflowReleaseContext.WORKFLOW_RESOURCE_TYPE, action.getId( ), -1,
146 _request, _locale, true );
147 if ( _wfContext.getComponent( ) != null )
148 {
149
150
151 ComponentService.getService( ).setLastReleaseVersion( _wfContext.getComponent( ).getArtifactId( ),
152 _wfContext.getComponent( ).getTargetVersion( ) );
153 _wfContext.getComponent( ).setLastAvailableVersion( _wfContext.getComponent( ).getTargetVersion( ) );
154 ComponentService.getService( ).setLastReleaseNextSnapshotVersion( _wfContext.getComponent( ).getArtifactId( ),
155 _wfContext.getComponent( ).getNextSnapshotVersion( ) );
156 _wfContext.getComponent( ).setLastAvailableSnapshotVersion( _wfContext.getComponent( ).getNextSnapshotVersion( ) );
157
158 }
159
160 break;
161 }
162
163 }
164 catch( AppException appe )
165 {
166 if ( _wfContext.getComponent( ) != null )
167 {
168
169 _wfContext.getComponent( ).setErrorLastRelease( true );
170 }
171 AppLogService.error( appe );
172 }
173 finally
174 {
175 ReleaserUtils.stopCommandResult( _wfContext );
176 WorkflowReleaseContextService.getService( ).saveWorkflowReleaseContext( _wfContext );
177 }
178 }
179
180
181
182
183
184
185
186
187 private boolean testAllComponentReleased( Site site )
188 {
189 if ( !CollectionUtils.isEmpty( site.getComponents( ) ) )
190 {
191
192 for ( Component component : site.getComponents( ) )
193 {
194
195 if ( !component.isErrorLastRelease( ) && component.shouldBeReleased( ) )
196 {
197 return false;
198
199 }
200 }
201 }
202
203 return true;
204
205 }
206
207
208
209
210
211
212
213
214 private boolean hasErrorDuringReleaseComponent( Site site )
215 {
216 if ( !CollectionUtils.isEmpty( site.getComponents( ) ) )
217 {
218
219 for ( Component component : site.getComponents( ) )
220 {
221
222 if ( component.isErrorLastRelease( ) )
223 {
224 return true;
225
226 }
227 }
228 }
229
230 return false;
231
232 }
233
234 }