This repository has been archived on 2021-11-25. You can view files and clone it, but cannot push or open issues or pull requests.
vmereports-manager-portlet/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/ImageUploaderDialog.java

211 lines
5.9 KiB
Java

package org.gcube.portlets.user.reportgenerator.client.dialog;
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
import org.gcube.portlets.user.reportgenerator.client.components.FancyFileUpload;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ChangeListener;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
/**
* <code> ImageUploaderDialog </code> class is the Dialog for uploading images
*
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
* @version October 2008 (0.2)
*/
public class ImageUploaderDialog extends DialogBox {
private int width;
private int height;
private Presenter presenter;
private String currTemplateName = "";
private HorizontalPanel topLabel = new HorizontalPanel();
private EventListener listener = new EventListener();
private RadioButton local = new RadioButton("");
private RadioButton web = new RadioButton("");
/**
* the container panel
*/
private VerticalPanel mainLayout = new VerticalPanel();
private VerticalPanel dialogPanel = new VerticalPanel();
/**
* Creates the dialog
* @param presenter my controller
*/
public ImageUploaderDialog(Presenter presenter) {
// Create a dialog box and set the caption text
this.width = 400;
this.height = 200;
this.presenter = presenter;
setText("Insert Image");
local.setHTML(" From this computer");
topLabel.add(local);
local.setChecked(true);
web.setHTML(" From the web (URL)");
topLabel.add(web);
web.addClickListener(listener);
local.addClickListener(listener);
currTemplateName = presenter.getModel().getTemplateName();
dialogPanel.add(getFromLocalPanel());
dialogPanel.setPixelSize(this.width, this.height);
mainLayout.add(topLabel);
mainLayout.add(dialogPanel);
setWidget(mainLayout);
}
private VerticalPanel getFromLocalPanel() {
VerticalPanel toReturn = new VerticalPanel();
FancyFileUpload uploader = new FancyFileUpload(this, currTemplateName);
HTML theLabel = new HTML("<strong>Browse your computer for the image file to upload:</strong>");
toReturn.add(theLabel);
toReturn.add(uploader);
toReturn.setSpacing(4);
toReturn.setStyleName("uploadDialog");
toReturn.setPixelSize(this.width, this.height);
return toReturn;
}
private VerticalPanel getFromURLPanel() {
VerticalPanel toReturn = new VerticalPanel();
toReturn.setSpacing(5);
HTML theLabel = new HTML("<strong>Enter image web address:</strong>");
final TextBox urlTextbox = new TextBox();
urlTextbox.setWidth("90%");
final HTML previewBox = new HTML("<div style=\"text-align:center;\"><font style=\"color: rgb(136, 136, 136);\"><br /> Image preview will be displayed here. <br><br> *Remember: Using others' images on the web without their permission may be bad manners, or worse, copyright infringement. <br><br></font></div>", true);
previewBox.setStyleName("imagePreviewBox");
toReturn.add(theLabel);
toReturn.add(urlTextbox);
toReturn.add(previewBox);
urlTextbox.addChangeListener(new ChangeListener() {
public void onChange(Widget sender) {
previewBox.setHTML("<img height=\"75\" width=\"120\" src=\"" + urlTextbox.getText()+ "\" >");
previewBox.removeStyleName("imagePreviewBox");
}
});
HorizontalPanel buttonsPanel = new HorizontalPanel();
buttonsPanel.add(new Button("Insert", new ClickListener() {
public void onClick(Widget sender) {
hide();
presenter.getCurrentSelected().getExtendedFormatter().insertImage(urlTextbox.getText());
presenter.getModel().storeInSession();
}
}));
buttonsPanel.add(new Button("Cancel", new ClickListener() {
public void onClick(Widget sender) {
hide();
}
}));
buttonsPanel.setSpacing(5);
toReturn.add(buttonsPanel);
return toReturn;
}
/**
*
* @param imageName .
*/
public void insertImage(String imageName) {
String imgURL = getImageURL(imageName, "CURRENT_OPEN");
presenter.getCurrentSelected().getExtendedFormatter().insertImage(imgURL);
presenter.getModel().storeInSession();
}
/**
* use an inner EventListener class to avoid exposing event methods on the dialog class itself.
*/
private class EventListener implements ClickListener {
public void onClick(Widget sender) {
if (sender == web && web.isChecked()) {
dialogPanel.clear();
dialogPanel.add(getFromURLPanel());
} else if (sender == local && local.isChecked()) {
dialogPanel.clear();
dialogPanel.add(getFromLocalPanel());
}
}
}
/**
* return a URL which is lookable for on the web
* @param imageName .
* @param templateName .
* @return .
*/
public String getImageURL(String imageName, String templateName) {
String currentUser = presenter.getCurrentUser();
String 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;
}
}