/** * OpenKM, Open Document Management System (http://www.openkm.com) * Copyright (c) 2006-2011 Paco Avila & Josep Llort * * No bytes were intentionally harmed during the development of this application. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package com.openkm.frontend.client.widget.form; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.dom.client.KeyUpHandler; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.FileUpload; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.TextArea; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import com.openkm.frontend.client.Main; import com.openkm.frontend.client.bean.FileToUpload; import com.openkm.frontend.client.bean.GWTDocument; import com.openkm.frontend.client.bean.GWTFolder; import com.openkm.frontend.client.bean.GWTKeyValue; import com.openkm.frontend.client.bean.GWTPropertyParams; import com.openkm.frontend.client.bean.GWTTaskInstance; import com.openkm.frontend.client.bean.form.GWTButton; import com.openkm.frontend.client.bean.form.GWTCheckBox; import com.openkm.frontend.client.bean.form.GWTDownload; import com.openkm.frontend.client.bean.form.GWTFormElement; import com.openkm.frontend.client.bean.form.GWTInput; import com.openkm.frontend.client.bean.form.GWTNode; import com.openkm.frontend.client.bean.form.GWTOption; import com.openkm.frontend.client.bean.form.GWTPrint; import com.openkm.frontend.client.bean.form.GWTSelect; import com.openkm.frontend.client.bean.form.GWTSeparator; import com.openkm.frontend.client.bean.form.GWTSuggestBox; import com.openkm.frontend.client.bean.form.GWTText; import com.openkm.frontend.client.bean.form.GWTTextArea; import com.openkm.frontend.client.bean.form.GWTUpload; import com.openkm.frontend.client.bean.form.GWTValidator; import com.openkm.frontend.client.contants.ui.UIFileUploadConstants; import com.openkm.frontend.client.service.OKMDocumentService; import com.openkm.frontend.client.service.OKMDocumentServiceAsync; import com.openkm.frontend.client.service.OKMFolderService; import com.openkm.frontend.client.service.OKMFolderServiceAsync; import com.openkm.frontend.client.service.OKMKeyValueService; import com.openkm.frontend.client.service.OKMKeyValueServiceAsync; import com.openkm.frontend.client.service.OKMRepositoryService; import com.openkm.frontend.client.service.OKMRepositoryServiceAsync; import com.openkm.frontend.client.util.CommonUI; import com.openkm.frontend.client.util.ISO8601; import com.openkm.frontend.client.util.MessageFormat; import com.openkm.frontend.client.util.OKMBundleResources; import com.openkm.frontend.client.util.Util; import com.openkm.frontend.client.util.validator.ValidatorBuilder; import com.openkm.frontend.client.widget.ConfirmPopup; import com.openkm.frontend.client.widget.searchin.CalendarWidget; import com.openkm.frontend.client.widget.searchin.HasSearch; import eu.maydu.gwt.validation.client.DefaultValidationProcessor; import eu.maydu.gwt.validation.client.ValidationProcessor; import eu.maydu.gwt.validation.client.actions.FocusAction; /** * FormManager * * @author jllort * */ public class FormManager { private final OKMKeyValueServiceAsync keyValueService = (OKMKeyValueServiceAsync) GWT.create(OKMKeyValueService.class); private final OKMRepositoryServiceAsync repositoryService = (OKMRepositoryServiceAsync) GWT.create(OKMRepositoryService.class); private final OKMDocumentServiceAsync documentService = (OKMDocumentServiceAsync) GWT.create(OKMDocumentService.class); private final OKMFolderServiceAsync folderService = (OKMFolderServiceAsync) GWT.create(OKMFolderService.class); // Boolean contants private String BOOLEAN_TRUE = String.valueOf(Boolean.TRUE); private List<GWTFormElement> formElementList = new ArrayList<GWTFormElement>(); public Map<String, GWTPropertyParams> hPropertyParams = new HashMap<String, GWTPropertyParams>(); private Map<String, Widget> hWidgetProperties = new HashMap<String, Widget>(); private FlexTable table; private FolderSelectPopup folderSelectPopup; private ValidationProcessor validationProcessor; private boolean drawed = false; private boolean readOnly = false; private GWTTaskInstance taskInstance; private Button submitForm; private HasWorkflow workflow; private HorizontalPanel submitButtonPanel; private boolean isSearchView = false; private HasSearch search; private List<Button> buttonControlList; private FormManager singleton; /** * FormManager used in workflow mode */ public FormManager(HasWorkflow workflow) { singleton = this; this.workflow = workflow; init(); } /** * FormManager used in search mode */ public FormManager(HasSearch search) { singleton = this; this.search = search; isSearchView = true; init(); } /** * FormManager used in property group mode */ public FormManager() { singleton = this; init(); } /** * init */ private void init() { table = new FlexTable(); table.setWidth("100%"); table.setStyleName("okm-NoWrap"); folderSelectPopup = new FolderSelectPopup(); folderSelectPopup.setStyleName("okm-Popup"); folderSelectPopup.addStyleName("okm-DisableSelect"); submitButtonPanel = new HorizontalPanel(); buttonControlList = new ArrayList<Button>(); } /** * getTable * * @return */ public FlexTable getTable() { return table; } /** * Set the WordWarp for all the row cells * * @param row The row cell * @param columns Number of row columns * @param warp */ private void setRowWordWarp(int row, int columns, boolean warp) { for (int i=0; i<columns; i++){ table.getCellFormatter().setWordWrap(row, i, false); } } /** * Set the WordWarp for all the row cells * * @param table FlexTable The table to format * @param row The row cell * @param columns Number of row columns * @param warp */ private void setRowWordWarp(FlexTable table, int row, int columns, boolean warp) { for (int i=0; i<columns; i++){ table.getCellFormatter().setWordWrap(row, i, false); } } /** * drawFormElement */ private void drawFormElement(int row, final GWTFormElement gwtFormElement, boolean readOnly, boolean searchView) { final String propertyName = gwtFormElement.getName(); if (gwtFormElement instanceof GWTButton) { final GWTButton gWTButton = (GWTButton) gwtFormElement; if (submitForm != null) { submitForm.setVisible(false); // Always set form hidden because there's new buttons } Button transButton = new Button(gWTButton.getLabel()); transButton.setStyleName("okm-Button"); HTML space = new HTML(" "); submitButtonPanel.add(transButton); submitButtonPanel.add(space); submitButtonPanel.setCellWidth(space, "5px"); // Setting submit button transButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { if (gWTButton.getConfirmation()!=null && !gWTButton.getConfirmation().equals("")) { Main.get().confirmPopup.setConfirm(ConfirmPopup.CONFIRM_WORKFLOW_ACTION); Main.get().confirmPopup.setConfirmationText(gWTButton.getConfirmation()); ValidationButton validationButton = new ValidationButton(gWTButton, singleton); Main.get().confirmPopup.setValue(validationButton); Main.get().confirmPopup.center(); } else { if (validationProcessor.validate()) { if (gWTButton.getTransition().equals("")) { workflow.setTaskInstanceValues(taskInstance.getId(), null); } else { workflow.setTaskInstanceValues(taskInstance.getId(), gWTButton.getTransition()); } disableAllButtonList(); } } } }); // Adding button to control list if (!buttonControlList.contains(transButton)) { buttonControlList.add(transButton); } } else if (gwtFormElement instanceof GWTTextArea) { HorizontalPanel hPanel = new HorizontalPanel(); TextArea textArea = new TextArea(); textArea.setEnabled((!readOnly && !((GWTTextArea) gwtFormElement).isReadonly()) || isSearchView); hPanel.add(textArea); textArea.setStyleName("okm-TextArea"); textArea.setText(((GWTTextArea) gwtFormElement).getValue()); textArea.setSize(gwtFormElement.getWidth(), gwtFormElement.getHeight()); HTML text = new HTML(); // Create a widget for this property text.setHTML(((GWTTextArea) gwtFormElement).getValue().replaceAll("\n", "<br>")); hWidgetProperties.put(propertyName,hPanel); table.setHTML(row, 0, "<b>" + gwtFormElement.getLabel() + "</b>"); table.setWidget(row, 1, text); table.getCellFormatter().setVerticalAlignment(row,0,VerticalPanel.ALIGN_TOP); table.getCellFormatter().setWidth(row, 1, "100%"); if (searchView) { final Image removeImage = new Image(OKMBundleResources.INSTANCE.deleteIcon()); removeImage.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { for (int row=0; row<table.getRowCount(); row++) { if (table.getWidget(row, 2).equals(removeImage)) { table.removeRow(row); break; } } hWidgetProperties.remove(propertyName); hPropertyParams.remove(propertyName); formElementList.remove(gwtFormElement); search.propertyRemoved(); } }); removeImage.addStyleName("okm-Hyperlink"); table.setWidget(row, 2, removeImage); table.getCellFormatter().setVerticalAlignment(row, 2, HasAlignment.ALIGN_TOP); if (search != null) { textArea.addKeyUpHandler(new KeyUpHandler() { @Override public void onKeyUp(KeyUpEvent event) { search.metadataValueChanged(); } }); } setRowWordWarp(row, 3, true); } else { setRowWordWarp(row, 2, true); } } else if (gwtFormElement instanceof GWTInput) { HorizontalPanel hPanel = new HorizontalPanel(); final TextBox textBox = new TextBox(); // Create a widget for this property textBox.setEnabled((!readOnly && !((GWTInput) gwtFormElement).isReadonly()) || isSearchView); hPanel.add(textBox); String value = ""; if (((GWTInput) gwtFormElement).getType().equals(GWTInput.TYPE_TEXT) || ((GWTInput) gwtFormElement).getType().equals(GWTInput.TYPE_LINK) || ((GWTInput) gwtFormElement).getType().equals(GWTInput.TYPE_FOLDER)) { textBox.setText(((GWTInput) gwtFormElement).getValue()); value = ((GWTInput) gwtFormElement).getValue(); } else if (((GWTInput) gwtFormElement).getType().equals(GWTInput.TYPE_DATE)) { if (((GWTInput) gwtFormElement).getDate() != null) { DateTimeFormat dtf = DateTimeFormat.getFormat(Main.i18n("general.day.pattern")); textBox.setText(dtf.format(((GWTInput) gwtFormElement).getDate())); value = dtf.format(((GWTInput) gwtFormElement).getDate()); } } textBox.setWidth(gwtFormElement.getWidth()); textBox.setStyleName("okm-Input"); hWidgetProperties.put(propertyName,hPanel); table.setHTML(row, 0, "<b>" + gwtFormElement.getLabel() + "</b>"); table.setHTML(row, 1, value); if (((GWTInput) gwtFormElement).getType().equals(GWTInput.TYPE_DATE)) { final PopupPanel calendarPopup = new PopupPanel(true); final CalendarWidget calendar = new CalendarWidget(); calendar.addChangeHandler(new ChangeHandler(){ @Override public void onChange(ChangeEvent event) { calendarPopup.hide(); DateTimeFormat dtf = DateTimeFormat.getFormat(Main.i18n("general.day.pattern")); textBox.setText(dtf.format(calendar.getDate())); ((GWTInput) gwtFormElement).setDate(calendar.getDate()); if (search != null) { search.metadataValueChanged(); } } }); calendarPopup.add(calendar); final Image calendarIcon = new Image(OKMBundleResources.INSTANCE.calendar()); if (readOnly || ((GWTInput) gwtFormElement).isReadonly()) { calendarIcon.setResource(OKMBundleResources.INSTANCE.calendarDisabled()); } else { calendarIcon.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { calendarPopup.setPopupPosition(calendarIcon.getAbsoluteLeft(), calendarIcon.getAbsoluteTop()-2); calendarPopup.show(); } }); } calendarIcon.setStyleName("okm-Hyperlink"); hPanel.add(Util.hSpace("5")); hPanel.add(calendarIcon); textBox.setEnabled(false); } else if (((GWTInput) gwtFormElement).getType().equals(GWTInput.TYPE_LINK)) { if (!value.equals("")) { HorizontalPanel hLinkPanel = new HorizontalPanel(); Anchor anchor = new Anchor(value, true); final String url = value; anchor.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Window.open(url, url, ""); } }); anchor.setStyleName("okm-Hyperlink"); String containerName = ((GWTInput) gwtFormElement).getName() + "ContainerName"; hLinkPanel.add(new HTML("<div id=\"" + containerName + "\"></div>\n")); HTML space = new HTML(""); hLinkPanel.add(space); hLinkPanel.add(anchor); hLinkPanel.setCellWidth(space, "5px"); table.setWidget(row, 1, hLinkPanel); Util.createLinkClipboardButton(url, containerName); } else { table.setHTML(row, 1, ""); } } else if (((GWTInput) gwtFormElement).getType().equals(GWTInput.TYPE_FOLDER)) { if (!value.equals("")) { Anchor anchor = new Anchor(); final GWTFolder folder = ((GWTInput) gwtFormElement).getFolder(); // remove first ocurrence String path = value.substring(value.indexOf("/", 1) + 1); // Looks if must change icon on parent if now has no childs and properties with user security atention if (folder.getHasChilds()) { anchor.setHTML(Util.imageItemHTML("img/menuitem_childs.gif", path, "top")); } else { anchor.setHTML(Util.imageItemHTML("img/menuitem_empty.gif", path, "top")); } anchor.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent arg0) { CommonUI.openAllFolderPath(folder.getPath(), null); } }); anchor.setStyleName("okm-KeyMap-ImageHover"); table.setWidget(row, 1, anchor); } else { table.setHTML(row, 1, ""); } Image pathExplorer = new Image(OKMBundleResources.INSTANCE.folderExplorer()); pathExplorer.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { folderSelectPopup.show(textBox, search); // when any changes is done is fired search.metadataValueChanged(); } }); Image cleanPathExplorer = new Image(OKMBundleResources.INSTANCE.cleanIcon()); cleanPathExplorer.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { textBox.setValue(""); ((GWTInput) gwtFormElement).setFolder(new GWTFolder()); } }); pathExplorer.setStyleName("okm-KeyMap-ImageHover"); cleanPathExplorer.setStyleName("okm-KeyMap-ImageHover"); hPanel.add(new HTML(" ")); hPanel.add(pathExplorer); hPanel.add(new HTML(" ")); hPanel.add(cleanPathExplorer); hPanel.setCellVerticalAlignment(pathExplorer, HasAlignment.ALIGN_MIDDLE); hPanel.setCellVerticalAlignment(cleanPathExplorer, HasAlignment.ALIGN_MIDDLE); textBox.setEnabled(false); } table.getCellFormatter().setVerticalAlignment(row,0,VerticalPanel.ALIGN_TOP); table.getCellFormatter().setWidth(row, 1, "100%"); if (searchView) { // Second date input if (((GWTInput) gwtFormElement).getType().equals(GWTInput.TYPE_DATE)) { final TextBox textBoxTo = new TextBox(); textBoxTo.setWidth(gwtFormElement.getWidth()); textBoxTo.setStyleName("okm-Input"); hPanel.add(new HTML(" ↔ ")); hPanel.add(textBoxTo); if (((GWTInput) gwtFormElement).getDateTo() != null) { DateTimeFormat dtf = DateTimeFormat.getFormat(Main.i18n("general.day.pattern")); textBoxTo.setText(dtf.format(((GWTInput) gwtFormElement).getDateTo())); } final PopupPanel calendarPopup = new PopupPanel(true); final CalendarWidget calendar = new CalendarWidget(); calendar.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { calendarPopup.hide(); DateTimeFormat dtf = DateTimeFormat.getFormat(Main.i18n("general.day.pattern")); textBoxTo.setText(dtf.format(calendar.getDate())); ((GWTInput) gwtFormElement).setDateTo(calendar.getDate()); if (search != null) { search.metadataValueChanged(); } } }); calendarPopup.add(calendar); final Image calendarIcon = new Image(OKMBundleResources.INSTANCE.calendar()); calendarIcon.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { calendarPopup.setPopupPosition(calendarIcon.getAbsoluteLeft(), calendarIcon.getAbsoluteTop()-2); calendarPopup.show(); } }); calendarIcon.setStyleName("okm-Hyperlink"); hPanel.add(Util.hSpace("5")); hPanel.add(calendarIcon); textBoxTo.setEnabled(false); } // Delete final Image removeImage = new Image(OKMBundleResources.INSTANCE.deleteIcon()); removeImage.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { for (int row=0; row<table.getRowCount(); row++) { if (table.getWidget(row, 2).equals(removeImage)) { table.removeRow(row); break; } } hWidgetProperties.remove(propertyName); hPropertyParams.remove(propertyName); formElementList.remove(gwtFormElement); search.propertyRemoved(); } }); removeImage.addStyleName("okm-Hyperlink"); table.setWidget(row, 2, removeImage); table.getCellFormatter().setVerticalAlignment(row, 2, HasAlignment.ALIGN_TOP); if (search != null) { textBox.addKeyUpHandler(new KeyUpHandler() { @Override public void onKeyUp(KeyUpEvent event) { search.metadataValueChanged(); } }); } setRowWordWarp(row, 3, true); } else { setRowWordWarp(row, 2, true); } } else if(gwtFormElement instanceof GWTSuggestBox) { HorizontalPanel hPanel = new HorizontalPanel(); final GWTSuggestBox suggestBox = (GWTSuggestBox) gwtFormElement; final TextBox textBox = new TextBox(); // Create a widget for this property textBox.setWidth(gwtFormElement.getWidth()); textBox.setStyleName("okm-Input"); textBox.setReadOnly(true); textBox.setEnabled((!readOnly && !suggestBox.isReadonly()) || isSearchView); final HTML hiddenKey = new HTML(""); hiddenKey.setVisible(false); if (suggestBox.getValue()!=null) { hiddenKey.setHTML(suggestBox.getValue()); } hPanel.add(textBox); hPanel.add(hiddenKey); final HTML value = new HTML(""); table.setHTML(row, 0, "<b>" + gwtFormElement.getLabel() + "</b>"); table.setWidget(row, 1, value); if (textBox.isEnabled()) { final Image databaseRecordImage = new Image(OKMBundleResources.INSTANCE.databaseRecord()); databaseRecordImage.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { List<String> tables = new ArrayList<String>(); if (suggestBox.getTable()!=null) { tables.add(suggestBox.getTable()); } DatabaseRecord databaseRecord = new DatabaseRecord(hiddenKey, textBox); // when any changes is done is fired search.metadataValueChanged(); DatabaseRecordSelectPopup drsPopup = new DatabaseRecordSelectPopup( suggestBox.getDialogTitle(), tables, suggestBox.getFilterQuery(), databaseRecord, search, suggestBox.getFilterMinLen()); drsPopup.setWidth("300"); drsPopup.setHeight("220"); drsPopup.setStyleName("okm-Popup"); drsPopup.setPopupPosition(databaseRecordImage.getAbsoluteLeft(), databaseRecordImage.getAbsoluteTop()-2); drsPopup.show(); } }); databaseRecordImage.setStyleName("okm-Hyperlink"); hPanel.add(new HTML(" ")); hPanel.add(databaseRecordImage); } hWidgetProperties.put(propertyName, hPanel); if (!suggestBox.getValue().equals("")) { List<String> tables = new ArrayList<String>(); if (suggestBox.getTable()!=null) { tables.add(suggestBox.getTable()); } String formatedQuery = MessageFormat.format(suggestBox.getValueQuery(), suggestBox.getValue()); keyValueService.getKeyValues(tables, formatedQuery, new AsyncCallback<List<GWTKeyValue>>() { @Override public void onSuccess(List<GWTKeyValue> result) { if (!result.isEmpty()) { GWTKeyValue keyValue = result.get(0); textBox.setValue(keyValue.getValue()); value.setHTML(keyValue.getValue()); hiddenKey.setHTML(keyValue.getKey()); } } @Override public void onFailure(Throwable caught) { Main.get().showError("getKeyValues", caught); } }); } if (searchView) { final Image removeImage = new Image(OKMBundleResources.INSTANCE.deleteIcon()); removeImage.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { for (int row=0; row<table.getRowCount(); row++) { if (table.getWidget(row, 2).equals(removeImage)) { table.removeRow(row); break; } } hWidgetProperties.remove(propertyName); hPropertyParams.remove(propertyName); formElementList.remove(gwtFormElement); search.propertyRemoved(); } }); removeImage.addStyleName("okm-Hyperlink"); table.setWidget(row, 2, removeImage); table.getCellFormatter().setVerticalAlignment(row, 2, HasAlignment.ALIGN_TOP); textBox.addKeyUpHandler(Main.get().mainPanel.search.searchBrowser.searchIn.searchControl.keyUpHandler); setRowWordWarp(row, 3, true); } else { setRowWordWarp(row, 2, true); } } else if (gwtFormElement instanceof GWTCheckBox) { CheckBox checkBox = new CheckBox(); checkBox.setEnabled((!readOnly && !((GWTCheckBox) gwtFormElement).isReadonly()) || isSearchView); checkBox.setValue(((GWTCheckBox)gwtFormElement).getValue()); hWidgetProperties.put(propertyName,checkBox); table.setHTML(row, 0, "<b>" + gwtFormElement.getLabel() + "</b>"); if (checkBox.getValue()) { table.setWidget(row, 1, new Image(OKMBundleResources.INSTANCE.yes())); } else { table.setWidget(row, 1, new Image(OKMBundleResources.INSTANCE.no())); } table.getCellFormatter().setVerticalAlignment(row,0,VerticalPanel.ALIGN_TOP); table.getCellFormatter().setWidth(row, 1, "100%"); if (searchView) { final Image removeImage = new Image(OKMBundleResources.INSTANCE.deleteIcon()); removeImage.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { for (int row=0; row<table.getRowCount(); row++) { if (table.getWidget(row, 2).equals(removeImage)) { table.removeRow(row); break; } } hWidgetProperties.remove(propertyName); hPropertyParams.remove(propertyName); formElementList.remove(gwtFormElement); search.propertyRemoved(); } }); removeImage.addStyleName("okm-Hyperlink"); table.setWidget(row, 2, removeImage); table.getCellFormatter().setVerticalAlignment(row, 2, HasAlignment.ALIGN_TOP); if (search != null) { checkBox.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { search.metadataValueChanged(); } }); } setRowWordWarp(row, 3, true); } else { setRowWordWarp(row, 2, true); } } else if (gwtFormElement instanceof GWTSelect) { final GWTSelect gwtSelect = (GWTSelect) gwtFormElement; if (gwtSelect.getType().equals(GWTSelect.TYPE_SIMPLE)) { String selectedLabel = ""; HorizontalPanel hPanel = new HorizontalPanel(); ListBox listBox = new ListBox(); listBox.setEnabled((!readOnly && !gwtSelect.isReadonly()) || isSearchView); hPanel.add(listBox); listBox.setStyleName("okm-Select"); listBox.addItem("", ""); // Always we set and empty value for (Iterator<GWTOption> itData = gwtSelect.getOptions().iterator(); itData.hasNext(); ){ GWTOption option = itData.next(); listBox.addItem(option.getLabel(), option.getValue()); if (option.isSelected()) { listBox.setItemSelected(listBox.getItemCount()-1, true); selectedLabel = option.getLabel(); } } hWidgetProperties.put(propertyName,hPanel); table.setHTML(row, 0, "<b>" + gwtFormElement.getLabel() + "</b>"); table.setHTML(row, 1, selectedLabel); table.getCellFormatter().setWidth(row, 1, "100%"); if (searchView) { final Image removeImage = new Image(OKMBundleResources.INSTANCE.deleteIcon()); removeImage.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { for (int row=0; row<table.getRowCount(); row++) { if (table.getWidget(row, 2).equals(removeImage)) { table.removeRow(row); break; } } hWidgetProperties.remove(propertyName); hPropertyParams.remove(propertyName); formElementList.remove(gwtFormElement); search.propertyRemoved(); } }); removeImage.addStyleName("okm-Hyperlink"); table.setWidget(row, 2, removeImage); table.getCellFormatter().setVerticalAlignment(row, 2, HasAlignment.ALIGN_TOP); if (search != null) { listBox.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { search.metadataValueChanged(); } }); } setRowWordWarp(row, 3, true); } else { setRowWordWarp(row, 2, true); } } else if (gwtSelect.getType().equals(GWTSelect.TYPE_MULTIPLE)) { final HorizontalPanel hPanel = new HorizontalPanel(); ListBox listMulti = new ListBox(); listMulti.setEnabled((!readOnly && !gwtSelect.isReadonly()) || isSearchView); listMulti.setStyleName("okm-Select"); listMulti.addItem("",""); // Always we set and empty value // Table for values FlexTable tableMulti = new FlexTable(); Button addButton = new Button(Main.i18n("button.add"),new ClickHandler() { @Override public void onClick(ClickEvent event) { HorizontalPanel hPanel = (HorizontalPanel) hWidgetProperties.get(propertyName); FlexTable tableMulti = (FlexTable) hPanel.getWidget(0); ListBox listMulti = (ListBox) hPanel.getWidget(2); Button addButton = (Button) hPanel.getWidget(4); if (listMulti.getSelectedIndex() > 0) { final HTML htmlValue = new HTML(listMulti.getValue(listMulti.getSelectedIndex())); int rowTableMulti = tableMulti.getRowCount(); Image removeImage = new Image(OKMBundleResources.INSTANCE.deleteIcon()); removeImage.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Widget sender = (Widget) event.getSource(); HorizontalPanel hPanel = (HorizontalPanel) hWidgetProperties.get(propertyName); FlexTable tableMulti = (FlexTable) hPanel.getWidget(0); ListBox listMulti = (ListBox) hPanel.getWidget(2); Button addButton = (Button) hPanel.getWidget(4); String value = htmlValue.getText(); String optionLabel = ""; for (Iterator<GWTOption> itOptions = gwtSelect.getOptions().iterator(); itOptions.hasNext();) { GWTOption option = itOptions.next(); if (option.getValue().equals(htmlValue.getText())) { optionLabel = option.getLabel(); break; } } listMulti.addItem(optionLabel, value); listMulti.setVisible(true); addButton.setVisible(true); // Looking for row to delete for (int i=0; i<tableMulti.getRowCount(); i++){ if (tableMulti.getWidget(i,1).equals(sender)) { tableMulti.removeRow(i); } } if (search!=null) { search.metadataValueChanged(); } } }); tableMulti.setWidget(rowTableMulti,0,htmlValue); tableMulti.setWidget(rowTableMulti,1,removeImage); tableMulti.setHTML(rowTableMulti,2, listMulti.getItemText(listMulti.getSelectedIndex())); setRowWordWarp(tableMulti,rowTableMulti, 2, true); listMulti.removeItem(listMulti.getSelectedIndex()); htmlValue.setVisible(false); if (listMulti.getItemCount() <= 1) { listMulti.setVisible(false); addButton.setVisible(false); } if (search != null) { search.metadataValueChanged(); } } } }); addButton.setEnabled((!readOnly && !gwtSelect.isReadonly()) || isSearchView); addButton.setStyleName("okm-Button"); hPanel.add(tableMulti); hPanel.add(new HTML(" ")); hPanel.add(listMulti); hPanel.add(new HTML(" ")); hPanel.add(addButton); hPanel.setVisible(true); listMulti.setVisible(false); addButton.setVisible(false); hPanel.setCellVerticalAlignment(tableMulti,VerticalPanel.ALIGN_TOP); hPanel.setCellVerticalAlignment(listMulti,VerticalPanel.ALIGN_TOP); hPanel.setCellVerticalAlignment(addButton,VerticalPanel.ALIGN_TOP); hPanel.setHeight("100%"); table.setHTML(row, 0, "<b>" + gwtFormElement.getLabel() + "</b>"); table.setWidget(row, 1, hPanel); table.getCellFormatter().setVerticalAlignment(row,0,VerticalPanel.ALIGN_TOP); table.getCellFormatter().setVerticalAlignment(row,1,VerticalPanel.ALIGN_TOP); table.getCellFormatter().setWidth(row, 1, "100%"); for (Iterator<GWTOption> itData = gwtSelect.getOptions().iterator(); itData.hasNext(); ) { final GWTOption option = itData.next(); // Looks if there's some selected value if (option.isSelected()) { int rowTableMulti = tableMulti.getRowCount(); HTML htmlValue = new HTML(option.getValue()); Image removeImage = new Image(OKMBundleResources.INSTANCE.deleteIcon()); removeImage.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Widget sender = (Widget) event.getSource(); HorizontalPanel hPanel = (HorizontalPanel) hWidgetProperties.get(propertyName); FlexTable tableMulti = (FlexTable) hPanel.getWidget(0); ListBox listMulti = (ListBox) hPanel.getWidget(2); Button addButton = (Button) hPanel.getWidget(4); listMulti.addItem(option.getLabel(), option.getValue()); listMulti.setVisible(true); addButton.setVisible(true); // Looking for row to delete for (int i=0; i<tableMulti.getRowCount(); i++) { if (tableMulti.getWidget(i,1).equals(sender)) { tableMulti.removeRow(i); } } if (search != null) { search.metadataValueChanged(); } } }); removeImage.setStyleName("okm-KeyMap-ImageHover"); tableMulti.setWidget(rowTableMulti, 0, htmlValue); tableMulti.setWidget(rowTableMulti, 1, removeImage); tableMulti.setHTML(rowTableMulti, 2, option.getLabel()); setRowWordWarp(tableMulti, rowTableMulti, 2, true); htmlValue.setVisible(false); removeImage.setVisible(false); } else { listMulti.addItem(option.getLabel(), option.getValue()); } } // Save panel hWidgetProperties.put(propertyName, hPanel); if (searchView) { final Image removeImage = new Image(OKMBundleResources.INSTANCE.deleteIcon()); removeImage.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { for (int row=0; row<table.getRowCount(); row++) { if (table.getWidget(row, 2).equals(removeImage)) { table.removeRow(row); break; } } hWidgetProperties.remove(propertyName); hPropertyParams.remove(propertyName); formElementList.remove(gwtFormElement); search.propertyRemoved(); } }); removeImage.addStyleName("okm-Hyperlink"); table.setWidget(row, 2, removeImage); table.getCellFormatter().setVerticalAlignment(row, 2, HasAlignment.ALIGN_TOP); //not implemented //textBox.addKeyUpHandler(Main.get().mainPanel.search.searchBrowser.searchIn.searchControl.keyUpHandler); setRowWordWarp(row, 3, true); } else { setRowWordWarp(row, 2, true); } } } else if (gwtFormElement instanceof GWTUpload) { final GWTUpload upload = (GWTUpload) gwtFormElement; HorizontalPanel hPanel = new HorizontalPanel(); FileUpload fileUpload = new FileUpload(); fileUpload.setStyleName("okm-Input"); fileUpload.getElement().setAttribute("size", ""+upload.getWidth()); final Anchor documentLink = new Anchor(); // Setting document link by uuid if (upload.getDocumentUuid()!=null && !upload.getDocumentUuid().equals("")) { repositoryService.getPathByUUID(upload.getDocumentUuid(), new AsyncCallback<String>() { @Override public void onSuccess(String result) { documentService.get(result, new AsyncCallback<GWTDocument>() { @Override public void onSuccess(GWTDocument result) { final String docPath = result.getPath(); documentLink.setText(result.getName()); documentLink.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { String path = docPath.substring(0,docPath.lastIndexOf("/")); CommonUI.openAllFolderPath(path, docPath); } }); } @Override public void onFailure(Throwable caught) { Main.get().showError("get", caught); } }); } @Override public void onFailure(Throwable caught) { Main.get().showError("getPathByUUID", caught); } }); } documentLink.setStyleName("okm-Hyperlink"); hPanel.add(documentLink); hPanel.add(fileUpload); hWidgetProperties.put(propertyName,hPanel); table.setHTML(row, 0, "<b>" + gwtFormElement.getLabel() + "</b>"); table.setWidget(row, 1, new HTML("")); table.getCellFormatter().setVerticalAlignment(row,0,VerticalPanel.ALIGN_TOP); table.getCellFormatter().setWidth(row, 1, "100%"); setRowWordWarp(row, 2, true); // If folderPath is null must initialize value if (upload.getFolderPath()==null || upload.getFolderPath().equals("") && upload.getFolderUuid()!=null && !upload.getFolderUuid().equals("")) { repositoryService.getPathByUUID(upload.getFolderUuid(), new AsyncCallback<String>() { @Override public void onSuccess(String result) { upload.setFolderPath(result); } @Override public void onFailure(Throwable caught) { Main.get().showError("getPathByUUID", caught); } }); } } else if (gwtFormElement instanceof GWTText) { HorizontalPanel hPanel = new HorizontalPanel(); HTML tittle = new HTML(" "+"<b>"+((GWTText)gwtFormElement).getLabel()+"</b>"+" "); tittle.setStyleName("okm-NoWrap"); hPanel.add(Util.hSpace("10")); hPanel.add(tittle); hPanel.setCellWidth(tittle, ((GWTText)gwtFormElement).getWidth()); hWidgetProperties.put(propertyName,hPanel); table.setWidget(row, 0, hPanel); table.getFlexCellFormatter().setColSpan(row, 0, 2); } else if (gwtFormElement instanceof GWTSeparator) { HorizontalPanel hPanel = new HorizontalPanel(); Image horizontalLine = new Image("img/transparent_pixel.gif"); horizontalLine.setStyleName("okm-TopPanel-Line-Border"); horizontalLine.setSize("10", "2px"); Image horizontalLine2 = new Image("img/transparent_pixel.gif"); horizontalLine2.setStyleName("okm-TopPanel-Line-Border"); horizontalLine2.setSize("100%", "2px"); HTML tittle = new HTML(" "+"<b>"+((GWTSeparator)gwtFormElement).getLabel()+"</b>"+" "); tittle.setStyleName("okm-NoWrap"); hPanel.add(horizontalLine); hPanel.add(tittle); hPanel.add(horizontalLine2); hPanel.setCellVerticalAlignment(horizontalLine, HasAlignment.ALIGN_MIDDLE); hPanel.setCellVerticalAlignment(horizontalLine2, HasAlignment.ALIGN_MIDDLE); hPanel.setCellWidth(horizontalLine2, ((GWTSeparator)gwtFormElement).getWidth()); hWidgetProperties.put(propertyName,hPanel); table.setWidget(row, 0, hPanel); table.getFlexCellFormatter().setColSpan(row, 0, 2); } else if (gwtFormElement instanceof GWTDownload) { HorizontalPanel hPanel = new HorizontalPanel(); hWidgetProperties.put(propertyName, hPanel); table.setWidget(row, 0, hPanel); table.getFlexCellFormatter().setColSpan(row, 0, 2); GWTDownload download = (GWTDownload) gwtFormElement; FlexTable downloadTable = new FlexTable(); HTML description = new HTML("<b>" + gwtFormElement.getLabel() + "</b>"); downloadTable.setWidget(0, 0, description); downloadTable.getFlexCellFormatter().setColSpan(0, 0, 2); for (final GWTNode node : download.getNodes()) { int downloadTableRow = downloadTable.getRowCount(); final Anchor anchor = new Anchor("<b>" + node.getLabel() + "</b>", true); if (!node.getUuid().equals("")) { repositoryService.getPathByUUID(node.getUuid(), new AsyncCallback<String>() { @Override public void onSuccess(String result) { final String path = result; folderService.isValid(result, new AsyncCallback<Boolean>() { @Override public void onSuccess(Boolean result) { if (result.booleanValue()) { Util.downloadFile(path, "export"); } else { anchor.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { if (!node.getUuid().equals("")) { Util.downloadFileByUUID(node.getUuid(), ""); } else if (!node.getPath().equals("")) { Util.downloadFile(node.getPath(), ""); } } }); } } @Override public void onFailure(Throwable caught) { Main.get().showError("getPathByUUID", caught); } }); } @Override public void onFailure(Throwable caught) { Main.get().showError("getPathByUUID", caught); } }); } else if (!node.getPath().equals("")) { folderService.isValid(node.getPath(), new AsyncCallback<Boolean>() { @Override public void onSuccess(Boolean result) { if (result.booleanValue()) { Util.downloadFile(node.getPath(), "export"); } else { anchor.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { if (!node.getUuid().equals("")) { Util.downloadFileByUUID(node.getUuid(), ""); } else if (!node.getPath().equals("")) { Util.downloadFile(node.getPath(), ""); } } }); } } @Override public void onFailure(Throwable caught) { Main.get().showError("getPathByUUID", caught); } }); } anchor.setStyleName("okm-Hyperlink"); downloadTable.setWidget(downloadTableRow, 0, new HTML("   ")); downloadTable.setWidget(downloadTableRow, 1, anchor); } hPanel.add(downloadTable); } else if (gwtFormElement instanceof GWTPrint) { HorizontalPanel hPanel = new HorizontalPanel(); hWidgetProperties.put(propertyName, hPanel); table.setWidget(row, 0, hPanel); table.getFlexCellFormatter().setColSpan(row, 0, 2); GWTPrint print = (GWTPrint) gwtFormElement; FlexTable printTable = new FlexTable(); HTML description = new HTML("<b>" + gwtFormElement.getLabel() + "</b>"); printTable.setWidget(0, 0, description); printTable.getFlexCellFormatter().setColSpan(0, 0, 2); for (final GWTNode node : print.getNodes()) { int downloadTableRow = printTable.getRowCount(); final Button downloadButton = new Button(Main.i18n("button.print")); if (!node.getUuid().equals("")) { downloadButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Util.print(node.getUuid()); } }); } else if (!node.getPath().equals("")) { repositoryService.getUUIDByPath(node.getPath(), new AsyncCallback<String>() { @Override public void onSuccess(String result) { final String uuid = result; downloadButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Util.print(uuid); } }); } @Override public void onFailure(Throwable caught) { Main.get().showError("getUUIDByPath", caught); } }); } downloadButton.setStyleName("okm-Button"); printTable.setWidget(downloadTableRow, 0, new HTML("   " + node.getLabel() + "  ")); printTable.setWidget(downloadTableRow, 1, downloadButton); } hPanel.add(printTable); } } /** * Edit values */ public void edit() { // Before edit must be always drawed if (!drawed) { draw(readOnly); } int rows = 0; validationProcessor = new DefaultValidationProcessor(); FocusAction focusAction = new FocusAction(); for (Iterator<GWTFormElement> it = formElementList.iterator(); it.hasNext();) { GWTFormElement formField = it.next(); if (formField instanceof GWTTextArea) { HorizontalPanel hPanel = (HorizontalPanel) hWidgetProperties.get(formField.getName()); table.setWidget(rows, 1, hPanel); for (GWTValidator validator : ((GWTTextArea) formField).getValidators()) { TextArea textArea = (TextArea) hPanel.getWidget(0); ValidatorBuilder.addValidator(validationProcessor, focusAction, hPanel, "textarea_"+rows, validator, textArea); } } else if (formField instanceof GWTInput) { HorizontalPanel hPanel = (HorizontalPanel) hWidgetProperties.get(formField.getName()); table.setWidget(rows, 1, hPanel); for (GWTValidator validator : ((GWTInput) formField).getValidators()) { TextBox textBox = (TextBox) hPanel.getWidget(0); ValidatorBuilder.addValidator(validationProcessor, focusAction, hPanel, "input_"+rows, validator, textBox); } } else if (formField instanceof GWTSuggestBox) { HorizontalPanel hPanel = (HorizontalPanel) hWidgetProperties.get(formField.getName()); table.setWidget(rows, 1, hPanel); for (GWTValidator validator : ((GWTSuggestBox) formField).getValidators()) { TextBox textBox = (TextBox) hPanel.getWidget(0); ValidatorBuilder.addValidator(validationProcessor, focusAction, hPanel, "suggestbox_"+rows, validator, textBox); } } else if (formField instanceof GWTCheckBox) { CheckBox checkBox = (CheckBox) hWidgetProperties.get(formField.getName()); table.setWidget(rows, 1, checkBox); } else if (formField instanceof GWTSelect) { GWTSelect gwtSelect = (GWTSelect) formField; if (gwtSelect.getType().equals(GWTSelect.TYPE_SIMPLE)) { HorizontalPanel hPanel = (HorizontalPanel) hWidgetProperties.get(formField.getName()); ListBox listBox = (ListBox) hPanel.getWidget(0); table.setWidget(rows, 1, hPanel); for (GWTValidator validator : ((GWTSelect) formField).getValidators()) { ValidatorBuilder.addValidator(validationProcessor, focusAction, hPanel, "select_"+rows, validator, listBox); } } else if (gwtSelect.getType().equals(GWTSelect.TYPE_MULTIPLE)) { HorizontalPanel hPanel = (HorizontalPanel) hWidgetProperties.get(formField.getName()); FlexTable tableMulti = (FlexTable) hPanel.getWidget(0); ListBox listMulti = (ListBox) hPanel.getWidget(2); Button addButton = (Button) hPanel.getWidget(4); // Only it there's some element to assign must set it visible. if (listMulti.getItemCount()>1) { listMulti.setVisible(true); addButton.setVisible(true); } // Enables deleting option for (int i=0; i<tableMulti.getRowCount(); i++) { ((Image) tableMulti.getWidget(i,1)).setVisible(true); } table.setWidget(rows, 1, hPanel); for (GWTValidator validator : ((GWTSelect) formField).getValidators()) { ValidatorBuilder.addValidator(validationProcessor, focusAction, hPanel, "select_"+rows, validator, tableMulti); } } } else if (formField instanceof GWTUpload) { HorizontalPanel hPanel = (HorizontalPanel) hWidgetProperties.get(formField.getName()); table.setWidget(rows, 1, hPanel); for (GWTValidator validator : ((GWTUpload) formField).getValidators()) { FileUpload fileUpload = (FileUpload) hPanel.getWidget(1); ValidatorBuilder.addValidator(validationProcessor, focusAction, hPanel, "fileupload_"+rows, validator, fileUpload); } } else if (formField instanceof GWTText) { // Nothing to be done here } else if (formField instanceof GWTSeparator) { // Nothing to be done here } else if (formField instanceof GWTDownload) { // Nothing to be done here } else if (formField instanceof GWTPrint) { // Nothing to be done here } rows++; } // Always ad submit form at ends if (submitForm != null) { HTML space = new HTML(" "); submitButtonPanel.add(submitForm); submitButtonPanel.add(space); submitButtonPanel.setCellWidth(space, "5px"); int row = table.getRowCount(); table.setWidget(row, 0, submitButtonPanel); table.getFlexCellFormatter().setColSpan(row, 0, 2); table.getFlexCellFormatter().setHorizontalAlignment(row, 0, HasAlignment.ALIGN_CENTER); } } /** * setFormElements * * @param formElementList */ public void setFormElements(List<GWTFormElement> formElementList) { drawed = false; hWidgetProperties.clear(); hPropertyParams.clear(); this.formElementList = formElementList; } /** * initButtonControlList */ private void initButtonControlList() { buttonControlList = new ArrayList<Button>(); // Ensure button list is empty if (submitForm!=null) { buttonControlList.add(submitForm); } } /** * disableAllButtonList */ private void disableAllButtonList() { for (Button button : buttonControlList) { button.setEnabled(false); } } /** * addPropertyParam */ public void addPropertyParam(GWTPropertyParams propertyParam) { updateFormElementsValuesWithNewer(); // save values drawed = false; if (!hWidgetProperties.containsKey(propertyParam.getFormElement().getName())) { hPropertyParams.put(propertyParam.getFormElement().getName(), propertyParam); formElementList.add(propertyParam.getFormElement()); GWTFormElement formElement = propertyParam.getFormElement(); if (propertyParam.getValue() != null) { if (formElement instanceof GWTInput) { GWTInput input = (GWTInput) formElement; if (((GWTInput) formElement).getType().equals(GWTInput.TYPE_DATE)) { if (!propertyParam.getValue().equals("")) { String date[] = propertyParam.getValue().split(","); input.setDate(ISO8601.parse(date[0])); if (date.length == 2) { input.setDateTo(ISO8601.parse(date[1])); } } } else { input.setValue(propertyParam.getValue()); } } else if (formElement instanceof GWTTextArea) { ((GWTTextArea) formElement).setValue(propertyParam.getValue()); } else if (formElement instanceof GWTSuggestBox) { ((GWTSuggestBox) formElement).setValue(propertyParam.getValue()); } else if (formElement instanceof GWTCheckBox) { ((GWTCheckBox) formElement).setValue(Boolean.parseBoolean(propertyParam.getValue())); } else if (formElement instanceof GWTSelect) { String value[] = propertyParam.getValue().split(","); GWTSelect select = (GWTSelect) formElement; for (GWTOption option : select.getOptions()) { for (int i=0; i<value.length; i++) { if (option.getValue().equals(value[i])) { option.setSelected(true); } else { option.setSelected(false); } } } } else if (formElement instanceof GWTUpload) { // Not aplicable to property groups } else if (formElement instanceof GWTText) { ((GWTText) formElement).setLabel(propertyParam.getValue()); } else if (formElement instanceof GWTSeparator) { // Nothing to be done here } else if (formElement instanceof GWTDownload) { // Nothing to be done here } else if (formElement instanceof GWTPrint) { // Nothing to be done here } } } } /** * draw */ public void draw() { draw(false); } /** * draw */ public void draw(boolean readOnly) { this.readOnly = readOnly; table.removeAllRows(); submitButtonPanel.clear(); initButtonControlList(); int rows = 0; for (GWTFormElement formElement : formElementList) { drawFormElement(rows, formElement, readOnly, isSearchView); rows ++; } drawed = true; } /** * updateFormElements */ public List<GWTFormElement> getFormElements() { return formElementList; } /** * getPropertyParams */ public Map<String, GWTPropertyParams> getPropertyParams() { for (GWTFormElement formElement : updateFormElementsValuesWithNewer()) { String value = ""; if (formElement instanceof GWTInput) { if (((GWTInput) formElement).getType().equals(GWTInput.TYPE_DATE)) { GWTInput input = (GWTInput) formElement; value = ISO8601.format(input.getDate()); if (input.getDateTo()!=null) { value += ","+ ISO8601.format(input.getDateTo()); } else { value += "," + value; } } else { value = ((GWTInput) formElement).getValue(); } } else if (formElement instanceof GWTTextArea) { value = ((GWTTextArea) formElement).getValue(); } else if (formElement instanceof GWTSuggestBox) { value = ((GWTSuggestBox) formElement).getValue(); } else if (formElement instanceof GWTCheckBox) { value = String.valueOf(((GWTCheckBox) formElement).getValue()); } else if (formElement instanceof GWTSelect) { GWTSelect select = (GWTSelect) formElement; for (GWTOption option : select.getOptions()) { if (option.isSelected()) { if (!value.equals("")) { value += ","; } value += option.getValue(); } } } else if (formElement instanceof GWTUpload) { // Not aplicable to property groups } else if (formElement instanceof GWTText) { // Nothing to be done here } else if (formElement instanceof GWTSeparator) { // Nothing to be done here } else if (formElement instanceof GWTDownload) { // Nothing to be done here } else if (formElement instanceof GWTPrint) { // Nothing to be done here } hPropertyParams.get(formElement.getName()).setValue(value); } return hPropertyParams; } /** * updateFormElementsWithNewer */ public List<GWTFormElement> updateFormElementsValuesWithNewer() { int rows = 0; for (GWTFormElement formElement : formElementList) { if (formElement instanceof GWTTextArea) { HorizontalPanel hPanel = (HorizontalPanel) hWidgetProperties.get(formElement.getName()); TextArea textArea = (TextArea) hPanel.getWidget(0); ((GWTTextArea) formElement).setValue(textArea.getText()); } else if (formElement instanceof GWTInput) { HorizontalPanel hPanel = (HorizontalPanel) hWidgetProperties.get(formElement.getName()); TextBox textBox = (TextBox) hPanel.getWidget(0); ((GWTInput) formElement).setValue(textBox.getText()); // note that date is added by click handler in drawform method if (((GWTInput) formElement).getType().equals(GWTInput.TYPE_FOLDER)) { // Must be updated folder in GWTInput because must be drawn GWTFolder folder = new GWTFolder(); folder.setPath(textBox.getText()); ((GWTInput) formElement).setFolder(folder); } } else if (formElement instanceof GWTSuggestBox) { HorizontalPanel hPanel = (HorizontalPanel) hWidgetProperties.get(formElement.getName()); HTML hiddenKey = (HTML) hPanel.getWidget(1); ((GWTSuggestBox) formElement).setValue(hiddenKey.getHTML()); } else if (formElement instanceof GWTCheckBox) { CheckBox checkbox = (CheckBox) hWidgetProperties.get(formElement.getName()); ((GWTCheckBox) formElement).setValue(checkbox.getValue()); } else if (formElement instanceof GWTSelect) { GWTSelect gwtSelect = (GWTSelect) formElement; if (gwtSelect.getType().equals(GWTSelect.TYPE_SIMPLE)) { HorizontalPanel hPanel = (HorizontalPanel) hWidgetProperties.get(formElement.getName()); ListBox listBox = (ListBox) hPanel.getWidget(0); String selectedValue = ""; if (listBox.getSelectedIndex() > 0) { selectedValue = listBox.getValue(listBox.getSelectedIndex()); } for (Iterator<GWTOption> itOptions = gwtSelect.getOptions().iterator(); itOptions.hasNext();) { GWTOption option = itOptions.next(); if (option.getValue().equals(selectedValue)) { option.setSelected(true); } else { option.setSelected(false); } } } else if (gwtSelect.getType().equals(GWTSelect.TYPE_MULTIPLE)) { HorizontalPanel hPanel = (HorizontalPanel) hWidgetProperties.get(formElement.getName()); FlexTable tableMulti = (FlexTable) hPanel.getWidget(0); // Disables all options for (Iterator<GWTOption> itOptions = gwtSelect.getOptions().iterator(); itOptions.hasNext();) { itOptions.next().setSelected(false); } // Enables options if (tableMulti.getRowCount()>0) { for (int i=0; i<tableMulti.getRowCount(); i++) { String selectedValue = tableMulti.getText(i,0); for (Iterator<GWTOption> itOptions = gwtSelect.getOptions().iterator(); itOptions.hasNext();) { GWTOption option = itOptions.next(); if (option.getValue().equals(selectedValue)) { option.setSelected(true); } } } } } } else if (formElement instanceof GWTUpload) { // Nothing to be done here, upload files are updated in file upload widget } else if (formElement instanceof GWTText) { // Nothing to be done here } else if (formElement instanceof GWTSeparator) { // Nothing to be done here } else if (formElement instanceof GWTDownload) { // Nothing to be done here } else if (formElement instanceof GWTPrint) { // Nothing to be done here } rows ++; } return formElementList; } /** * hasFileUploadFormElement */ public boolean hasFileUploadFormElement() { boolean found = false; int rows = 0; for (GWTFormElement formElement : formElementList) { if (formElement instanceof GWTUpload) { HorizontalPanel hPanel = (HorizontalPanel) hWidgetProperties.get(formElement.getName()); FileUpload fileUpload = (FileUpload) hPanel.getWidget(1); if (!fileUpload.getFilename().equals("")) { found = true; } break; } rows++; } return found; } /** * getFilesToUpload */ public Collection<FileToUpload> getFilesToUpload(String transition) { List<FileToUpload> filesToUpload= new ArrayList<FileToUpload>(); int rows = 0; for (GWTFormElement formElement : formElementList) { if (formElement instanceof GWTUpload) { HorizontalPanel hPanel = (HorizontalPanel) hWidgetProperties.get(formElement.getName()); table.setWidget(rows, 1, hPanel); FileUpload fileUpload = (FileUpload) hPanel.getWidget(1); if (!fileUpload.getFilename().equals("")) { hPanel.remove(fileUpload); hPanel.add(new HTML(fileUpload.getFilename())); // replace uploadfile widget to text file FileToUpload fileToUpload = new FileToUpload(); GWTUpload upload = (GWTUpload) formElement; if (upload.getType().equals(GWTUpload.TYPE_CREATE)) { fileToUpload.setAction(UIFileUploadConstants.ACTION_INSERT); } else if (upload.getType().equals(GWTUpload.TYPE_UPDATE)) { fileToUpload.setAction(UIFileUploadConstants.ACTION_UPDATE); } fileToUpload.setName(formElement.getName()); fileToUpload.setFileUpload(fileUpload); fileToUpload.setSize(upload.getWidth()); fileToUpload.setFireEvent(false); fileToUpload.setPath(upload.getFolderPath()); fileToUpload.setDesiredDocumentName(upload.getDocumentName()); fileToUpload.setWorkflow(workflow); fileToUpload.setLastToBeUploaded(false); fileToUpload.setEnableAddButton(false); fileToUpload.setEnableImport(false); fileToUpload.setWorkflowTaskId(taskInstance.getId()); fileToUpload.setWorkflowTransition(transition); filesToUpload.add(fileToUpload); } } rows++; } // Indicates is the last file to be upload in the cycle if (filesToUpload.size()>0) { filesToUpload.get(filesToUpload.size()-1).setLastToBeUploaded(true); } return filesToUpload; } /** * updateFilesToUpload */ public void updateFilesToUpload(Collection<FileToUpload> filesToUpload) { for (FileToUpload fileToUpload : filesToUpload) { for (GWTFormElement formElement : formElementList) { if (formElement.getName().equals(fileToUpload.getName())) { GWTUpload upload = (GWTUpload) formElement; upload.setDocumentUuid(fileToUpload.getDocumentUUID()); } } } } /** * loadDataFromPropertyGroupVariables */ public void loadDataFromPropertyGroupVariables(Map<String, GWTFormElement> map) { // Only iterate if really there's some variable to be mapped if (!map.isEmpty()) { for (GWTFormElement formElement : formElementList) { if (map.containsKey(formElement.getName())) { if (formElement instanceof GWTTextArea) { GWTTextArea textArea = (GWTTextArea) formElement; textArea.setValue(getStringValueFromVariable(map.get(formElement.getName()))); } else if (formElement instanceof GWTInput) { GWTInput input = (GWTInput) formElement; input.setValue(getStringValueFromVariable(map.get(formElement.getName()))); } else if (formElement instanceof GWTSuggestBox) { GWTSuggestBox suggestBox = (GWTSuggestBox) formElement; suggestBox.setValue(getStringValueFromVariable(map.get(formElement.getName()))); } else if (formElement instanceof GWTCheckBox) { GWTCheckBox checkBox = (GWTCheckBox) formElement; checkBox.setValue(getBooleanValueFromVariable(map.get(formElement.getName()))); } else if (formElement instanceof GWTSelect) { GWTSelect select = (GWTSelect) formElement; select.setOptions(getOptionsValueFromVariable(formElement.getName(), select.getOptions())) ; } else if (formElement instanceof GWTUpload) { // No aplicable to property groups } else if (formElement instanceof GWTText) { GWTText text = (GWTText) formElement; text.setLabel(getStringValueFromVariable(map.get(formElement.getName()))); } else if (formElement instanceof GWTSeparator) { // Nothing to be done here } else if (formElement instanceof GWTDownload) { // Nothing to be done here } else if (formElement instanceof GWTPrint) { // Nothing to be done here } } } } } /** * */ public void loadDataFromWorkflowVariables(Map<String, Object> map) { // Only iterate if really there's some variable to be mapped if (!map.isEmpty()) { for (GWTFormElement formElement : formElementList) { if (formElement instanceof GWTTextArea) { GWTTextArea textArea = (GWTTextArea) formElement; if (!textArea.getData().equals("") && map.keySet().contains(textArea.getData())) { textArea.setValue(getStringValueFromVariable(map.get(textArea.getData()))); } } else if (formElement instanceof GWTInput) { GWTInput input = (GWTInput) formElement; if (!input.getData().equals("") && map.keySet().contains(input.getData())) { Object var = map.get(input.getData()); input.setValue(getStringValueFromVariable(var)); if (input.getType().equals(GWTInput.TYPE_DATE)) { if (!"".equals(input.getValue())) { Date date = ISO8601.parse(input.getValue()); if (date != null) { input.setDate(date); } else { Log.warn("Input '" + input.getName() + "' value should be in ISO8601 format: " + input.getValue()); } } } } } else if (formElement instanceof GWTSuggestBox) { GWTSuggestBox suggestBox = (GWTSuggestBox) formElement; if (!suggestBox.getData().equals("") && map.keySet().contains(suggestBox.getData())) { suggestBox.setValue(getStringValueFromVariable(map.get(suggestBox.getData()))); } } else if (formElement instanceof GWTCheckBox) { GWTCheckBox checkBox = (GWTCheckBox) formElement; if (!checkBox.getData().equals("") && map.keySet().contains(checkBox.getData())) { checkBox.setValue(getBooleanValueFromVariable(map.get(checkBox.getData()))); } } else if (formElement instanceof GWTSelect) { GWTSelect select = (GWTSelect) formElement; if (!select.getData().equals("") && map.keySet().contains(select.getData())) { select.setOptions(getOptionsValueFromVariable(map.get(select.getData()), select.getOptions())) ; } } else if (formElement instanceof GWTUpload) { GWTUpload upload = (GWTUpload) formElement; if (!upload.getData().equals("") && map.keySet().contains(upload.getData())) { GWTUpload uploadData = (GWTUpload) map.get(upload.getData()); if (!uploadData.getDocumentName().equals("")) { upload.setDocumentName(uploadData.getDocumentName()); } if (!uploadData.getDocumentUuid().equals("")) { upload.setDocumentUuid(uploadData.getDocumentUuid()); } if (!uploadData.getFolderPath().equals("")) { upload.setFolderPath(uploadData.getFolderPath()); } if (!uploadData.getFolderUuid().equals("")) { upload.setFolderUuid(uploadData.getFolderUuid()); } if (uploadData.getValidators().size()>0) { upload.setValidators(uploadData.getValidators()); } } } else if (formElement instanceof GWTText) { GWTText text = (GWTText) formElement; if (!text.getData().equals("") && map.keySet().contains(text.getData())) { text.setLabel(getStringValueFromVariable(map.get(text.getData()))); } } else if (formElement instanceof GWTSeparator) { // Nothing to be done here } else if (formElement instanceof GWTDownload) { GWTDownload download = (GWTDownload) formElement; if (!download.getData().equals("") && map.keySet().contains(download.getData())) { download.setNodes(getNodesValueFromVariable(map.get(download.getData()))); } } else if (formElement instanceof GWTPrint) { GWTPrint print = (GWTPrint) formElement; if (!print.getData().equals("") && map.keySet().contains(print.getData())) { print.setNodes(getNodesValueFromVariable(map.get(print.getData()))); } } } } } /** * getNodesValueFromVariable */ private List<GWTNode> getNodesValueFromVariable(Object obj) { if (obj instanceof GWTInput) { return new ArrayList<GWTNode>(); } else if (obj instanceof GWTTextArea) { return new ArrayList<GWTNode>(); } else if (obj instanceof GWTSuggestBox) { return new ArrayList<GWTNode>(); } else if (obj instanceof GWTCheckBox) { return new ArrayList<GWTNode>(); } else if (obj instanceof GWTSelect) { return new ArrayList<GWTNode>(); } else if (obj instanceof GWTUpload) { return new ArrayList<GWTNode>(); } else if (obj instanceof GWTText) { return new ArrayList<GWTNode>(); } else if (obj instanceof GWTSeparator) { return new ArrayList<GWTNode>(); } else if (obj instanceof GWTDownload) { GWTDownload download = (GWTDownload) obj; return download.getNodes(); } else if (obj instanceof GWTPrint) { GWTPrint print = (GWTPrint) obj; return print.getNodes(); } else { return new ArrayList<GWTNode>(); } } /** * getStringValueFromVariable */ private String getStringValueFromVariable(Object obj) { if (obj instanceof GWTInput) { return ((GWTInput)obj).getValue(); } else if (obj instanceof GWTTextArea) { return ((GWTTextArea)obj).getValue(); } else if (obj instanceof GWTSuggestBox) { return ((GWTSuggestBox)obj).getValue(); } else if (obj instanceof GWTCheckBox) { return String.valueOf(((GWTCheckBox)obj).getValue()); } else if (obj instanceof GWTSelect) { String values = ""; GWTSelect select = (GWTSelect) obj; for (GWTOption option : select.getOptions()) { if (option.isSelected()) { if (values.length() > 0) { values += "," + option.getValue(); } else { values += option.getValue(); } } } return values; } else if (obj instanceof GWTUpload) { return null; } else if (obj instanceof GWTText) { return ((GWTText)obj).getLabel(); } else if (obj instanceof GWTSeparator) { return null; } else if (obj instanceof GWTDownload) { return null; } else if (obj instanceof GWTPrint) { return null; } else { return null; } } /** * getBooleanValueFromVariable */ private boolean getBooleanValueFromVariable(Object obj) { if (obj instanceof GWTInput) { return ((GWTInput)obj).getValue().toLowerCase().equals(BOOLEAN_TRUE); } else if (obj instanceof GWTTextArea) { return ((GWTTextArea)obj).getValue().toLowerCase().equals(BOOLEAN_TRUE); } else if (obj instanceof GWTSuggestBox) { return ((GWTSuggestBox)obj).getValue().toLowerCase().equals(BOOLEAN_TRUE); } else if (obj instanceof GWTCheckBox) { return ((GWTCheckBox)obj).getValue(); } else if (obj instanceof GWTSelect) { String values = ""; GWTSelect select = (GWTSelect) obj; for (GWTOption option : select.getOptions()) { if (option.isSelected()) { if (values.length() > 0) { values += "," + option.getValue(); } else { values += option.getValue(); } } } return values.toLowerCase().contains(BOOLEAN_TRUE); // test if on chain contains "true" } else if (obj instanceof GWTUpload) { return false; } else if (obj instanceof GWTText) { return false; } else if (obj instanceof GWTSeparator) { return false; } else if (obj instanceof GWTDownload) { return false; } else if (obj instanceof GWTPrint) { return false; } else { return false; } } /** * getOptionsValueFromVariable */ private Collection<GWTOption> getOptionsValueFromVariable(Object obj, Collection<GWTOption> options) { for (GWTOption option : options) { if (obj instanceof GWTInput) { if (option.getValue().equals(((GWTInput)obj).getValue())) { option.setSelected(true); return options; } } else if (obj instanceof GWTTextArea) { if (option.getValue().equals(((GWTTextArea)obj).getValue())) { option.setSelected(true); return options; } } else if (obj instanceof GWTSuggestBox) { if (option.getValue().equals(((GWTSuggestBox)obj).getValue())) { option.setSelected(true); return options; } } else if (obj instanceof GWTCheckBox) { if (option.getValue().equals(String.valueOf(((GWTCheckBox)obj).getValue()))) { option.setSelected(true); return options; } } else if (obj instanceof GWTSelect) { // Only doing mapping between values, if not found then is false boolean found = false; GWTSelect select = (GWTSelect) obj; for (GWTOption optionVar : select.getOptions()) { if (option.getValue().equals(optionVar.getValue())) { found = optionVar.isSelected(); break; } } option.setSelected(found); // always setting values, if not found } else if (obj instanceof GWTUpload) { return options; } else if (obj instanceof GWTText) { return options; } else if (obj instanceof GWTSeparator) { return options; } else if (obj instanceof GWTDownload) { return null; } else if (obj instanceof GWTPrint) { return null; } else { return options; } } return options; } /** * Gets a string map values */ public Map<String, String> getStringMapValues() { Map<String, String> values = new HashMap<String, String>(); for (GWTFormElement formElement : formElementList) { if (formElement instanceof GWTTextArea) { values.put(formElement.getName(), getStringValueFromVariable(formElement)); } else if (formElement instanceof GWTInput) { values.put(formElement.getName(), getStringValueFromVariable(formElement)); } else if (formElement instanceof GWTSuggestBox) { values.put(formElement.getName(), getStringValueFromVariable(formElement)); } else if (formElement instanceof GWTCheckBox) { values.put(formElement.getName(), getStringValueFromVariable(formElement)); } else if (formElement instanceof GWTSelect) { values.put(formElement.getName(), getStringValueFromVariable(formElement)); } else if (formElement instanceof GWTUpload) { // No aplicable to property groups } else if (formElement instanceof GWTText) { // Nothing to be done here } else if (formElement instanceof GWTSeparator) { // Nothing to be done here } else if (formElement instanceof GWTDownload) { // Nothing to be done here } else if (formElement instanceof GWTPrint) { // Nothing to be done here } } return values; } /** * */ public void setSubmitFormButton(Button submitForm) { this.submitForm = submitForm; } /** * */ public void setTaskInstance(GWTTaskInstance taskInstance) { this.taskInstance = taskInstance; } /** * */ public ValidationProcessor getValidationProcessor() { return validationProcessor; } /** * DatabaseRecord */ class DatabaseRecord implements HasDatabaseRecord { private HTML keyWidget; private TextBox valueWidget; /** * DatabaseRecord */ public DatabaseRecord(HTML keyWidget, TextBox valueWidget) { this.keyWidget = keyWidget; this.valueWidget = valueWidget; } @Override public void setKeyValue(GWTKeyValue keyValue) { keyWidget.setHTML(keyValue.getKey()); valueWidget.setText(keyValue.getValue()); } } /** * ButtonValidation */ public class ValidationButton { private GWTButton gWTButton; private FormManager formManager; /** * ValidationButton */ public ValidationButton(GWTButton gWTButton, FormManager formManager) { this.gWTButton = gWTButton; this.formManager = formManager; } /** * */ public HasWorkflow getWorkflow() { return formManager.workflow; } /** * */ public GWTButton getButton() { return gWTButton; } /** * */ public ValidationProcessor getValidationProcessor() { return formManager.validationProcessor; } /** * */ public GWTTaskInstance getTaskInstance() { return taskInstance; } /** * */ public void disableAllButtonList() { formManager.disableAllButtonList(); } } }