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 0000000..5a6679f Binary files /dev/null and b/src/main/webapp/images/image_placeholder.png differ