package org.gcube.portlets.user.reportgenerator.client.targets; import java.util.ArrayList; import java.util.List; 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.dom.client.Style.Unit; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.MouseOutEvent; import com.google.gwt.event.dom.client.MouseOutHandler; 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.FocusPanel; 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 int imageWidth; private int imageHeight; private FocusPanel focusPanel = new FocusPanel(); 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; public static final int DEFAULT_HEIGHT = 100; public static final int DEFAULT_WIDTH = 700; private TextBox titleTB = new TextBox(); private TextBox descTB = new TextBox(); private TextBox sourceTB = new TextBox(); private Button resetB = new Button("Clear"); private Button addImageB = new Button("Select Image"); private Button uploadImageB = new Button("Upload Image"); private Button removeB = new Button("Remove Image"); private BasicComponent basicComponent; /** * * @param presenter * @param width * @param tag */ public ClientImage(BasicComponent co, Presenter presenter, int width, int height, boolean isRemovable, TextTableImage owner) { imageHeight = height; imageWidth = width; this.presenter = presenter; this.basicComponent = co; HorizontalPanel controlPanel = getControlPanel(isRemovable, owner); VerticalPanel attributesPanel = getAttributesPanel(co); mainPanel.add(controlPanel); mainPanel.add(imagePanel); mainPanel.add(attributesPanel); mainPanel.setWidth((TemplateModel.TEMPLATE_WIDTH-95)+"px"); imagePanel.setSize(DEFAULT_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), width, height); } //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"); } } if (isRemovable) { removeB.removeStyleName("tableButton"); removeB.addStyleName("deleteEntryButton"); removeB.getElement().getStyle().setMarginRight(10, Unit.PX); } focusPanel.add(mainPanel); initWidget(focusPanel); focusPanel.addMouseOutHandler(new MouseOutHandler() { @Override public void onMouseOut(MouseOutEvent event) { saveStatus(); } }); } private HorizontalPanel getControlPanel(boolean isRemovable, final TextTableImage owner) { final HorizontalPanel toReturn = new HorizontalPanel(); removeB.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { if (owner != null) { remove(owner); } } }); resetB.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { titleTB.setText(""); descTB.setText(""); sourceTB.setText(""); showImage(new Image(TemplateComponent.DEFAULT_IMAGE_NAME), DEFAULT_WIDTH, DEFAULT_HEIGHT); imagePanel.addStyleName("imageEmptyPanel"); } }); 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) { presenter.showUploadFilePopup(); } }); toReturn.setSpacing(3); if (isRemovable) toReturn.add(removeB); toReturn.add(resetB); toReturn.add(uploadImageB); 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("