From d1b7b9fbcffab14b0913d6feb128bd870083e0a7 Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Thu, 7 Mar 2013 15:03:01 +0000 Subject: [PATCH] added support for images almost complete git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/user/reports@71053 82a268e6-3cf1-43bd-a215-b396298e98cf --- .settings/com.google.gdt.eclipse.core.prefs | 3 +- pom.xml | 6 + .../client/Presenter/Presenter.java | 20 +- .../reportgenerator/client/ToolboxPanel.java | 2 - .../client/model/TemplateComponent.java | 57 +-- .../client/model/TemplateModel.java | 1 - .../client/targets/ClientImage.java | 327 ++++++++++++++++++ .../client/targets/DropImageListener.java | 122 ------- .../client/targets/DroppingArea.java | 214 ------------ .../client/targets/ImageArea.java | 158 --------- src/main/webapp/ReportGenerator.css | 19 +- src/main/webapp/images/image_placeholder.png | Bin 0 -> 3476 bytes 12 files changed, 375 insertions(+), 554 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientImage.java delete mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/DropImageListener.java delete mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/DroppingArea.java delete mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ImageArea.java create mode 100644 src/main/webapp/images/image_placeholder.png diff --git a/.settings/com.google.gdt.eclipse.core.prefs b/.settings/com.google.gdt.eclipse.core.prefs index 19b80c9..a985160 100644 --- a/.settings/com.google.gdt.eclipse.core.prefs +++ b/.settings/com.google.gdt.eclipse.core.prefs @@ -1,4 +1,5 @@ +#Thu Mar 07 16:00:56 CET 2013 eclipse.preferences.version=1 -lastWarOutDir=/home/gioia/workspace/reports/target/reports-4.1.0-SNAPSHOT +lastWarOutDir=/Users/massi/Documents/workspace/reports/target/reports-4.1.0-SNAPSHOT warSrcDir=src/main/webapp warSrcDirIsOutput=false diff --git a/pom.xml b/pom.xml index 64861f9..d0977aa 100644 --- a/pom.xml +++ b/pom.xml @@ -178,6 +178,12 @@ 10.8.2.2 ${setScope} + + commons-fileupload + commons-fileupload + 1.2.2 + ${setScope} + com.liferay.portal portal-service 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 f217704..37fc36e 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 @@ -11,7 +11,6 @@ import org.gcube.portlets.user.exporter.client.ReportExporterPopup; import org.gcube.portlets.user.exporter.client.event.ReportExporterEvent; import org.gcube.portlets.user.exporter.client.event.ReportExporterEventHandler; import org.gcube.portlets.user.exporter.shared.TypeExporter; -import org.gcube.portlets.user.gcubewidgets.client.popup.GCubeDialog; import org.gcube.portlets.user.reportgenerator.client.Headerbar; import org.gcube.portlets.user.reportgenerator.client.ReportGenerator; import org.gcube.portlets.user.reportgenerator.client.TitleBar; @@ -20,7 +19,6 @@ import org.gcube.portlets.user.reportgenerator.client.WorkspacePanel; import org.gcube.portlets.user.reportgenerator.client.dialog.AddBiblioEntryDialog; import org.gcube.portlets.user.reportgenerator.client.dialog.DeleteCitationsDialog; import org.gcube.portlets.user.reportgenerator.client.dialog.ReportStructureDialog; -import org.gcube.portlets.user.reportgenerator.client.dialog.LoadingPopup; import org.gcube.portlets.user.reportgenerator.client.events.AddBiblioEvent; import org.gcube.portlets.user.reportgenerator.client.events.AddBiblioEventHandler; import org.gcube.portlets.user.reportgenerator.client.events.AddCommentEvent; @@ -38,13 +36,12 @@ import org.gcube.portlets.user.reportgenerator.client.model.TemplateSection; import org.gcube.portlets.user.reportgenerator.client.targets.AttributeMultiSelection; import org.gcube.portlets.user.reportgenerator.client.targets.AttributeSingleSelection; import org.gcube.portlets.user.reportgenerator.client.targets.BasicTextArea; +import org.gcube.portlets.user.reportgenerator.client.targets.ClientImage; +import org.gcube.portlets.user.reportgenerator.client.targets.ClientRepeatableSequence; import org.gcube.portlets.user.reportgenerator.client.targets.Coords; import org.gcube.portlets.user.reportgenerator.client.targets.D4sRichTextarea; -import org.gcube.portlets.user.reportgenerator.client.targets.DroppingArea; import org.gcube.portlets.user.reportgenerator.client.targets.GenericTable; import org.gcube.portlets.user.reportgenerator.client.targets.GroupingDelimiterArea; -import org.gcube.portlets.user.reportgenerator.client.targets.ImageArea; -import org.gcube.portlets.user.reportgenerator.client.targets.ClientRepeatableSequence; import org.gcube.portlets.user.reportgenerator.client.targets.ReportTextArea; import org.gcube.portlets.user.reportgenerator.client.targets.TSArea; import org.gcube.portlets.user.reportgenerator.shared.SessionInfo; @@ -53,8 +50,6 @@ import org.gcube.portlets.user.reportgenerator.shared.UserBean; import com.extjs.gxt.ui.client.widget.MessageBox; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.shared.EventBus; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.event.shared.SimpleEventBus; @@ -62,14 +57,9 @@ import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; -import com.google.gwt.user.client.ui.Button; -import com.google.gwt.user.client.ui.CellPanel; import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.RichTextArea; import com.google.gwt.user.client.ui.SimplePanel; -import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; @@ -1000,13 +990,9 @@ public class Presenter { wp.addComponentToLayout(textArea, component.isDoubleColLayout()); } - break; - case STATIC_IMAGE: - ImageArea imgToPlace = (ImageArea) component.getContent(); - wp.addComponentToLayout(imgToPlace, component.isDoubleColLayout()); break; case DYNA_IMAGE: - DroppingArea imageDropping = (DroppingArea) component.getContent(); + ClientImage imageDropping = (ClientImage) component.getContent(); wp.addComponentToLayout(imageDropping, component.isDoubleColLayout()); break; case FAKE_TEXTAREA: diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/ToolboxPanel.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/ToolboxPanel.java index 2837cd9..317f6d4 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/ToolboxPanel.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/ToolboxPanel.java @@ -13,8 +13,6 @@ import com.google.gwt.user.client.ui.SimplePanel; /** * * @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it - * - * @version April 2012 (1.1) */ public class ToolboxPanel extends SimplePanel { 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 6794671..bb7fd3d 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 @@ -16,22 +16,19 @@ import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter; import org.gcube.portlets.user.reportgenerator.client.targets.AttributeMultiSelection; import org.gcube.portlets.user.reportgenerator.client.targets.AttributeSingleSelection; import org.gcube.portlets.user.reportgenerator.client.targets.BasicTextArea; +import org.gcube.portlets.user.reportgenerator.client.targets.ClientImage; import org.gcube.portlets.user.reportgenerator.client.targets.ClientRepeatableSequence; import org.gcube.portlets.user.reportgenerator.client.targets.D4sRichTextarea; -import org.gcube.portlets.user.reportgenerator.client.targets.DropImageListener; import org.gcube.portlets.user.reportgenerator.client.targets.DropTSListener; -import org.gcube.portlets.user.reportgenerator.client.targets.DroppingArea; import org.gcube.portlets.user.reportgenerator.client.targets.GenericTable; import org.gcube.portlets.user.reportgenerator.client.targets.GroupingDelimiterArea; import org.gcube.portlets.user.reportgenerator.client.targets.GroupingInnerArea; -import org.gcube.portlets.user.reportgenerator.client.targets.ImageArea; import org.gcube.portlets.user.reportgenerator.client.targets.ReportTextArea; import org.gcube.portlets.user.reportgenerator.client.targets.TSArea; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Widget; @@ -46,7 +43,8 @@ public class TemplateComponent { /** * */ - public final static String DEFAULT_IMAGE_PATH= GWT.getModuleBaseURL() + "../images/organization_logo.jpg"; + public final static String DEFAULT_IMAGE_NAME= "image_placeholder.png"; + public final static String DEFAULT_IMAGE_PATH= GWT.getModuleBaseURL() + "../images/" + DEFAULT_IMAGE_NAME; private int x; private int y; @@ -166,34 +164,22 @@ public class TemplateComponent { switch (sc.getType()) { case DYNA_IMAGE: - DroppingArea dp; - String possibelContent = ((String) sc.getPossibleContent()); - if (possibelContent.startsWith("http")) { - dp = new DroppingArea(presenter, width, height,possibelContent); - - dp.showImage(new Image(possibelContent)); - } - else if (possibelContent.startsWith("/")) - dp = new DroppingArea(presenter, width, height, ""); - else if (sc.getPossibleContent().equals(DEFAULT_IMAGE_PATH)) { - dp = new DroppingArea(presenter, width, height, ""); - } else { - dp = new DroppingArea(presenter, width, height, possibelContent); - } - dp.setPixelSize(width, height); - - - @SuppressWarnings("unused") - DropImageListener dropListener = new DropImageListener(dp); - + ClientImage dp = new ClientImage(sc, presenter, sc.getWidth()); this.content = dp; - break; - case STATIC_IMAGE: - String imagePath = (String) sc.getPossibleContent(); - - ImageArea img = new ImageArea(presenter, imagePath, myModel.getTemplateName(), true, width, height); - img.setPixelSize(width, height); - this.content = img; + +// String possibelContent = ((String) sc.getPossibleContent()); +// if (possibelContent.startsWith("http")) { +// dp = new ClientImage(presenter, width, height,possibelContent); +// +// dp.showImage(new Image(possibelContent)); +// } +// else if (possibelContent.startsWith("/")) +// dp = new DroppingArea(presenter, width, height, ""); +// else if (sc.getPossibleContent().equals(DEFAULT_IMAGE_PATH)) { +// dp = new DroppingArea(presenter, width, height, ""); +// } else { +// dp = new DroppingArea(presenter, width, height, possibelContent); +// } break; case HEADING_1: case HEADING_2: @@ -362,18 +348,13 @@ public class TemplateComponent { String id = ""; switch (this.getType()) { case DYNA_IMAGE: - DroppingArea da = (DroppingArea) this.content; + ClientImage da = (ClientImage) this.content; content = da.getDroppedImage().getUrl(); id = da.getIdInBasket(); idInBasket = id; if (((String) content).compareTo("") == 0) content = DEFAULT_IMAGE_PATH; break; - case STATIC_IMAGE: - ImageArea tmp = ((ImageArea) this.content); - String imageName = tmp.getImageName(); - content = tmp.getUrl(); - break; case BODY: if (this.isLocked()) { content = ((HTML) this.content).getHTML(); 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 f30d34e..0733da4 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 @@ -30,7 +30,6 @@ import com.google.gwt.user.client.ui.Widget; * The TemplateModel class represents the current Template state, the model in the the MVC pattern * * @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it - * @version July 2011 (3.0) */ public class TemplateModel { diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientImage.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientImage.java new file mode 100644 index 0000000..4d5f9f2 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientImage.java @@ -0,0 +1,327 @@ +package org.gcube.portlets.user.reportgenerator.client.targets; + +import org.gcube.portlets.d4sreporting.common.shared.BasicComponent; +import org.gcube.portlets.d4sreporting.common.shared.Metadata; +import org.gcube.portlets.user.reportgenerator.client.ReportGenerator; +import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter; +import org.gcube.portlets.user.reportgenerator.client.model.TemplateComponent; +import org.gcube.portlets.user.reportgenerator.client.model.TemplateModel; +import org.gcube.portlets.user.workspace.client.workspace.GWTWorkspaceItem; +import org.gcube.portlets.user.workspace.client.workspace.folder.item.GWTExternalImage; +import org.gcube.portlets.user.workspace.client.workspace.folder.item.gcube.GWTImageDocument; +import org.gcube.portlets.user.workspace.lighttree.client.ItemType; +import org.gcube.portlets.user.workspace.lighttree.client.event.PopupEvent; +import org.gcube.portlets.user.workspace.lighttree.client.event.PopupHandler; +import org.gcube.portlets.user.workspace.lighttree.client.load.WorkspaceLightTreeLoadPopup; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.RunAsyncCallback; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.SimplePanel; +import com.google.gwt.user.client.ui.TextBox; +import com.google.gwt.user.client.ui.VerticalPanel; +import com.google.gwt.user.client.ui.Widget; + + +/** + * + * @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it + */ +public class ClientImage extends Composite { + + private String expectedContent = ""; + + private final String METADATA_TITLE_KEY = "title"; + private final String METADATA_DESC_KEY = "description"; + private final String METADATA_SOURCE_KEY = "source"; + + private VerticalPanel mainPanel = new VerticalPanel(); + private SimplePanel imagePanel = new SimplePanel(); + private Image currImage; + private Presenter presenter; + + private String idInBasket; + + private String currentUser; + private String currentScope; + + private final int DEFAULT_HEIGHT = 100; + + private TextBox titleTB = new TextBox(); + private TextBox descTB = new TextBox(); + private TextBox sourceTB = new TextBox(); + + private Button resetB = new Button("Clear Image"); + private Button addImageB = new Button("Select Image"); + private Button uploadImageB = new Button("Upload Image"); + + /** + * + * @param presenter + * @param width + * @param tag + */ + public ClientImage(BasicComponent co, Presenter presenter, int width) { + this.presenter = presenter; + + HorizontalPanel controlPanel = getControlPanel(); + VerticalPanel attributesPanel = getAttributesPanel(co); + mainPanel.add(controlPanel); + mainPanel.add(imagePanel); + mainPanel.add(attributesPanel); + + mainPanel.setWidth((TemplateModel.TEMPLATE_WIDTH-95)+"px"); + imagePanel.setSize(width+"px", DEFAULT_HEIGHT+"px"); + attributesPanel.setWidth((TemplateModel.TEMPLATE_WIDTH-95)+"px"); + + mainPanel.setStyleName("imageWrapperPanel"); + imagePanel.setStyleName("imagePanel"); + controlPanel.setStyleName("tableControlPanel"); + attributesPanel.setStyleName("tableAttributesPanel"); + + String imageURL = (String) co.getPossibleContent(); + + if (imageURL == null || imageURL.trim().compareTo("") == 0 || imageURL.endsWith(TemplateComponent.DEFAULT_IMAGE_NAME)) { + GWT.log("Empty ImageUrl="+imageURL); + imagePanel.addStyleName("imageEmptyPanel"); + } + else { + GWT.log("Found ImageUrl="+imageURL); + showImage(new Image(imageURL)); + } + + //set style for buttons + for (int i = 0; i < controlPanel.getWidgetCount(); i++) { + if (controlPanel.getWidget(i) instanceof Button) { + Button b = (Button) controlPanel.getWidget(i); + b.addStyleName("tableButton"); + } + } + + initWidget(mainPanel); + } + + private HorizontalPanel getControlPanel() { + final HorizontalPanel toReturn = new HorizontalPanel(); + + resetB.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + } + }); + + addImageB.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + openFileExplorer(addImageB.getAbsoluteLeft(), addImageB.getAbsoluteTop()); + } + }); + + uploadImageB.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + } + }); + + toReturn.setSpacing(3); + + toReturn.add(uploadImageB); + toReturn.add(resetB); + toReturn.add(addImageB); + + return toReturn; + } + + private VerticalPanel getAttributesPanel(BasicComponent co) { + VerticalPanel toReturn = new VerticalPanel(); + + for (Metadata md : co.getMetadata()) { + if (md.getAttribute().compareTo(METADATA_TITLE_KEY) == 0) + titleTB.setText(md.getValue()); + if (md.getAttribute().compareTo(METADATA_DESC_KEY) == 0) + descTB.setText(md.getValue()); + if (md.getAttribute().compareTo(METADATA_SOURCE_KEY) == 0) + sourceTB.setText(md.getValue()); + } + + HorizontalPanel hp1 = new HorizontalPanel(); + HTML title = new HTML("Title: ", true); + hp1.add(title); + hp1.add(titleTB); + titleTB.setWidth("135px"); + + + HTML desc = new HTML(" Description: ", true); + + HTML source = new HTML("Source: ", true); + + + hp1.add(desc); + hp1.add(descTB); + descTB.setWidth("435px"); + toReturn.add(hp1); + + toReturn.add(source); + toReturn.add(sourceTB); + sourceTB.setWidth("693px"); + + return toReturn; + } + + public void add(Widget w) { + mainPanel.add(w); + } + /** + * called when dropped an image on the area + * @param toShow the image to show + */ + public void showImage(Image toShow) { + imagePanel.clear(); + this.currImage = toShow; + toShow.setWidth(toShow.getWidth()+"px"); + imagePanel.setSize(toShow.getWidth()+"px", toShow.getHeight()+"px"); + imagePanel.add(toShow); + presenter.storeChangeInSession(this); + + } + + /** + * + * @param url . + * @param id the id in the folder + */ + public void dropImage(String url, String id) + { + GWT.log("URL:" + url, null); + idInBasket = id; + showImage(new Image(url)); + } + + public void fetchImage(String identifier, final boolean isInteralImage, boolean fullDetails) { + ReportGenerator.get().getWSTreeService().getImageById(identifier, isInteralImage, fullDetails, new AsyncCallback() { + + public void onSuccess(GWTWorkspaceItem result) { + if (isInteralImage) { + GWTImageDocument image = (GWTImageDocument) result; + dropImage(image.getImageUrl(), image.getId()); + } else { + GWTExternalImage image = (GWTExternalImage) result; + dropImage(image.getImageUrl(), image.getId()); + } + } + public void onFailure(Throwable caught) { + Window.alert("Could not fetch image from infrastructure " + caught.getCause()); + } + }); + } + + /** + * + * @return the image + */ + public Image getDroppedImage() { + if (currImage == null) + return new Image(); + return currImage; + } + + /** + * return a URL which is lookable for on the web + * @param imageName . + * @param templateName . + * @return . + */ + public String getImageURL(String imageName, String templateName) { + currentUser = presenter.getCurrentUser().getUsername(); + currentScope = presenter.getCurrentScope(); + /** + * Images will be stored under webapps/usersArea... + * GWT.getModuleBaseURL() returns * e.g. http://dlib28.isti.cnr.it/templatecreator/html/ + * need to get just http://dlib28.isti.cnr.it/ + */ + //remove "/html/" and get e.g. http://dlib28.isti.cnr.it/templatecreator + String host = GWT.getModuleBaseURL().substring(0, GWT.getModuleBaseURL().length()-6); + + //loog for last slash + int lastSlash = host.lastIndexOf("/"); + + //get what i need : e.g. http://dlib28.isti.cnr.it/ or host = "http://localhost:8080/"; + host = host.substring(0, lastSlash +1 ); + //host = "http://localhost:8080/"; + + String imgURL = host + "usersArea/" + currentScope + "/templates/" + + currentUser + "/CURRENT_OPEN/images/" + imageName; + + return imgURL; + } + + /** + * + * @return . + */ + public String getIdInBasket() { + return idInBasket; + } + + /** + * + * @param idInBasket . + */ + public void setIdInBasket(String idInBasket) { + this.idInBasket = idInBasket; + } + /** + * + * @return expectedContent + */ + public String getExpectedContent() { + return expectedContent; + } + + /** + * + * @param expectedContent . + */ + public void setExpectedContent(String expectedContent) { + this.expectedContent = expectedContent; + } + + private void openFileExplorer(final int left, final int top) { + GWT.runAsync(WorkspaceLightTreeLoadPopup.class, new RunAsyncCallback() { + public void onSuccess() { + + WorkspaceLightTreeLoadPopup wpTreepopup = new WorkspaceLightTreeLoadPopup("Select the Image", true, true); + wpTreepopup.setShowableTypes(ItemType.IMAGE_DOCUMENT, ItemType.EXTERNAL_IMAGE); + wpTreepopup.setSelectableTypes(ItemType.IMAGE_DOCUMENT, ItemType.EXTERNAL_IMAGE); + + wpTreepopup.addPopupHandler(new PopupHandler() { + public void onPopup(PopupEvent event) { + if (! event.isCanceled()) { + if (event.getSelectedItem() != null) { + if (event.getSelectedItem().getType() == ItemType.IMAGE_DOCUMENT) + fetchImage(event.getSelectedItem().getId(), true, true); + else + fetchImage(event.getSelectedItem().getId(), false, true); + } + } + } + }); + wpTreepopup.setPopupPosition(left, top); + wpTreepopup.show(); + } + + public void onFailure(Throwable reason) { + Window.alert("There are networks problem, please check your connection."); + } + }); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/DropImageListener.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/DropImageListener.java deleted file mode 100644 index 99ef935..0000000 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/DropImageListener.java +++ /dev/null @@ -1,122 +0,0 @@ -/** - * - */ -package org.gcube.portlets.user.reportgenerator.client.targets; - - - -import java.util.List; - -import org.gcube.portlets.user.workspace.client.interfaces.GXTFolderItemTypeEnum; -import org.gcube.portlets.user.workspace.client.model.FileModel; -import org.gcube.portlets.user.workspace.client.workspace.GWTWorkspaceItem; -import org.gcube.portlets.user.workspace.client.workspace.GWTWorkspaceItemType; -import org.gcube.portlets.user.workspace.client.workspace.folder.GWTFolderItem; -import org.gcube.portlets.user.workspace.client.workspace.folder.GWTFolderItemType; -import org.gcube.portlets.user.workspace.client.workspace.folder.item.GWTExternalImage; -import org.gcube.portlets.user.workspace.client.workspace.folder.item.gcube.GWTImageDocument; - -import com.extjs.gxt.ui.client.dnd.DropTarget; -import com.extjs.gxt.ui.client.dnd.Insert; -import com.extjs.gxt.ui.client.dnd.DND.Operation; -import com.extjs.gxt.ui.client.event.DNDEvent; -import com.extjs.gxt.ui.client.store.TreeStoreModel; -import com.extjs.gxt.ui.client.widget.Html; -import com.extjs.gxt.ui.client.widget.treepanel.TreePanel; -import com.google.gwt.core.client.GWT; - - - -/** - * @author Massimiliano Assante assante@isti.cnr.it - * - */ -public class DropImageListener extends DropTarget { - /** - * - */ - public static final String TIFF = "image/tiff"; - - protected DroppingArea panel; - - /** - * - * @param panel . - * @param config . - */ - public DropImageListener(DroppingArea panel) { - super(panel); - this.panel = panel; - //IMPORTANT - setOperation(Operation.COPY); - } - @Override - protected void showFeedback(DNDEvent event) { - if (!isValidDropTarget(event)) { - Insert.get().hide(); - event.getStatus().setStatus(false); - return; - } - super.showFeedback(event); - } - - - @SuppressWarnings("unchecked") - private boolean isValidDropTarget(DNDEvent event) { - GWT.log("isValidDropTarget"); - TreePanel source = (TreePanel) event.getDragSource().getComponent(); - List selection = source.getSelectionModel().getSelection(); - - for (FileModel model : selection) { - GWT.log("selection: " + model.getGXTFolderItemType()); - if(model.getGXTFolderItemType()!=null){ - - if (model.getGXTFolderItemType().equals(GXTFolderItemTypeEnum.EXTERNAL_IMAGE) || model.getGXTFolderItemType().equals(GXTFolderItemTypeEnum.IMAGE_DOCUMENT)) - return true; - // - // if (model.getGXTFolderItemType().equals(GXTFolderItemTypeEnum.TIME_SERIES)) - // return true; - - // if(source.getStore().getParent(model) == target.getModel()) - // return false; - } - } - - return false; - } - - /** - * @param source . - * @param e . - * @param data . - * @return . - */ - protected void onDragDrop(DNDEvent event) { - - super.onDragDrop(event); - - if(event.getData() != null){ - List listItemsSource = event.getData(); - GWT.log("Number of move " + listItemsSource.size()); - - FileModel sourceFileModel = null; //for print - - for(TreeStoreModel itemSource : listItemsSource){ - - sourceFileModel = (FileModel) itemSource.getModel(); - - if(sourceFileModel.getParentFileModel()!=null) - GWT.log("Source Name " + sourceFileModel.getName() + " id " + sourceFileModel.getIdentifier() + " end drag " + " Parent Name: " + sourceFileModel.getParentFileModel().getName() + "id " + sourceFileModel.getParentFileModel().getIdentifier()); - else - GWT.log("Source Name " + sourceFileModel.getName() + " id " + sourceFileModel.getIdentifier() + " end drag "); - - GWT.log("Child count: " + itemSource.getChildCount()); - - panel.fetchImage(sourceFileModel.getIdentifier(), false , true); - - } - } - - } - -} diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/DroppingArea.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/DroppingArea.java deleted file mode 100644 index 5251e30..0000000 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/DroppingArea.java +++ /dev/null @@ -1,214 +0,0 @@ -package org.gcube.portlets.user.reportgenerator.client.targets; - -import org.gcube.portlets.user.reportgenerator.client.ReportGenerator; -import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter; -import org.gcube.portlets.user.workspace.client.workspace.GWTWorkspaceItem; -import org.gcube.portlets.user.workspace.client.workspace.folder.item.GWTExternalImage; - -import com.extjs.gxt.ui.client.widget.Component; -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.rpc.AsyncCallback; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.HasAlignment; -import com.google.gwt.user.client.ui.HasVerticalAlignment; -import com.google.gwt.user.client.ui.Image; -import com.google.gwt.user.client.ui.Label; -import com.google.gwt.user.client.ui.VerticalPanel; -import com.google.gwt.user.client.ui.Widget; - - -/** - * DroppingArea class is a Widget you can drop image on - * - * @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it - * @version May 20012 (3.5) - */ -public class DroppingArea extends Component { - - private String expectedContent = ""; - - private VerticalPanel mainPanel; - private Image droppedImage; - private Presenter presenter; - - private String idInBasket; - - private String currentUser; - private String currentScope; - - Label label; - - private int width, height; - - /** - * @param presenter . - * @param width . - * @param height . - * @param tag the label to display - */ - public DroppingArea(Presenter presenter, int width, int height, String tag) { - if (tag.equals("")) { - tag = "No suggestions available"; - } - this.width = width; - this.height = height; - this.presenter = presenter; - mainPanel = new VerticalPanel(); - super.setWidth(width+"px"); - super.setHeight(height+"px"); - mainPanel.setWidth(width+"px"); - mainPanel.setHeight(height+"px"); - setElement(mainPanel.getElement()); - - addStyleName("droppingArea-Image"); - - mainPanel.setHorizontalAlignment(HasAlignment.ALIGN_CENTER); - mainPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); - - label = new Label(tag); - label.addStyleName("label"); - mainPanel.add(label); - - droppedImage = null; - } - - public void add(Widget w) { - mainPanel.add(w); - } - /** - * called when dropped an image on the area - * @param toShow the image to show - */ - public void showImage(Image toShow) { - - //mainPanel.remove(label); - mainPanel.clear(); - this.droppedImage = toShow; - toShow.setPixelSize(width, height); - - mainPanel.add(toShow); - presenter.storeChangeInSession(this); - - } - - /** - * - * @param url . - * @param id the id in the folder - */ - public void dropImage(String url, String id) - { - GWT.log("URL:" + url, null); - idInBasket = id; - showImage(new Image(url)); - } - - public void fetchImage(String identifier, boolean isInteralImage, boolean fullDetails) { - this.mask("fetching image, pleas wait", "loading-indicator"); - ReportGenerator.get().getWSTreeService().getImageById(identifier, isInteralImage, fullDetails, new AsyncCallback() { - - public void onSuccess(GWTWorkspaceItem result) { - unmask(); - GWTExternalImage image = (GWTExternalImage) result; - dropImage(image.getImageUrl(), image.getId()); - } - public void onFailure(Throwable caught) { - unmask(); - Window.alert("Could not fetch image from infrastructure " + caught.getCause()); - } - }); - } - - /** - * - * @return the image - */ - public Image getDroppedImage() { - if (droppedImage == null) - return new Image(); - return droppedImage; - } - - /** - * - * @return the possible content - */ - public Label getLabel() { - return label; - } - - /** - * - * @param label set the label - */ - public void setLabel(Label label) { - this.label = label; - } - - - /** - * return a URL which is lookable for on the web - * @param imageName . - * @param templateName . - * @return . - */ - public String getImageURL(String imageName, String templateName) { - currentUser = presenter.getCurrentUser().getUsername(); - currentScope = presenter.getCurrentScope(); - /** - * Images will be stored under webapps/usersArea... - * GWT.getModuleBaseURL() returns * e.g. http://dlib28.isti.cnr.it/templatecreator/html/ - * need to get just http://dlib28.isti.cnr.it/ - */ - //remove "/html/" and get e.g. http://dlib28.isti.cnr.it/templatecreator - String host = GWT.getModuleBaseURL().substring(0, GWT.getModuleBaseURL().length()-6); - - //loog for last slash - int lastSlash = host.lastIndexOf("/"); - - //get what i need : e.g. http://dlib28.isti.cnr.it/ or host = "http://localhost:8080/"; - host = host.substring(0, lastSlash +1 ); - //host = "http://localhost:8080/"; - - String imgURL = host + "usersArea/" + currentScope + "/templates/" - + currentUser + "/CURRENT_OPEN/images/" + imageName; - - return imgURL; - } - - /** - * - * @return . - */ - public String getIdInBasket() { - return idInBasket; - } - - /** - * - * @param idInBasket . - */ - public void setIdInBasket(String idInBasket) { - this.idInBasket = idInBasket; - } - /** - * - * @return expectedContent - */ - public String getExpectedContent() { - return expectedContent; - } - - /** - * - * @param expectedContent . - */ - public void setExpectedContent(String expectedContent) { - this.expectedContent = expectedContent; - if (expectedContent.compareTo("") != 0) - label.setText(expectedContent); - } - - -} diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ImageArea.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ImageArea.java deleted file mode 100644 index 67d4581..0000000 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ImageArea.java +++ /dev/null @@ -1,158 +0,0 @@ -package org.gcube.portlets.user.reportgenerator.client.targets; - - -import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.Image; -import com.google.gwt.user.client.ui.VerticalPanel; -/** - * ImageArea class is the Widget that goes into the workspace - * - * @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it - * @version October 2008 (0.2) - */ -public class ImageArea extends Composite { - - private String templateName; - private String imageName; - - private String currentUser; - private String currentScope; - - VerticalPanel myPanel; - Image myImage = new Image(); - - /** - * Creates an image with a specified URL. The load event will be fired once - * the image at the given URL has been retrieved by the browser. - * - * @param presenter . - * @param param the imageName of the image to be displayed or the URL to be displayed depending on the isURL param - * @param myTemplate the template name that owns the image, useful when template it's saved with another name - * to eventually copy the images in the new template images folder - * @param isURL true if passing a URL, false is passing image name - * @param w width - * @param h height - */ - public ImageArea(Presenter presenter, String param, String myTemplate, boolean isURL, int w, int h) { - myPanel = new VerticalPanel(); - currentUser = presenter.getCurrentUser().getUsername(); - currentScope = presenter.getCurrentScope(); - //Window.alert("Image Area"); - - if (isURL) { - //need to get the name from the URL - int lastSlash = param.lastIndexOf("/"); - if (lastSlash > -1) { - imageName = param.substring(lastSlash+1, param.length()); - } - else - imageName = param; - this.templateName = "CURRENT_OPEN"; - //Window.alert(param); - myImage.setUrl(param); - - } else { - imageName = param; - this.templateName = myTemplate; - - String imgURL = getImageURL(imageName, "CURRENT_OPEN"); - - - myImage.setUrl(imgURL); - } - myImage.setPixelSize(w, h); - myPanel.setStyleName("d4sFrame"); - myPanel.add(myImage); - initWidget(myPanel); - } - - /** - * - * @return . - */ - public String getUrl() { - return myImage.getUrl(); - } - - /** - * return a URL which is lookable for on the web - * @param imageName . - * @param templateName . - * @return . - */ - public String getImageURL(String imageName, String templateName) { - - - /** - * Images will be stored under webapps/usersArea... - * GWT.getModuleBaseURL() returns * e.g. http://dlib28.isti.cnr.it/templatecreator/html/ - * need to get just http://dlib28.isti.cnr.it/ - */ - //remove "/html/" and get e.g. http://dlib28.isti.cnr.it/templatecreator - String host = GWT.getModuleBaseURL().substring(0, GWT.getModuleBaseURL().length()-6); - - //loog for last slash - int lastSlash = host.lastIndexOf("/"); - - //get what i need : e.g. http://dlib28.isti.cnr.it/ or host = "http://localhost:8080/"; - host = host.substring(0, lastSlash +1 ); - //host = "http://localhost:8080/"; - - String imgURL = host + "usersArea/" + currentScope + "/templates/" - + currentUser + "/" + "CURRENT_OPEN" + "/images/" + imageName; - GWT.log(imgURL); - return imgURL; - } - /** - * - * @return a string containing the owner template name - */ - public String getTemplateName() { - return templateName; - } - - /** - * - * @param myTemplate the template owner - */ - public void setTemplateName(String myTemplate) { - this.templateName = myTemplate; - } - - /** - * - * @return . - */ - public String getImageName() { - return imageName; - } - - /** - * - * @param imageName . - */ - public void setImageName(String imageName) { - this.imageName = imageName; - } - /** - * - * @return the scope in which the application is running on - */ - public String getCurrentScope() { - return currentScope; - } - - /** - * - * @return the user username who is using the application - */ - public String getCurrentUser() { - return currentUser; - } - - -} diff --git a/src/main/webapp/ReportGenerator.css b/src/main/webapp/ReportGenerator.css index b99d35f..508602f 100644 --- a/src/main/webapp/ReportGenerator.css +++ b/src/main/webapp/ReportGenerator.css @@ -14,7 +14,7 @@ .addEntryButton { background-image: none !important; background-repeat: none !important; - background-color: #02990C !important; + background-color: #02990C !important color: #FFF !important; } @@ -40,6 +40,23 @@ width: 600px; } +.imageWrapperPanel { + background-color: transparent; + border-bottom: 2px dashed #FFF; + margin: 8px 0px; +} + +.imagePanel { + border: 1px solid #CCC; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.imageEmptyPanel { + background: #FFF url('images/droppingImage_bg.gif') repeat !important; +} + .tablePanel { border-bottom: 2px dashed #FFF; background-color: transparent; diff --git a/src/main/webapp/images/image_placeholder.png b/src/main/webapp/images/image_placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..5a6679feb672d4c1a51138200f7e6b7305bb5096 GIT binary patch literal 3476 zcmaJ^dpy(q7hh6oMY)sP4CT5Twi)sm*5ndv5)o?~W@g%!NUSoEOKwGka!ZPy$l?jF z6(yBRS@H-Wv^*|FxkdU-Pxbu%cz(a{>%6|-^ZC5a`<(aZob!3T&i9;~>mF&~4j=#k zkaon|699m9Dq@`?B_V!yMb&kSKdKyugPi@$0M2m|iwdx%Fpp3{jto*Dl|Us?B9A_y zS^)s-!8GDQ&OsMv44KJ*kk)J<5sWY~8UV1ei3lT+=~NEr2sMxvY7PESF93sR6l<`j zxeLrC%#IpF!=GSL_n&Yjl26dd78J0}Zje<3M(lt=<&Z!TjF3<^Cc+y0-7iM0uWduY zpzkIex;6N3QU_h!Kz2+P6=V*9nUG;f7zhc6z)j6iD3mb>0fWP!Fa#8iFoB~mrU(oS z2Kw=U#nD)l01Uw%_al~gWepDEaKbQ9=<(ynA;(Q2OjaNiZed}u<^zE+5nGtBBSSf) z2$N8@&QA~aR5qDK3**q3p`bO7q$A8@9BZ(c>EB0Sgt@rpb?}nC>#QV zG8k*;`fknU5UBsq_*ZK-F*1w_B~aPSV=S_`9sxQ(!Q$Ng|3GVoVm26iCixhH8p?6B zw+4%MAQTz}1Bb!Quok9R6wcHE4tGGl$ouA1=7q8fyDj9I)<`2q);;TCzkdP z*7pBmF?K8}iNjAOg3k_O@7p1R)NEL{z6ZYSg3Q+_o$`Mu%VaZ(Dcnr%NMz(JKB?}hpOj2 zDY9N&$t8D0Z8?Mdo}L~QFRk~W$Oy#4g6H)7dL!GVY?j8x9${ve7ntf7zUA8J>sEiM zsH{|lS5Svi{RA;Nv5}Dtl-7M{c678gcZr*oD_itr%*vRoTMZEC8p=ITagWRUV6`sc z`d`f(1!g&$Y`Ci@m**?-O)nn~agj)5jrXi;ONQ5K-BNw1VbLBi4=$&z@Lj|l{t-7k z?{BHVw5!k;R#sM~`cM-?Gc$03R$&_Wl51IQZLNYFsr&qP;JNKsZP|ZBUl;pJq~h#b z5kbom>HGHWvx!+r6Nqo85Ype<+uPq?p=(no8W|a(ARc@baKAw|S?0@RybrIpRCVEs zIy*aslDr~I=NZK`3Iy>_cED8})ipFUG&Pk5mWGE(R+_0eoe6XW ziObdM*?BpR;yCC9dwi5j`7ls_-1N1UruxFeJHJ)k4*9eQ*pMia*4-8F8Lv?JLBegL zhPwLD)bQZDTp!Z|-jDhO4GlFiF)NEz?^o*UE$KCN7OFTln_X;ER+<B^={gNj=>lT8{7P=;&zD<4H7K z$%~wdD0*t{oNAVxsJ^x6a}w4BEq(V$4X;bV5a=i&(K1$6R(9G8D7Zt-$4hOnLa2J& ze5m#tYq9q8>T~3*QWQ78e{Sv=Z9Ee?lBWOW@W@|L6GZoPy_`%kLqk-&RmMVoFWxPE z&b~^NeM5gL#bU7e(IbbeiL(V-o^gR0SZ~fLHM%^(&?yCiw3u-!U0CQ>b(o$07I9Ky ztIS-@QaSb(qFr;ijex@&yfQZ7mj=fJac|B#pXwXulqlHGl)L!7B~O4LyrWK)+p=5v z9rv&HOhi`minktB1lWy%q7I zeNv}C&X>G9JGwJ-bAb~bSHp>kIqbpKk0W|DcC4hR>`3RVZW$IfDV3hNCAhw%_UhG# zg-_kbX+uqX*#2ibT1Kk;@Y_!ztBZz!e^|GjS{d5KZ&`6U+!2sbG^81bwOI0$olsB9 zQ!-&Cl-=Q-j%{84GAX{AAe)+^+;PKK<3TMi+VYvj%INssGY_OUt`FRv9E;J9w>U8g z9h9aLcXZhghve`1V>%U6)fAcOOiA1EzC1XJ!WXqR;!UqkgW1UJ{rG2_ zCTYVAlfPsU&^$GstU->B0uL~V5+nyyiJ@yEp@_K0epksM+m9ciZk=W?iK}{g$V2_e6EcA{yI*oE+Mp5EwtBLb9f}V>1zqCAZJYG zn&RURjRqxDIkbcWw{^78sNeuuwoH6IxUTyuD`8Kc;C1%YE!=5{->*^{`W%DMOr2o* zGHCoy3oQ@t z=U#f5bz@+DK3x8e^!kkHZ=$UO%Qb*hh4+~^_d4-jUYIU^wV9@rT7&OBW!BzSf5a!a z7gH-7HwzDOPv1F%eJ5K^z#GMFeWIFzyJ%FFaaHfO3d>tCy~VXzsIx~q-A0(0+ZCxb zk?y@g*~aVInD61kEjQi|4f(@VK2E*RNf#IbC$-^D2JgoedDvicPft$=!;Ibgmuhz= zP3k&NW=0r?zt0pMP>?%XvktBHfWmT>R_@=cb_k%z4~!xJX`9g_MM9zQsq*vFJLfn( zl7(l@a>onq;ga$GWV_g69qV=orNvbOb9Hafp=LepjOQ++3UXdS=9}Lg#<&|wYxwCU zt9Fc`AOPFULxypAH+q7!_%jQ9MMTCdt6%v1i#Qi_+ePp()+xjf*P5Zg?ix(>Cmu z>H%IsfeJeP32RRlXX3+o{Sxo(-A*Gu+|Jm7H)_>eYmY{s(967DlV^mxaIZM+?I~=q z<-HvANkhJIt=7f7c{#Ti-Q6De(vCl@@@<^E7^&_f2j&v<+}Q&LB}#=lVBZ`Af_qbL z^KEQkU%sDi)lHrn$7y31(2wY)EPo>16nJiBb3UJ%J-vP1q0iS_f4{X&Yd8AYYEse` zjphXNT~IQ#4@D~@-q0JhxAAWU2AiL*40i%t3-E~W|LwMKZ-)M0$woTvQDPytk zqYNbHN0S$srfs-fhfE5oTsZzRqo{XqY;w|hkEm|cpgBh?6;FB5ay?p)(oUQ@Orb{m zYi{2av7-5K@T&F7LH;3$4m}5x1+d2MFP^Fy%6(~iE&2Z0w5S+c!-Bb%w)I~;E;KBn z<6eUOg;jiRLgC;CC&?q>xO0u_{Kt{>PJQjjT0u*B0@izHWAgpX!n_CmX()QVd4rE2}2S@mP`?olJe&({nt!!3=31<;aB^qdos1{lO<)CQwJrMzTs zadrjF_;y&eD)|R6!*jMsmGjU>K4-S<%5;oz{_D+~H}ms%HJ2C0g=Jn=Eq1u^jek~? zUF^yLC_B7SDo=Vz@hqu*AQV*yL~S$H)|>2yl=ekf-MyP~qnq3zacC;|bj4G*&W3SW zN1AJ~Z9XutkQlkE@iRD0~MCB9E@^_!lamb?4h5`)18*(