package ppj09.gwt.swapweb.client.gui; /** * Klasse User- Form ist zum Aendern bzw. bearbeiten eines Profils * * @author Georg Ortwein & Michael Lukaszczyk, Chrisitan Happ * @version 0.1 16.06.09 */ import ppj09.gwt.swapweb.client.SwapWeb; import ppj09.gwt.swapweb.client.datatype.Article; import ppj09.gwt.swapweb.client.serverInterface.ArticleManager; import ppj09.gwt.swapweb.client.serverInterface.ArticleManagerAsync; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FileUpload; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent; import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler; import com.google.gwt.user.client.ui.FormPanel.SubmitEvent; import com.google.gwt.user.client.ui.FormPanel.SubmitHandler; import com.gwtext.client.core.EventObject; import com.gwtext.client.core.Position; import com.gwtext.client.data.SimpleStore; import com.gwtext.client.data.Store; import com.gwtext.client.widgets.Button; import com.gwtext.client.widgets.Component; import com.gwtext.client.widgets.MessageBox; import com.gwtext.client.widgets.MessageBoxConfig; import com.gwtext.client.widgets.Panel; import com.gwtext.client.widgets.WaitConfig; import com.gwtext.client.widgets.Window; import com.gwtext.client.widgets.event.ButtonListenerAdapter; import com.gwtext.client.widgets.event.WindowListenerAdapter; import com.gwtext.client.widgets.form.Checkbox; import com.gwtext.client.widgets.form.ComboBox; import com.gwtext.client.widgets.form.FormPanel; import com.gwtext.client.widgets.form.MultiFieldPanel; import com.gwtext.client.widgets.form.NumberField; import com.gwtext.client.widgets.form.TextArea; import com.gwtext.client.widgets.form.TextField; import com.gwtext.client.widgets.layout.ColumnLayoutData; public class ArticleForm extends Composite implements Form { private FormPanel formPanel; private TextField txtbxName; private NumberField txtbxZip; private TextField txtbxCity; private MultiFieldPanel panel1; private ComboBox combobxCondition; private ComboBox categoryComboBox; private Checkbox chkbxdelivery1; private Checkbox chkbxdelivery2; private Checkbox chkbxdelivery3; private Button submitButton; private TextArea txtbxAmount; private TextArea txtbxSwaps; private TextArea txtbxDescription; private Window window; TextField hiddenText; private Article result; public ArticleForm(int articleID) { createFrom(); getArticle(articleID); } public ArticleForm() { createFrom(); } private void createFrom() { { VerticalPanel verticalPanel = new VerticalPanel(); initWidget(verticalPanel); { formPanel = new FormPanel(); formPanel.setMonitorValid(true); formPanel.setLabelAlign(Position.RIGHT); formPanel.setLabelWidth(250); formPanel.setBorder(false); formPanel.setFooter(true); formPanel.setWidth(480); SwapWeb.getContentPanel().setTitle("Angebot erstellen"); { txtbxName = new TextField("Artikelname*", "text_field", 190); txtbxName.setAllowBlank(false); txtbxName .setBlankText("Bitte geben Sie den Artikelnamen ein"); formPanel.add(txtbxName); final Store quickCategoryStore = new SimpleStore( "category", new String[] { "Auto", "Computer" }); quickCategoryStore.load(); categoryComboBox = new ComboBox(); categoryComboBox.setFieldLabel("Kategorie"); SwapWeb.getCategories(formPanel, categoryComboBox); txtbxZip = new NumberField("Plz* / Artikelstandort*", "number_field", 50); txtbxZip.setAllowBlank(false); txtbxZip.setSelectOnFocus(true); txtbxZip.setAllowBlank(false); txtbxZip .setBlankText("Bitte geben sie die Postleitzahl des Artikelstandortes an"); txtbxZip.setAllowDecimals(false); txtbxZip.setMinLength(5); txtbxZip.setMaxLength(5); txtbxZip.setMinText("Postleitzahl zu kurz"); txtbxZip.setMaxText("Postleitzahl zu lang"); txtbxCity = new TextField("Wohnort", "text_field", 135); txtbxCity.setAllowBlank(false); txtbxCity.setHideLabel(true); txtbxCity.setSelectOnFocus(true); txtbxCity .setBlankText("Bitte geben sie den Artikelstandort an"); panel1 = new MultiFieldPanel(); panel1.addToRow(txtbxZip, 310); panel1.addToRow(txtbxCity, new ColumnLayoutData(1)); panel1.setBorder(false); formPanel.add(panel1); final Store conditionStore = new SimpleStore(new String[] { "zustand", "nr" }, new String[][] { new String[] { "neu", "1" }, new String[] { "gebraucht", "2" } }); conditionStore.load(); combobxCondition = new ComboBox(); combobxCondition.setFieldLabel("Zustand*"); combobxCondition.setStore(conditionStore); combobxCondition.setAllowBlank(false); combobxCondition.setDisplayField("zustand"); combobxCondition.setMode(ComboBox.LOCAL); combobxCondition.setTriggerAction(ComboBox.ALL); combobxCondition.setTypeAhead(true); combobxCondition.setEditable(false); combobxCondition.setSelectOnFocus(true); combobxCondition.setWidth(190); combobxCondition.setHideTrigger(false); formPanel.add(combobxCondition); chkbxdelivery1 = new Checkbox("Postversand", "check_Box"); chkbxdelivery2 = new Checkbox("Selbstabholung", "check_Box"); chkbxdelivery3 = new Checkbox("Treffen", "check_Box"); chkbxdelivery1.setFieldLabel("Versandoptionen*:"); formPanel.add(chkbxdelivery1); formPanel.add(chkbxdelivery2); formPanel.add(chkbxdelivery3); txtbxAmount = new TextArea("Angebotsumfang*", "text_Area"); txtbxAmount.setPixelSize(190, 70); txtbxAmount.setAllowBlank(false); txtbxAmount .setBlankText("Bitte geben sie hier den Angebotsumfang an"); formPanel.add(txtbxAmount); txtbxSwaps = new TextArea("Gegentauschvorstellungen*", "text_Area"); txtbxSwaps.setPixelSize(190, 70); txtbxSwaps.setAllowBlank(false); txtbxSwaps .setBlankText("Bitte geben sie hier an, was sie gerne gegen ihren Artikel tauschen würden"); formPanel.add(txtbxSwaps); txtbxDescription = new TextArea("Beschreibung*", "text_Area"); txtbxDescription.setPixelSize(190, 70); txtbxDescription.setAllowBlank(false); txtbxDescription .setBlankText("Bitte geben sie hier eine Beschreibung zum Artikel an"); formPanel.add(txtbxDescription); // // AB HIER FORM FÜR FILE UPLOAD final com.google.gwt.user.client.ui.FormPanel imgform = new com.google.gwt.user.client.ui.FormPanel(); imgform.setAction(GWT.getModuleBaseURL() + "ImageUploadHandler"); // Because we're going to add a FileUpload widget, we'll // need to set the // form to use the POST method, and multipart MIME encoding. imgform .setEncoding(com.google.gwt.user.client.ui.FormPanel.ENCODING_MULTIPART); imgform .setMethod(com.google.gwt.user.client.ui.FormPanel.METHOD_POST); VerticalPanel panel = new VerticalPanel(); imgform.setWidget(panel); Panel beschreibung = new Panel(); beschreibung.setMargins(5); beschreibung .setHtml("Mit einem Klick auf \"Datei auswählen\" können Sie ein Bild in den Formaten <b>\"jpg\"</b>, <b>\"png\"</b> oder <b>\"bmp\"</b> auswählen und anschließend hochladen."); beschreibung.setWidth(350); panel.add(beschreibung); panel.setSpacing(2); // Create a FileUpload widget. final FileUpload upload = new FileUpload(); upload.setWidth("340"); upload.setName("uploadFormElement"); hiddenText = new TextField(); hiddenText.setName("uploadHiddenElement"); hiddenText.setVisible(false); panel.add(upload); panel.add(hiddenText); Button button2 = new Button("Submit"); button2.addListener(new ButtonListenerAdapter() { public void onClick(Button button, EventObject e) { if (validateImageExtension(upload.getFilename())) { System.out.println("FORM GECHICKT"); imgform.submit(); } else { System.out.println("FORM NICHT GESCHICKT"); MessageBox .alert("Bitte wählen Sie ein Bild mit der Endung\n \"jpg\", \"png\" oder \"bmp\" aus."); } } }); // Add a 'submit' button. panel.add(button2); imgform.addSubmitHandler(new SubmitHandler() { public void onSubmit(SubmitEvent event) { if (upload.getFilename().length() == 0) { MessageBox .alert("The text box must not be empty"); event.cancel(); } else { System.out.println("VOR STATUSBAR"); MessageBox.show(new MessageBoxConfig() { { setMsg("Ihr Bild wird gespeichert, bitte warten..."); setProgressText("Speichern..."); setWidth(300); setWait(true); setWaitConfig(new WaitConfig() { { setInterval(200); } }); setAnimEl(submitButton.getId()); } }); System.out.println("NACH STATUSBAR"); Timer timer = new Timer() { public void run() { MessageBox.hide(); System.out .println("Done, Your fake data was saved!"); } }; timer.schedule(8000); } } }); imgform .addSubmitCompleteHandler(new SubmitCompleteHandler() { public void onSubmitComplete( SubmitCompleteEvent event) { MessageBox.alert(event.getResults()); window.close(); SwapWeb.getContentPanel().clear(); SwapWeb.getContentPanel().add( new ArticleView(Integer .parseInt(hiddenText .getText()))); SwapWeb.getContentPanel().doLayout(); } }); window = new Window(); window.setTitle("Bild hochladen"); window.setClosable(true); // TODO window.addListener(new WindowListenerAdapter() { public void onHide(Component component) { MessageBox .alert("Ihr Artikel wurde erfolgreich erstellt"); SwapWeb.getContentPanel().clear(); SwapWeb.getContentPanel().add( new ArticleView(Integer.parseInt(hiddenText .getText()))); SwapWeb.getContentPanel().doLayout(); } }); window.setPaddings(5); window.setPlain(true); window.add(imgform); window.setCloseAction(Window.HIDE); // //// ENDE FORMS FÜR FILE UPLOAD submitButton = new Button("Artikel Erstellen"); submitButton.setFormBind(true); formPanel.addButton(submitButton); submitButton.addListener(new ButtonListenerAdapter() { public void onClick(Button button, EventObject e) { submit(); } }); } verticalPanel.add(formPanel); } } } public boolean validateImageExtension(String filename) { boolean isAllowdExt = false; int indexPoint = filename.lastIndexOf("."); int length = filename.length(); String extension = filename.substring(indexPoint + 1, length); extension = extension.toLowerCase(); if (extension.equals("jpg") || extension.equals("png") || extension.equals("bmp")) { isAllowdExt = true; } return isAllowdExt; } public boolean submit() { Article newArticle = new Article(); newArticle = fillArticle(newArticle); ArticleManagerAsync articleManager = GWT.create(ArticleManager.class); articleManager.createArticle(newArticle, new AsyncCallback<Integer>() { public void onFailure(Throwable caught) { // System.out.println("neeee: " + caught.getMessage()); } public void onSuccess(Integer serverMsg) { // System.out.println("OK: " + serverMsg.toString()); if (serverMsg == 2) { MessageBox .alert("ACHTUNG: Sie sind nicht eingeloggt. Bitte Melden Sie sich an."); } else if (serverMsg > 2) { formPanel.getForm().reset(); hiddenText.setRawValue(serverMsg.toString()); window.show(submitButton.getId()); } else if (serverMsg == 0) { MessageBox .alert("FEHLER: Ihr Artikel konnte nicht angelegt werden."); } } }); // } return true; } // füllt das Artikelobjekt mit Formulardaten private Article fillArticle(Article article) { article.setTitle(txtbxName.getText()); article.setCategory(categoryComboBox.getText()); article.setZipCode(txtbxZip.getText()); article.setLocation(txtbxCity.getText()); article.setCondition(combobxCondition.getText()); article.setShippingMethods(getShippingMethods()); article.setOfferScope(txtbxAmount.getText()); article.setDesiredItemsComment(txtbxSwaps.getText()); article.setDescription(txtbxDescription.getText()); return article; } private String getShippingMethods() { String shippingMethods = ""; if (chkbxdelivery1.getValue() == true) { shippingMethods = shippingMethods.concat("Postversand\n"); } if (chkbxdelivery2.getValue() == true) { shippingMethods = shippingMethods.concat("Selbstabholung\n"); } if (chkbxdelivery3.getValue() == true) { shippingMethods = shippingMethods.concat("Treffen"); } return shippingMethods; } public Article getArticle(int articleID) { result = new Article(); ArticleManagerAsync articleManager = GWT.create(ArticleManager.class); articleManager.getArticle(articleID, new AsyncCallback<Article>() { public void onSuccess(Article resultArticle) { System.out.println(resultArticle.getTitle()); result = resultArticle; fillForm(resultArticle); } public void onFailure(Throwable caught) { System.out.println("Fehler in ArticleForm getArticle RPC"); } }); return result; } public void fillForm(Article article) { try { this.txtbxName.setRawValue(article.getTitle()); } catch (NullPointerException e) { System.out.println("Fehler fillForm() " + e); } try { this.txtbxZip.setRawValue(article.getZipCode()); } catch (NullPointerException e) { System.out.println("Fehler fillForm() " + e); } try { this.txtbxCity.setRawValue(article.getLocation()); } catch (NullPointerException e) { System.out.println("Fehler fillForm() " + e); } try { this.combobxCondition.setRawValue(article.getCondition()); } catch (NullPointerException e) { System.out.println("Fehler fillForm() " + e); } try { this.txtbxAmount.setRawValue(article.getOfferScope()); } catch (NullPointerException e) { System.out.println("Fehler fillForm() " + e); } try { this.txtbxSwaps.setRawValue(article.getDesiredItemsComment()); } catch (NullPointerException e) { System.out.println("Fehler fillForm() " + e); } try { this.txtbxDescription.setRawValue(article.getDescription()); } catch (NullPointerException e) { System.out.println("Fehler fillForm() " + e); } try { this.categoryComboBox.setRawValue(article.getCategory()); } catch (NullPointerException e) { System.out.println("Fehler fillForm() " + e); } } }