/*
* Copyright 2011 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jbpm.formbuilder.client.effect.view;
import gwtupload.client.IUploadStatus.Status;
import gwtupload.client.IUploader;
import gwtupload.client.IUploader.OnFinishUploaderHandler;
import gwtupload.client.SingleUploader;
import java.util.List;
import org.jbpm.formbuilder.client.FilesLoadedHandler;
import org.jbpm.formbuilder.client.FormBuilderGlobals;
import org.jbpm.formbuilder.client.FormBuilderService;
import org.jbpm.formbuilder.client.effect.UploadFormEffect;
import org.jbpm.formbuilder.client.messages.I18NConstants;
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.ui.Button;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
public class UploadFormEffectView extends PopupPanel {
private final I18NConstants i18n = FormBuilderGlobals.getInstance().getI18n();
private final FormBuilderService server = FormBuilderGlobals.getInstance().getService();
private final UploadFormEffect effect;
private final SingleUploader uploader = new SingleUploader();
private final VerticalPanel panel = new VerticalPanel();
private final FilesDataPanel dataTable = new FilesDataPanel();
public UploadFormEffectView(UploadFormEffect formEffect) {
this.effect = formEffect;
HorizontalPanel uploadPanel = new HorizontalPanel();
uploadPanel.add(new Label(i18n.UploadAFile()));
startUploader();
uploadPanel.add(uploader);
VerticalPanel selectPanel = new VerticalPanel();
selectPanel.add(new Label(i18n.SelectAFile()));
selectPanel.add(dataTable);
HorizontalPanel buttonPanel = new HorizontalPanel();
buttonPanel.add(createConfirmButton());
buttonPanel.add(createCancelButton());
panel.add(uploadPanel);
panel.add(selectPanel);
panel.add(buttonPanel);
this.server.getFiles(this.effect.getAllowedTypes(), new FilesLoadedHandler() {
@Override
public void onFilesLoaded(List<String> files) {
dataTable.setFiles(files);
}
});
setWidget(panel);
}
private void startUploader() {
this.uploader.setAutoSubmit(true);
this.uploader.setServletPath(server.getUploadFileURL());
this.uploader.addOnFinishUploadHandler(new OnFinishUploaderHandler() {
@Override
public void onFinish(IUploader uploader) {
if (uploader.getStatus() == Status.SUCCESS) {
String url = uploader.getServerInfo().message;
dataTable.addNewFile(url);
}
}
});
}
private Button createCancelButton() {
Button cancelButton = new Button(i18n.CancelButton(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
hide();
}
});
return cancelButton;
}
private Button createConfirmButton() {
Button confirmButton = new Button(i18n.ConfirmButton(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String url = dataTable.getSelection();
if (url == null) {
Window.alert(i18n.YouMustSelectAnItem(i18n.ConfirmButton(), i18n.CancelButton()));
} else {
effect.setSrcUrl(url);
effect.createStyles();
hide();
}
}
});
return confirmButton;
}
/*
private final UploadFormEffect effect;
private final FileUpload fileInput = new FileUpload();
private final FormPanel form = new FormPanel();
private final EventBus bus = CommonGlobals.getInstance().getEventBus();
private final FormBuilderService server = FormBuilderGlobals.getInstance().getService();
private final I18NConstants i18n = FormBuilderGlobals.getInstance().getI18n();
public UploadFormEffectView(UploadFormEffect formEffect) {
this.effect = formEffect;
InputElement.as(fileInput.getElement()).setAccept(toString(this.effect.getAllowedTypes()));
VerticalPanel content = new VerticalPanel();
form.setAction(server.getUploadFileURL());
form.setMethod(FormPanel.METHOD_POST);
form.setEncoding(FormPanel.ENCODING_MULTIPART);
form.addSubmitCompleteHandler(new SubmitCompleteHandler() {
@Override
public void onSubmitComplete(SubmitCompleteEvent event) {
String srcUrl = removePre(event.getResults());
if (srcUrl == null || "".equals(srcUrl)) {
bus.fireEvent(new NotificationEvent(Level.ERROR, i18n.CouldntUploadFile()));
} else {
effect.setSrcUrl(srcUrl);
effect.createStyles();
}
RootPanel.get().remove(form);
hide();
}
});
fileInput.setName("uploadFile");
HorizontalPanel inputPanel = new HorizontalPanel();
inputPanel.add(new Label(i18n.SelectAFile()));
inputPanel.add(fileInput);
HorizontalPanel buttonsPanel = new HorizontalPanel();
buttonsPanel.add(createConfirmButton());
buttonsPanel.add(createCancelButton());
content.add(inputPanel);
content.add(buttonsPanel);
form.add(content);
setWidget(form);
}
private String toString(List<String> styles) {
StringBuilder builder = new StringBuilder();
if (styles != null) {
String type = null;
for (Iterator<String> it = styles.iterator(); it.hasNext(); type = it.next()) {
builder.append(type);
if (it.hasNext()) {
builder.append(", ");
}
}
}
return builder.toString();
}
private String removePre(String srcUrl) {
if (srcUrl.startsWith("<pre>")) {
srcUrl = srcUrl.replace("<pre>", "");
}
if (srcUrl.startsWith("<PRE>")) {
srcUrl = srcUrl.replace("<PRE>", "");
}
if (srcUrl.endsWith("</pre>")) {
srcUrl = srcUrl.replace("</pre>", "");
}
if (srcUrl.endsWith("</PRE>")) {
srcUrl = srcUrl.replace("</PRE>", "");
}
return srcUrl;
}
private Button createCancelButton() {
Button cancelButton = new Button(i18n.CancelButton(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
hide();
}
});
return cancelButton;
}
private Button createConfirmButton() {
Button confirmButton = new Button(i18n.ConfirmButton(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
form.submit();
}
});
return confirmButton;
}
*/
}