/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

  1. /*
  2. * Copyright 2007 Future Earth, info@future-earth.eu
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package eu.future.earth.gwt.client.file;
  17. import com.google.gwt.event.shared.HandlerRegistration;
  18. import com.google.gwt.json.client.JSONObject;
  19. import com.google.gwt.json.client.JSONParser;
  20. import com.google.gwt.json.client.JSONValue;
  21. import com.google.gwt.user.client.ui.FormPanel;
  22. import com.google.gwt.user.client.ui.SimplePanel;
  23. import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
  24. import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler;
  25. import eu.future.earth.gwt.client.events.FileEvent;
  26. import eu.future.earth.gwt.client.events.FileEventListener;
  27. import eu.future.earth.gwt.client.events.FileUploadAction;
  28. import eu.future.earth.gwt.client.events.HasFileEventHandlers;
  29. public class EditFilePanel extends SimplePanel implements FileEventListener, HasFileEventHandlers {
  30. final FormPanel form = new FormPanel();
  31. private FilePanel image = null;
  32. private FileHolderHandler handler = null;
  33. private FileHolder fileHolder = null;
  34. public EditFilePanel(FileHolderHandler newHandler) {
  35. super();
  36. handler = newHandler;
  37. image = new FilePanel(newHandler);
  38. form.setAction(handler.getPostUrl());
  39. form.setEncoding(FormPanel.ENCODING_MULTIPART);
  40. form.setMethod(FormPanel.METHOD_POST);
  41. form.setWidget(image);
  42. image.setFieldName("image");
  43. image.addFileEventHandler(this);
  44. form.addSubmitCompleteHandler(new SubmitCompleteHandler() {
  45. public void onSubmitComplete(SubmitCompleteEvent event) {
  46. // When the form submission is successfully completed, this event is
  47. // fired. Assuming the service returned a response of type text/html,
  48. // we can get the result text here (see the FormPanel documentation for
  49. // further explanation).
  50. JSONValue jsonValue = JSONParser.parseLenient(event.getResults());
  51. JSONObject real = jsonValue.isObject();
  52. String stat = getValueFor("result", real);
  53. if ("succes".equals(stat)) {
  54. String fileName = getValueFor("fileName", real);
  55. String fileType = getValueFor("fileType", real);
  56. String fileSize = getValueFor("fileSize", real);
  57. if (fileHolder == null) {
  58. fileHolder = new FileHolder();
  59. }
  60. fileHolder.setName(fileName);
  61. fileHolder.setUploaded(true);
  62. fileHolder.setSave(image.shouldSave());
  63. fileHolder.setSize(fileSize);
  64. fileHolder.setType(fileType);
  65. reportUploadComplete();
  66. } else {
  67. image.resetPanel();
  68. // info.setUploaded(false);
  69. }
  70. }
  71. });
  72. super.setWidget(form);
  73. }
  74. private boolean edeting = true;
  75. public void setEdeting(boolean newState) {
  76. if (edeting != newState) {
  77. edeting = newState;
  78. setUrlStates();
  79. }
  80. }
  81. private static String getValueFor(String name, JSONObject real) {
  82. JSONValue data = real.get(name);
  83. String stat = null;
  84. if (data != null) {
  85. if (data.isString() == null) {
  86. stat = data.isArray().get(0).isString().stringValue();
  87. } else {
  88. stat = data.isString().stringValue();
  89. }
  90. }
  91. return stat;
  92. }
  93. private void reportUploadComplete() {
  94. image.setInfo(fileHolder.getName(), createViewUrl(fileHolder));
  95. setUrlStates();
  96. image.setSelectedForSave(true);
  97. FileEvent.fire(this, FileUploadAction.UPLOAD_DONE);
  98. }
  99. public FileHolder getFileInfo() {
  100. return fileHolder;
  101. }
  102. public void setFile(FileHolder newInfo) {
  103. fileHolder = newInfo;
  104. image.setUploadState(!edeting);
  105. if (fileHolder != null) {
  106. image.setInfo(fileHolder.getName(), createViewUrl(newInfo));
  107. } else {
  108. image.resetPanel();
  109. }
  110. setUrlStates();
  111. }
  112. private void setUrlStates() {
  113. if(edeting){
  114. image.setUploadState(fileHolder != null);
  115. image.setAddActionVisible(fileHolder == null && !image.isFileFieldVisible());
  116. image.setSaveVisible(fileHolder != null);
  117. image.setRemoveVisible(fileHolder != null && (fileHolder.isStored() || fileHolder.isUploaded()));
  118. } else {
  119. image.setUploadState(true);
  120. image.setAddActionVisible(false);
  121. image.setSaveVisible(false);
  122. image.setRemoveVisible(false);
  123. }
  124. }
  125. public boolean isSave() {
  126. return fileHolder != null && fileHolder.isSave() && image.shouldSave();
  127. }
  128. private String createViewUrl(FileHolder holder) {
  129. final StringBuffer result = new StringBuffer();
  130. result.append(handler.getPostUrl());
  131. result.append("?name=" + holder.getName());
  132. if (holder.isStored()) {
  133. result.append("&stored=true");
  134. }
  135. result.append(handler.getDownloadParameters(holder));
  136. return result.toString();
  137. }
  138. public void setShowAddImage(boolean newState) {
  139. image.setAddActionVisible(newState);
  140. }
  141. public void handleFileEvent(FileEvent newEvent) {
  142. switch (newEvent.getCommand()) {
  143. case FILE_SELECTED: {
  144. form.submit();
  145. break;
  146. }
  147. case UPLOAD_DONE: {
  148. image.setSelectedForSave(true);
  149. break;
  150. }
  151. case FILE_REMOVED: {
  152. // Cancel the upload
  153. fileHolder = null;
  154. image.setSelectedForSave(false);
  155. image.resetPanel();
  156. break;
  157. }
  158. case FILE_SELECTION_CHANGE: {
  159. fileHolder.setSave(image.shouldSave());
  160. break;
  161. }
  162. }
  163. setUrlStates();
  164. FileEvent.fire(this, newEvent.getCommand());
  165. }
  166. @Override
  167. public HandlerRegistration addFileEventHandler(FileEventListener handler) {
  168. return addHandler(handler, FileEvent.getType());
  169. }
  170. }