/** * 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.propertygroup; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HTMLTable.CellFormatter; import com.google.gwt.user.client.ui.HTMLTable.RowFormatter; import com.google.gwt.user.client.ui.HasAlignment; 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.GWTPropertyGroup; import com.openkm.frontend.client.bean.form.GWTFormElement; import com.openkm.frontend.client.extension.event.HasPropertyGroupEvent; import com.openkm.frontend.client.extension.event.handler.PropertyGroupHandlerExtension; import com.openkm.frontend.client.extension.event.hashandler.HasPropertyGroupHandlerExtension; import com.openkm.frontend.client.service.OKMPropertyGroupService; import com.openkm.frontend.client.service.OKMPropertyGroupServiceAsync; import com.openkm.frontend.client.widget.form.FormManager; import eu.maydu.gwt.validation.client.ValidationProcessor; /** * PropertyGroupWidget * * @author jllort * */ public class PropertyGroupWidget extends Composite implements HasPropertyGroupEvent, HasPropertyGroupHandlerExtension { private final OKMPropertyGroupServiceAsync propertyGroupService = (OKMPropertyGroupServiceAsync) GWT.create(OKMPropertyGroupService.class); private String path; private CellFormatter cellFormatter; private PropertyGroupWidgetToFire propertyGroupWidgetToFire; private List<PropertyGroupHandlerExtension> propertyGroupHandlerExtensionList; private Map<String, GWTFormElement> propertyGroupVariablesMap = new HashMap<String, GWTFormElement>(); private GWTPropertyGroup propertyGroup; private FormManager manager; /** * PropertyGroup * * @param path The document path * @param propertyGroup The group * @param widget Widget at first row * @param PropertyGroupWidgetToFire widget with methods to be fired * @param valuesMap map of initial values */ public PropertyGroupWidget(String path, GWTPropertyGroup propertyGroup, Widget widget, PropertyGroupWidgetToFire propertyGroupWidgetToFire, Map<String, GWTFormElement> valuesMap) { this.propertyGroupVariablesMap = valuesMap; start(path, propertyGroup, widget, propertyGroupWidgetToFire); } /** * PropertyGroup * * @param path The document path * @param propertyGroup The group * @param widget Widget at first row * @param PropertyGroupWidgetToFire widget with methods to be fired */ public PropertyGroupWidget(String path, GWTPropertyGroup propertyGroup, Widget widget, PropertyGroupWidgetToFire propertyGroupWidgetToFire) { start(path, propertyGroup, widget, propertyGroupWidgetToFire); } /** * start * * @param path * @param propertyGroup * @param widget * @param propertyGroupWidgetToFire */ private void start(String path, GWTPropertyGroup propertyGroup, Widget widget, PropertyGroupWidgetToFire propertyGroupWidgetToFire) { propertyGroupHandlerExtensionList = new ArrayList<PropertyGroupHandlerExtension>(); manager = new FormManager(); this.path = path; this.propertyGroup = propertyGroup; this.propertyGroupWidgetToFire = propertyGroupWidgetToFire; VerticalPanel vPanel = new VerticalPanel(); vPanel.setWidth("100%"); FlexTable table = manager.getTable(); table.setWidth("100%"); FlexTable widgetTable = new FlexTable(); widgetTable.setCellPadding(0); widgetTable.setCellSpacing(0); widgetTable.setWidth("100%"); widgetTable.setWidget(0, 0, widget); widgetTable.getFlexCellFormatter().setColSpan(0,0,2); // Widget format widgetTable.getCellFormatter().setHorizontalAlignment(0,0,HasAlignment.ALIGN_CENTER); widgetTable.getCellFormatter().setVerticalAlignment(0,0,HasAlignment.ALIGN_MIDDLE); RowFormatter rowFormatter = widgetTable.getRowFormatter(); rowFormatter.setStyleName(0, "okm-Security-Title"); cellFormatter = widgetTable.getCellFormatter(); // Gets the cell formatter // Format borders and margins cellFormatter.addStyleName(0,0,"okm-Security-Title-RightBorder"); vPanel.add(widgetTable); vPanel.add(table); initWidget(vPanel); } /** * Gets asyncronous to group properties */ final AsyncCallback<List<GWTFormElement>> callbackGetProperties = new AsyncCallback<List<GWTFormElement>>() { public void onSuccess(List<GWTFormElement> result){ manager.setFormElements(result); if (!propertyGroupVariablesMap.isEmpty()) { manager.loadDataFromPropertyGroupVariables(propertyGroupVariablesMap); } manager.draw(propertyGroup.isReadonly()); if (propertyGroupWidgetToFire!=null) { propertyGroupWidgetToFire.finishedGetProperties(); } fireEvent(HasPropertyGroupEvent.PROPERTYGROUP_GET_PROPERTIES); } public void onFailure(Throwable caught) { Main.get().showError("getMetaData", caught); if (propertyGroupWidgetToFire!=null) { propertyGroupWidgetToFire.finishedGetProperties(); } } }; /** * Gets asyncronous to set properties */ final AsyncCallback<Object> callbackSetProperties = new AsyncCallback<Object>() { public void onSuccess(Object result){ if (propertyGroupWidgetToFire!=null) { propertyGroupWidgetToFire.finishedSetProperties(); } fireEvent(HasPropertyGroupEvent.PROPERTYGROUP_CHANGED); } public void onFailure(Throwable caught) { if (propertyGroupWidgetToFire!=null) { propertyGroupWidgetToFire.finishedSetProperties(); } Main.get().showError("setProperties", caught); } }; /** * Gets asyncronous to remove document group properties */ final AsyncCallback<Object> callbackRemoveGroup = new AsyncCallback<Object>() { public void onSuccess(Object result){ fireEvent(HasPropertyGroupEvent.PROPERTYGROUP_REMOVED); } public void onFailure(Throwable caught) { Main.get().showError("callbackRemoveGroup", caught); } }; /** * edit */ public void edit() { manager.edit(); fireEvent(HasPropertyGroupEvent.PROPERTYGROUP_EDIT); } /** * updateFormElementsValuesWithNewer * * @return */ public List<GWTFormElement> updateFormElementsValuesWithNewer() { return manager.updateFormElementsValuesWithNewer(); } /** * Sets the properties values */ public void setProperties() { manager.updateFormElementsValuesWithNewer(); manager.draw(propertyGroup.isReadonly()); propertyGroupService.setProperties(path, propertyGroup.getName(), manager.updateFormElementsValuesWithNewer(), callbackSetProperties); } /** * Cancel edition and restores values */ public void cancelEdit() { manager.draw(propertyGroup.isReadonly()); fireEvent(HasPropertyGroupEvent.PROPERTYGROUP_CANCEL_EDIT); } /** * Gets all group properties */ public void getProperties() { propertyGroupService.getProperties(path, propertyGroup.getName(), callbackGetProperties); } /** * Remove the document property group */ public void removeGroup() { propertyGroupService.removeGroup(path, propertyGroup.getName(), callbackRemoveGroup); } /** * Gets the group name * * @return The group name */ public String getGrpName(){ return propertyGroup.getName(); } /** * getValidationProcessor * * @return */ public ValidationProcessor getValidationProcessor() { return manager.getValidationProcessor(); } /** * getManager * * @return */ public FormManager getManager() { return manager; } @Override public void fireEvent(PropertyGroupEventConstant event) { for (Iterator<PropertyGroupHandlerExtension> it = propertyGroupHandlerExtensionList.iterator(); it.hasNext();) { it.next().onChange(event); } } @Override public void addPropertyGroupHandlerExtension(PropertyGroupHandlerExtension handlerExtension) { propertyGroupHandlerExtensionList.add(handlerExtension); } }