/ftr-gwt-library-file/src/main/java/eu/future/earth/gwt/client/file/EditFilePanel.java
http://ftr-gwt-library.googlecode.com/ · Java · 198 lines · 149 code · 28 blank · 21 comment · 28 complexity · 39d9793a0e1a93e89dbac4809965f9af MD5 · raw file
- /*
- * Copyright 2007 Future Earth, info@future-earth.eu
- *
- * 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 eu.future.earth.gwt.client.file;
- import com.google.gwt.event.shared.HandlerRegistration;
- import com.google.gwt.json.client.JSONObject;
- import com.google.gwt.json.client.JSONParser;
- import com.google.gwt.json.client.JSONValue;
- import com.google.gwt.user.client.ui.FormPanel;
- import com.google.gwt.user.client.ui.SimplePanel;
- import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
- import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler;
- import eu.future.earth.gwt.client.events.FileEvent;
- import eu.future.earth.gwt.client.events.FileEventListener;
- import eu.future.earth.gwt.client.events.FileUploadAction;
- import eu.future.earth.gwt.client.events.HasFileEventHandlers;
- public class EditFilePanel extends SimplePanel implements FileEventListener, HasFileEventHandlers {
- final FormPanel form = new FormPanel();
- private FilePanel image = null;
- private FileHolderHandler handler = null;
- private FileHolder fileHolder = null;
- public EditFilePanel(FileHolderHandler newHandler) {
- super();
- handler = newHandler;
- image = new FilePanel(newHandler);
- form.setAction(handler.getPostUrl());
- form.setEncoding(FormPanel.ENCODING_MULTIPART);
- form.setMethod(FormPanel.METHOD_POST);
- form.setWidget(image);
- image.setFieldName("image");
- image.addFileEventHandler(this);
- form.addSubmitCompleteHandler(new SubmitCompleteHandler() {
- public void onSubmitComplete(SubmitCompleteEvent event) {
- // When the form submission is successfully completed, this event is
- // fired. Assuming the service returned a response of type text/html,
- // we can get the result text here (see the FormPanel documentation for
- // further explanation).
- JSONValue jsonValue = JSONParser.parseLenient(event.getResults());
- JSONObject real = jsonValue.isObject();
- String stat = getValueFor("result", real);
- if ("succes".equals(stat)) {
- String fileName = getValueFor("fileName", real);
- String fileType = getValueFor("fileType", real);
- String fileSize = getValueFor("fileSize", real);
- if (fileHolder == null) {
- fileHolder = new FileHolder();
- }
- fileHolder.setName(fileName);
- fileHolder.setUploaded(true);
- fileHolder.setSave(image.shouldSave());
- fileHolder.setSize(fileSize);
- fileHolder.setType(fileType);
- reportUploadComplete();
- } else {
- image.resetPanel();
- // info.setUploaded(false);
- }
- }
- });
- super.setWidget(form);
- }
- private boolean edeting = true;
- public void setEdeting(boolean newState) {
- if (edeting != newState) {
- edeting = newState;
- setUrlStates();
- }
- }
- private static String getValueFor(String name, JSONObject real) {
- JSONValue data = real.get(name);
- String stat = null;
- if (data != null) {
- if (data.isString() == null) {
- stat = data.isArray().get(0).isString().stringValue();
- } else {
- stat = data.isString().stringValue();
- }
- }
- return stat;
- }
- private void reportUploadComplete() {
- image.setInfo(fileHolder.getName(), createViewUrl(fileHolder));
- setUrlStates();
- image.setSelectedForSave(true);
- FileEvent.fire(this, FileUploadAction.UPLOAD_DONE);
- }
- public FileHolder getFileInfo() {
- return fileHolder;
- }
- public void setFile(FileHolder newInfo) {
- fileHolder = newInfo;
- image.setUploadState(!edeting);
- if (fileHolder != null) {
- image.setInfo(fileHolder.getName(), createViewUrl(newInfo));
- } else {
- image.resetPanel();
- }
- setUrlStates();
- }
- private void setUrlStates() {
- if(edeting){
- image.setUploadState(fileHolder != null);
- image.setAddActionVisible(fileHolder == null && !image.isFileFieldVisible());
- image.setSaveVisible(fileHolder != null);
- image.setRemoveVisible(fileHolder != null && (fileHolder.isStored() || fileHolder.isUploaded()));
- } else {
- image.setUploadState(true);
- image.setAddActionVisible(false);
- image.setSaveVisible(false);
- image.setRemoveVisible(false);
- }
- }
- public boolean isSave() {
- return fileHolder != null && fileHolder.isSave() && image.shouldSave();
- }
- private String createViewUrl(FileHolder holder) {
- final StringBuffer result = new StringBuffer();
- result.append(handler.getPostUrl());
- result.append("?name=" + holder.getName());
- if (holder.isStored()) {
- result.append("&stored=true");
- }
- result.append(handler.getDownloadParameters(holder));
- return result.toString();
- }
- public void setShowAddImage(boolean newState) {
- image.setAddActionVisible(newState);
- }
- public void handleFileEvent(FileEvent newEvent) {
- switch (newEvent.getCommand()) {
- case FILE_SELECTED: {
- form.submit();
- break;
- }
- case UPLOAD_DONE: {
- image.setSelectedForSave(true);
- break;
- }
- case FILE_REMOVED: {
- // Cancel the upload
- fileHolder = null;
- image.setSelectedForSave(false);
- image.resetPanel();
-
- break;
- }
- case FILE_SELECTION_CHANGE: {
- fileHolder.setSave(image.shouldSave());
- break;
- }
- }
- setUrlStates();
- FileEvent.fire(this, newEvent.getCommand());
- }
- @Override
- public HandlerRegistration addFileEventHandler(FileEventListener handler) {
- return addHandler(handler, FileEvent.getType());
- }
- }