/v3.2/nimbits-tds/src/com/nimbits/client/panels/DiagramUploadPanel.java

http://nimbits-server.googlecode.com/ · Java · 187 lines · 123 code · 40 blank · 24 comment · 8 complexity · ad82feb37567beb4661da271a0344c3e MD5 · raw file

  1. /*
  2. * Copyright (c) 2010 Tonic Solutions LLC.
  3. *
  4. * http://www.nimbits.com
  5. *
  6. *
  7. * Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
  8. *
  9. * http://www.gnu.org/licenses/gpl.html
  10. *
  11. * 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.
  12. */
  13. package com.nimbits.client.panels;
  14. import com.extjs.gxt.ui.client.event.*;
  15. import com.extjs.gxt.ui.client.widget.LayoutContainer;
  16. import com.extjs.gxt.ui.client.widget.button.Button;
  17. import com.extjs.gxt.ui.client.widget.form.FileUploadField;
  18. import com.extjs.gxt.ui.client.widget.form.FormPanel;
  19. import com.extjs.gxt.ui.client.widget.form.FormPanel.Encoding;
  20. import com.extjs.gxt.ui.client.widget.form.FormPanel.Method;
  21. import com.extjs.gxt.ui.client.widget.form.HiddenField;
  22. import com.extjs.gxt.ui.client.widget.form.TextField;
  23. import com.google.gwt.core.client.GWT;
  24. import com.google.gwt.user.client.Element;
  25. import com.google.gwt.user.client.Window;
  26. import com.google.gwt.user.client.rpc.AsyncCallback;
  27. import com.nimbits.client.exception.NimbitsException;
  28. import com.nimbits.client.model.Const;
  29. import com.nimbits.client.model.diagram.Diagram;
  30. import com.nimbits.client.service.diagram.DiagramService;
  31. import com.nimbits.client.service.diagram.DiagramServiceAsync;
  32. import java.util.ArrayList;
  33. import java.util.List;
  34. import static com.nimbits.shared.Utils.isEmptyString;
  35. /**
  36. * Created by bsautner
  37. * User: benjamin
  38. * Date: 5/20/11
  39. * Time: 3:28 PM
  40. */
  41. public class DiagramUploadPanel extends LayoutContainer {
  42. private final List<DiagramAddedListener> DiagramAddedListeners = new ArrayList<DiagramAddedListener>();
  43. private Diagram diagram;
  44. public DiagramUploadPanel(UploadType uploadType) {
  45. this.uploadType = uploadType;
  46. }
  47. public DiagramUploadPanel(UploadType uploadType, Diagram diagram) {
  48. this.uploadType = uploadType;
  49. this.diagram = diagram;
  50. }
  51. public enum UploadType {
  52. newFile, updatedFile
  53. }
  54. private final UploadType uploadType;
  55. public interface DiagramAddedListener {
  56. void onDiagramAdded() throws NimbitsException;
  57. }
  58. public void addDiagramAddedListeners(final DiagramAddedListener listener) {
  59. DiagramAddedListeners.add(listener);
  60. }
  61. void notifyDiagramAddedListener() throws NimbitsException {
  62. for (DiagramAddedListener DiagramAddedListener : DiagramAddedListeners) {
  63. DiagramAddedListener.onDiagramAdded();
  64. }
  65. }
  66. @Override
  67. protected void onRender(Element parent, int index) {
  68. super.onRender(parent, index);
  69. setStyleAttribute("margin", "10px");
  70. final FormPanel panel = new FormPanel();
  71. panel.addListener(Events.Submit, new Listener<FormEvent>() {
  72. @Override
  73. public void handleEvent(FormEvent formEvent) {
  74. try {
  75. notifyDiagramAddedListener();
  76. } catch (NimbitsException ignored) {
  77. }
  78. }
  79. });
  80. panel.setHeaderVisible(false);
  81. panel.setFrame(false);
  82. DiagramServiceAsync diagramService = GWT.create(DiagramService.class);
  83. // diagramService.getBlobStoreUrl("http://" + Window.Location.getHost() + "/service/diagram", new AsyncCallback<String>() {
  84. diagramService.getBlobStoreUrl("/service/diagram", new AsyncCallback<String>() {
  85. @Override
  86. public void onFailure(Throwable throwable) {
  87. }
  88. @Override
  89. public void onSuccess(String s) {
  90. panel.setAction(s);
  91. }
  92. });
  93. panel.setAction("http://" + Window.Location.getHost() + "/service/diagram");
  94. panel.setEncoding(Encoding.MULTIPART);
  95. panel.setMethod(Method.POST);
  96. // panel.setButtonAlign(HorizontalAlignment.CENTER);
  97. panel.setWidth(350);
  98. final TextField<String> name = new TextField<String>();
  99. name.setFieldLabel(Const.WORD_NAME);
  100. name.setName(Const.PARAM_NAME);
  101. panel.add(name);
  102. final FileUploadField file = new FileUploadField();
  103. file.setAllowBlank(false);
  104. file.setName("myFile");
  105. file.setFieldLabel("File");
  106. panel.add(file);
  107. final HiddenField<UploadType> uploadTypeHiddenField = new HiddenField<UploadType>();
  108. uploadTypeHiddenField.setName(Const.PARAM_UPLOAD_TYPE_HIDDEN_FIELD);
  109. uploadTypeHiddenField.setValue(uploadType);
  110. panel.add(uploadTypeHiddenField);
  111. if (uploadType == UploadType.updatedFile && diagram != null) {
  112. final HiddenField<Long> diagramId = new HiddenField<Long>();
  113. diagramId.setName(Const.PARAM_DIAGRAM_ID);
  114. diagramId.setValue(diagram.getId());
  115. panel.add(diagramId);
  116. name.setValue(diagram.getName().getValue());
  117. name.setReadOnly(true);
  118. name.setVisible(false);
  119. }
  120. final Button btn = new Button("Reset");
  121. btn.addSelectionListener(new SelectionListener<ButtonEvent>() {
  122. @Override
  123. public void componentSelected(ButtonEvent ce) {
  124. panel.reset();
  125. }
  126. });
  127. panel.addButton(btn);
  128. final Button submitBtn = new Button("Submit");
  129. submitBtn.addSelectionListener(new SelectionListener<ButtonEvent>() {
  130. @Override
  131. public void componentSelected(ButtonEvent ce) {
  132. if (!panel.isValid()) {
  133. return;
  134. }
  135. // normally would submit the form but for example no server set up to
  136. // handle the post
  137. if (!isEmptyString(name.getValue()) && file.getValue().toLowerCase().endsWith(".svg")) {
  138. panel.submit();
  139. }
  140. //
  141. // notifyDiagramAddedListener();
  142. }
  143. });
  144. panel.addButton(submitBtn);
  145. add(panel);
  146. }
  147. }