From b9e0cca41f0e9395e5be49bbc1a7b7ee92dd52d0 Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Wed, 13 Feb 2013 17:39:33 +0000 Subject: [PATCH] updating sharing.. git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/workspace-tree-widget@69210 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../user/workspace/WorkspaceTree.gwt.xml | 2 +- .../client/AppControllerExplorer.java | 41 +---- .../interfaces/SubscriberInterface.java | 6 +- .../TreeAppControllerInterface.java | 9 +- .../client/rpc/GWTWorkspaceService.java | 2 +- .../client/rpc/GWTWorkspaceServiceAsync.java | 4 +- .../client/view/tree/AsyncTreePanel.java | 55 ++---- .../client/view/tree/ContextMenuTree.java | 150 +++-------------- .../workspace/server/GWTWorkspaceBuilder.java | 17 +- .../server/GWTWorkspaceServiceImpl.java | 92 +++++++++- .../server/notifications/FeedScheduler.java | 143 ++++++++++++++++ .../notifications/NotificationsProducer.java | 159 ++++++++++++++++++ .../user/workspace/server/util/Util.java | 49 +++++- 13 files changed, 500 insertions(+), 229 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/workspace/server/notifications/FeedScheduler.java create mode 100644 src/main/java/org/gcube/portlets/user/workspace/server/notifications/NotificationsProducer.java diff --git a/src/main/java/org/gcube/portlets/user/workspace/WorkspaceTree.gwt.xml b/src/main/java/org/gcube/portlets/user/workspace/WorkspaceTree.gwt.xml index bf5f079..9df4475 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/WorkspaceTree.gwt.xml +++ b/src/main/java/org/gcube/portlets/user/workspace/WorkspaceTree.gwt.xml @@ -5,7 +5,7 @@ + --> diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java b/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java index 0bd006c..773a488 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java @@ -3,6 +3,7 @@ package org.gcube.portlets.user.workspace.client; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.List; import org.gcube.portlets.user.workspace.client.event.AddFolderEvent; import org.gcube.portlets.user.workspace.client.event.AddFolderEventHandler; @@ -79,7 +80,6 @@ import org.gcube.portlets.user.workspace.client.interfaces.SubscriberInterface; import org.gcube.portlets.user.workspace.client.interfaces.TreeAppControllerInterface; import org.gcube.portlets.user.workspace.client.model.FileModel; import org.gcube.portlets.user.workspace.client.model.FolderModel; -import org.gcube.portlets.user.workspace.client.model.InfoContactModel; import org.gcube.portlets.user.workspace.client.model.MessageModel; import org.gcube.portlets.user.workspace.client.model.SmartFolderModel; import org.gcube.portlets.user.workspace.client.model.SubTree; @@ -129,7 +129,6 @@ import com.google.gwt.user.client.ui.HasWidgets; */ public class AppControllerExplorer implements EventHandler, TreeAppControllerInterface{ public static final GWTWorkspaceServiceAsync rpcWorkspaceService = (GWTWorkspaceServiceAsync) GWT.create(GWTWorkspaceService.class); -// public static final GWTWorkspaceServiceAsync rpcWorkspaceService = (GWTWorkspaceServiceAsync) Registry.get(ConstantsExplorer.RPC_WORKSPACE_SERVICE); private ExplorerPanel explorerPanel; private final static HandlerManager eventBus = new HandlerManager(null); private HashMap> subscribers = null; @@ -151,16 +150,10 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt return eventBus; } -// public WorkspaceFileServiceAsync getRpcService() { -// return rpcService; -// } - public GWTWorkspaceServiceAsync getRpcWorkspaceService() { return rpcWorkspaceService; } - - private void bind() { eventBus.addHandler(RenderForm.TYPE, new RenderFormEventHandler() { @@ -303,7 +296,7 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt }); } - else{//ITEM IS NOT SHARABLE + else{//ITEM IS NOT SHAREABLE new MessageBoxInfo("Info", "The selected item is not shareable because an ancestor item is already shared"); } @@ -1290,7 +1283,7 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt // ArrayList listFileModel = getListParentsByIdentifier(selectedEvent.getFileTarget().getIdentifier()); - ArrayList listFileModel = new ArrayList(); + List listFileModel = new ArrayList(); FileModel item = explorerPanel.getAsycTreePanel().getFileModelByIdentifier(selectedEvent.getFileTarget().getIdentifier()); @@ -1396,7 +1389,7 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt } - private ArrayList getListParents(ArrayList listParentModel, FileModel item){ + private List getListParents(List listParentModel, FileModel item){ getParents(listParentModel, item); @@ -1406,7 +1399,7 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt } - private void getParents(ArrayList listParents, FileModel item){ + private void getParents(List listParents, FileModel item){ if(item==null || item.getParentFileModel()==null){ // listParents.add(item); @@ -1482,6 +1475,7 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt this.explorerPanel.getAsycTreePanel().setSizeTreePanel(width, height); this.explorerPanel.getAsycTreePanel().setHeaderTreeVisible(false); + return explorerPanel.getAsycTreePanel(); } @@ -1588,7 +1582,7 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt } - ArrayList pathParentsList = getListParentsByIdentifier(itemIdentifier); + ArrayList pathParentsList = (ArrayList) getListParentsByIdentifierFromTree(itemIdentifier); // FileModel fileModel = explorerPanel.getAsycTreePanel().getFileModelByIdentifier(itemIdentifier); // if(fileModel != null && !fileModel.isDirectory()) @@ -1622,9 +1616,9 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt //********METHODS TO NOTIFY TREE @Override - public ArrayList getListParentsByIdentifier(String itemIdentifier) { + public List getListParentsByIdentifierFromTree(String itemIdentifier) { - ArrayList listParentModel = new ArrayList(); + List listParentModel = new ArrayList(); FileModel item = this.explorerPanel.getAsycTreePanel().getFileModelByIdentifier(itemIdentifier); @@ -1702,8 +1696,6 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt @Override public void findItemAndSelectItemInTree(String itemIdentifier) { -// boolean itemSelected = this.explorerPanel.getAsycTreePanel().selectItem(itemIdentifier); - FileModel fileModel = this.explorerPanel.getAsycTreePanel().getFileModelByIdentifier(itemIdentifier); if(fileModel==null) { //Loading item by RPC @@ -1714,21 +1706,6 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt else{ selectItemInTree(itemIdentifier); - -// if(explorerPanel.getAsycTreePanel().isSearch()) -// deselecteCurrentSelection(); -// -// if(fileModel.isDirectory()){ -// if(fileModel.getParentFileModel()!=null) -// this.explorerPanel.getAsycTreePanel().setExpandTreeLevel(fileModel.getParentFileModel().getIdentifier(), true); //expand parent folder -// -// this.explorerPanel.getAsycTreePanel().selectItem(itemIdentifier); -// -//// if(explorerPanel.getAsycTreePanel().isSearch()) -//// deselecteCurrentSelection(); -// }else -// this.explorerPanel.getAsycTreePanel().selectItem(itemIdentifier); //select item - } } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/interfaces/SubscriberInterface.java b/src/main/java/org/gcube/portlets/user/workspace/client/interfaces/SubscriberInterface.java index 2cb2952..525a938 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/interfaces/SubscriberInterface.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/interfaces/SubscriberInterface.java @@ -2,6 +2,7 @@ package org.gcube.portlets.user.workspace.client.interfaces; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import org.gcube.portlets.user.workspace.client.ConstantsExplorer.ViewSwitchType; import org.gcube.portlets.user.workspace.client.model.FileModel; @@ -19,19 +20,16 @@ public interface SubscriberInterface { // public void deleteItem(FileModel item); // void addFolder(FolderModel itemFolder); void addedFile(String itemIdentifier, FileModel parent); - void selectedItem(FileModel item, ArrayList parents); + void selectedItem(FileModel item, List parents); void expandFolderItem(FolderModel itemFolder); void setParentItemSelected(ArrayList listParents); boolean renameItem(String itemIdentifier, String newName, String extension); boolean deleteItem(String itemIdentifier); void addedFolder(String itemIdentifier, FileModel parent); - void rootLoaded(FileModel root); void smartFolderSelected(String folderId, String category); void movedItems(String sourceParentIdentifier, FileModel targetParent); - void switchView(ViewSwitchType type); - void refreshFolder(FileModel fileModel); // void updatePrevieMessage(String fromLogin, String subject, String date, String body, List attachs); diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/interfaces/TreeAppControllerInterface.java b/src/main/java/org/gcube/portlets/user/workspace/client/interfaces/TreeAppControllerInterface.java index ba7fd00..c4276de 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/interfaces/TreeAppControllerInterface.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/interfaces/TreeAppControllerInterface.java @@ -1,6 +1,6 @@ package org.gcube.portlets.user.workspace.client.interfaces; -import java.util.ArrayList; +import java.util.List; import org.gcube.portlets.user.workspace.client.model.FileModel; @@ -18,12 +18,9 @@ public interface TreeAppControllerInterface { boolean deleteItem(String itemIdentifier); boolean addFolder(String itemIdentifier, String name, String parentIdentifier); boolean addFile(String itemIdentifier, String name, String parentIdentifier); - -// FileDetailsModel getDetailsOnFileModel(String identifier); - + boolean reloadFolderChildren(String itemIdentifier); - ArrayList getListParentsByIdentifier(String itemIdentifier); -// List getAllScope(); + List getListParentsByIdentifierFromTree(String itemIdentifier); void setVisualizationType(VisualizationType type); void findItemAndSelectItemInTree(String itemIdentifier); void expandFolder(String itemIdentifier); diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java index edf5d3b..577a7dd 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java @@ -110,7 +110,7 @@ public interface GWTWorkspaceService extends RemoteService{ public boolean unSharedFolderByFolderSharedId(String folderSharedId) throws Exception; -// public ArrayList getListParentsByItemIdentifier(String itemIdentifier) throws Exception; + public List getListParentsByItemIdentifier(String itemIdentifier) throws Exception; // public ArrayList> getChildrenListsByParentsIdentifier(String itemIdentifier) throws Exception; diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java index d92255e..f68b43d 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java @@ -113,8 +113,10 @@ public interface GWTWorkspaceServiceAsync { void unSharedFolderByFolderSharedId(String folderSharedId, AsyncCallback callback); - + void getListParentsByItemIdentifier(String itemIdentifier, + AsyncCallback> callback); + // void getListParentsByItemIdentifier(String itemIdentifier,AsyncCallback> callback); // void getChildrenListsByParentsIdentifier(String itemIdentifier,AsyncCallback>> callback); diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/AsyncTreePanel.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/AsyncTreePanel.java index ecac5c3..bdd8cf3 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/AsyncTreePanel.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/AsyncTreePanel.java @@ -544,24 +544,20 @@ public class AsyncTreePanel extends LayoutContainer { else type = "null"; - String folderItemType; - if(fileModel.getGXTFolderItemType()!=null) - folderItemType = fileModel.getGXTFolderItemType().toString(); - else - folderItemType = null; - //DEBUG - if(fileModel.getParentFileModel()!=null) - System.out.println("Item selected " + fileModel.getName() + " Id " + fileModel.getIdentifier() + " Parent " + fileModel.getParentFileModel().getName() + " with id " + fileModel.getParentFileModel().getIdentifier() + " IsDirectory " + ""+fileModel.isDirectory() + " type "+ type + " HLFolderItemType "+folderItemType); - else - System.out.println("Item selected " + fileModel.getName() + " Id " + fileModel.getIdentifier() + " Parent null " + " IsDirectory " + ""+fileModel.isDirectory()+ " type "+ type +" HLFolderItemType "+folderItemType ); +// String folderItemType; +// if(fileModel.getGXTFolderItemType()!=null) +// folderItemType = fileModel.getGXTFolderItemType().toString(); +// else +// folderItemType = null; +// if(fileModel.getParentFileModel()!=null) +// System.out.println("Item selected " + fileModel.getName() + " Id " + fileModel.getIdentifier() + " Parent " + fileModel.getParentFileModel().getName() + " with id " + fileModel.getParentFileModel().getIdentifier() + " IsDirectory " + ""+fileModel.isDirectory() + " type "+ type + " HLFolderItemType "+folderItemType); +// else +// System.out.println("Item selected " + fileModel.getName() + " Id " + fileModel.getIdentifier() + " Parent null " + " IsDirectory " + ""+fileModel.isDirectory()+ " type "+ type +" HLFolderItemType "+folderItemType ); System.out.println("Item selected" + fileModel); eventBus.fireEvent(new SelectedItemEvent(fileModel)); - -// treePanel.findNode(getFileModelByIdentifier(fileModel.getIdentifier())); -// cp.setVScrollPosition(treePanel.findNode(objEvent.getSelectedItem().)) } @@ -646,13 +642,7 @@ public class AsyncTreePanel extends LayoutContainer { @SuppressWarnings("rawtypes") TreeNode node = be.getNode(); -// FileModel file = treePanel.getSelectionModel().getSelectedItem(); -// -// @SuppressWarnings("rawtypes") -// treePanel.TreeNode nodes = (TreeNode) treePanel.getSelectionModel().getSelectedItem(); -// -// be.setItem(treePanel.getSelectionModel().getSelectedItem()); - + if(node!=null){ System.out.println("Menu on: " + node.getModel().get(ConstantsExplorer.NAME)); System.out.println("node "+ treePanel.findNode(be.getTarget())); @@ -664,9 +654,7 @@ public class AsyncTreePanel extends LayoutContainer { List listSelected = treePanel.getSelectionModel().getSelectedItems(); // - if (listSelected != null && listSelected.size() > 0) { - -// FileModel selectedItem = listSelected.get(0); //get first element + if (listSelected != null && listSelected.size() > 0) { manageContextMenu(); } // @@ -741,15 +729,10 @@ public class AsyncTreePanel extends LayoutContainer { } private void loadTreeLevelFromWorkspace(final FolderModel folder){ - - - System.out.println("Start RPC - getFolderChildren"); - -// Log.info("Start RPC - getFolderChildren"); - + System.out.println("Start RPC - getFolderChildren"); +// Log.info("Start RPC - getFolderChildren"); // final CountTimer count = new CountTimer(1000); - - + AppControllerExplorer.rpcWorkspaceService.getFolderChildren(folder, new AsyncCallback>(){ @Override @@ -761,11 +744,7 @@ public class AsyncTreePanel extends LayoutContainer { @Override public void onSuccess(List result) { -// -// be.getTargetEl().setIconStyle(""); -// be.getNode().getModel().set("icon", Resources.getIconAudio()); -// be.getNode().getModel().set("overlayIconUrl", Resources.getIconAudio()); - + // Log.info("End RPC - getFolderChildren time " + count.getTime()); if(treePanel.isMasked()) @@ -952,12 +931,8 @@ public class AsyncTreePanel extends LayoutContainer { if (record != null) { FileModel item = (FileModel) record.getModel(); - -// FolderModel parent = (FolderModel) treePanel.getStore().getParent(item); treePanel.getStore().remove(item); -// treePanel.getStore().getParent((FileModel) record.getModel()); -// treePanel.getSelectionModel().select(parent, true); //Select the parent of the item deleted return true; } else System.out.println("Record Error: file target with " diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/ContextMenuTree.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/ContextMenuTree.java index bb4433e..d5c9a2e 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/ContextMenuTree.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/ContextMenuTree.java @@ -31,25 +31,19 @@ import com.extjs.gxt.ui.client.widget.menu.Menu; import com.extjs.gxt.ui.client.widget.menu.MenuItem; import com.extjs.gxt.ui.client.widget.menu.SeparatorMenuItem; import com.google.gwt.event.shared.HandlerManager; -import com.google.gwt.user.client.Window; public class ContextMenuTree { private Menu contextMenu = new Menu(); -// private TreePanel treePanel = null; private HandlerManager eventBus = AppControllerExplorer.getEventBus(); private List listSelectedItems = null; public ContextMenuTree() { - - //Context Menu -// Menu contextMenu = new Menu(); this.contextMenu.setWidth(140); -// this.treePanel = treePanel; this.listSelectedItems = new ArrayList(); createContextMenu(); -// return contextMenu; + } @@ -87,25 +81,18 @@ public class ContextMenuTree { openUrl.addSelectionListener(new SelectionListener() { public void componentSelected(MenuEvent ce) { - -// FileModel selected = treePanel.getSelectionModel().getSelectedItem(); - + FileModel selected = listSelectedItems.get(0); - -// if(selected!=null) -// eventBus.fireEvent(new ImagePreviewEvent(selected, ce.getClientX(), ce.getClientY())); - + if(selected!=null){ eventBus.fireEvent(new OpenUrlEvent(selected)); } - //clearListSelectedItems(); } }); contextMenu.add(openUrl); -// contextMenu.add(new SeparatorMenuItem()); //Open Report Template @@ -126,7 +113,6 @@ public class ContextMenuTree { }); contextMenu.add(openReportTemplate); -// contextMenu.add(new SeparatorMenuItem()); //Open Report Template @@ -138,19 +124,11 @@ public class ContextMenuTree { openReport.addSelectionListener(new SelectionListener() { public void componentSelected(MenuEvent ce) { - // FileModel selected = - // treePanel.getSelectionModel().getSelectedItem(); - FileModel selected = listSelectedItems.get(0); - // if(selected!=null) - // eventBus.fireEvent(new ImagePreviewEvent(selected, - // ce.getClientX(), ce.getClientY())); if (selected != null){ eventBus.fireEvent(new OpenReportsEvent(selected)); } - - //clearListSelectedItems(); } }); @@ -169,19 +147,13 @@ public class ContextMenuTree { insertFolder.addSelectionListener(new SelectionListener() { public void componentSelected(MenuEvent ce) { - -// final FileModel sourceFileModel = treePanel.getSelectionModel().getSelectedItem(); final FileModel sourceFileModel = listSelectedItems.get(0); if (sourceFileModel != null) { -// final FolderModel parentFileModel = (FolderModel) treePanel.getStore().getParent(sourceFileModel); // TODO parent of item - eventBus.fireEvent(new AddFolderEvent(sourceFileModel, sourceFileModel.getParentFileModel())); } - - //clearListSelectedItems(); } }); @@ -205,7 +177,6 @@ public class ContextMenuTree { }); contextMenu.add(createShareFolder); -// contextMenu.add(new SeparatorMenuItem()); //Add Url @@ -216,8 +187,7 @@ public class ContextMenuTree { addUrl.addSelectionListener(new SelectionListener() { public void componentSelected(MenuEvent ce) { - -// FileModel selected = treePanel.getSelectionModel().getSelectedItem(); + FileModel selected = listSelectedItems.get(0); FileModel parent = getDirectoryOrParent(selected); @@ -226,7 +196,6 @@ public class ContextMenuTree { eventBus.fireEvent(new CreateUrlEvent(null, parent)); } - //clearListSelectedItems(); } }); @@ -240,13 +209,11 @@ public class ContextMenuTree { copy.addSelectionListener(new SelectionListener() { public void componentSelected(MenuEvent ce) { -// List selected = treePanel.getSelectionModel().getSelectedItems(); for (FileModel target : listSelectedItems) { if(target.getIdentifier()!=null){ CopyAndPaste.copy(target.getIdentifier()); } } - //clearListSelectedItems(); } }); @@ -260,30 +227,18 @@ public class ContextMenuTree { paste.addSelectionListener(new SelectionListener() { public void componentSelected(MenuEvent ce) { -// List selected = treePanel.getSelectionModel().getSelectedItems(); + for (FileModel target : listSelectedItems) { FileModel parentTarget = getDirectoryOrParent(target); if(parentTarget!=null){ -// FileModel source = treePanel.getStore().findModel(ConstantsExplorer.IDENTIFIER, CopyAndPaste.getCopiedfileModelId()); -//// FileModel parentSource = source.getParentFileModel(); - - -// if(parentSource.getIdentifier() != parentTarget.getIdentifier()){ - - eventBus.fireEvent(new PasteItemEvent(CopyAndPaste.getCopiedfileModelId(), parentTarget.getIdentifier())); - CopyAndPaste.setCopiedfileModelId(null); - -// } -// else -// new MessageBoxAlert("Error", "desti", null); - + eventBus.fireEvent(new PasteItemEvent(CopyAndPaste.getCopiedfileModelId(), parentTarget.getIdentifier())); + CopyAndPaste.setCopiedfileModelId(null); + } } - //clearListSelectedItems(); - } }); @@ -295,15 +250,13 @@ public class ContextMenuTree { share.setIcon(Resources.getIconShareFolder()); share.addSelectionListener(new SelectionListener() { - public void componentSelected(MenuEvent ce) { -// List selected = treePanel.getSelectionModel().getSelectedItems(); + public void componentSelected(MenuEvent ce) { for (FileModel target : listSelectedItems) { if(target.getIdentifier()!=null){ eventBus.fireEvent(new CreateSharedFolderEvent(target, target.getParentFileModel(),false)); } } - //clearListSelectedItems(); } }); @@ -317,14 +270,12 @@ public class ContextMenuTree { unShare.addSelectionListener(new SelectionListener() { public void componentSelected(MenuEvent ce) { -// List selected = treePanel.getSelectionModel().getSelectedItems(); for (FileModel target : listSelectedItems) { if(target.getIdentifier()!=null){ eventBus.fireEvent( new UnShareFolderEvent(target)); } } - //clearListSelectedItems(); } }); @@ -339,15 +290,12 @@ public class ContextMenuTree { rename.addSelectionListener(new SelectionListener() { public void componentSelected(MenuEvent ce) { -// List selected = treePanel.getSelectionModel().getSelectedItems(); + for (FileModel target : listSelectedItems) { if(target.getIdentifier()!=null){ eventBus.fireEvent(new RenameItemEvent(target)); - // //clearListSelectedItems(); - } } - //clearListSelectedItems(); } }); @@ -361,13 +309,11 @@ public class ContextMenuTree { remove.addSelectionListener(new SelectionListener() { public void componentSelected(MenuEvent ce) { -// List selected = treePanel.getSelectionModel().getSelectedItems(); - + for (FileModel sel : listSelectedItems) { eventBus.fireEvent(new DeleteItemEvent(sel)); } - - //clearListSelectedItems(); + } }); @@ -383,7 +329,6 @@ public class ContextMenuTree { show.addSelectionListener(new SelectionListener() { public void componentSelected(MenuEvent ce) { -// List selected = treePanel.getSelectionModel().getSelectedItems(); for (final FileModel sel : listSelectedItems) { eventBus.fireEvent(new FileDownloadEvent(sel.getIdentifier(), sel.getName(), DownloadType.SHOW)); @@ -403,14 +348,11 @@ public class ContextMenuTree { viewWebDav.addSelectionListener(new SelectionListener() { public void componentSelected(MenuEvent ce) { - -// List selected = treePanel.getSelectionModel().getSelectedItems(); + for (final FileModel sel : listSelectedItems) eventBus.fireEvent(new WebDavUrlEvent(sel.getIdentifier())); - - - //clearListSelectedItems(); + } }); @@ -426,15 +368,10 @@ public class ContextMenuTree { sendTo.addSelectionListener(new SelectionListener() { public void componentSelected(MenuEvent ce) { - -// List selected = treePanel.getSelectionModel().getSelectedItems(); - + if(listSelectedItems!=null && listSelectedItems.size()>0) eventBus.fireEvent(new SendMessageEvent(listSelectedItems)); - - - //clearListSelectedItems(); - + } }); @@ -450,23 +387,14 @@ public class ContextMenuTree { upload.addSelectionListener(new SelectionListener() { public void componentSelected(MenuEvent ce) { - -// List selected = treePanel.getSelectionModel().getSelectedItems(); - + for (final FileModel sel : listSelectedItems) { FileModel parent = getDirectoryOrParent(sel); - -// if(sel.isDirectory()) -// parent = sel; -// else -// parent = sel.getParentFileModel(); - eventBus.fireEvent(new FileUploadEvent(parent, UploadType.FILE)); } - - //clearListSelectedItems(); + } }); @@ -481,24 +409,14 @@ public class ContextMenuTree { uploadArchive.addSelectionListener(new SelectionListener() { public void componentSelected(MenuEvent ce) { - -// List selected = treePanel.getSelectionModel().getSelectedItems(); - + for (FileModel sel : listSelectedItems) { FileModel parent = getDirectoryOrParent(sel); - -// if(sel.isDirectory()) -// parent = sel; -// else -// parent = sel.getParentFileModel(); - + eventBus.fireEvent(new FileUploadEvent(parent, UploadType.ARCHIVE)); - - } - - //clearListSelectedItems(); + } }); @@ -512,26 +430,10 @@ public class ContextMenuTree { downloadArchive.addSelectionListener(new SelectionListener() { public void componentSelected(MenuEvent ce) { - -// List selected = treePanel.getSelectionModel().getSelectedItems(); - + for (FileModel sel : listSelectedItems) { - -// FolderModel parent = null; -// -// if(sel.isDirectory()) -// parent = (FolderModel) sel; -// else -// parent = (FolderModel) store.getParent(sel); - -// Window.alert("Upload nella seguente directory: " + parent.getName()); - eventBus.fireEvent(new FileDownloadEvent(sel.getIdentifier(), sel.getName(), DownloadType.DOWNLOAD)); - - } - - //clearListSelectedItems(); } }); @@ -546,14 +448,10 @@ public class ContextMenuTree { refreshItem.addSelectionListener(new SelectionListener() { public void componentSelected(MenuEvent ce) { - -// List selected = treePanel.getSelectionModel().getSelectedItems(); - + for (FileModel sel : listSelectedItems) { eventBus.fireEvent(new RefreshFolderEvent(sel)); } - - //clearListSelectedItems(); } }); @@ -568,8 +466,6 @@ public class ContextMenuTree { public void openContextMenuOnItem(FileModel targetFileModel, int posX, int posY) { -// this.contextMenuPosX = posX; -// this.contextMenuPosY = posY; clearListSelectedItems(); listSelectedItems.add(0, targetFileModel); diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceBuilder.java b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceBuilder.java index 5fe7bcc..e7a09c5 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceBuilder.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceBuilder.java @@ -1229,6 +1229,13 @@ public class GWTWorkspaceBuilder { return fileModel; } + /** + * + * @param wsFolder + * @param parent + * @return + * @throws InternalErrorException + */ public FolderModel buildGXTFolderModelItem(WorkspaceFolder wsFolder, FileModel parent) throws InternalErrorException { return new FolderModel(wsFolder.getId(),wsFolder.getName(), parent, true, wsFolder.isShared()); @@ -1431,11 +1438,11 @@ public class GWTWorkspaceBuilder { } //THIS IS A TEST - listContactsModel.add(new InfoContactModel("1", "Federico.Test", "Federico de Faveri")); - listContactsModel.add(new InfoContactModel("2", "Antonio.Test", "Antonio Gioia")); - listContactsModel.add(new InfoContactModel("3", "Fabio.Test", "Fabio Sinibaldi")); - listContactsModel.add(new InfoContactModel("4", Util.TEST_USER, Util.TEST_USER)); - listContactsModel.add(new InfoContactModel("5", "Massimiliano.Assante", "Massimiliano Assante")); + listContactsModel.add(new InfoContactModel("Federico.Test", "Federico.Test", "Federico de Faveri")); + listContactsModel.add(new InfoContactModel("Antonio.Test", "Antonio.Test", "Antonio Gioia")); + listContactsModel.add(new InfoContactModel("Fabio.Test", "Fabio.Test", "Fabio Sinibaldi")); + listContactsModel.add(new InfoContactModel(Util.TEST_USER, Util.TEST_USER, Util.TEST_USER)); + listContactsModel.add(new InfoContactModel("massimiliano.assante", "massimiliano.assante", "Massimiliano Assante")); return listContactsModel; } diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java index bb21d5d..0069503 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java @@ -38,6 +38,7 @@ import org.gcube.portlets.user.workspace.client.model.SmartFolderModel; import org.gcube.portlets.user.workspace.client.model.SubTree; import org.gcube.portlets.user.workspace.client.rpc.GWTWorkspaceService; import org.gcube.portlets.user.workspace.client.workspace.GWTWorkspaceItem; +import org.gcube.portlets.user.workspace.server.notifications.NotificationsProducer; import org.gcube.portlets.user.workspace.server.util.AllScope; import org.gcube.portlets.user.workspace.server.util.Util; @@ -55,8 +56,9 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT public static final String LAST_OPEN_FOLDER_ATTRIBUTE = "WORKSPACE.LAST_OPEN_FOLDER"; public static final String SELECTION_STATE_ATTRIBUTE = "WORKSPACE.SELECTION_STATE"; - protected GCUBELog workspaceLogger = new GCUBELog("GWTWorkspaceServiceImpl"); - + protected GCUBEClientLog workspaceLogger = new GCUBEClientLog("GWTWorkspaceServiceImpl"); + + protected GWTWorkspaceBuilder getGWTWorkspaceBuilder() { return Util.getGWTWorkspaceBuilder(this.getThreadLocalRequest().getSession()); @@ -66,6 +68,15 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT { return Util.getWorkspace(this.getThreadLocalRequest().getSession()); } + + protected NotificationsProducer getNotificationProducer(){ + + return Util.getNotificationProducer(Util.getAslSession(this.getThreadLocalRequest().getSession())); + } + + protected String getUserId(){ + return Util.getUserId(this.getThreadLocalRequest().getSession()); + } @Override public FolderModel getRootForTree() throws Exception { @@ -638,7 +649,6 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT return builder.buildGWTWorkspaceImage(item, isInteralImage, fullDetails); // workspaceLogger.trace(" children "+wsFolder.getChildren().size()); - // return builder.buildGWTWorkspaceItemsForGrid(wsFolder.getChildren(), null); } catch (Exception e) { @@ -710,11 +720,11 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT GCUBEClientLog logger = new GCUBEClientLog(GWTWorkspaceServiceImpl.class); logger.info("create url in parent id: "+parentFileModel.getIdentifier()); + //DEBUG // workspaceLogger.trace("Name " + name); // workspaceLogger.trace("description " + description); // workspaceLogger.trace("url " + url); -// workspaceLogger.trace("parentFileModel " + parentFileModel.getIdentifier() + " " + parentFileModel.getName()); - +// workspaceLogger.trace("parentFileModel " + parentFileModel.getIdentifier() + " " + parentFileModel.getName()); // if(description == null) // description = ""; @@ -1313,6 +1323,13 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT } boolean created = sharedFolder==null?false:true; + + + if(created){ + NotificationsProducer np = getNotificationProducer(); + np.notifyFolderSharing(listContacts, sharedFolder); + } + return created; } catch (Exception e) { @@ -1344,9 +1361,10 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT return builder.buildGxtInfoContactFromPortalLogin(listUser); } - else - workspaceLogger.trace("the item with id: "+folderSharedId+ "is not "+WorkspaceItemType.SHARED_FOLDER); - + else{ + workspaceLogger.trace("the item with id: "+folderSharedId+ " is not "+WorkspaceItemType.SHARED_FOLDER); + System.out.println("the item with id: "+folderSharedId+ " is not "+WorkspaceItemType.SHARED_FOLDER); + } return new ArrayList(); } catch (Exception e) { @@ -1364,7 +1382,6 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT try { Workspace workspace = getWorkspace(); - WorkspaceItem wsItem = workspace.getItem(folderSharedId); if(wsItem.getType().equals(WorkspaceItemType.SHARED_FOLDER)){ @@ -1374,15 +1391,72 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT WorkspaceFolder unSharedFolder = wsFolder.unShare(); unShared = unSharedFolder==null?false:true; + + System.out.println("unShared is "+unShared); + + if(unShared){ + NotificationsProducer np = getNotificationProducer(); + List contacts = getListUserSharedByFolderSharedId(folderSharedId); + +// //TODO REMOVE THIS + contacts = new ArrayList(); + contacts.add(new InfoContactModel("francesco.mangiacrapa", "francesco.mangiacrapa", "Francesco Mangiacrapa")); + + + np.notifyFolderUnSharing(contacts, wsFolder); + } + } else workspaceLogger.trace("the item with id: "+folderSharedId+ "is not "+WorkspaceItemType.SHARED_FOLDER); } catch (Exception e) { workspaceLogger.error("Error in unSharedFolderByFolderSharedId ", e); + e.printStackTrace(); throw new Exception(e.getMessage()); } return unShared; } + + @Override + public List getListParentsByItemIdentifier(String itemIdentifier) throws Exception { + List listParents = new ArrayList(); + workspaceLogger.trace("get List Parents By Item Identifier "+ itemIdentifier); + try { + Workspace workspace = getWorkspace(); + + WorkspaceItem wsItem = workspace.getItem(itemIdentifier); + + GWTWorkspaceBuilder builder = getGWTWorkspaceBuilder(); + + while(wsItem!=null && wsItem.getParent()!=null){ + + WorkspaceFolder wsFolder = wsItem.getParent(); + listParents.add(builder.buildGXTFolderModelItem(wsFolder, null)); + wsItem = wsFolder; + } + + Collections.reverse(listParents); + + //SET PARENTS + for(int i=0; i scheduledScopes; + protected Logger logger = Logger.getLogger(FeedScheduler.class); + + public FeedScheduler(long refreshTime) + { + scheduledScopes = new HashMap(); + scheduler = new Timer(true); + scheduler.schedule(new TimerTask() { + @Override + public void run() { + checkScopes(); + } + }, 0, refreshTime); + } + + public void schedule() throws Exception + { + List scopes = getAvailableScopes(); + for (GCUBEScope scope:scopes) { + logger.trace("checking scope: "+scope); + if (isServicePresentInScope(scope)) { + logger.trace("service present"); + schedule(scope); + } else logger.trace("service not present"); + } + + checkScopes(); + } + + protected void schedule(GCUBEScope scope) + { +// if (!scheduledScopes.containsKey(scope)) { +// NotificationsProducer feeder = new NotificationsProducer(scope); +// scheduledScopes.put(scope, feeder); +// } + } + + protected void checkScopes() + { + for (NotificationsProducer feeder:scheduledScopes.values()) { + try { +// feeder.checkOperatorsForFeed(); + } catch (Exception e) { + } + } + } + + protected boolean isServicePresentInScope(GCUBEScope scope) throws Exception + { + ISClient isClient = GHNContext.getImplementation(ISClient.class); + GCUBERIQuery query = isClient.getQuery(GCUBERIQuery.class); + query.addAtomicConditions(new AtomicCondition("/Profile/ServiceName", "statistical-manager-gcubews")); + query.addAtomicConditions(new AtomicCondition("/Profile/ServiceClass", "DataAnalysis")); + + return isClient.execute(query, scope).size()>0; + } + + protected static List getAvailableScopes() throws Exception + { + //FIXME for test only + //return Arrays.asList(GCUBEScope.getScope("/gcube/devsec/devVRE")); + + GHNContext ctx = GHNContext.getContext(); + String rootScopeName = (String) ctx.getProperty(GHNContext.INFRASTRUCTURE_NAME, true); + GCUBEScope rootScope = GCUBEScope.getScope("/"+rootScopeName); + List scopes = findAvailableScopes(rootScope); + return scopes; + } + + protected static List findAvailableScopes(GCUBEScope infrastructure) throws Exception { + + List scopes = new ArrayList(); + + //************* PORTAL MODE, Checking organizations + scopes.add(infrastructure); + + ///************* GET ROOT ORGANIZATION + List organizations = OrganizationLocalServiceUtil.getOrganizations(0, OrganizationLocalServiceUtil.getOrganizationsCount()); + Organization rootOrganization = null; + for (Organization organization : organizations) { + if (organization.getName().equals(infrastructure.getName()) ) { + rootOrganization = organization; + break; + } + } + if(rootOrganization==null) throw new Exception("Unable to find infrastructure scope "+infrastructure.getName()+" among organizations"); + //************** GET VO + for (Organization vOrg : rootOrganization.getSuborganizations()){ + String VOScopeString="/"+vOrg.getParentOrganization().getName()+"/"+vOrg.getName(); + try{ + scopes.add(GCUBEScope.getScope(VOScopeString)); + for (Organization vre : vOrg.getSuborganizations()){ + String VREScopeString=VOScopeString+"/"+vre.getName(); + try{ + scopes.add(GCUBEScope.getScope(VREScopeString)); + }catch(Exception e){ + } + } + }catch(Exception e){ + } + //************* GET VRE + } + + return scopes; + } + + public static void main(String[] args) throws Exception + { + + FeedScheduler scheduler = new FeedScheduler(1000); + scheduler.schedule(); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/notifications/NotificationsProducer.java b/src/main/java/org/gcube/portlets/user/workspace/server/notifications/NotificationsProducer.java new file mode 100644 index 0000000..3ef1663 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/workspace/server/notifications/NotificationsProducer.java @@ -0,0 +1,159 @@ +/** + * + */ +package org.gcube.portlets.user.workspace.server.notifications; + +import java.util.List; + +import org.apache.log4j.Logger; +import org.gcube.application.framework.core.session.ASLSession; +import org.gcube.application.framework.core.session.SessionManager; +import org.gcube.applicationsupportlayer.social.NotificationsManager; +import org.gcube.common.core.scope.GCUBEScope; +import org.gcube.portlets.user.homelibrary.home.workspace.WorkspaceFolder; +import org.gcube.portlets.user.workspace.client.model.InfoContactModel; +import org.gcube.portlets.user.workspace.server.util.Util; + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * + */ +public class NotificationsProducer { + + protected Logger logger = Logger.getLogger(NotificationsProducer.class); + protected GCUBEScope scope; + + protected NotificationsManager notificationsMng; + protected ASLSession aslSession; + protected String userId; + + + /** + * + * @param aslSession + */ + public NotificationsProducer(ASLSession aslSession) { + this.notificationsMng = Util.getNotificationManager(aslSession); + this.aslSession = aslSession; + this.userId = aslSession.getUsername(); + } + + public NotificationsManager getNotificationsMng() { + return notificationsMng; + } + + public void setNotificationMng(NotificationsManager notificationMng) { + this.notificationsMng = notificationMng; + } + + public ASLSession getAslSession() { + return aslSession; + } + + + /** + * Runs a new thread to notify the contacts passed in input + * @param listContacts + * @param sharedFolder + */ + public void notifyFolderSharing(final List listContacts, final WorkspaceFolder sharedFolder) { + + new Thread(){ + @Override + public void run() { + + for (InfoContactModel infoContactModel : listContacts) { + try{ + //NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM CURRENT USER + if(infoContactModel.getId().compareTo(userId)!=0){ + logger.trace("Send notify folder sharing for user "+infoContactModel.getId()); + boolean notify = notificationsMng.notifyFolderSharing(infoContactModel.getId(), sharedFolder); + + if(!notify) + logger.error("An error occured when notify user: "+infoContactModel.getId()); + } + }catch (Exception e) { + logger.error("An error occured in notifyFolderSharing ", e); + e.printStackTrace(); + } + } + + logger.trace("share notifications is completed"); + } + }.start(); + + + } + + /** + * Runs a new thread to notify the contacts passed in input + * @param listContacts + * @param sharedFolder + */ + public void notifyFolderUnSharing(final List listContacts, final WorkspaceFolder sharedFolder) { + + new Thread() { + @Override + public void run() { + + printContacts(listContacts); + + for (InfoContactModel infoContactModel : listContacts) { + try{ + + //NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM CURRENT USER + if(infoContactModel.getId().compareTo(userId)!=0){ + + logger.trace("Send notify folder un share user "+infoContactModel.getId()); + System.out.println("Send notify folder un share user "+infoContactModel.getId()); + + boolean notify = notificationsMng.notifyFolderRemovedUser(infoContactModel.getId(), sharedFolder, userId); + + if(!notify) + logger.error("An error occured when notify user: "+infoContactModel.getId()); + } + }catch (Exception e) { + logger.error("An error occured in notifyFolderSharing ", e); + e.printStackTrace(); + } + } + + logger.trace("un share notifications is completed"); + System.out.println("un share folder completed"); + } + + }.start(); + } + + + private void printContacts(List listContacts){ + + System.out.println("Print contacts"); + for (InfoContactModel infoContactModel : listContacts) { + System.out.println(infoContactModel); + } + System.out.println("End print contacts"); + } + + public static void main(String[] args) throws Exception + { + String sessionID = "1"; + String user = "francesco.mangiacrapa"; + String scopeString = "/gcube/devsec/devVRE"; + String fullName = "Francesco Mangiacrapa"; + + GCUBEScope scope; + ASLSession session; + + session = SessionManager.getInstance().getASLSession(sessionID, user); + scope = GCUBEScope.getScope(scopeString); + session.setScope(scope.toString()); + session.setUserAvatarId(user + "Avatar"); + session.setUserFullName(fullName); + + + NotificationsProducer feeder = new NotificationsProducer(session); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/util/Util.java b/src/main/java/org/gcube/portlets/user/workspace/server/util/Util.java index 52e77e9..667e147 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/util/Util.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/util/Util.java @@ -7,6 +7,8 @@ import javax.servlet.http.HttpSession; import org.gcube.application.framework.core.session.ASLSession; import org.gcube.application.framework.core.session.SessionManager; +import org.gcube.applicationsupportlayer.social.ApplicationNotificationsManager; +import org.gcube.applicationsupportlayer.social.NotificationsManager; import org.gcube.common.core.utils.logging.GCUBEClientLog; import org.gcube.common.core.utils.logging.GCUBELog; import org.gcube.portlets.user.homelibrary.home.HomeLibrary; @@ -15,6 +17,7 @@ import org.gcube.portlets.user.homelibrary.home.exceptions.InternalErrorExceptio import org.gcube.portlets.user.homelibrary.home.workspace.Workspace; import org.gcube.portlets.user.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException; import org.gcube.portlets.user.workspace.server.GWTWorkspaceBuilder; +import org.gcube.portlets.user.workspace.server.notifications.NotificationsProducer; /** @@ -28,6 +31,10 @@ public class Util { public static final String METADATACONVERTER_ATTRIBUTE = "METADATA_CONVERTER"; public static final String WORKSPACE_EVENT_COLLECTOR_ATTRIBUTE = "EVENT_COLLECTOR"; public static final String WORKSPACEBUILDER_ATTRIBUTE = "WORKSPACEBUILDER"; + public static final String NOTIFICATION_MANAGER = "NOTIFICATIONMANAGER"; + public static final String NOTIFICATION_PRODUCER = "NOTIFICATIONMANAGER"; + + public static final String NOTIFICATION_PORTLET_CLASS_ID = "org.gcube.portlets.user.wsmail.server.WsMailServiceImpl"; //IN DEV // public static final String TEST_SCOPE = "/gcube/devsec"; // public static final String TEST_USER = "pasquale.pagano"; @@ -35,9 +42,9 @@ public class Util { public static final String TEST_SCOPE = "/gcube/devsec/devVRE"; // public static final String TEST_USER = "federico.defaveri"; // public static final String TEST_USER = "massimiliano.assante"; - public static final String TEST_USER = "francesco.mangiacrapa"; - // public static final String TEST_USER = "pasquale.pagano"; + public static final String TEST_USER = "francesco.mangiacrapa"; + public static final String TEST_USER_FULL_NAME = "Francesco Mangiacrapa"; public static GCUBEClientLog defaultLogger = new GCUBEClientLog("WorkspacePortlet"); @@ -54,7 +61,8 @@ public class Util { httpSession.setAttribute(USERNAME_ATTRIBUTE, TEST_USER); ASLSession session = SessionManager.getInstance().getASLSession(sessionID, TEST_USER); session.setScope(TEST_SCOPE); - //session.setScope("/d4science.research-infrastructures.eu/Ecosystem/TryIt"); + session.setUserAvatarId(TEST_USER + "Avatar"); + session.setUserFullName(TEST_USER_FULL_NAME); return session; } @@ -156,5 +164,40 @@ public class Util { ASLSession session = getAslSession(httpSession); return (GWTWorkspaceBuilder) session.getAttribute(Util.WORKSPACEBUILDER_ATTRIBUTE); } + + public static NotificationsManager getNotificationManager(ASLSession session) + { + + NotificationsManager notifMng = (NotificationsManager) session.getAttribute(NOTIFICATION_MANAGER); + + if (notifMng == null) { + defaultLogger.trace("Create new NotificationsManager for user: "+session.getUsername()); + notifMng = new ApplicationNotificationsManager(session, NOTIFICATION_PORTLET_CLASS_ID); + session.setAttribute(NOTIFICATION_MANAGER, notifMng); + } + + return notifMng; + } + + public static NotificationsProducer getNotificationProducer(ASLSession session) + { + + NotificationsProducer notifProducer = (NotificationsProducer) session.getAttribute(NOTIFICATION_PRODUCER); + + if (notifProducer == null) { + defaultLogger.trace("Create new Notification Producer for user: "+session.getUsername()); + notifProducer = new NotificationsProducer(session); + session.setAttribute(NOTIFICATION_PRODUCER, notifProducer); + } + + return notifProducer; + } + + public static String getUserId(HttpSession httpSession) { + + ASLSession session = getAslSession(httpSession); + + return session.getUsername(); + } }