diff --git a/.classpath b/.classpath index 0bc30bd..7caf893 100644 --- a/.classpath +++ b/.classpath @@ -1,6 +1,6 @@ - + @@ -30,5 +30,6 @@ - + + diff --git a/.settings/com.google.gdt.eclipse.core.prefs b/.settings/com.google.gdt.eclipse.core.prefs index d4b9d7c..c337f0c 100644 --- a/.settings/com.google.gdt.eclipse.core.prefs +++ b/.settings/com.google.gdt.eclipse.core.prefs @@ -1,8 +1,8 @@ -#Fri Mar 15 19:55:49 CET 2013 +#Fri Mar 15 19:58:46 CET 2013 =\=\=\=\=\=\= <<<<<<<=.mine >>>>>>>=.r71295 eclipse.preferences.version=1 -lastWarOutDir=/Users/massi/Documents/workspace/reports/target/reports-4.1.0-SNAPSHOT +lastWarOutDir=/Users/massi/Documents/workspace/reports/target/reports-4.1.5-SNAPSHOT warSrcDir=src/main/webapp warSrcDirIsOutput=false diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 0dde3da..2dc054b 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -5,9 +5,6 @@ - - uses - diff --git a/pom.xml b/pom.xml index 0892279..569b23c 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ org.gcube.portlets.user reports war - 4.1.0-SNAPSHOT + 4.1.5-SNAPSHOT gCube Reports Portlet gCube Reports Portlet. @@ -79,14 +79,26 @@ org.gcube.applicationsupportlayer aslcore - [3.2.1-SNAPSHOT, 4.0.0-SNAPSHOT) + [3.2.1-SNAPSHOT, 3.2.2-SNAPSHOT) provided + + + ghn-client-runtime + org.gcube.distribution + + org.gcube.applicationsupportlayer aslsocial [0.1.0-SNAPSHOT, 1.0.0-SNAPSHOT) ${setScope} + + + ghn-client-runtime + org.gcube.distribution + + org.gcube.portlets.user @@ -123,6 +135,12 @@ workspace-light-tree [2.9.0-SNAPSHOT, 3.0.0-SNAPSHOT) ${setScope} + + + is-collector-stubs + org.gcube.informationsystem + + org.gcube.portlets.admin @@ -165,6 +183,12 @@ [1.3.0-SNAPSHOT,2.0.0-SNAPSHOT) ${setClassifier} ${setScope} + + + is-collector-stubs + org.gcube.informationsystem + + org.gcube.applicationsupportlayer diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/Presenter/Presenter.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/Presenter/Presenter.java index 9257f01..c98f455 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/Presenter/Presenter.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/Presenter/Presenter.java @@ -1147,7 +1147,28 @@ public class Presenter { * @param type */ public void showExportSaveOptions(final String filePath, final String itemName, final TypeExporter type) { - ExportOptions exo = new ExportOptions(this, toolBoxPanel, filePath, itemName, type, reportService); + /* + * I need to save a temp file, in case the user uses the Save & Open. + * Smart popup blockers will allow a popup if it is directly associated to a user’s action. + * If it’s delayed in anyway, there’s a good chance it’s going to get blocked. The exported File needs to be there when clicking open. + */ + reportService.save(filePath, null, "system.tmp", type, true, new AsyncCallback() { + @Override + public void onSuccess(String createdItemId) { + //here i pass the temp createdItemId + showExportPanel(filePath, itemName, type, createdItemId); + } + + @Override + public void onFailure(Throwable caught) { + Window.alert("Error: " + caught.getMessage()); + } + }); + + } + + public void showExportPanel(final String filePath, final String itemName, final TypeExporter type, String tempFileId) { + ExportOptions exo = new ExportOptions(this, toolBoxPanel, filePath, itemName, type, reportService, tempFileId); exportsPanel.add(exo); } diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateModel.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateModel.java index 3b6d7f6..b81ada4 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateModel.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateModel.java @@ -412,10 +412,10 @@ public class TemplateModel { public void saveReport (String folderid, String name) { modelService.saveReport(folderid, name, new AsyncCallback() { public void onFailure(Throwable caught) { - Window.alert("Report Not Saved: " + caught.getMessage()); + MessageBox.alert("Warning","Report Not Saved: " + caught.getMessage(), null); } public void onSuccess(Void result) { - Window.alert("Report Saved Successfully"); + MessageBox.info("Saving Operation","Report Saved Successfully", null); presenter.refreshWorkspace(); } }); @@ -432,7 +432,7 @@ public class TemplateModel { MessageBox.alert("Warning","Report Not Saved: " + caught.getMessage(), null); } public void onSuccess(Void result) { - MessageBox.alert("Warning","Report Saved Successfully", null); + MessageBox.info("Saving Operation","Report Saved Successfully", null); presenter.refreshWorkspace(); } }); diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/ExportOptions.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/ExportOptions.java index b773d1d..cf2532b 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/ExportOptions.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/ExportOptions.java @@ -34,15 +34,15 @@ public class ExportOptions extends Composite { @UiField HTML save; @UiField HTML saveAs; - + private String tempFileId; private String filePath; private String itemName; - private String workspaceFolderId; + private TypeExporter type; private ReportServiceAsync rpc; private Presenter p; - public ExportOptions(Presenter p, ToolboxPanel tbp, final String filePath, final String itemName, final TypeExporter type, ReportServiceAsync rpc) { + public ExportOptions(Presenter p, ToolboxPanel tbp, final String filePath, final String itemName, final TypeExporter type, ReportServiceAsync rpc, String tempFileId) { initWidget(uiBinder.createAndBindUi(this)); this.tbp = tbp; this.filePath = filePath; @@ -50,7 +50,7 @@ public class ExportOptions extends Composite { this.type= type; this.rpc = rpc; this.p = p; - workspaceFolderId = null; + this.tempFileId = tempFileId; } @UiHandler("saveOpen") @@ -73,7 +73,7 @@ public class ExportOptions extends Composite { private void doCallBack(ExportMode mode) { switch(mode) { case SAVE: - rpc.save(filePath, workspaceFolderId, itemName, type, true, new AsyncCallback() { + rpc.save(filePath, null, itemName, type, true, new AsyncCallback() { @Override public void onSuccess(String createdItemId) { p.clearExportPanel(); @@ -112,12 +112,17 @@ public class ExportOptions extends Composite { break; case SAVE_OPEN: - rpc.save(filePath, workspaceFolderId, itemName, type, true, new AsyncCallback() { + /* + * Smart popup blockers (Chrome and Safari have them) will allow a popup if it is directly associated to a user’s action. + * If it’s delayed in anyway, there’s a good chance it’s going to get blocked. + * So the exported File needs to be there when clicking open, and I've saved a temp version previously. + */ + tbp.showExportedVersion(tempFileId, itemName); + rpc.save(filePath, null, itemName, type, true, new AsyncCallback() { @Override public void onSuccess(String createdItemId) { p.clearExportPanel(); tbp.refreshRoot(); - tbp.showExportedVersion(createdItemId, itemName); } @Override diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/server/servlet/NotificationsThread.java b/src/main/java/org/gcube/portlets/user/reportgenerator/server/servlet/NotificationsThread.java new file mode 100644 index 0000000..624003f --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/server/servlet/NotificationsThread.java @@ -0,0 +1,49 @@ +package org.gcube.portlets.user.reportgenerator.server.servlet; + +import java.util.List; + +import org.gcube.application.framework.core.session.ASLSession; +import org.gcube.applicationsupportlayer.social.ApplicationNotificationsManager; +import org.gcube.applicationsupportlayer.social.NotificationsManager; +import org.gcube.common.core.utils.logging.GCUBEClientLog; +import org.gcube.portlets.user.homelibrary.home.workspace.WorkspaceFolder; +import org.gcube.portlets.user.homelibrary.home.workspace.WorkspaceItem; + +/** + * + * @author Massimiliano Assante ISTI-CNR + * + */ +public class NotificationsThread implements Runnable { + private static GCUBEClientLog _log = new GCUBEClientLog(NotificationsThread.class); + private static final String WORKSPACE_PORTLET_ID = "org.gcube.portlets.user.wsmail.server.WsMailServiceImpl"; + + + private NotificationsManager nm; + private List userIdsToBeNotified; + private WorkspaceItem subjectItem; + private WorkspaceFolder sharedFolder; + + + public NotificationsThread(ASLSession session, List userIdsToBeNotified, WorkspaceItem item, WorkspaceFolder sharedFolder) { + nm = new ApplicationNotificationsManager(session, WORKSPACE_PORTLET_ID); + this.userIdsToBeNotified = userIdsToBeNotified; + subjectItem = item; + this.sharedFolder = sharedFolder; + } + + @Override + public void run() { + for (String userId : userIdsToBeNotified) { + try { + boolean notifResult = nm.notifyUpdatedItem(userId, subjectItem, sharedFolder); + _log.trace("Update Notification sent to " + userId + " result="+notifResult); + } catch (Exception e) { + e.printStackTrace(); + } + } + + } + + +} diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/server/servlet/ReportServiceImpl.java b/src/main/java/org/gcube/portlets/user/reportgenerator/server/servlet/ReportServiceImpl.java index dca64ab..302dc0c 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/server/servlet/ReportServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/server/servlet/ReportServiceImpl.java @@ -31,7 +31,6 @@ 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.scope.GCUBEScope.MalformedScopeExpressionException; import org.gcube.common.core.utils.logging.GCUBEClientLog; import org.gcube.portal.custom.communitymanager.OrganizationsUtil; import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; @@ -57,7 +56,7 @@ import org.gcube.portlets.user.homelibrary.home.workspace.Workspace; import org.gcube.portlets.user.homelibrary.home.workspace.WorkspaceFolder; import org.gcube.portlets.user.homelibrary.home.workspace.WorkspaceItem; import org.gcube.portlets.user.homelibrary.home.workspace.WorkspaceItemType; -import org.gcube.portlets.user.homelibrary.home.workspace.exceptions.InsufficientPrivilegesException; +import org.gcube.portlets.user.homelibrary.home.workspace.WorkspaceSharedFolder; import org.gcube.portlets.user.homelibrary.home.workspace.exceptions.ItemAlreadyExistException; import org.gcube.portlets.user.homelibrary.home.workspace.exceptions.ItemNotFoundException; import org.gcube.portlets.user.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException; @@ -70,9 +69,7 @@ import org.gcube.portlets.user.homelibrary.home.workspace.folder.items.gcube.Ima import org.gcube.portlets.user.homelibrary.home.workspace.folder.items.ts.TimeSeries; import org.gcube.portlets.user.reportgenerator.client.ReportConstants; import org.gcube.portlets.user.reportgenerator.client.ReportService; -import org.gcube.portlets.user.reportgenerator.client.model.ExportManifestationType; import org.gcube.portlets.user.reportgenerator.server.servlet.loggers.CreateReportLogEntry; -import org.gcube.portlets.user.reportgenerator.server.servlet.loggers.GenerateReportLogEntry; import org.gcube.portlets.user.reportgenerator.server.servlet.loggers.OpenReportLogEntry; import org.gcube.portlets.user.reportgenerator.server.servlet.loggers.OpenWorkflowLogEntry; import org.gcube.portlets.user.reportgenerator.server.servlet.loggers.SaveWorkflowLogEntry; @@ -100,19 +97,8 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe * used for debugging in eclipse */ private boolean withinPortal = true; - /** - * EXPORT DIR - */ - private static final String EXPORTS_DIR = "EXPORTS"; - /** - * EXPORT DIR - */ - private static final String TEST_SCOPE = "/gcube/devsec/devVRE"; - /** - * - */ - public static final String USERNAME_ATTRIBUTE = "user"; + private static final String TEST_SCOPE = "/gcube/devsec/devVRE"; /** * */ @@ -152,8 +138,6 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe public static final String PREVIOUS_REPORT_INSTANCE = "myPreviousReport"; - private String currentHost = ""; - /** * the WF DB Store */ @@ -177,12 +161,19 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe */ private ASLSession getASLSession() { String sessionID = this.getThreadLocalRequest().getSession().getId(); - + String user = (String) this.getThreadLocalRequest().getSession().getAttribute(ScopeHelper.USERNAME_ATTRIBUTE); if (user == null) { user = "massimiliano.assante"; this.getThreadLocalRequest().getSession().setAttribute(ScopeHelper.USERNAME_ATTRIBUTE, user); SessionManager.getInstance().getASLSession(sessionID, user).setScope(TEST_SCOPE); + String email = user+"@isti.cnr.it"; + String fullName = "Massimiliano Assante"; + String thumbnailURL = "images/Avatar_default.png"; + SessionManager.getInstance().getASLSession(sessionID, user).setUserEmailAddress(email); + SessionManager.getInstance().getASLSession(sessionID, user).setUserAvatarId(thumbnailURL); + SessionManager.getInstance().getASLSession(sessionID, user).setUserFullName(fullName); + } if (!withinPortal) @@ -549,7 +540,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe return false; } } - + /** * * @return the shared session @@ -601,16 +592,10 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe } } - - - /** * - * @return an instance of the user WorkspaceArea - * @throws HomeNotFoundException - * @throws InternalErrorException - * @throws WorkspaceFolderNotFoundException - * @throws WorkspaceNotFoundException + * @return + * @throws WorkspaceFolderNotFoundException * @throws InternalErrorException * @throws HomeNotFoundException */ @@ -622,24 +607,16 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe /** * reads from the file system and returns the user workspace as TreeNode object * - * @return the Default basket if if there is no basket in session, else the basket in session id + * @return the Default folder if if there is no basket in session, else the folder in session id */ - public String getDefaultBasket() { - _log.info("getDefaultBasket()"); - + public String getRootFolder() { try { Workspace workspaceArea = getWorkspaceArea(); WorkspaceFolder basket = workspaceArea.getRoot(); return basket.getId(); - } catch (MalformedScopeExpressionException e) { e.printStackTrace(); - } catch (InternalErrorException e) {e.printStackTrace(); - } catch (HomeNotFoundException e) { e.printStackTrace(); - } catch (WorkspaceFolderNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + } catch (Exception e) { e.printStackTrace(); } - - return "Coud not open default basket"; + return "Coud not open default folder"; } /** @@ -696,9 +673,8 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe } ServiceUtil myUtil = new ServiceUtil(getASLSession()); String dirToClean = myUtil.getTemplateFolder(getVreName(), getUsername()); - _log.info("RETURNING NULL, going to clean user template area: " + dirToClean); - if (ReportConstants.isDeployed) - delTemplateDir(new File(dirToClean)); + _log.info("No data on session for Reports, cleaning temp dir: " + dirToClean); + delTemplateDir(new File(dirToClean)); return null; } @@ -727,23 +703,6 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe public void storeTemplateInSession(Model model) { ASLSession d4Session = getASLSession(); d4Session.setAttribute(CURRENT_REPORT_INSTANCE, model); - - Vector sections = model.getSections(); - for (BasicSection section : sections) { - for (BasicComponent component : section.getComponents()) { - if (component.getType() == ComponentType.DYNA_IMAGE) { - System.out.println("****FOUND DYNA IMAGE : " + component.getPossibleContent().toString()); - } - if (component.getType() == ComponentType.REPEAT_SEQUENCE) { - RepeatableSequence res = (RepeatableSequence) component.getPossibleContent(); - for (BasicComponent co : res.getGroupedComponents()) { - if (co.getType() == ComponentType.DYNA_IMAGE) { - System.out.println("****FOUND DYNA IMAGE In Sequence: " + component.getPossibleContent().toString()); - } - } - } - } - } } @@ -763,8 +722,8 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe String imageTargetDIR = new StringBuilder( myUtil.getTemplatePath(model.getTemplateName(), getVreName(), getUsername())) - .append("images").append(File.separator).toString(); - + .append("images").append(File.separator).toString(); + imageNameFile = copyImageFromBasket(imageID, imageTargetDIR, imageNameFile); component.setPossibleContent(getImageURL(imageNameFile, model.getTemplateName())); _log.trace("NEW setPossibleContent: " + component.getPossibleContent()); @@ -781,7 +740,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe String imageTargetDIR = new StringBuilder( myUtil.getTemplatePath(model.getTemplateName(), getVreName(), getUsername())) - .append("images").append(File.separator).toString(); + .append("images").append(File.separator).toString(); imageNameFile = copyImageFromBasket(imageID, imageTargetDIR, imageNameFile); co.setPossibleContent(getImageURL(imageNameFile, model.getTemplateName())); @@ -977,23 +936,16 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe Workspace root = null; try { root = getWorkspaceArea(); - } catch (WorkspaceFolderNotFoundException e) {e.printStackTrace(); - } catch (InternalErrorException e) { e.printStackTrace(); - } catch (HomeNotFoundException e) { e.printStackTrace(); - } + } catch (Exception e) { e.printStackTrace();} WorkspaceItem item = null; String folderid = ""; String itemName = ""; try { if (getReportItemIDFromSession().equals("")) { - folderid = getDefaultBasket(); - + folderid = getRootFolder(); } - else { - _log.debug("getReportItemIDFromSession RETURNS -> " + getReportItemIDFromSession() + ""); - item = root.getItem(getReportItemIDFromSession()); folderid = item.getParent().getId(); itemName = item.getName(); @@ -1002,12 +954,8 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe _log.error("ITEM NOT FOUND -> " + getReportItemIDFromSession()); } catch (InternalErrorException e) { - // TODO Auto-generated catch block e.printStackTrace(); } - - _log.debug("folderid -> " + folderid); - saveReport(folderid, itemName); } @@ -1028,8 +976,6 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe ServiceUtil myUtil = new ServiceUtil(getASLSession()); boolean result = myUtil.writeModel(model, "CURRENT_OPEN", getVreName(), getUsername()); - - if (!result) { _log.debug("Could not save report, serializing failed"); } @@ -1060,7 +1006,8 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe try { isZip = new BufferedInputStream(new FileInputStream(outZip)); - toSaveIn = getBasketInstance(folderid); + toSaveIn = getRootFolder(folderid); + String templateName = newname; if (templateName.endsWith("d4sR") ) { @@ -1080,25 +1027,6 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe if (! templateToInsert.endsWith(".d4sR")) templateToInsert+=".d4sR"; - - /** - * Create a Report into this basket. - * @param name the report name. - * @param description the report description. - * @param created the report creation time. - * @param lastEdit the last edit time. - * @param author the report author. - * @param lastEditBy the last report editor. - * @param templateName the source template name. - * @param numberOfSections the number of sections. - * @param status the report status. - * @param reportData the report data. - * @return the report. - * @throws InsufficientPrivilegesException if the user don't have sufficient privileges to perform this operation. - * @throws InternalErrorException if an internal error occurs. - * @throws ItemAlreadyExistException if an item with the specified name already exists. - */ - Calendar dateCreated = Calendar.getInstance(); dateCreated.setTime(model.getDateCreated()); @@ -1112,44 +1040,27 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe //Report rep = toSaveIn.createReportItem(templateToInsert, templateToInsert, isZip); storeReportItemIDInSession(rep.getId()); + if (toSaveIn.getType() == WorkspaceItemType.SHARED_FOLDER) { + sendReportUpdateNotification(toSaveIn, rep); + } + AccessLogger log = AccessLogger.getAccessLogger(); CreateReportLogEntry logEntry = new CreateReportLogEntry(model.getTemplateName(), rep.getId()); log.logEntry(getASLSession().getUsername(), getASLSession().getScopeName(), logEntry); - } catch (InsufficientPrivilegesException e) { + } catch (Exception e) { e.printStackTrace(); - } catch (InternalErrorException e) { - e.printStackTrace(); - } catch (ItemAlreadyExistException e) { - } - catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (ItemNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - + } } } - private boolean removeIfExist(String name2Check, WorkspaceFolder basket) throws InternalErrorException, InsufficientPrivilegesException { - List items = basket.getChildren(); - for (WorkspaceItem item : items) - if (item.getName().equals(name2Check)) { - item.remove(); - _log.info("ITEM REMOVED: "+ name2Check); - return true; - } - return false; - } - /** - * Return an instance of - * @param basketId + * Return an instance of the root folder + * @param folderId * @return * @throws ItemNotFoundException */ - private WorkspaceFolder getBasketInstance(String basketId) throws ItemNotFoundException { + private WorkspaceFolder getRootFolder(String folderId) throws ItemNotFoundException { Workspace root = null; try { root = getWorkspaceArea(); @@ -1160,22 +1071,33 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe WorkspaceItem item = null; try { - item = root.getItem(basketId); + item = root.getItem(folderId); } catch (ItemNotFoundException e) { - _log.info("BASKET : " + basketId + " NOT FOUND RETURNING DEFAULT ONE"); - return(WorkspaceFolder)root.getItem(getDefaultBasket()); + _log.info("Folder : " + folderId + " NOT FOUND RETURNING DEFAULT ONE"); + return(WorkspaceFolder)root.getItem(getRootFolder()); } - _log.debug("Item Type: "+item.getType()); - if (item.getType() != WorkspaceItemType.FOLDER) { - _log.error("The item id does not belong to a basket id:" + basketId); - return null; + if (item.getType() == WorkspaceItemType.FOLDER || item.getType() == WorkspaceItemType.SHARED_FOLDER) { + return (WorkspaceFolder) item; } - return (WorkspaceFolder) item; + _log.error("The item id does not belong to a valid folder id:" + folderId); + return null; } - + /** + * send an update notification to all the user sharing this folder + * @param toSaveIn + * @throws InternalErrorException + */ + private void sendReportUpdateNotification(WorkspaceFolder sharedFolder, WorkspaceItem wsItem) throws InternalErrorException { + if (sharedFolder.getType() == WorkspaceItemType.SHARED_FOLDER) { + WorkspaceSharedFolder wsFolder = (WorkspaceSharedFolder) sharedFolder; + List usersToNotify = wsFolder.getUsers(); + Thread thread = new Thread(new NotificationsThread(getASLSession(), usersToNotify, wsItem, sharedFolder)); + thread.start(); + } + } /** * return a sample of the given TS to the client * @param sTS . @@ -1372,8 +1294,6 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe * @return a SessionInfo bean containing the username the scope andis opening a workflow document or not */ public SessionInfo getSessionInfo(String currentHost) { - this.currentHost = currentHost; - if (testWorkflow) { getASLSession().setAttribute(WfDocsLibrary.WORKFLOW_ID_ATTRIBUTE, "1"); @@ -1663,32 +1583,32 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe _log.info("Saving in Workspace of " + workspace.getOwner().getPortalLogin()); WorkspaceFolder folder = (workspaceFolderId != null)? (WorkspaceFolder)workspace.getItem(workspaceFolderId):workspace.getRoot(); - - itemName = itemName + "." + type.toString().toLowerCase(); - if (workspace.exists(itemName, folder.getId())) { - if (overwrite) - workspace.remove(itemName, folder.getId()); - else - throw new SaveReportFileException("The item " + itemName + " already exists"); - } - - switch (type) { - case PDF: - return folder.createExternalPDFFileItem(itemName, - "", null, new FileInputStream(file)).getId(); - - case HTML: - return folder.createExternalFileItem(itemName, - "", "text/html", new FileInputStream(file)).getId(); - case DOCX: - return folder.createExternalFileItem(itemName, - "", "application/msword", new FileInputStream(file)).getId(); - - case XML: - return folder.createExternalFileItem(itemName, - "", "application/xml", new FileInputStream(file)).getId(); - } - throw new SaveReportFileException("Unknown file type"); + + itemName = itemName + "." + type.toString().toLowerCase(); + if (workspace.exists(itemName, folder.getId())) { + if (overwrite) + workspace.remove(itemName, folder.getId()); + else + throw new SaveReportFileException("The item " + itemName + " already exists"); + } + + switch (type) { + case PDF: + return folder.createExternalPDFFileItem(itemName, + "", null, new FileInputStream(file)).getId(); + + case HTML: + return folder.createExternalFileItem(itemName, + "", "text/html", new FileInputStream(file)).getId(); + case DOCX: + return folder.createExternalFileItem(itemName, + "", "application/msword", new FileInputStream(file)).getId(); + + case XML: + return folder.createExternalFileItem(itemName, + "", "application/xml", new FileInputStream(file)).getId(); + } + throw new SaveReportFileException("Unknown file type"); } catch (ItemAlreadyExistException e) { throw new SaveReportFileExistException(e.getMessage()); } catch (Exception e) {