+
+ }
+
+ /**
+ * Refresh the given element of the tree browser. If null is passed as a
+ * parameter, it refreshes the whole tree
+ */
+ public void refresh(Object element) {
+ if (element == null) {
+ artifactTreeViewer.refresh(rootNode);
+ } else
+ artifactTreeViewer.refresh(element);
+ }
+
+ /** Returns wether size column is visible or not */
+ public boolean isSizeVisible() {
+ return isSizeVisible;
+ }
+
+ /** Sets the visibility of the size column */
+ public void setSizeVisible(boolean visible) {
+ if (isSizeVisible == visible)
+ return; // nothing has changed
+ else
+ isSizeVisible = visible;
+
+ if (visible) {
+ artifactTreeViewer.getTree().getColumn(COLUMN_SIZE)
+ .setWidth(SIZE_COL_WIDTH);
+ } else {
+ // we just hide the column, we don't refresh the whole tree.
+ artifactTreeViewer.getTree().getColumn(COLUMN_SIZE).setWidth(0);
+ }
+ }
+
+ private class ArtifactLabelProvider extends ColumnLabelProvider implements
+ DistConstants, SlcTypes {
+
+ // Utils
+ protected DateFormat timeFormatter = new SimpleDateFormat(
+ DATE_TIME_FORMAT);
+
+ public void update(ViewerCell cell) {
+ int colIndex = cell.getColumnIndex();
+ Object element = cell.getElement();
+ cell.setText(getColumnText(element, colIndex));
+
+ if (element instanceof Node && colIndex == 0) {
+ Node node = (Node) element;
+ try {
+ if (node.isNodeType(SLC_ARTIFACT_BASE))
+ cell.setImage(DistImages.IMG_ARTIFACT_BASE);
+ else if (node.isNodeType(SLC_ARTIFACT_VERSION_BASE))
+ cell.setImage(DistImages.IMG_ARTIFACT_VERSION_BASE);
+ } catch (RepositoryException e) {
+ // Silent
+ }
+ }
+ }
+
+ @Override
+ public Image getImage(Object element) {
+
+ if (element instanceof Node) {
+ Node node = (Node) element;
+ try {
+ if (node.isNodeType(SLC_ARTIFACT_BASE)) {
+ return DistImages.IMG_ARTIFACT_BASE;
+ } else if (node.isNodeType(SLC_ARTIFACT_VERSION_BASE)) {
+ return DistImages.IMG_ARTIFACT_VERSION_BASE;
+ }
+ } catch (RepositoryException e) {
+ // Silent
+ }
+ }
+ return null;
+ }
+
+ public String getColumnText(Object element, int columnIndex) {
+ try {
+ if (element instanceof Node) {
+ Node node = (Node) element;
+ switch (columnIndex) {
+ case COLUMN_TREE:
+ return node.getName();
+ case COLUMN_SIZE:
+ if (isSizeVisible) {
+ long size = JcrUtils.getNodeApproxSize(node) / 1024;
+ if (size > 1024)
+ return size / 1024 + " MB";
+ else
+ return size + " KB";
+ } else
+ return "";
+ case COLUMN_DATE:
+ if (node.hasProperty(Property.JCR_CREATED))
+ return timeFormatter.format(node
+ .getProperty(Property.JCR_CREATED)
+ .getDate().getTime());
+ else
+ return null;
+ }
+ }
+ } catch (RepositoryException re) {
+ throw new ArgeoException(
+ "Unexepected error while getting property values", re);
+ }
+ return null;
+ }
+
+ private String formatValueAsString(Value value) {
+ // TODO enhance this method
+ try {
+ String strValue;
+
+ if (value.getType() == PropertyType.BINARY)
+ strValue = "<binary>";
+ else if (value.getType() == PropertyType.DATE)
+ strValue = timeFormatter.format(value.getDate().getTime());
+ else
+ strValue = value.getString();
+ return strValue;
+ } catch (RepositoryException e) {
+ throw new ArgeoException(
+ "unexpected error while formatting value", e);
+ }
+ }
+ }
+
+ private class ArtifactTreeSelectionListener implements
+ ISelectionChangedListener {
+
+ public void selectionChanged(SelectionChangedEvent event) {
+ ISelection selection = event.getSelection();
+ if (selection != null && selection instanceof IStructuredSelection) {
+ IStructuredSelection iss = (IStructuredSelection) selection;
+ if (iss.size() == 1) {
+ artifactTreeViewer.refresh(iss.getFirstElement());
+ }
+ }
+
+ }
+