1 package org
.argeo
.slc
.client
.ui
.dist
.wizards
;
3 import java
.util
.ArrayList
;
7 import javax
.jcr
.NodeIterator
;
8 import javax
.jcr
.RepositoryException
;
9 import javax
.jcr
.Session
;
11 import org
.apache
.commons
.logging
.Log
;
12 import org
.apache
.commons
.logging
.LogFactory
;
13 import org
.argeo
.cms
.ui
.workbench
.util
.PrivilegedJob
;
14 import org
.argeo
.eclipse
.ui
.jcr
.EclipseJcrMonitor
;
15 import org
.argeo
.jcr
.JcrMonitor
;
16 import org
.argeo
.jcr
.JcrUtils
;
17 import org
.argeo
.slc
.SlcException
;
18 import org
.argeo
.slc
.SlcTypes
;
19 import org
.argeo
.slc
.client
.ui
.dist
.DistPlugin
;
20 import org
.argeo
.slc
.client
.ui
.dist
.utils
.ViewerUtils
;
21 import org
.argeo
.slc
.repo
.RepoConstants
;
22 import org
.argeo
.slc
.repo
.RepoService
;
23 import org
.argeo
.slc
.repo
.RepoUtils
;
24 import org
.argeo
.slc
.repo
.maven
.GenerateBinaries
;
25 import org
.eclipse
.aether
.artifact
.Artifact
;
26 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
27 import org
.eclipse
.core
.runtime
.IStatus
;
28 import org
.eclipse
.core
.runtime
.Status
;
29 import org
.eclipse
.jface
.dialogs
.IMessageProvider
;
30 import org
.eclipse
.jface
.dialogs
.MessageDialog
;
31 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
32 import org
.eclipse
.jface
.viewers
.IStructuredContentProvider
;
33 import org
.eclipse
.jface
.viewers
.TableViewer
;
34 import org
.eclipse
.jface
.viewers
.TableViewerColumn
;
35 import org
.eclipse
.jface
.viewers
.Viewer
;
36 import org
.eclipse
.jface
.viewers
.ViewerComparator
;
37 import org
.eclipse
.jface
.wizard
.IWizardPage
;
38 import org
.eclipse
.jface
.wizard
.Wizard
;
39 import org
.eclipse
.jface
.wizard
.WizardPage
;
40 import org
.eclipse
.swt
.SWT
;
41 import org
.eclipse
.swt
.layout
.GridData
;
42 import org
.eclipse
.swt
.layout
.GridLayout
;
43 import org
.eclipse
.swt
.widgets
.Button
;
44 import org
.eclipse
.swt
.widgets
.Composite
;
45 import org
.eclipse
.swt
.widgets
.Label
;
46 import org
.eclipse
.swt
.widgets
.Table
;
47 import org
.eclipse
.swt
.widgets
.Text
;
50 * Define parameters to asynchronously generate binaries, sources and sdk pom
51 * artifacts for this group using a {@link GenerateBinaries} runnable
53 public class GenerateBinariesWizard
extends Wizard
{
54 private final static Log log
= LogFactory
55 .getLog(GenerateBinariesWizard
.class);
58 private final RepoService repoService
;
59 private final String repoNodePath
;
60 private String wkspName
;
61 private String groupNodePath
;
64 private RecapPage recapPage
;
66 // Controls with parameters
67 private Text versionTxt
;
68 private Text latestVersionTxt
;
69 private Text highestArtifactVersionTxt
;
71 public GenerateBinariesWizard(RepoService repoService
, String repoNodePath
,
72 String wkspName
, String groupNodePath
) {
74 this.repoService
= repoService
;
75 this.repoNodePath
= repoNodePath
;
76 this.wkspName
= wkspName
;
77 this.groupNodePath
= groupNodePath
;
81 public void dispose() {
86 public void addPages() {
88 recapPage
= new RecapPage();
90 setWindowTitle("Define Binary Generation Procedure");
91 } catch (Exception e
) {
92 throw new SlcException("Cannot add page to wizard ", e
);
97 public boolean performFinish() {
101 String msg
= "Your are about to generate binaries, sources and sdk "
102 + "pom artifacts for this group, "
103 + "do you really want to proceed ?";
105 boolean result
= MessageDialog
.openConfirm(DistPlugin
.getDefault()
106 .getWorkbench().getDisplay().getActiveShell(),
107 "Confirm Launch", msg
);
110 GenerateBinaryJob job
= new GenerateBinaryJob(repoService
,
111 repoNodePath
, wkspName
, groupNodePath
,
112 versionTxt
.getText());
116 } catch (Exception e
) {
117 throw new SlcException(
118 "Unexpected error while launching the fetch", e
);
123 // ///////////////////////////////
125 private class RecapPage
extends WizardPage
{
126 private static final long serialVersionUID
= 904196417910874087L;
127 private TableViewer recapViewer
;
130 super("Define parameters and launch");
131 setTitle("Define parameters and launch");
135 public boolean isPageComplete() {
136 return isCurrentPage();
139 public IWizardPage
getNextPage() {
140 return null; // always last
143 private void refreshValues() {
144 Session session
= null;
146 session
= repoService
.getRemoteSession(repoNodePath
, null,
148 Node groupNode
= session
.getNode(groupNodePath
);
149 GenerateBinaries gb
= GenerateBinaries
.preProcessGroupNode(
152 List
<Artifact
> binaries
= new ArrayList
<Artifact
>();
153 binaries
.addAll(gb
.getBinaries());
155 Artifact highestVersion
= gb
.getHighestArtifactVersion();
156 if (highestVersion
!= null)
157 highestArtifactVersionTxt
.setText(highestVersion
160 if (groupNode
.hasNode(RepoConstants
.BINARIES_ARTIFACT_ID
)) {
161 Node binaryNode
= groupNode
162 .getNode(RepoConstants
.BINARIES_ARTIFACT_ID
);
163 Artifact currHighestVersion
= null;
164 for (NodeIterator ni
= binaryNode
.getNodes(); ni
.hasNext();) {
165 Node currN
= ni
.nextNode();
167 .isNodeType(SlcTypes
.SLC_ARTIFACT_VERSION_BASE
)) {
168 Artifact currVersion
= RepoUtils
.asArtifact(currN
);
170 if (currHighestVersion
== null
171 || currVersion
.getBaseVersion()
174 .getBaseVersion()) > 0)
175 currHighestVersion
= currVersion
;
178 if (currHighestVersion
!= null)
179 latestVersionTxt
.setText(currHighestVersion
182 recapViewer
.setInput(binaries
);
183 recapViewer
.refresh();
184 } catch (RepositoryException re
) {
185 throw new SlcException("Unable to get repositories URIs", re
);
187 JcrUtils
.logoutQuietly(session
);
191 public void createControl(Composite parent
) {
192 setMessage("Configure Maven Indexing", IMessageProvider
.NONE
);
194 Composite composite
= new Composite(parent
, SWT
.NO_FOCUS
);
195 composite
.setLayout(new GridLayout(2, false));
197 versionTxt
= createLT(composite
, "Version");
199 .setToolTipText("Enter a version for the new Modular Distribution");
201 latestVersionTxt
= createLT(composite
, "Latest version");
202 latestVersionTxt
.setEditable(false);
204 .setToolTipText("The actual latest version of this modular distribution");
206 highestArtifactVersionTxt
= createLT(composite
,
207 "Highest version in current category");
208 highestArtifactVersionTxt
.setEditable(false);
209 highestArtifactVersionTxt
210 .setToolTipText("The highest version among all version of the below listed modules.");
213 Table table
= new Table(composite
, SWT
.H_SCROLL
| SWT
.V_SCROLL
215 table
.setLinesVisible(true);
216 table
.setHeaderVisible(true);
217 table
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true, 2,
219 recapViewer
= new TableViewer(table
);
221 TableViewerColumn column
= ViewerUtils
.createTableViewerColumn(
222 recapViewer
, "Name", SWT
.NONE
, 250);
223 column
.setLabelProvider(new ColumnLabelProvider() {
224 private static final long serialVersionUID
= -9145709097621022043L;
227 public String
getText(Object element
) {
228 return ((Artifact
) element
).getArtifactId();
232 column
= ViewerUtils
.createTableViewerColumn(recapViewer
,
233 "Version", SWT
.NONE
, 250);
234 column
.setLabelProvider(new ColumnLabelProvider() {
235 private static final long serialVersionUID
= 5524185741667651628L;
238 public String
getText(Object element
) {
239 return ((Artifact
) element
).getBaseVersion();
243 recapViewer
.setContentProvider(new IStructuredContentProvider() {
244 private static final long serialVersionUID
= -4579434453554442858L;
247 List
<Artifact
> artifacts
;
249 @SuppressWarnings("unchecked")
250 public void inputChanged(Viewer viewer
, Object oldInput
,
252 artifacts
= (List
<Artifact
>) newInput
;
253 if (artifacts
!= null)
254 recapViewer
.refresh();
257 public void dispose() {
260 public Object
[] getElements(Object inputElement
) {
261 return artifacts
== null ?
null : artifacts
.toArray();
265 // A basic comparator
266 recapViewer
.setComparator(new ViewerComparator());
268 setControl(composite
);
273 * Define the privileged job that will be run asynchronously generate
274 * corresponding artifacts
276 private class GenerateBinaryJob
extends PrivilegedJob
{
278 private final RepoService repoService
;
279 private final String repoNodePath
;
280 private final String wkspName
;
281 private final String groupNodePath
;
282 private final String version
;
284 public GenerateBinaryJob(RepoService repoService
, String repoNodePath
,
285 String wkspName
, String groupNodePath
, String version
) {
287 this.version
= version
;
288 this.repoService
= repoService
;
289 this.repoNodePath
= repoNodePath
;
290 this.wkspName
= wkspName
;
291 this.groupNodePath
= groupNodePath
;
295 protected IStatus
doRun(IProgressMonitor progressMonitor
) {
296 Session session
= null;
298 JcrMonitor monitor
= new EclipseJcrMonitor(progressMonitor
);
299 session
= repoService
.getRemoteSession(repoNodePath
, null,
301 Node groupBaseNode
= session
.getNode(groupNodePath
);
302 GenerateBinaries
.processGroupNode(groupBaseNode
, version
,
304 } catch (Exception e
) {
305 if (log
.isDebugEnabled())
307 return new Status(IStatus
.ERROR
, DistPlugin
.PLUGIN_ID
,
308 "Cannot normalize group", e
);
310 JcrUtils
.logoutQuietly(session
);
312 return Status
.OK_STATUS
;
316 // ////////////////////////////
318 /** Creates label and text. */
319 protected Text
createLT(Composite parent
, String label
) {
320 new Label(parent
, SWT
.NONE
).setText(label
);
321 Text text
= new Text(parent
, SWT
.SINGLE
| SWT
.LEAD
| SWT
.BORDER
323 text
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
327 /** Creates label and check. */
328 protected Button
createLC(Composite parent
, String label
) {
329 new Label(parent
, SWT
.NONE
).setText(label
);
330 Button check
= new Button(parent
, SWT
.CHECK
);
331 check
.setSelection(false);
332 check
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));