From 1cf1c8a36684a90a265334ac78e9bd98216f047e Mon Sep 17 00:00:00 2001 From: Costantino Perciante Date: Fri, 11 Nov 2016 18:31:05 +0000 Subject: [PATCH] minor fixes git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/widgets/ckan-metadata-publisher-widget@134106 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 1 - pom.xml | 3 +- .../client/CKanMetadataPublisher.java | 7 +- .../client/CKanPublisherService.java | 2 +- .../client/ui/CreateDatasetForm.java | 7 +- .../client/ui/CreateDatasetForm.ui.xml | 3 +- .../TwinColumnSelection/ResourceCellLeft.java | 26 +- .../ResourceCellRight.java | 19 +- .../TwinColumnSelectionMainPanel.java | 265 +++++++++++++----- .../TwinColumnSelectionMainPanel.ui.xml | 43 +-- .../client/ui/icons/Images.java | 13 + .../client/ui/icons/file.png | Bin 0 -> 1186 bytes .../client/ui/icons/folder.png | Bin 0 -> 527 bytes .../client/ui/utils/GcubeDialogExtended.java | 8 +- .../client/ui/utils/InfoIconsLabels.java | 2 +- .../server/CKANPublisherServicesImpl.java | 9 +- .../server/utils/Utils.java | 2 +- .../server/utils/WorkspaceUtils.java | 68 +++-- .../shared/ResourceElementBean.java | 27 +- .../client/TestClass.java | 240 +--------------- 20 files changed, 342 insertions(+), 403 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/icons/Images.java create mode 100644 src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/icons/file.png create mode 100644 src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/icons/folder.png diff --git a/.classpath b/.classpath index 3e9559a..57c104b 100644 --- a/.classpath +++ b/.classpath @@ -20,7 +20,6 @@ - diff --git a/pom.xml b/pom.xml index 3a2bb06..866d2bc 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ gCube Ckan metadata publisher widget - gCube Ckan metadata publisher widget is a GWT Widget that allows to publish metadata on the d4science ckan data catalogue. + gCube Ckan metadata publisher widget is a GWT Widget that allows to publish metadata on the d4science ckan data catalogue. scm:svn:http://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/${project.artifactId} @@ -270,5 +270,4 @@ - war diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanMetadataPublisher.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanMetadataPublisher.java index bc80462..ecc445e 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanMetadataPublisher.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanMetadataPublisher.java @@ -67,7 +67,7 @@ public class CKanMetadataPublisher implements EntryPoint { // childrenOfA.add(elementW); // childrenOfW.add(new ResourceElementBean(elementW, "File J", false, null, "Folder A:File W: File J")); // listLeft.add(elementA); - + // // String folderId = "e87bfc7d-4fb0-4795-9c79-0c495500ca9c"; // ckanServices.getTreeFolder(folderId, new AsyncCallback() { // @@ -75,14 +75,13 @@ public class CKanMetadataPublisher implements EntryPoint { // @Override // public void onSuccess(ResourceElementBean result) { // if(result != null){ - // List children = result.getChildren(); - // RootPanel.get("ckan-metadata-publisher-div").add(new TwinColumnSelectionMainPanel(children)); + // RootPanel.get("ckan-metadata-publisher-div").add(new TwinColumnSelectionMainPanel(result)); // } // } // // @Override // public void onFailure(Throwable caught) { - // + // // Window.alert("Failed to retrieve ResourceElementBean"); // // } diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherService.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherService.java index 4d669c4..a48eaa1 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherService.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherService.java @@ -66,7 +66,7 @@ public interface CKanPublisherService extends RemoteService { * @return true if it exists, false otherwise */ boolean datasetIdAlreadyExists(String title); - + // // /** // * Return a tree object representing the whole folder hierarchy // * @param folderId diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.java index 782a220..4080423 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.java @@ -336,14 +336,14 @@ public class CreateDatasetForm extends Composite{ if(isWorkspaceRequest){ - // if there are not resources, for now just checked it ( and hide so that the step will be skipped) TODO + // if there are not resources, for now just checked it ( and hide so that the step will be skipped) if(bean.getResources() == null || bean.getResources().isEmpty()){ alertNoResources.setType(AlertType.WARNING); alertNoResources.setVisible(true); }else - resourcesTwinPanel = new TwinColumnSelectionMainPanel(bean.getResources()); + resourcesTwinPanel = new TwinColumnSelectionMainPanel(bean.getResources().get(0)); } @@ -656,8 +656,9 @@ public class CreateDatasetForm extends Composite{ formThirdStep.setVisible(!resourcesPresent); // add the resources to the container panel - if(workspaceResourcesContainer.getWidget() == null) + if(workspaceResourcesContainer.getWidget() == null){ workspaceResourcesContainer.add(resourcesTwinPanel); + } }else{ diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.ui.xml b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.ui.xml index 1dd3053..4a95573 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.ui.xml +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.ui.xml @@ -302,7 +302,8 @@ + width="100%" visible="true"> + Continue diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/TwinColumnSelection/ResourceCellLeft.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/TwinColumnSelection/ResourceCellLeft.java index b2e9d73..442ee51 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/TwinColumnSelection/ResourceCellLeft.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/TwinColumnSelection/ResourceCellLeft.java @@ -1,20 +1,18 @@ package org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.TwinColumnSelection; +import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.icons.Images; import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceElementBean; -import com.github.gwtbootstrap.client.ui.Icon; -import com.github.gwtbootstrap.client.ui.constants.IconType; import com.google.gwt.cell.client.AbstractCell; +import com.google.gwt.core.client.GWT; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; - +import com.google.gwt.user.client.ui.Image; /** * Cell that renders left side panel objects * @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it) */ public class ResourceCellLeft extends AbstractCell{ - - private static final String HTML_FILE = new Icon(IconType.FILE_ALT).toString(); - private static final String HTML_FOLDER = new Icon(IconType.FOLDER_CLOSE_ALT).toString(); + private static final Images image = GWT.create(Images.class); @Override public void render(com.google.gwt.cell.client.Cell.Context context, @@ -24,9 +22,19 @@ public class ResourceCellLeft extends AbstractCell{ return; } - sb.appendHtmlConstant("
"); - sb.appendHtmlConstant(value.isFolder() ? HTML_FOLDER : HTML_FILE); - sb.appendHtmlConstant(""); + Image file = new Image(image.fileIcon()); + Image folder = new Image(image.folderIcon()); + + file.setWidth("15px"); + file.setHeight("15px"); + folder.setWidth("15px"); + folder.setHeight("15px"); + + sb.appendHtmlConstant("
"); + sb.appendHtmlConstant(""); + sb.appendHtmlConstant(value.isFolder() ? folder.toString() : file.toString()); + sb.appendHtmlConstant(""); + sb.appendHtmlConstant(""); sb.appendHtmlConstant(""); sb.appendEscaped(value.getName()); sb.appendHtmlConstant(""); diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/TwinColumnSelection/ResourceCellRight.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/TwinColumnSelection/ResourceCellRight.java index 9df43fc..007e033 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/TwinColumnSelection/ResourceCellRight.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/TwinColumnSelection/ResourceCellRight.java @@ -1,11 +1,12 @@ package org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.TwinColumnSelection; +import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.icons.Images; import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceElementBean; -import com.github.gwtbootstrap.client.ui.Icon; -import com.github.gwtbootstrap.client.ui.constants.IconType; import com.google.gwt.cell.client.AbstractCell; +import com.google.gwt.core.client.GWT; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.user.client.ui.Image; /** * Cell that renders right side panel objects @@ -13,7 +14,7 @@ import com.google.gwt.safehtml.shared.SafeHtmlBuilder; */ public class ResourceCellRight extends AbstractCell{ - private static final String HTML_FILE = new Icon(IconType.FILE_ALT).toString(); + private static final Images image = GWT.create(Images.class); @Override public void render(com.google.gwt.cell.client.Cell.Context context, @@ -22,15 +23,21 @@ public class ResourceCellRight extends AbstractCell{ if (value == null || !value.isToBeAdded() || value.isFolder()) { return; } + + Image file = new Image(image.fileIcon()); - sb.appendHtmlConstant("
"); - sb.appendHtmlConstant(HTML_FILE); + file.setWidth("15px"); + file.setHeight("15px"); + + sb.appendHtmlConstant("
"); sb.appendHtmlConstant(""); + sb.appendHtmlConstant(file.toString()); + sb.appendHtmlConstant(""); + sb.appendHtmlConstant(""); sb.appendHtmlConstant(""); sb.appendEscaped(value.getFullPath()); sb.appendHtmlConstant(""); sb.appendHtmlConstant(""); sb.appendHtmlConstant("
"); } - } diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/TwinColumnSelection/TwinColumnSelectionMainPanel.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/TwinColumnSelection/TwinColumnSelectionMainPanel.java index e97fec9..184c03d 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/TwinColumnSelection/TwinColumnSelectionMainPanel.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/TwinColumnSelection/TwinColumnSelectionMainPanel.java @@ -1,5 +1,6 @@ package org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.TwinColumnSelection; +import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -7,7 +8,10 @@ import java.util.Set; import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceElementBean; +import com.github.gwtbootstrap.client.ui.Breadcrumbs; import com.github.gwtbootstrap.client.ui.Button; +import com.github.gwtbootstrap.client.ui.FluidContainer; +import com.github.gwtbootstrap.client.ui.NavLink; import com.github.gwtbootstrap.client.ui.Popover; import com.github.gwtbootstrap.client.ui.constants.Placement; import com.google.gwt.core.client.GWT; @@ -49,15 +53,32 @@ public class TwinColumnSelectionMainPanel extends Composite{ @UiField Button allToLeftButton; @UiField - Button goRootButton; - @UiField - Button goUpButton; - @UiField Popover popoverResourceSelection; @UiField Button resourceInfoButton; + @UiField + Breadcrumbs breadcrumbs; + @UiField + FluidContainer mainContainerResourcesSelection; + // @UiField + // Button getResources; - private static final String PANEL_BORDER_COLOR = "#08c"; + /** + * The breadcrumb subpath with the linked folder + * @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it) + */ + private class PathBean{ + NavLink link; + ResourceElementBean resourceFolder; + + PathBean(NavLink link, ResourceElementBean resourceFolder){ + this.link = link; + this.resourceFolder = resourceFolder; + } + } + + private List pathListBeans = new ArrayList(); + // private static final String PANEL_BORDER_COLOR = "#08c"; private static final String PANEL_HEIGHT = "400px"; private ShowMorePagerPanel showMorePanelLeft = new ShowMorePagerPanel(); private ShowMorePagerPanel showMorePanelRight = new ShowMorePagerPanel(); @@ -67,10 +88,12 @@ public class TwinColumnSelectionMainPanel extends Composite{ private ListDataProvider dataProviderRight = new ListDataProvider(); private MultiSelectionModel selectionModelRight; private MultiSelectionModel selectionModelLeft; - private final List initialElements; + private final ResourceElementBean initialBean; private final static HTML aboutHeader = new HTML("Resource Manager"); - private final static HTML aboutBody = new HTML("Move the files you want to attach to the product on the right panel below." - + " Please consider that any complex hierarchy structure you may have will be flatten."); + private final static HTML aboutBody = new HTML("

Move the files you want to attach to the product on the right panel below." + + " Please consider that any complex hierarchy structure you may have will be flatten.

"); + + // private static final int PATH_THRESHOLD = 1; // TODO private static TwinColumnSelectionMainPanelUiBinder uiBinder = GWT .create(TwinColumnSelectionMainPanelUiBinder.class); @@ -79,39 +102,42 @@ public class TwinColumnSelectionMainPanel extends Composite{ UiBinder { } - public TwinColumnSelectionMainPanel(List elements) { + public TwinColumnSelectionMainPanel(ResourceElementBean initialBean) { initWidget(uiBinder.createAndBindUi(this)); - this.initialElements = elements; - this.buttonsPanel.getElement().getStyle().setMarginTop(50, Unit.PCT); + this.initialBean = initialBean; - goRootButton.getElement().getStyle().setPaddingLeft(0, Unit.PX); + this.buttonsPanel.getElement().getStyle().setMarginTop(50, Unit.PCT); allToRightButton.getElement().getStyle().setMarginBottom(4, Unit.PX); toRightButton.getElement().getStyle().setMarginBottom(4, Unit.PX); toLeftButton.getElement().getStyle().setMarginBottom(4, Unit.PX); allToLeftButton.getElement().getStyle().setMarginBottom(4, Unit.PX); + buttonsPanel.getElement().setAttribute("align", "center"); + popoverResourceSelection.setPlacement(Placement.LEFT); popoverResourceSelection.setHeading(aboutHeader.getHTML()); popoverResourceSelection.setText(aboutBody.getHTML()); resourceInfoButton.getElement().getStyle().setFloat(Float.RIGHT); - prepareHandlers(); - initLeftSidePanel(elements); - initRightSidePanel(); + resourceInfoButton.getElement().getStyle().setPaddingRight(0, Unit.PX); + mainContainerResourcesSelection.getElement().getStyle().setPadding(20, Unit.PX); + prepareHandlers(); + initLeftSidePanel(initialBean); + initRightSidePanel(); } /** * Initialize the left side panel */ - private void initLeftSidePanel(List elements) { + private void initLeftSidePanel(final ResourceElementBean initialBean) { // initialize the left side list ResourceCellLeft cell = new ResourceCellLeft(); // Set a key provider that provides a unique key for each object. cellListLeft = new CellList(cell, ResourceElementBean.KEY_PROVIDER); - cellListLeft.setPageSize(elements.size()); + cellListLeft.setPageSize(initialBean.getChildren().size()); cellListLeft.setKeyboardPagingPolicy(KeyboardPagingPolicy.INCREASE_RANGE); // Add a selection model so we can select cells. @@ -122,14 +148,40 @@ public class TwinColumnSelectionMainPanel extends Composite{ selectionModelLeft.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { public void onSelectionChange(SelectionChangeEvent event) { Iterator selectedObjectsIterator = selectionModelLeft.getSelectedSet().iterator(); + while (selectedObjectsIterator.hasNext()) { ResourceElementBean selectedBean = (ResourceElementBean) selectedObjectsIterator.next(); if(selectedBean.isFolder()){ + + // a single folder selected if(selectionModelLeft.getSelectedSet().size() == 1){ + + // update path + final NavLink navElem = new NavLink(selectedBean.getName()); + final PathBean pathBean = new PathBean(navElem, selectedBean); + + navElem.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + + removeStartingFromBreadcrumbs(navElem, pathBean); + // breadcrumbsUpdater(); + ResourceElementBean folder = pathBean.resourceFolder; + Collections.sort(folder.getChildren()); + dataProviderLeft.setList(folder.getChildren()); + dataProviderLeft.refresh(); + + } + }); + + pathListBeans.add(pathBean); + breadcrumbs.add(navElem); + // breadcrumbsUpdater(); + Collections.sort(selectedBean.getChildren()); dataProviderLeft.setList(selectedBean.getChildren()); dataProviderLeft.refresh(); - dataProviderLeft.flush(); } selectionModelLeft.setSelected(selectedBean, false); } @@ -140,8 +192,28 @@ public class TwinColumnSelectionMainPanel extends Composite{ }); // set the list into the provider - Collections.sort(elements); - dataProviderLeft.setList(elements); + Collections.sort(this.initialBean.getChildren()); + dataProviderLeft.setList(this.initialBean.getChildren()); + + // add root to breadcrumb + final NavLink root = new NavLink(initialBean.getName()); + final PathBean pathBean = new PathBean(root, initialBean); + pathListBeans.add(pathBean); + breadcrumbs.add(root); + + root.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + + removeStartingFromBreadcrumbs(root, pathBean); + // breadcrumbsUpdater(); + + // set back the root content list + dataProviderLeft.setList(initialBean.getChildren()); + dataProviderLeft.refresh(); + } + }); // set the cell list into the provider dataProviderLeft.addDataDisplay(cellListLeft); @@ -150,12 +222,48 @@ public class TwinColumnSelectionMainPanel extends Composite{ showMorePanelLeft.setDisplay(cellListLeft); showMorePanelLeft.setHeight(PANEL_HEIGHT); showMorePanelLeft.getElement().getStyle().setBorderStyle(BorderStyle.SOLID); - showMorePanelLeft.getElement().getStyle().setBorderColor(PANEL_BORDER_COLOR); + showMorePanelLeft.getElement().getStyle().setBorderWidth(1, Unit.PX); + // showMorePanelLeft.getElement().getStyle().setBorderColor(PANEL_BORDER_COLOR); // add the list to the leftContainerPanel leftContainer.add(showMorePanelLeft); } + /** + * Update the path + * @param navElem + * @param pathBean + */ + public void removeStartingFromBreadcrumbs(NavLink navElem, PathBean pathBean){ + + // remove data after + Iterator iteratorBreadcrumb = breadcrumbs.iterator(); + Iterator iteratorListPath = pathListBeans.iterator(); + + boolean delete = false; + while(iteratorBreadcrumb.hasNext()){ + Widget current = iteratorBreadcrumb.next(); + + if(delete) + iteratorBreadcrumb.remove(); + + if(!delete && navElem.equals(current)) + delete = true; + } + + delete = false; + while(iteratorListPath.hasNext()){ + PathBean current = iteratorListPath.next(); + + if(delete) + iteratorListPath.remove(); + + if(!delete && pathBean.equals(current)) + delete = true; + } + + } + /** * Initialize the left side panel */ @@ -186,7 +294,8 @@ public class TwinColumnSelectionMainPanel extends Composite{ showMorePanelRight.setDisplay(cellListRight); showMorePanelRight.setHeight(PANEL_HEIGHT); showMorePanelRight.getElement().getStyle().setBorderStyle(BorderStyle.SOLID); - showMorePanelRight.getElement().getStyle().setBorderColor(PANEL_BORDER_COLOR); + showMorePanelRight.getElement().getStyle().setBorderWidth(1, Unit.PX); + // showMorePanelRight.getElement().getStyle().setBorderColor(PANEL_BORDER_COLOR); // add the list to the leftContainerPanel rightContainer.add(showMorePanelRight); @@ -238,77 +347,31 @@ public class TwinColumnSelectionMainPanel extends Composite{ */ private void prepareHandlers() { - goRootButton.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - - dataProviderLeft.setList(initialElements); - dataProviderLeft.flush(); - - } - }); - - goUpButton.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - - ResourceElementBean firstElemCurrList = dataProviderLeft.getList().get(0); - if(firstElemCurrList.getParent() == null){ - GWT.log("It is the root ..."); - return; - }else{ - // get the children of the parent and show them - GWT.log("Called " + firstElemCurrList.getParent()); - if(firstElemCurrList.getParent().getParent() == null){ - // still the root - dataProviderLeft.setList(initialElements); - }else{ - dataProviderLeft.setList(firstElemCurrList.getParent().getParent().getChildren()); - } - dataProviderLeft.flush(); - } - } - }); - allToRightButton.addClickHandler(new ClickHandler() { - @Override public void onClick(ClickEvent event) { - moveToRight(selectionModelLeft.getSelectedSet()); - } }); toRightButton.addClickHandler(new ClickHandler() { - @Override public void onClick(ClickEvent event) { - moveToRight(selectionModelLeft.getSelectedSet()); - } }); allToLeftButton.addClickHandler(new ClickHandler() { - @Override public void onClick(ClickEvent event) { - moveToLeft(selectionModelRight.getSelectedSet()); - } }); toLeftButton.addClickHandler(new ClickHandler() { - @Override public void onClick(ClickEvent event) { - moveToLeft(selectionModelRight.getSelectedSet()); - } }); } @@ -366,19 +429,77 @@ public class TwinColumnSelectionMainPanel extends Composite{ * Freeze the panel */ public void freeze() { - + + Iterator iteratorOverPath = breadcrumbs.iterator(); + while (iteratorOverPath.hasNext()) { + Widget widget = (Widget) iteratorOverPath.next(); + if(widget instanceof NavLink) + ((NavLink)widget).setActive(false); + } allToRightButton.setEnabled(false); toRightButton.setEnabled(false); allToLeftButton.setEnabled(false); toLeftButton.setEnabled(false); } - + /** * Returns the list of files to save * @return the resources to save */ public List getResourcesToPublish(){ - return dataProviderRight.getList(); + List current = dataProviderRight.getList(); + + List toReturn = new ArrayList(); + + for (ResourceElementBean resourceElementBean : current) { + resourceElementBean.setName(resourceElementBean.getFullPath()); + ResourceElementBean beanWithoutChildren = new ResourceElementBean(resourceElementBean); + toReturn.add(beanWithoutChildren); + } + + GWT.log("List " + toReturn); + return toReturn; } -} + // @UiHandler("getResources") + // void getResources(ClickEvent ce){ + // getResourcesToPublish(); + // } + + // /** + // * Short the current path if needed TODO + // */ + // private void breadcrumbsUpdater(){ + // + // // ignore first and last elem + // boolean reduce = (pathListBeans.size() - 2) > PATH_THRESHOLD; + // + // GWT.log("List is " + pathListBeans.toString()); + // + // if(!reduce){ + // GWT.log("Restore"); + // for(int i = 1; i < pathListBeans.size(); i++){ + // PathBean bean = pathListBeans.get(i); + // bean.link.setText(bean.resourceFolder.getName()); + // bean.link.setVisible(true); + // } + // }else{ + // for(int i = 1; i < pathListBeans.size(); i++){ + // PathBean bean = pathListBeans.get(i); + // + // if(i == (pathListBeans.size() - 1)){ + // bean.link.setText(bean.resourceFolder.getName()); + // bean.link.setVisible(true); + // }else if(i == (pathListBeans.size() - 2)){ + // GWT.log("The last to modify ****"); + // bean.link.setText("..."); + // bean.link.setVisible(true); + // }else{ + // bean.link.setText(bean.resourceFolder.getName()); + // bean.link.setVisible(false); + // } + // } + // } + // GWT.log("Updated list is " + pathListBeans.toString()); + // } +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/TwinColumnSelection/TwinColumnSelectionMainPanel.ui.xml b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/TwinColumnSelection/TwinColumnSelectionMainPanel.ui.xml index 0c4cd11..31b92b3 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/TwinColumnSelection/TwinColumnSelectionMainPanel.ui.xml +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/TwinColumnSelection/TwinColumnSelectionMainPanel.ui.xml @@ -2,42 +2,49 @@ - .right-vertical-panel { - margin-top: 30px; - margin-left: 0px; - } + - - - - - - + + + + + + + + + + + + + + - Root level - Go up + + + enabled="false" title="Add selected files" text=">>" /> + enabled="false" title="Add selected file" text=">" /> + title="Remove selected file" text="<" /> + enabled="false" title="Remove selected files" text="<<" /> - + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/icons/Images.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/icons/Images.java new file mode 100644 index 0000000..0b0bdc7 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/icons/Images.java @@ -0,0 +1,13 @@ +package org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.icons; + +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.ImageResource; + +public interface Images extends ClientBundle { + + @Source("file.png") + ImageResource fileIcon(); + + @Source("folder.png") + ImageResource folderIcon(); +} diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/icons/file.png b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/icons/file.png new file mode 100644 index 0000000000000000000000000000000000000000..b0e069519909cfc23ce4f424cfd87d36385f70f2 GIT binary patch literal 1186 zcmV;T1YP@yP)H8P_JGyl7o}0QTh>Nz1N>M0SM390YSlza^VChD? zNQGFD_LdoPpQpo<JX``hK^LS!7$Q%%H+}kD=K*_Q)?FwF`MZg)>y#?0+-7y8|Ow2p|Mc)gpMa2zv(% zGa?u=(QL#p4CgO^MF_620oq|H4-xr0V6sp~hz4}7KEOUh%-+RHz89In z_J#MK0ll*KH3*+ZZg3C#mA5|3S>YLc{6j2d z3Pu&qU3uR7igFLJ%yvLS*ed^gEL31Xf~3knCkqKFwGaci72dxS{uWAojvT8HDdl)9 zgfPy4JKXR9S7{YdEEY$!kczw&cX#3uu;H47dOu1aHO1&c2sq6+jy1fOg*ezk`E6r_ zMv{nBNalo-c?GyEl;?rX2p&aI3ZDw0LSP2es?^E+FEnQF+k`mb0j^dOpoOIH1vwZD zTEOTcV;0~MHX%H)3_lzWb>dz$jKpBjS0VsDAtoowqSxzn>h=0}*VorK02uzK7IFuB zKZQqCMYr1(H#avT2)ZH+d!mnf67U~RO^Fw^n&@<*{>jP7*NAU|AZU|?5Jl&csIB_$ zPLOrd4k!V4cXy)EXo$13GYGj=f1!){`FSxnHz#5Qz6bn_4;$Yf9UZ+T`#3tlV!SHP zBKrNlxW8{F`&X|%7d2EIc1bz{Ve$F-`A?ghn{N&e4;vsD_`TF4N9_cH;8Xv@HtK|d z*C%luLePBz55NC~FEU^4?CjJDo&@*}t?k&fb^z5*W?*`HCJ}yndn;P4mVj-3+27xP zy|%XY2LO65rlJ^Iu#HrtgB-#_Jyd;mc2>08Z3Qn;`8q7~W@BUHcY^omfNyuG6Hye4 z5FPlSQV}yV)5`bp#l^+p!NI|oD=RC%68sZ&z%mb!Qk+!(;o%{^y1F{r+uM6hl^t*WE6haagQaN4YFZEgJxfIb7{?|@V}M*QSg79s)+>=w@XCdiE-x?tczk^P4gk^U<=~FIKz_Wsy804lG*Nkm z#IJ3P3>Fs`|7O2-To-*l9~A_F1_A+_ z|0Q)_9>3>sILk?VOZKGL#alw5M0HBnK}CK*}TO&%fB<6fZq`Z#n6!>&qly--Lflbs?#}Xw$iIH7tOK?63puk3g_Dmc{C=}+ zbb0{^-GoBh*#FKo+SqHftmdrIL9En7^czE@*hEM@6fRIa*-}|A;LVQQ{g~6Srsxo5 z9kHyANT!USRK{{z!_rp`uTv%4ZV{7W%IpR3!tS=tuu(P<*BI9M#1DL;s2Ygoe;}k# z1pCPiOviKf28)~7?pj8JC~1iDiD5qFZL)~PFDm?>3xC_n!4pZ?8$A7#Z-u2A-br;V zrR#W=szKPTLP#DXq2qomV{dTddEE4_Nbs&^FxBVLabgl~z1XlfaQoBD^InE0njZ|W zJ?QBLTzI_wb3#aBVj(pcUVG4U;zJtfCGvBYkl``z{3(qc_7XC5 copyResourcesToUserCatalogueArea(List resourcesToAdd, String folderId, String userName, DatasetMetadataBean bean) throws Exception{ + public static List copyResourcesToUserCatalogueArea(String folderId, String userName, DatasetMetadataBean bean) throws Exception{ logger.debug("Request to copy onto catalogue area...."); List resources = new ArrayList(); WorkspaceItem copiedFolder = null; WorkspaceCatalogue userCatalogue = null; + List resourcesToAdd = bean.getResources(); // in to the .catalogue area of the user's workspace Workspace ws = HomeLibrary @@ -58,19 +58,19 @@ public class WorkspaceUtils { ((WorkspaceFolder)copiedFolder).rename(org.gcube.datacatalogue.ckanutillibrary.utils.UtilMethods.fromProductTitleToName(bean.getTitle()) + "_" + System.currentTimeMillis()); // copy only the selected ones - for(ResourceElementBean resourceBeanWrapper : resourcesToAdd){ + for(ResourceElementBean resource : resourcesToAdd){ - if (resourceBeanWrapper.isToBeAdded()) { + if (resource.isToBeAdded()) { // ok it is a file, so copy it into the copiedFolder - WorkspaceItem copiedFile = userCatalogue.addWorkspaceItem(resourceBeanWrapper.getOriginalIdInWorkspace(), copiedFolder.getId()); + WorkspaceItem copiedFile = userCatalogue.addWorkspaceItem(resource.getOriginalIdInWorkspace(), copiedFolder.getId()); // name and description could have been edited - copiedFile.setDescription(resourceBeanWrapper.getDescription()); + copiedFile.setDescription(resource.getDescription()); resources.add(new ResourceBean( copiedFile.getPublicLink(true), - resourceBeanWrapper.getName(), + resource.getName(), copiedFile.getDescription(), copiedFile.getId(), userName, @@ -78,7 +78,7 @@ public class WorkspaceUtils { ((FolderItem)copiedFile).getMimeType())); // postpone rename operation - copiedFile.rename(resourceBeanWrapper.getName() + "_" + System.currentTimeMillis()); + copiedFile.rename(resource.getName() + "_" + System.currentTimeMillis()); } } @@ -116,7 +116,7 @@ public class WorkspaceUtils { bean.setCustomFields(folderItems); // set them into the bean - bean.setResources(WorkspaceUtils.getTreeFromFolder(folderId, ws).getChildren()); + bean.setResources(Arrays.asList(WorkspaceUtils.getTreeFromFolder(folderId, ws))); } @@ -131,24 +131,41 @@ public class WorkspaceUtils { // start tree construction ResourceElementBean rootElem = new ResourceElementBean(); + String pathSeparator = ws.getPathSeparator(); try{ WorkspaceItem initialItemWS = ws.getItem(workspaceFolderId); String fullPathBase = initialItemWS.getPath(); - // rootElem.setFolder(initialItemWS.isFolder()); - // rootElem.setFullPath(initialItemWS.getPath().replace(fullPathBase, "")); - // rootElem.setParent(null); - // rootElem.setName(initialItemWS.getName()); - // rootElem.setOriginalIdInWorkspace(initialItemWS.getId()); - // rootElem.setToBeAdded(false); - // rootElem.setMimeType(((FolderItem)initialItemWS).getMimeType()); - // rootElem.setDescription(initialItemWS.getDescription()); + fullPathBase = fullPathBase.endsWith(ws.getPathSeparator()) ? fullPathBase : fullPathBase + ws.getPathSeparator(); + rootElem.setFolder(initialItemWS.isFolder()); + rootElem.setFullPath(initialItemWS.getPath().replace(fullPathBase, "")); + rootElem.setParent(null); + rootElem.setName(initialItemWS.getName()); + rootElem.setOriginalIdInWorkspace(initialItemWS.getId()); + replaceFullPath(rootElem, pathSeparator); // start visiting - visit(rootElem, initialItemWS, fullPathBase); - return rootElem; + visit(rootElem, initialItemWS, fullPathBase, pathSeparator); }catch(Exception e){ logger.error("Failed to build the resource tree", e); return null; } + return rootElem; + } + + /** + * Replaces the "/" char with a custom one + * @param rootElem + * @param pathSeparatorInWs + */ + private static void replaceFullPath(ResourceElementBean rootElem, String pathSeparatorInWs) { + + if(rootElem == null) + return; + + String elemName = rootElem.getName(); + int lastIndex = rootElem.getFullPath().lastIndexOf(elemName); + String fullPath = rootElem.getFullPath().substring(0, lastIndex); + fullPath = fullPath.replaceAll(pathSeparatorInWs, RESOURCES_NAME_SEPARATOR) + elemName; + rootElem.setFullPath(fullPath); } /** @@ -157,18 +174,19 @@ public class WorkspaceUtils { * @param initialItemWS * @throws InternalErrorException */ - private static void visit(ResourceElementBean rootElem, WorkspaceItem initialItemWS, String fullPathBase) throws InternalErrorException { + private static void visit(ResourceElementBean rootElem, WorkspaceItem initialItemWS, String fullPathBase, String pathSeparator) throws InternalErrorException { List children = initialItemWS.getChildren(); ArrayList childrenInTree = new ArrayList(children.size()); for (WorkspaceItem workspaceItem : children) { ResourceElementBean elem = new ResourceElementBean(); elem.setFolder(workspaceItem.isFolder()); elem.setOriginalIdInWorkspace(workspaceItem.getId()); - elem.setFullPath(workspaceItem.getPath().replace(fullPathBase, "")); // remove this path + elem.setFullPath(workspaceItem.getPath().replace(fullPathBase, "")); elem.setParent(rootElem); elem.setName(workspaceItem.getName()); + replaceFullPath(elem, pathSeparator); childrenInTree.add(elem); - visit(elem, workspaceItem, fullPathBase); + visit(elem, workspaceItem, fullPathBase, pathSeparator); } rootElem.setChildren(childrenInTree); } diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/ResourceElementBean.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/ResourceElementBean.java index 0dd4800..f13c257 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/ResourceElementBean.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/ResourceElementBean.java @@ -38,6 +38,19 @@ public class ResourceElementBean implements Comparable, Ser return item == null ? null : item.identifierGWT; } }; + + /** + * Copy constructor + * @param another + */ + public ResourceElementBean(ResourceElementBean another) { + this.name = another.name; + this.originalIdInWorkspace = another.originalIdInWorkspace; + this.mimeType = another.mimeType; + this.url = another.url; + this.description = another.description; + this.organizationNameDatasetParent = another.organizationNameDatasetParent; + } /** * Default constructor @@ -193,14 +206,6 @@ public class ResourceElementBean implements Comparable, Ser this.originalIdInWorkspace = originalIdInWorkspace; } - // @Override - // public String toString() { - // return "ResourceElementBean [identifier=" + identifier + ", name=" - // + name + ", movedToRight=" + movedToRight + ", isFolder=" - // + isFolder + ", fullPath=" + fullPath + "]"; - // } - - @Override public boolean equals(Object o) { boolean toReturn = false; @@ -213,9 +218,9 @@ public class ResourceElementBean implements Comparable, Ser @Override public String toString() { - return "ResourceElementBean [identifierGWT=" + identifierGWT + ", name=" - + name + ", toBeAdded=" + toBeAdded + ", isFolder=" + isFolder - + ", parent=" + parent + ", childrenSize=" + children.size() + return "ResourceElementBean [identifierGWT=" + identifierGWT + + ", name=" + name + ", toBeAdded=" + toBeAdded + ", isFolder=" + + isFolder + ", parent=" + parent + ", children number=" + (children == null ? 0 : children.size()) + ", fullPath=" + fullPath + ", originalIdInWorkspace=" + originalIdInWorkspace + ", mimeType=" + mimeType + ", url=" + url + ", description=" + description diff --git a/src/test/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/TestClass.java b/src/test/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/TestClass.java index 90cde7a..86b4b81 100644 --- a/src/test/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/TestClass.java +++ b/src/test/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/TestClass.java @@ -1,249 +1,17 @@ package org.gcube.portlets.widgets.ckandatapublisherwidget.client; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.gcube.common.authorization.library.provider.SecurityTokenProvider; -import org.gcube.common.homelibrary.home.HomeLibrary; -import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException; -import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; -import org.gcube.common.homelibrary.home.exceptions.UserNotFoundException; -import org.gcube.common.homelibrary.home.workspace.Workspace; -import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder; -import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; -import org.gcube.common.homelibrary.home.workspace.catalogue.WorkspaceCatalogue; -import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException; -import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException; -import org.gcube.common.scope.api.ScopeProvider; -import org.gcube.datacatalogue.metadatadiscovery.DataCalogueMetadataFormatReader; -import org.gcube.datacatalogue.metadatadiscovery.bean.MetadataType; -import org.gcube.datacatalogue.metadatadiscovery.bean.jaxb.MetadataField; -import org.gcube.datacatalogue.metadatadiscovery.bean.jaxb.MetadataFormat; -import org.gcube.datacatalogue.metadatadiscovery.bean.jaxb.MetadataValidator; -import org.gcube.datacatalogue.metadatadiscovery.bean.jaxb.MetadataVocabulary; import org.gcube.portlets.widgets.ckandatapublisherwidget.server.CKANPublisherServicesImpl; -import org.gcube.portlets.widgets.ckandatapublisherwidget.server.utils.Utils; -import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.DataType; -import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.MetaDataTypeWrapper; -import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.MetadataFieldWrapper; -import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceElementBean; import org.junit.Test; -import org.slf4j.LoggerFactory; - +/** + * Junit tests class + * @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it) + */ public class TestClass { - private static final org.slf4j.Logger logger = LoggerFactory.getLogger(TestClass.class); - @Test public void testUser() { - assert(new CKANPublisherServicesImpl().getDevelopmentUser().equals(CKANPublisherServicesImpl.TEST_USER)); - } - //@Test - @SuppressWarnings("deprecation") - public void testCopyResources() throws WorkspaceFolderNotFoundException, InternalErrorException, HomeNotFoundException, UserNotFoundException, ItemNotFoundException{ - - ScopeProvider.instance.set("/gcube/devNext/NextNext"); - - Workspace ws = HomeLibrary - .getHomeManagerFactory() - .getHomeManager() - .getHome("costantino.perciante").getWorkspace(); - - WorkspaceItem originalFolder = ws.getItem("d3a37eb9-1589-4c95-a9d0-c473a02d4f0f"); - - List children = originalFolder.getChildren(); - // System.out.println("Folder is " + originalFolder.getName()); - // for (WorkspaceItem workspaceItem : children) { - // System.out.println("Child is " + workspaceItem.getName()); - // } - - // copy to catalogue - WorkspaceCatalogue userCatalogue = ws.getCatalogue(); - - WorkspaceItem copiedFolder = userCatalogue.addWorkspaceItem(originalFolder.getId(), userCatalogue.getId()); - System.out.println(copiedFolder.isHidden()); - // for (WorkspaceItem workspaceItem : children) { - // WorkspaceItem copiedChildren = userCatalogue.addWorkspaceItem(workspaceItem.getId(), copiedFolder.getId()); - // System.out.println("****************************** Copied file has path " + copiedChildren.getPath()); - // } - - // look at catalogue structure - List catalogueChildrens = ((WorkspaceFolder)userCatalogue).getChildren(true); - if(catalogueChildrens.isEmpty()) - System.out.println("****************************** Catalogue Child list is empty"); - else for (WorkspaceItem catalogueItem : catalogueChildrens) { - System.out.println("****************************** Catalogue Child is " + catalogueItem.getName()); - if(catalogueItem.isFolder()){ - WorkspaceFolder catalogueFolder = (WorkspaceFolder) catalogueItem; - System.out.println("**************************" + catalogueFolder.getName() + " it is a folder, printing children"); - List copiedFolderChildren = catalogueFolder.getChildren(true); - for (WorkspaceItem copiedFolderChildrenItem : copiedFolderChildren) { - System.out.println("****************************** Child is " + copiedFolderChildrenItem.getName()); - copiedFolderChildrenItem.getPublicLink(true); - } - } - } - } - - //@Test - public void testTitle(){ - - // String regexTitleSubWord = "[^a-zA-Z0-9_.-]"; - // String title = "this is a test title ."; - // String[] splittedTitle = title.split(" "); - // - // for (String word : splittedTitle) { - // System.out.println("Word is " + word); - // String replaced = word.replaceAll(regexTitleSubWord, ""); - // System.out.println("Replaced Word is " + replaced); - // if(!replaced.equals(word)){ - // System.out.println("Please note that only alphanumeric characters are allowed for the title"); - // } - // } - - System.out.println("Notification_portlet".replaceAll("[^A-Za-z0-9.-_]", " ")); - } - - //@Test - public void retrieveMetadata(){ - - try { - - ScopeProvider.instance.set("/gcube/devNext/NextNext"); - - DataCalogueMetadataFormatReader reader = new DataCalogueMetadataFormatReader(); - - for (MetadataType mt : reader.getListOfMetadataTypes()) { - - System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + mt.getName()); - MetadataFormat metadata = reader.getMetadataFormatForMetadataType(mt); - - // we need to wrap the list of metadata - List wrapperList = new ArrayList(); - List toWrap = metadata.getMetadataFields(); - - for(MetadataField metadataField: toWrap){ - - - - MetadataFieldWrapper wrapperObj = new MetadataFieldWrapper(); - wrapperObj.setDefaultValue(metadataField.getDefaultValue()); - wrapperObj.setFieldName(metadataField.getFieldName()); - wrapperObj.setType(DataType.valueOf(metadataField.getDataType().toString())); - wrapperObj.setMandatory(metadataField.getMandatory()); - wrapperObj.setNote(metadataField.getNote()); - - MetadataValidator validator = metadataField.getValidator(); - if(validator != null) - wrapperObj.setValidator(validator.getRegularExpression()); - - MetadataVocabulary vocabulary = metadataField.getVocabulary(); - - if(vocabulary != null){ - wrapperObj.setVocabulary(vocabulary.getVocabularyFields()); - wrapperObj.setMultiSelection(vocabulary.isMultiSelection()); - } - - // add to the list - wrapperList.add(wrapperObj); - - } - - // wrap the mt as well - MetaDataTypeWrapper typeWrapper = new MetaDataTypeWrapper(); - typeWrapper.setDescription(mt.getDescription()); - typeWrapper.setId(mt.getId()); - typeWrapper.setName(mt.getName()); - - } - - System.out.println("List of profiles has been saved into session"); - - } catch (Exception e) { - System.out.println("Error while retrieving metadata beans " + e); - } - - } - - //@Test - public void testDataCatalogueManagerApplication(){ - - String token = ""; - String scope = "/gcube/devNext/NextNext"; - - ScopeProvider.instance.set(scope); - SecurityTokenProvider.instance.set(token); - - Utils.writeProductPost("a great test product", - "https://next.d4science.org/group/nextnext/data-catalogue?path=/dataset/test_for_visibility", - "Costantino Perciante", Arrays.asList("tag1", "tag2", "tag33"), false); - - } - - //@Test - public void treeVisitorTest() throws Exception{ - - ScopeProvider.instance.set("/gcube/devNext/NextNext"); - String itemName = "CkanTest1137"; - String itemId = null; - - Workspace ws = HomeLibrary - .getHomeManagerFactory() - .getHomeManager() - .getHome("costantino.perciante").getWorkspace(); - - List wsChildren = ws.getRoot().getChildren(); - - for (WorkspaceItem workspaceItem : wsChildren) { - if(workspaceItem.getName().equals(itemName)){ - itemId = workspaceItem.getId(); - logger.debug("Id is " + itemId); //e87bfc7d-4fb0-4795-9c79-0c495500ca9c - break; - } - } - - // start tree construction - WorkspaceItem initialItemWS = ws.getItem(itemId); - ResourceElementBean rootElem = new ResourceElementBean(); - rootElem.setFolder(initialItemWS.isFolder()); - rootElem.setFullPath(initialItemWS.getPath()); - rootElem.setParent(null); - rootElem.setName(initialItemWS.getName()); - rootElem.setOriginalIdInWorkspace(initialItemWS.getId()); - - // start visiting - visit(rootElem, initialItemWS); - - // print final tree - logger.debug("Final tree looks like " + rootElem); - - - } - - /** - * Recursive visit of a workspace item - * @param rootElem - * @param initialItemWS - * @throws InternalErrorException - */ - private void visit(ResourceElementBean rootElem, WorkspaceItem initialItemWS) throws InternalErrorException { - List children = initialItemWS.getChildren(); - ArrayList childrenInTree = new ArrayList(children.size()); - for (WorkspaceItem workspaceItem : children) { - ResourceElementBean elem = new ResourceElementBean(); - elem.setFolder(workspaceItem.isFolder()); - elem.setOriginalIdInWorkspace(workspaceItem.getId()); - elem.setFullPath(workspaceItem.getPath()); - elem.setParent(rootElem); - elem.setName(workspaceItem.getName()); - childrenInTree.add(elem); - visit(elem, workspaceItem); - } - rootElem.setChildren(childrenInTree); - } }