1 package org
.argeo
.slc
.client
.ui
.dist
.views
;
3 import java
.text
.DateFormat
;
4 import java
.text
.SimpleDateFormat
;
7 import javax
.jcr
.Property
;
8 import javax
.jcr
.RepositoryException
;
9 import javax
.jcr
.Session
;
11 import org
.argeo
.jcr
.JcrUtils
;
12 import org
.argeo
.slc
.SlcException
;
13 import org
.argeo
.slc
.SlcTypes
;
14 import org
.argeo
.slc
.client
.ui
.dist
.DistConstants
;
15 import org
.argeo
.slc
.client
.ui
.dist
.DistImages
;
16 import org
.argeo
.slc
.client
.ui
.dist
.DistPlugin
;
17 import org
.argeo
.slc
.client
.ui
.dist
.controllers
.ArtifactsTreeContentProvider
;
18 import org
.argeo
.slc
.repo
.RepoConstants
;
19 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
20 import org
.eclipse
.jface
.viewers
.ISelection
;
21 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
22 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
23 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
24 import org
.eclipse
.jface
.viewers
.TreeViewer
;
25 import org
.eclipse
.jface
.viewers
.ViewerCell
;
26 import org
.eclipse
.swt
.SWT
;
27 import org
.eclipse
.swt
.graphics
.Image
;
28 import org
.eclipse
.swt
.layout
.FillLayout
;
29 import org
.eclipse
.swt
.widgets
.Composite
;
30 import org
.eclipse
.swt
.widgets
.Tree
;
31 import org
.eclipse
.swt
.widgets
.TreeColumn
;
32 import org
.eclipse
.ui
.part
.ViewPart
;
35 * Basic View to browse a maven based repository.
37 * By Default size of the various bundles is not computed but it can be
38 * activated the view command.
41 public class ArtifactsBrowser
extends ViewPart
implements DistConstants
,
43 // private final static Log log = LogFactory.getLog(ArtifactsBrowser.class);
44 public final static String ID
= DistPlugin
.PLUGIN_ID
+ ".artifactsBrowser";
46 /* DEPENDENCY INJECTION */
47 private Session jcrSession
;
50 private Node rootNode
;
53 private TreeViewer artifactTreeViewer
;
54 private boolean isSizeVisible
= false;
56 // To be able to configure columns easily
57 public static final int COLUMN_TREE
= 0;
58 public static final int COLUMN_DATE
= 1;
59 public static final int COLUMN_SIZE
= 2;
60 private static final int SIZE_COL_WIDTH
= 55;
63 public void createPartControl(Composite parent
) {
64 // Enable the different parts to fill the whole page when the tab is
66 parent
.setLayout(new FillLayout());
67 artifactTreeViewer
= createArtifactsTreeViewer(parent
);
69 // context menu : it is completely defined in the plugin.xml file.
70 // Nothing in the context menu for the time being
71 // MenuManager menuManager = new MenuManager();
73 // menuManager.createContextMenu(artifactTreeViewer.getTree());
74 // artifactTreeViewer.getTree().setMenu(menu);
75 // getSite().registerContextMenu(menuManager, artifactTreeViewer);
77 getSite().setSelectionProvider(artifactTreeViewer
);
78 // packagesViewer.setComparer(new NodeViewerComparer());
80 // Model initialisation
81 if (jcrSession
!= null) {
83 rootNode
= jcrSession
.getNode(DEFAULT_ARTIFACTS_BASE_PATH
);
84 artifactTreeViewer
.setInput(rootNode
);
85 } catch (RepositoryException e
) {
86 throw new SlcException("Cannot load base artifact nodes", e
);
91 protected TreeViewer
createArtifactsTreeViewer(Composite parent
) {
92 int style
= SWT
.BORDER
| SWT
.MULTI
| SWT
.FULL_SELECTION
;
93 Tree tree
= new Tree(parent
, style
);
94 createColumn(tree
, "Artifacts", SWT
.LEFT
, 300);
95 createColumn(tree
, "Date created", SWT
.LEFT
, 105);
96 createColumn(tree
, "Size", SWT
.RIGHT
, 0);
97 tree
.setLinesVisible(true);
98 tree
.setHeaderVisible(true);
100 TreeViewer viewer
= new TreeViewer(tree
);
102 viewer
.setContentProvider(new ArtifactsTreeContentProvider());
103 viewer
.setLabelProvider(new ArtifactLabelProvider());
104 viewer
.addSelectionChangedListener(new ArtifactTreeSelectionListener());
105 // viewer.addDoubleClickListener(new GenericDoubleClickListener());
106 viewer
.setInput(rootNode
);
111 private static TreeColumn
createColumn(Tree parent
, String name
, int style
,
113 TreeColumn result
= new TreeColumn(parent
, style
);
114 result
.setText(name
);
115 result
.setWidth(width
);
116 result
.setMoveable(true);
117 result
.setResizable(true);
121 protected TreeViewer
getArtifactTreeViewer() {
122 return artifactTreeViewer
;
126 public void setFocus() {
127 // TODO Auto-generated method stub
132 * Refresh the given element of the tree browser. If null is passed as a
133 * parameter, it refreshes the whole tree
135 public void refresh(Object element
) {
136 if (element
== null) {
137 artifactTreeViewer
.refresh(rootNode
);
139 artifactTreeViewer
.refresh(element
);
142 /** Returns wether size column is visible or not */
143 public boolean isSizeVisible() {
144 return isSizeVisible
;
147 /** Sets the visibility of the size column */
148 public void setSizeVisible(boolean visible
) {
149 if (isSizeVisible
== visible
)
150 return; // nothing has changed
152 isSizeVisible
= visible
;
155 artifactTreeViewer
.getTree().getColumn(COLUMN_SIZE
)
156 .setWidth(SIZE_COL_WIDTH
);
158 // we just hide the column, we don't refresh the whole tree.
159 artifactTreeViewer
.getTree().getColumn(COLUMN_SIZE
).setWidth(0);
163 private class ArtifactLabelProvider
extends ColumnLabelProvider
implements
164 DistConstants
, SlcTypes
{
165 private static final long serialVersionUID
= 7516705499556141806L;
168 protected DateFormat timeFormatter
= new SimpleDateFormat(
171 public void update(ViewerCell cell
) {
172 int colIndex
= cell
.getColumnIndex();
173 Object element
= cell
.getElement();
174 cell
.setText(getColumnText(element
, colIndex
));
176 if (element
instanceof Node
&& colIndex
== 0) {
177 Node node
= (Node
) element
;
179 if (node
.isNodeType(SLC_ARTIFACT_BASE
))
180 cell
.setImage(DistImages
.IMG_ARTIFACT_BASE
);
181 else if (node
.isNodeType(SLC_ARTIFACT_VERSION_BASE
))
182 cell
.setImage(DistImages
.IMG_ARTIFACT_VERSION_BASE
);
183 } catch (RepositoryException e
) {
190 public Image
getImage(Object element
) {
192 if (element
instanceof Node
) {
193 Node node
= (Node
) element
;
195 if (node
.isNodeType(SLC_ARTIFACT_BASE
)) {
196 return DistImages
.IMG_ARTIFACT_BASE
;
197 } else if (node
.isNodeType(SLC_ARTIFACT_VERSION_BASE
)) {
198 return DistImages
.IMG_ARTIFACT_VERSION_BASE
;
200 } catch (RepositoryException e
) {
207 public String
getColumnText(Object element
, int columnIndex
) {
209 if (element
instanceof Node
) {
210 Node node
= (Node
) element
;
211 switch (columnIndex
) {
213 return node
.getName();
216 long size
= JcrUtils
.getNodeApproxSize(node
) / 1024;
218 return size
/ 1024 + " MB";
224 if (node
.hasProperty(Property
.JCR_CREATED
))
225 return timeFormatter
.format(node
226 .getProperty(Property
.JCR_CREATED
)
227 .getDate().getTime());
232 } catch (RepositoryException re
) {
233 throw new SlcException(
234 "Unexepected error while getting property values", re
);
239 // private String formatValueAsString(Value value) {
240 // // TODO enhance this method
244 // if (value.getType() == PropertyType.BINARY)
245 // strValue = "<binary>";
246 // else if (value.getType() == PropertyType.DATE)
247 // strValue = timeFormatter.format(value.getDate().getTime());
249 // strValue = value.getString();
251 // } catch (RepositoryException e) {
252 // throw new SlcException(
253 // "unexpected error while formatting value", e);
258 private class ArtifactTreeSelectionListener
implements
259 ISelectionChangedListener
{
261 public void selectionChanged(SelectionChangedEvent event
) {
262 ISelection selection
= event
.getSelection();
263 if (selection
!= null && selection
instanceof IStructuredSelection
) {
264 IStructuredSelection iss
= (IStructuredSelection
) selection
;
265 if (iss
.size() == 1) {
266 artifactTreeViewer
.refresh(iss
.getFirstElement());
274 /* DEPENDENCY INJECTION */
275 public void setJcrSession(Session jcrSession
) {
276 this.jcrSession
= jcrSession
;