From fdc58b4e98661890c6a91aa6f136ab301a03dafb Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Mon, 29 Apr 2013 15:27:29 +0000 Subject: [PATCH] fix for production support #582 git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/user/reports@74191 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 1 - .../client/model/TemplateComponent.java | 5 -- .../server/servlet/ReportServiceImpl.java | 86 +++++++++++++------ 3 files changed, 58 insertions(+), 34 deletions(-) diff --git a/.classpath b/.classpath index 89e87d5..0bc30bd 100644 --- a/.classpath +++ b/.classpath @@ -19,7 +19,6 @@ - diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateComponent.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateComponent.java index 8140941..fa4afb3 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateComponent.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateComponent.java @@ -385,11 +385,6 @@ public class TemplateComponent { switch (this.getType()) { case DYNA_IMAGE: ClientImage da = (ClientImage) this.content; - /* - * to get the URL of the image for the offline version you cannot use getURL(), it will return the absolut url of the image with host too - * so just go inside and get /usersArea..... - * - * */ content = da.getDroppedImage().getElement().getAttribute("src"); GWT.log("Poss Content=" + content); id = da.getIdInBasket(); 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 302dc0c..aa0d000 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 @@ -19,6 +19,7 @@ import java.util.Vector; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; +import javax.xml.bind.DatatypeConverter; import net.sf.csv4j.CSVFileProcessor; import net.sf.csv4j.CSVLineProcessor; @@ -706,8 +707,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe } - private void importDynamicImagesFromHL(Model model) { - ServiceUtil myUtil = new ServiceUtil(getASLSession()); + private void convertDynamicImagesFromHL(Model model) { _log.debug("model == NULL " + (model == null)); Vector sections = model.getSections(); for (BasicSection section : sections) { @@ -715,18 +715,9 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe if (component.getType() == ComponentType.DYNA_IMAGE) { _log.debug("Found Simple Image: " + component.getPossibleContent()); if (component.getIdInBasket() != null) { // you need to convert only new images that stay in the HL Workspace, this is the check - String imageID = component.getIdInBasket(); - String imageNameFile = UUID.randomUUID().toString(); - - String imageTargetDIR = - new StringBuilder( - myUtil.getTemplatePath(model.getTemplateName(), getVreName(), getUsername())) - .append("images").append(File.separator).toString(); - - imageNameFile = copyImageFromBasket(imageID, imageTargetDIR, imageNameFile); - component.setPossibleContent(getImageURL(imageNameFile, model.getTemplateName())); - _log.trace("NEW setPossibleContent: " + component.getPossibleContent()); + component.setPossibleContent(getdDataImagebase64(imageID)); + _log.trace("Image converted base 64 OK: " + component.getPossibleContent()); } } if (component.getType() == ComponentType.REPEAT_SEQUENCE || component.getType() == ComponentType.BODY_TABLE_IMAGE) { //there could be images inside @@ -735,16 +726,8 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe _log.debug("Found Image IN SEQUENCE, type is: " + component.getType()); if (co.getIdInBasket() != null) { // you need to convert only new images that stay in the HL Workspace, this is the check String imageID = co.getIdInBasket(); - String imageNameFile = UUID.randomUUID().toString(); - - String imageTargetDIR = - new StringBuilder( - myUtil.getTemplatePath(model.getTemplateName(), getVreName(), getUsername())) - .append("images").append(File.separator).toString(); - imageNameFile = copyImageFromBasket(imageID, imageTargetDIR, imageNameFile); - - co.setPossibleContent(getImageURL(imageNameFile, model.getTemplateName())); - _log.trace("NEW setPossibleContent in SEQUENCE: " + co.getPossibleContent()); + co.setPossibleContent(getdDataImagebase64(imageID)); + _log.trace("Image converted base 64 OK, in SEQUENCE: " + co.getPossibleContent()); } } } @@ -752,6 +735,56 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe } } + + /** + * convert the image into a String encoded base 64 + * @param imageIDinWorkspace the id of the image in workspace + * @return the string representing the image converted to be put in the img src attribute e.g. data:image/ong;base64,a...z + */ + private String getdDataImagebase64(String imageIDinWorkspace) { + Workspace root = null; + try { + root = getWorkspaceArea(); + + WorkspaceItem item = null; + item = root.getItem(imageIDinWorkspace); + if (item.getType() == WorkspaceItemType.FOLDER_ITEM) { + _log.debug("Item is a Folder Item"); + FolderItem imageItem = (FolderItem) item; + InputStream data = null; + + if (imageItem.getFolderItemType()==FolderItemType.EXTERNAL_IMAGE){ + _log.debug("EXTERNAL_IMAGE -|- " + item.getType() + " itemId=" + item.getId()); + ExternalImage image = (ExternalImage)item; + _log.debug("EXTERNAL_IMAGE Name= " + item.getName() + " Asking InputStream .."); + data = image.getData(); + _log.debug("Got inputStream"); + } + else if (imageItem.getFolderItemType()==FolderItemType.IMAGE_DOCUMENT){ + ImageDocument image = (ImageDocument)item; + if (image.getMimeType().equals("image/tiff")) + data = image.getThumbnail(); + else + data = image.getData(); + } + if (data != null) { + _log.debug("Encoding image in base64"); + byte[] imageBytes = IOUtils.toByteArray(data); + String extension = getImageExtension(imageItem); + String srcAttrValue = "data:image/"+extension+";base64,"+DatatypeConverter.printBase64Binary(imageBytes); + _log.debug("Encoded image=" + srcAttrValue); + return srcAttrValue; + } + return null; + } + else + return null; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + /** * * @param imageName the generated image name @@ -769,7 +802,6 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe return sb.toString(); } - /** * * @param imageIDinBasket . @@ -967,11 +999,9 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe public void saveReport(String folderid, String newname) { Model model = readTemplateFromSession(); - //raplacing " " with _ _log.info("Serializing Model in folder: " + folderid ); - _log.info("Trying to convert dynamic images ... "); - importDynamicImagesFromHL(model); + convertDynamicImagesFromHL(model); ServiceUtil myUtil = new ServiceUtil(getASLSession()); boolean result = myUtil.writeModel(model, "CURRENT_OPEN", getVreName(), getUsername()); @@ -1441,7 +1471,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe model = (Model) session.getAttribute(CURRENT_REPORT_INSTANCE); _log.debug("Trying to convert dynamic images ... "); - importDynamicImagesFromHL(model); + convertDynamicImagesFromHL(model); boolean result = myUtil.writeModel(model, "CURRENT_OPEN", getVreName(), getUsername());