diff --git a/pom.xml b/pom.xml index e9deabb..0095369 100644 --- a/pom.xml +++ b/pom.xml @@ -51,14 +51,19 @@ - - + + + + + + + @@ -95,18 +100,18 @@ - - - - - - - - - - - - + + org.gcube.common + home-library-model + [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) + provided + + + org.gcube.common + home-library-jcr + [2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT) + provided + org.gcube.common home-library diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerController.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerController.java index 86d9675..8d8b622 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerController.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerController.java @@ -138,13 +138,14 @@ public class WorkspaceExplorerController implements EventHandler { public void onFailure(Throwable caught) { GWT.log(caught.getMessage()); breadcrumbs.clear(); - + navigation.setVisibleNewFolderFacility(false); } @Override public void onSuccess(Item result) { result.setName(WorkspaceExplorerConstants.HOME_LABEL); //FORCE SET NAME LIKE "HOME_LABEL" breadcrumbs.init(result); + navigation.setVisibleNewFolderFacility(true); clearMoreInfo(); } }); @@ -155,7 +156,7 @@ public class WorkspaceExplorerController implements EventHandler { @Override public void onBreadcrumbInit(BreadcrumbInitEvent breadcrumbInitEvent) { - navigation.activeButtons(true); + navigation.setVisibleNewFolderFacility(true); } }); @@ -183,11 +184,13 @@ public class WorkspaceExplorerController implements EventHandler { @Override public void onFailure(Throwable caught) { GWT.log(caught.getMessage()); + navigation.setVisibleNewFolderFacility(false); } @Override public void onSuccess(Item result) { breadcrumbs.init(result); + navigation.setVisibleNewFolderFacility(false); clearMoreInfo(); } }); @@ -204,18 +207,21 @@ public class WorkspaceExplorerController implements EventHandler { @Override public void subtmitHandler(String folderName) { + showMessage(AlertType.INFO, "Creating folder \""+folderName+"\""); + WorkspaceExplorerConstants.workspaceNavigatorService.createFolder(folderName, "", breadcrumbs.getLastParent().getId(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { + hideMessage(); + clearMoreInfo(); Window.alert(caught.getMessage()); GWT.log(caught.getMessage()); - } @Override public void onSuccess(Item result) { - + hideMessage(); if(result!=null){ wsExplorer.addItemToExplorer(result); clearMoreInfo(); diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/CreateFolderForm.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/CreateFolderForm.java index d9b2ff3..0e36ebe 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/CreateFolderForm.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/CreateFolderForm.java @@ -45,17 +45,15 @@ public abstract class CreateFolderForm extends Composite { @UiField FluidRow validator_field; + @UiField + FluidRow form_fields; + @UiField Form form_create_folder; - private Alert alertError = new Alert("Required Field"); - - private Alert alertSubmitResult = new Alert(""); - + private Alert alert = new Alert(); private static AbstractFormReleaseUiBinder uiBinder = GWT.create(AbstractFormReleaseUiBinder.class); - private int width = 300; - /** * Subtmit handler. * @@ -88,13 +86,6 @@ public abstract class CreateFolderForm extends Composite { input_folder_name.addStyleName("gwt-TextBox-personal"); submit_create_folder.addStyleName("margin-right-5px"); -// setSize(width+"px", "200px"); -// input_folder_name.setWidth(width-10+"px"); - -// input_layer_name.addStyleName("textbox-geo"); -// input_layer_title.addStyleName("textbox-geo"); -// input_WMS_URI.addStyleName("textbox-geo"); - close_dialog.addClickHandler(new ClickHandler() { @Override @@ -128,21 +119,25 @@ public abstract class CreateFolderForm extends Composite { } }); - alertError.addStyleName("marginTop10"); - alertError.setType(AlertType.ERROR); - alertError.setVisible(false); - alertError.setClose(false); - validator_field.add(alertError); + alert.addStyleName("marginTop10"); + alert.setType(AlertType.ERROR); + alert.setVisible(false); + alert.setClose(false); + validator_field.add(alert); + } -// alertSubmitResult.addStyleName("marginTop10"); - alertSubmitResult.setType(AlertType.INFO); - alertSubmitResult.setVisible(false); - alertSubmitResult.setClose(false); + public void showMessage(AlertType type, String message){ + alert.setType(type); + alert.setHTML(message); + alert.setVisible(true); + form_fields.setVisible(false); + } -// hp_form_actions.setCellHorizontalAlignment(close_dialog, HasHorizontalAlignment.ALIGN_RIGHT); + public void hideMessage(){ + if(alert.isVisible()) + alert.setVisible(false); - showAlertSubmitResult(false, ""); - form_create_folder.add(alertSubmitResult); + form_fields.setVisible(true); } /** @@ -162,18 +157,6 @@ public abstract class CreateFolderForm extends Composite { return valid; } - /** - * Show alert submit result. - * - * @param visible the visible - * @param text the text - */ - public void showAlertSubmitResult(boolean visible, String text){ - alertSubmitResult.setText(text); - alertSubmitResult.setVisible(visible); - } - - /** * Gets the submit button. * @@ -198,28 +181,9 @@ public abstract class CreateFolderForm extends Composite { * @return the alert error */ public Alert getAlertError() { - return alertError; + return alert; } - /** - * Gets the alert submit result. - * - * @return the alert submit result - */ - public Alert getAlertSubmitResult() { - return alertSubmitResult; - } - - /** - * Sets the alert error visible. - * - * @param bool the new alert error visible - */ - public void setAlertErrorVisible(boolean bool){ - alertError.setVisible(bool); - } - - /** * Gets the text box folder name. * diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/CreateFolderForm.ui.xml b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/CreateFolderForm.ui.xml index 212e43d..427d691 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/CreateFolderForm.ui.xml +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/CreateFolderForm.ui.xml @@ -3,11 +3,13 @@ xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:b="urn:import:com.github.gwtbootstrap.client.ui"> - New Folder - - Create - Close + + New Folder + + Create + Close + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.java index dbb2c5f..f2cb622 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.java @@ -128,7 +128,7 @@ public class Navigation extends Composite{ }); } - public void activeButtons(boolean bool){ - new_folder.setActive(bool); + public void setVisibleNewFolderFacility(boolean bool){ + new_folder.setVisible(bool); } } diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/ItemBuilder.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/ItemBuilder.java index 3d72528..7859012 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/ItemBuilder.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/ItemBuilder.java @@ -68,18 +68,20 @@ public class ItemBuilder { return Util.isFolder(item.getType()) && item.getChildren().size() == 0; } + /** * Gets the item. * * @param parent the parent * @param workspaceItem the workspace item + * @param workspaceItemPath the workspace item path * @param showableTypes the showable types * @param filterCriteria the filter criteria * @param loadChildren the load children * @return the item * @throws InternalErrorException the internal error exception */ - public static Item getItem(Item parent, WorkspaceItem workspaceItem, List showableTypes, FilterCriteria filterCriteria, boolean loadChildren) throws InternalErrorException + public static Item getItem(Item parent, WorkspaceItem workspaceItem, String workspaceItemPath, List showableTypes, FilterCriteria filterCriteria, boolean loadChildren) throws InternalErrorException { ItemType type = getItemType(workspaceItem); @@ -110,14 +112,12 @@ public class ItemBuilder { Item item = null; try{ - //THIS CALL IS VERY SLOW!! // String storageID = null; // if(workspaceItem instanceof FolderItem){ // storageID = workspaceItem.getStorageID(); // } - - item = new Item(parent, workspaceItem.getId(), itemName, type, workspaceItem.getPath(), UserUtil.getUserFullName(workspaceItem.getOwner().getPortalLogin()), isFolder, false); + item = new Item(parent, workspaceItem.getId(), itemName, type, workspaceItemPath, UserUtil.getUserFullName(workspaceItem.getOwner().getPortalLogin()), isFolder, false); item.setSharedFolder(isSharedFolder); }catch(Exception e){ _log.error("Error on getting item: "+itemName+" with id: "+workspaceItem.getId()+", from HL, so skipping item"); @@ -125,9 +125,15 @@ public class ItemBuilder { } if(loadChildren){ + //TODO A PATCH TO AVOID A SLOW GETPATH + workspaceItemPath = workspaceItem.getPath(); for (WorkspaceItem child: workspaceItem.getChildren()){ - _log.trace("\n\nConverting child item: "+child.getName()); - Item itemChild = getItem(item, child, showableTypes, filterCriteria, false); +// workspaceItemPath+="/"+child.getName(); + if(child.isFolder()) + workspaceItemPath+="/"+child.getName(); + +// _log.trace("\nConverting child item: "+child.getName()); + Item itemChild = getItem(item, child, workspaceItemPath, showableTypes, filterCriteria, false); _log.trace("Item: "+child.getName() +" converted!!!"); if (itemChild!=null){ item.addChild(itemChild); diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/WorkspaceExplorerServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/WorkspaceExplorerServiceImpl.java index 0505d5b..a36403e 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/WorkspaceExplorerServiceImpl.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/WorkspaceExplorerServiceImpl.java @@ -62,8 +62,6 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement String sessionID = httpSession.getId(); String user = (String) httpSession.getAttribute(USERNAME_ATTRIBUTE); - _log.error("WORKSPACE PORTLET SessionID= " + sessionID); - //TODO we check for the older attribute name if (user == null) { user = (String) httpSession.getAttribute("user"); @@ -122,7 +120,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement long startTime = System.currentTimeMillis(); _log.trace("start time - " + startTime); - Item rootItem = ItemBuilder.getItem(null, root, showableTypes, filterCriteria, true); + Item rootItem = ItemBuilder.getItem(null, root, root.getPath(), showableTypes, filterCriteria, true); rootItem.setName(WorkspaceExplorerConstants.HOME_LABEL); rootItem.setIsRoot(true); @@ -167,7 +165,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement long startTime = System.currentTimeMillis(); _log.trace("start time - " + startTime); - Item itemFolder = ItemBuilder.getItem(null, folder, showableTypes, filterCriteria, true); + Item itemFolder = ItemBuilder.getItem(null, folder, folder.getPath(), showableTypes, filterCriteria, true); _log.trace("Only showable types:"); if (purgeEmpyFolders) { @@ -242,7 +240,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement long startTime = System.currentTimeMillis(); _log.trace("start time - " + startTime); - Item itemFolder = ItemBuilder.getItem(null, folder, showableTypes, filterCriteria, true); + Item itemFolder = ItemBuilder.getItem(null, folder, folder.getPath(), showableTypes, filterCriteria, true); //OVERRIDING VRE FOLDERS NAME - SET SPECIAL FOLDER /Workspace/MySpecialFolders itemFolder.setName(WorkspaceExplorerConstants.VRE_FOLDERS_LABEL); itemFolder.setSpecialFolder(true); @@ -331,10 +329,8 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement * BUT RETURNING ONLY /MY_SPECIAL_FOLDER */ if(wsItem.isFolder()){ - if(ItemBuilder.isSpecialFolder((WorkspaceFolder) wsItem)) - { + if(ItemBuilder.isSpecialFolder((WorkspaceFolder) wsItem)){ return new ArrayList(Arrays.asList(arrayParents)); -// return listParents; } } @@ -619,12 +615,22 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement Item parent = null; try{ - parent = ItemBuilder.getItem(null, wsFolder.getParent(), allTypes, null, false); + String parentPath = wsFolder.getParent()!=null?wsFolder.getParent().getPath():""; + parent = ItemBuilder.getItem(null, wsFolder.getParent(), parentPath, allTypes, null, false); }catch(Exception e){ _log.error("Get parent thown an exception, is it the root id? "+parentId); } - return ItemBuilder.getItem(parent, wsFolder, allTypes, null, false); + //TODO PATCH TO AVOID PROBLEM ON GETPATH. FOR EXAMPLE WHEN PARENT IS ROOT + String itemPath = null; + try{ + itemPath = wsFolder.getPath(); + }catch(Exception e){ + _log.error("Get path thown an exception, for id: "+wsFolder.getId()); + itemPath= wsFolder.isFolder()?workspace.getRoot().getPath()+"/"+wsFolder.getName():workspace.getRoot().getPath(); + } + + return ItemBuilder.getItem(parent, wsFolder, itemPath, allTypes, null, false); } catch(InsufficientPrivilegesException e){ String error = "Insufficient Privileges to create the folder"; diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/shared/Item.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/shared/Item.java index 5012283..0ae043f 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/shared/Item.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/shared/Item.java @@ -318,9 +318,7 @@ public class Item implements IsSerializable { public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("Item [parent="); - builder.append(parent); - builder.append(", id="); + builder.append("Item id="); builder.append(id); builder.append(", name="); builder.append(name); diff --git a/src/test/java/org/gcube/portlets/widgets/wsexplorer/client/TestGetChildren.java b/src/test/java/org/gcube/portlets/widgets/wsexplorer/client/TestGetChildren.java index e072852..ee27c75 100644 --- a/src/test/java/org/gcube/portlets/widgets/wsexplorer/client/TestGetChildren.java +++ b/src/test/java/org/gcube/portlets/widgets/wsexplorer/client/TestGetChildren.java @@ -40,7 +40,11 @@ public class TestGetChildren { List allowedMimeTypes = new ArrayList(); Map requiredProperties = new HashMap(); FilterCriteria filterCriteria = new FilterCriteria(allowedMimeTypes,null,null); - getRoot(showableTypes, purgeEmpyFolders, filterCriteria); + Item item = getRoot(showableTypes, purgeEmpyFolders, filterCriteria); + + for (Item child : item.getChildren()) { + System.out.println(child); + } } @@ -66,7 +70,7 @@ public class TestGetChildren { long startTime = System.currentTimeMillis(); _log.debug("start time - " + startTime); - Item rootItem = ItemBuilder.getItem(null, root, showableTypes, filterCriteria, true); + Item rootItem = ItemBuilder.getItem(null, root, root.getPath(),showableTypes, filterCriteria, true); if(rootItem==null) throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get root"); diff --git a/src/test/java/org/gcube/portlets/widgets/wsexplorer/client/TestGetSize.java b/src/test/java/org/gcube/portlets/widgets/wsexplorer/client/TestGetSize.java index 17dcc3e..d84f8b7 100644 --- a/src/test/java/org/gcube/portlets/widgets/wsexplorer/client/TestGetSize.java +++ b/src/test/java/org/gcube/portlets/widgets/wsexplorer/client/TestGetSize.java @@ -1,5 +1,5 @@ /** - * + * */ package org.gcube.portlets.widgets.wsexplorer.client; @@ -30,24 +30,24 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * + * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * Jul 6, 2015 */ public class TestGetSize { /** - * + * */ private static final String TEST_SCOPE = "/gcube/devsec"; /** - * + * */ public static final String TEST_USER = "francesco.mangiacrapa"; public static final Logger _log = LoggerFactory.getLogger(TestGetSize.class); private static Workspace workspace; - - - + + + public static void main(String[] args) throws WorkspaceNavigatorServiceException { List showableTypes = new ArrayList(); showableTypes.addAll(Arrays.asList(ItemType.values())); @@ -55,10 +55,10 @@ public class TestGetSize { List allowedMimeTypes = new ArrayList(); Map requiredProperties = new HashMap(); FilterCriteria filterCriteria = new FilterCriteria(allowedMimeTypes,null,null); - - + + try { - + ScopeBean scope = new ScopeBean(TEST_SCOPE); ScopeProvider.instance.set(scope.toString()); workspace = HomeLibrary @@ -66,19 +66,19 @@ public class TestGetSize { .getHomeManager() .getHome(TEST_USER) .getWorkspace(); - + for (WorkspaceItem child: workspace.getRoot().getChildren()){ _log.debug("Child item: "+child); -// Item itemChild = getItem(item, child, showableTypes, filterCriteria, false); +// Item itemChild = getItem(item, child, showableTypes, filterCriteria, false); // _log.debug("Item: "+itemName +" converted!!!"); // if (itemChild!=null){ // item.addChild(itemChild); // } } - + /* Item mySpecial = getMySpecialFolder(showableTypes, false, filterCriteria); - + for (Item spf : mySpecial.getChildren()) { String size = getReadableSizeByItemId(spf.getId()); System.out.println(spf.getName() + ", size: "+size); @@ -87,32 +87,32 @@ public class TestGetSize { // TODO Auto-generated catch block e.printStackTrace(); } - + getRoot(showableTypes, purgeEmpyFolders, filterCriteria); - + } - + public static Item getRoot(List showableTypes, boolean purgeEmpyFolders, FilterCriteria filterCriteria) throws WorkspaceNavigatorServiceException { _log.trace("getRoot showableTypes: "+showableTypes+" purgeEmpyFolders: "+purgeEmpyFolders+" filterCriteria: "+ filterCriteria); - + try { _log.trace("Start getRoot..."); - + WorkspaceItem root = workspace.getRoot(); _log.trace("GetRoot - Replyiing root"); long startTime = System.currentTimeMillis(); _log.trace("start time - " + startTime); - Item rootItem = ItemBuilder.getItem(null, root, showableTypes, filterCriteria, true); + Item rootItem = ItemBuilder.getItem(null, root, root.getPath(), showableTypes, filterCriteria, true); rootItem.setName(WorkspaceExplorerConstants.HOME_LABEL); - + /* SPECIAL FOLDERS Item specialFolders = ItemBuilder.getItem(null, specials, showableTypes, filterCriteria, 2); specialFolders.setShared(true); - rootItem.addChild(specialFolders); + rootItem.addChild(specialFolders); */ if (purgeEmpyFolders) rootItem = ItemBuilder.purgeEmptyFolders(rootItem); @@ -123,7 +123,7 @@ public class TestGetSize { Collections.sort(rootItem.getChildren(), new ItemComparator()); _log.info("Returning children size: "+rootItem.getChildren().size()); - + return rootItem; } catch (Exception e) { @@ -131,7 +131,7 @@ public class TestGetSize { throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get root"); } } - + /** * {@inheritDoc} */ @@ -146,10 +146,10 @@ public class TestGetSize { long startTime = System.currentTimeMillis(); _log.trace("start time - " + startTime); - Item itemFolder = ItemBuilder.getItem(null, folder, showableTypes, filterCriteria, true); + Item itemFolder = ItemBuilder.getItem(null, folder, folder.getPath(), showableTypes, filterCriteria, true); itemFolder.setName(WorkspaceExplorerConstants.VRE_FOLDERS_LABEL); itemFolder.setSpecialFolder(true); - + _log.trace("Builded MySpecialFolder: "+itemFolder); _log.trace("Only showable types:"); @@ -164,7 +164,7 @@ public class TestGetSize { _log.trace("end time - " + time); //printName("", folderItem); - + Collections.sort(itemFolder.getChildren(), new ItemComparator()); return itemFolder; @@ -174,19 +174,19 @@ public class TestGetSize { throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get My Special Folder"); } } - + /* (non-Javadoc) * @see org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService#loadSizeByItemId(java.lang.String) */ public static Long getSizeByItemId(String itemId) throws Exception { - + _log.info("get Size By ItemId "+ itemId); try { - + WorkspaceItem wsItem = workspace.getItem(itemId); Long size = new Long(-1); - + if(wsItem instanceof FolderItem){ //ITEM FolderItem folderItem = (FolderItem) wsItem; size = new Long(folderItem.getLength()); @@ -199,16 +199,16 @@ public class TestGetSize { } _log.info("returning size: " +size); return size; - + } catch (Exception e) { _log.error("get Size By ItemId ", e); throw new Exception(e.getMessage()); } } - + public static String getReadableSizeByItemId(String itemId) throws Exception { - + try{ _log.info("getFormattedSize ByItemId "+ itemId); long size = getSizeByItemId(itemId);