/** * Copyright 2008-2016 Qualogy Solutions B.V. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * 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. */ package com.qualogy.qafe.mgwt.client.ui.renderer.events; 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.DOM; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.rpc.ServiceDefTarget; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.FileUpload; import com.google.gwt.user.client.ui.FormPanel; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.HasText; import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.UIObject; import com.google.gwt.user.client.ui.Widget; //import com.qualogy.qafe.mgwt.client.component.AreaWidget; import com.qualogy.qafe.mgwt.client.component.DataMap; import com.qualogy.qafe.mgwt.client.component.HasChoice; import com.qualogy.qafe.mgwt.client.component.HasData; import com.qualogy.qafe.mgwt.client.component.HasDataGridMethods; import com.qualogy.qafe.mgwt.client.component.HasDataModel; //import com.qualogy.qafe.mgwt.client.component.LabeledTextFieldWidget; //import com.qualogy.qafe.mgwt.client.component.MapWidget; //import com.qualogy.qafe.mgwt.client.component.QDatePicker; //import com.qualogy.qafe.mgwt.client.component.QPagingScrollTable; //import com.qualogy.qafe.mgwt.client.component.QRadioButton; //import com.qualogy.qafe.mgwt.client.component.Tiles; //import com.qualogy.qafe.mgwt.client.component.TitledComponent; import com.qualogy.qafe.mgwt.client.context.ClientApplicationContext; import com.qualogy.qafe.mgwt.client.exception.GWTServiceException; import com.qualogy.qafe.mgwt.client.service.RPCService; import com.qualogy.qafe.mgwt.client.service.RPCServiceAsync; import com.qualogy.qafe.mgwt.client.ui.renderer.RendererHelper; import com.qualogy.qafe.mgwt.client.util.ComponentRepository; import com.qualogy.qafe.mgwt.client.vo.data.EventDataGVO; import com.qualogy.qafe.mgwt.client.vo.data.EventDataI; import com.qualogy.qafe.mgwt.client.vo.data.GDataObject; import com.qualogy.qafe.mgwt.client.vo.functions.BuiltInFunctionGVO; import com.qualogy.qafe.mgwt.client.vo.functions.DataContainerGVO; import com.qualogy.qafe.mgwt.client.vo.functions.execute.FunctionsExecutor; import com.qualogy.qafe.mgwt.client.vo.ui.CheckBoxGVO; import com.qualogy.qafe.mgwt.client.vo.ui.TextFieldGVO; import com.qualogy.qafe.mgwt.client.vo.ui.event.EventListenerGVO; import com.qualogy.qafe.mgwt.client.vo.ui.event.InputVariableGVO; import com.qualogy.qafe.mgwt.client.ui.renderer.events.exception.RequiredFieldException; import com.qualogy.qafe.mgwt.shared.QAMLConstants; public class CallbackHandler { private final static RPCServiceAsync service = (RPCServiceAsync) GWT.create(RPCService.class); private static AsyncCallback<?> callback = null; final public static void createCallBack(final Object sender, final String listenerType, final EventListenerGVO eventGVO, List<InputVariableGVO> listOfInputVariables, Map<String,String> mouseInfo) { if (sender instanceof UIObject) { createCallBack((UIObject) sender, listenerType, eventGVO, listOfInputVariables, null, mouseInfo); } } final public static void createCallBack(final Object sender, final String listenerType, final EventListenerGVO eventGVO, List<InputVariableGVO> listOfInputVariables) { createCallBack((UIObject) sender, listenerType, eventGVO, listOfInputVariables, null); } final private static AsyncCallback<?> createCallBack(final String listenerType) { ServiceDefTarget endpoint = (ServiceDefTarget) service; String moduleRelativeURL = GWT.getModuleBaseURL() + "rpc.service"; endpoint.setServiceEntryPoint(moduleRelativeURL); if (callback == null){ callback = new AsyncCallback<Object>() { public void onSuccess(Object result) { GDataObject data = (GDataObject) result; processOutput(data); //this is to trigger handler registered to do on success of event body execution. ClientApplicationContext.getInstance().fireResult(data); ClientApplicationContext.getInstance().setBusy(false); } public void onFailure(Throwable caught) { ClientApplicationContext.getInstance().log("Event execution for " + listenerType + " failed", caught.getMessage(), true, false, caught); ClientApplicationContext.getInstance().setBusy(false); if (caught instanceof GWTServiceException) { GWTServiceException gWTServiceException = (GWTServiceException) caught; processOutput(gWTServiceException.getGDataObject()); } } }; } return callback; } final public static void createCallBack(final UIObject sender, final String listenerType, final EventListenerGVO eventGVO, List<InputVariableGVO> listOfInputVariables) { createCallBack(sender, listenerType, eventGVO, listOfInputVariables, null); } // CHECKSTYLE.OFF: CyclomaticComplexity final public static void createCallBack(final UIObject sender, final String listenerType, final EventListenerGVO eventGVO, List<InputVariableGVO> listOfInputVariables, Map<String,Object> internalVariables, Map<String,String> mouseInfo) { if (eventGVO != null) { String senderUUID = DOM.getElementProperty(sender.getElement(), "uuid"); String senderId = DOM.getElementAttribute(sender.getElement(), "id"); if (senderId != null && senderId.length() > 0) { String context = RendererHelper.getComponentContext(sender); String parent = RendererHelper.getParentComponent(sender); String senderName = RendererHelper.getNamedComponentName(sender); ClientApplicationContext.getInstance().setBusy(true); AsyncCallback<?> callback = createCallBack(listenerType); EventDataGVO eventDataObject = new EventDataGVO(); eventDataObject.setUuid(senderUUID); eventDataObject.setEventId(eventGVO.getEventId()); eventDataObject.setListenerType(listenerType); eventDataObject.setSenderName(senderName); eventDataObject.setUserUID(ClientApplicationContext.getInstance().getAppUUID()); eventDataObject.setWindowSession(ClientApplicationContext.getInstance().getWindowSession()); eventDataObject.setInternalVariables(internalVariables); eventDataObject.setParameters(ClientApplicationContext.getInstance().getParameters()); eventDataObject.setSender(senderId); eventDataObject.setOriginalSenderId(senderId); // unmanipulated Mouse Coordinates if(senderId.startsWith("#")) { eventDataObject.setIndex(senderId.substring(senderId.indexOf("#")+1, senderId.lastIndexOf("#"))); } if (mouseInfo!=null){ eventDataObject.setMouseCoordinates(mouseInfo.get(EventDataI.MOUSE_X), mouseInfo.get(EventDataI.MOUSE_Y)); } // sender id eventDataObject.setParent(parent); if (eventGVO.getSourceId() != null) { eventDataObject.setSourceId(eventGVO.getSourceId()); if (!senderId.startsWith("||") && !senderId.startsWith("#")) { if (senderId.indexOf('|') > 0) { eventDataObject.setSourceIdValue(senderId.substring(0, senderId.indexOf('|'))); } } } if (eventGVO.getSourceName() != null) { eventDataObject.setSourceName(eventGVO.getSourceName()); if (RendererHelper.isNamedComponent(sender)) { eventDataObject.setSourceNameValue(RendererHelper.getNamedComponentName(sender)); } } if (eventGVO.getSourceValue() != null) { eventDataObject.setSourceValue(eventGVO.getSourceValue()); Object o = getValue(sender, sender, eventDataObject, true); if (o instanceof String) { eventDataObject.setSourceValueValue(o.toString()); } } if (eventGVO.getSourceListenerType() != null) { eventDataObject.setSourceListenerType(eventGVO.getSourceListenerType()); eventDataObject.setSourceListenerTypeValue(listenerType); } if (senderId.startsWith("||")) { // so this is a click from a table{ eventDataObject.setSender(senderId.substring(senderId.lastIndexOf("||") + 2)); } else if (senderId.startsWith("#")) { // so this is a click from a tile or an inner component in datagrid eventDataObject.setSender(senderId.substring(senderId.lastIndexOf("#") + 1)); } boolean error = false; List<InputVariableGVO> obsoleteInputVariables = new ArrayList<InputVariableGVO>(); if (listOfInputVariables != null) { try { for (InputVariableGVO inputVariables : listOfInputVariables) { String uuid = DOM.getElementProperty(sender.getElement(), "uuid"); String value = ""; DataContainerGVO dataContainerObject = null; String inputVariableReference = inputVariables.getReference(); if (hasAttribute(inputVariableReference)) { value = getAttributeValue(inputVariableReference, uuid, parent, context); } else if(inputVariableReference.contains(".$$")){ dataContainerObject = fetchDatagridRowValues(inputVariableReference, uuid, parent, context); } else { String key = RendererHelper.generateId(inputVariableReference, parent, context); // inputVariables[i][1] ClientApplicationContext.getInstance().log(key); List<UIObject> uiObjects = ComponentRepository.getInstance().getComponent(key); // since the parameter can be a complex object, we need to create a substitute for it. // This can only be used in the name variant though (namedcomponents) if (uiObjects != null) { for (UIObject uiObject : uiObjects) { value = null; Object o = getValue(uiObject, sender, eventDataObject, false); if (o instanceof String) { value = o.toString(); } else if (o instanceof DataContainerGVO) { dataContainerObject = (DataContainerGVO) o; } if (uiObject instanceof HasDataModel) { // Get also the data model behind HasDataModel hasDataModel = (HasDataModel)uiObject; if (hasDataModel.getDataModel() != null) { Object dataModel = hasDataModel.getDataModel(); String newInputVariableReference = inputVariableReference + QAMLConstants.DATAMODEL_POSTFIX; if (eventDataObject.getInternalVariables() == null) { eventDataObject.setInternalVariables(new HashMap<String,Object>()); } eventDataObject.getInternalVariables().put(newInputVariableReference, dataModel); } } } } else { // so the object could not be found in the ComponentRepository, maybe we try by name to find it. ClientApplicationContext.getInstance().log("Reference" + inputVariables.getReference()); String[] keysSet = inputVariables.getReference().split("[.]"); if (keysSet != null) { String searchKey = null; if (keysSet.length == 1) {// so only the key searchKey = key; } else { searchKey = RendererHelper.generateId(keysSet[0], parent, context); } if (searchKey != null) { uiObjects = ComponentRepository.getInstance().getNamedComponent(searchKey); if (uiObjects != null) { for (UIObject uiObject : uiObjects) { // Collect all the data from a list of named components DataContainerGVO dataContainer = createDataContainer(inputVariables.getReference(), uiObject, sender, eventDataObject); if (dataContainerObject == null) { dataContainerObject = dataContainer; } else if (dataContainer != null) { if (dataContainer.getKind() == dataContainerObject.getKind()) { switch (dataContainer.getKind()) { case DataContainerGVO.KIND_MAP : { dataContainerObject.getDataMap().putAll(dataContainer.getDataMap()); } break; } } } // Get value of a data member if(keysSet.length > 1){ if(dataContainerObject.getDataMap().get(keysSet[1]) != null){ value = dataContainerObject.getDataMap().get(keysSet[1]).getDataString(); } dataContainerObject = null; } } } else { // Apparently we have to search for the Group now. uiObjects = ComponentRepository.getInstance().getGroupedComponent(key); if (uiObjects != null) { DataContainerGVO dataContainer = new DataContainerGVO(); dataContainer.setParameterName(inputVariables.getReference()); dataContainer.setKind(DataContainerGVO.KIND_MAP); DataMap dataMap = new DataMap(); dataContainer.setDataMap(dataMap); for (UIObject uiObject : uiObjects) { // Collect all the data from a list of named components fillDataContainerMapForGroup(dataMap,inputVariables.getReference(), uiObject, sender, eventDataObject); } dataContainerObject = dataContainer; } } } } } } String x = inputVariables.getComponentValue() != null ? inputVariables.getComponentValue() : value; if ((inputVariableReference != null) && inputVariableReference.startsWith("||")) { // so this is a click from a table inputVariableReference = (inputVariables.getReference().substring(senderId.lastIndexOf("||") + 2)); } eventDataObject.getInputVariables().add(new InputVariableGVO(inputVariables.getName(), inputVariableReference, inputVariables.getDefaultValue(), x, dataContainerObject)); } } catch (RequiredFieldException e) { ClientApplicationContext.getInstance().log("Required field not filled in: ", e.getMessage(), true, true, e); error = true; } catch (RequiredFieldMissingException e) { ClientApplicationContext.getInstance().log("Required field not filled in: ", e.getMessage(), true, true, e); error = true; } catch (TypeValidationException e) { ClientApplicationContext.getInstance().log("Validation Error: ", e.getMessage(), true, true, e); error = true; } } if (!error) { service.executeEvent(EnrichEventUtil.enrichEvent(eventDataObject), callback); } } else { ClientApplicationContext.getInstance().log("Callbackhander: Trying to call event while id is empty !!"); } } else { ClientApplicationContext.getInstance().log("Callbackhander: eventGVO cannot be null !!"); } } // CHECKSTYLE.ON: CyclomaticComplexity private static DataContainerGVO fetchDatagridRowValues(String inputVariableReference, String uuid, String parent,String context) { String[] inputRef = inputVariableReference.split("[.]"); String key = RendererHelper.generateId(inputRef[0], parent, context); List<UIObject> uiObjects = ComponentRepository.getInstance().getComponent(key); DataContainerGVO dtc = null; for(UIObject uiObject : uiObjects){ // if(uiObject instanceof QPagingScrollTable) { // QPagingScrollTable qps = (QPagingScrollTable) uiObject; // dtc = convertToDataGVO(qps.getData(inputRef[1])); // } } return dtc; } private static boolean hasAttribute(String inputVariableReference) { if ((inputVariableReference != null) && (inputVariableReference.indexOf("@") > -1)) { return true; } return false; } private static String getAttributeValue(String inputVariableReference, String uuid, String parent, String context) { String value = ""; if (hasAttribute(inputVariableReference)) { String inputReference = inputVariableReference.substring(0, inputVariableReference.indexOf("@")); String attribute = inputVariableReference.substring(inputVariableReference.indexOf("@") + 1); String key = RendererHelper.generateId(inputReference, parent, context); List<UIObject> uiObjects = ComponentRepository.getInstance().getComponent(key); if (uiObjects != null) { for (UIObject uiObject : uiObjects) { if ("pagesize".equals(attribute)) { if (uiObject instanceof HasDataGridMethods) { HasDataGridMethods dataGridSortableTable = (HasDataGridMethods) uiObject; value = String.valueOf(dataGridSortableTable.getPageSize()); } } else if ("currentpage".equals(attribute)) { if (uiObject instanceof HasDataGridMethods) { HasDataGridMethods dataGridSortableTable = (HasDataGridMethods) uiObject; value = String.valueOf(dataGridSortableTable.getCurrentPage()); } } } } } return value; } private static void fillDataContainerMapForGroup(DataMap dataMap,String groupName, UIObject uiObject, final UIObject sender, EventDataGVO eventDataObject) throws RequiredFieldException { if (uiObject instanceof Widget){ Widget widget = (Widget)uiObject; // if (widget instanceof HasWidgets && !(widget instanceof ValueSpinner) && !(widget instanceof FormPanel) && !(widget instanceof HasDataGridMethods)) { // // HasWidgets innerHasWidget = (HasWidgets) widget; // processWidgets(innerHasWidget, dataMap, sender, eventDataObject); // } else { // processNamedComponent(widget, dataMap, sender, eventDataObject); // } } } private static DataContainerGVO createDataContainer(String parameterName, UIObject uiObject, final UIObject sender, EventDataGVO eventDataObject) throws RequiredFieldException { DataContainerGVO dtc = new DataContainerGVO(); dtc.setParameterName(parameterName); if (uiObject != null) { dtc.setKind(DataContainerGVO.KIND_MAP); DataMap dataMap = new DataMap(); dtc.setDataMap(dataMap); // if (uiObject instanceof Tiles) { // Tiles tiles = (Tiles) uiObject; // if (eventDataObject.getOriginalSenderId() != null) { // String index = eventDataObject.getOriginalSenderId().substring(0, eventDataObject.getOriginalSenderId().lastIndexOf("#")); // index = index.replace("#", ""); // Integer i = Integer.parseInt(index); // UIObject tileElement = tiles.getTileElements().get(i); // if (tileElement instanceof HasWidgets) { // HasWidgets hasWidgets = (HasWidgets) tileElement; // processWidgets(hasWidgets, dataMap, sender, eventDataObject); // } // if (parameterName != null && parameterName.contains(".")) { // String[] parameterParts = parameterName.split("[.]"); // if (parameterParts != null && parameterParts.length > 1) { // DataContainerGVO dtcInner = new DataContainerGVO(); // dtcInner.setParameterName(parameterName); // dtcInner.setKind(DataContainerGVO.KIND_STRING); // dtcInner.setDataString(dataMap.get(parameterParts[1]) != null ? dataMap.get(parameterParts[1]).toString() : null); // dtc = dtcInner; // } // } // } // } else if (uiObject instanceof HasWidgets) { // HasWidgets hasWidgets = (HasWidgets) uiObject; // processWidgets(hasWidgets, dataMap, sender, eventDataObject); // // } } return dtc; } /** * @throws RequiredFieldException */ private static void processWidgets(HasWidgets hasWidgets, DataMap dataMap, final UIObject sender, EventDataGVO eventDataObject) throws RequiredFieldException { for (Widget widget : hasWidgets) { processNamedComponent(widget, dataMap, sender, eventDataObject); // if (widget instanceof HasWidgets && !(widget instanceof ValueSpinner) && !(widget instanceof FormPanel) && !(widget instanceof HasDataGridMethods)) { // // not clear what is this code was meant for. // /*DataContainerGVO dtc = new DataContainerGVO(); // dtc.setKind(DataContainerGVO.KIND_MAP); // DataMap innerMap = new DataMap(); // dtc.setDataMap(innerMap); // // if (RendererHelper.isNamedComponent(widget)) { // String name = RendererHelper.getNamedComponentName(widget); // dtc.setParameterName(name); // dataMap.put(name, dtc); // }*/ // HasWidgets innerHasWidget = (HasWidgets) widget; // processWidgets(innerHasWidget, dataMap, sender, eventDataObject); // } } } /** * @throws RequiredFieldException */ private static void processNamedComponent(Widget widget, DataMap dataMap, final UIObject sender, EventDataGVO eventDataObject) throws RequiredFieldException { UIObject uiObject = widget; // if (widget instanceof TitledComponent) { // uiObject = ((TitledComponent)widget).getDataComponent(); // } if (RendererHelper.isNamedComponent(uiObject)) { String name = RendererHelper.getNamedComponentName(uiObject); String value = null; boolean valueOnly = false; if (uiObject instanceof ListBox) { valueOnly = true; } DataContainerGVO data = new DataContainerGVO(); Object valueObject = getValue(uiObject, sender, eventDataObject, valueOnly); if (valueObject instanceof String) { value = String.valueOf(valueObject); // if (uiObject instanceof QDatePicker) { // data.setKind(DataContainerGVO.KIND_STRING); // data.setStringDataType(DataContainerGVO.TYPE_DATE); // data.setDateData(((QDatePicker) uiObject).getValue()); // } else { // data.setKind(DataContainerGVO.KIND_STRING); // data.setDataString(value); // } } else if (valueObject instanceof DataContainerGVO) { data = (DataContainerGVO) valueObject; } dataMap.put(name, data); } } private static void processOutput(GDataObject data) { if (data != null) { BuiltInFunctionGVO[] builtInFunctions = data.getFunctions(); if (builtInFunctions != null) { for (int i = 0; i < builtInFunctions.length; i++) { BuiltInFunctionGVO builtInFunctionGVO = builtInFunctions[i]; builtInFunctionGVO.setSenderId(data.getSenderId()); builtInFunctionGVO.setListenerType(data.getListenerType()); GWT.log("Process output:" + builtInFunctionGVO.getClassName(), null); FunctionsExecutor.getInstance().execute(builtInFunctionGVO, null); } } ClientApplicationContext.getInstance().setLogText("Execution time:" + data.getTime() + " ms"); } } private static Object getValue(UIObject uiObject, final UIObject sender, EventDataGVO eventDataObject, boolean idValueOnly){ Object returnObject = null; boolean hasSimpleValue = false; // if (isDataGridField(uiObject)) { // returnObject = getDataGridValue(uiObject, sender, eventDataObject); // } else if (uiObject instanceof QPagingScrollTable) { // QPagingScrollTable qps = (QPagingScrollTable) uiObject; // returnObject = qps.getData(null); // DataContainerGVO dtc = convertToDataGVO(returnObject); // returnObject = dtc; // } else if (uiObject instanceof QRadioButton) { // QRadioButton qRadioButton = (QRadioButton) uiObject; // returnObject = qRadioButton.getText(); // hasSimpleValue = true; // } else if (uiObject instanceof HasChoice) { // HasChoice hasChoice = (HasChoice)uiObject; // returnObject = hasChoice.getData(); // hasSimpleValue = true; // } else if (uiObject instanceof HasData) { // HasData hasData = (HasData)uiObject; // returnObject = hasData.getData(); // hasSimpleValue = true; // if (!(returnObject instanceof String)) { // DataContainerGVO dtc = convertToDataGVO(returnObject); // if (dtc != null) { // returnObject = dtc; // hasSimpleValue = false; // } // } // } else if (uiObject instanceof CheckBox) { // CheckBox checkBox = (CheckBox) uiObject; // returnObject = checkBox.getValue().toString(); // hasSimpleValue = true; // if (checkBox.getValue()) { // String attributeValue = DOM.getElementAttribute(checkBox.getElement(), CheckBoxGVO.CHECKED_VALUE_ATTRIBUTE_TAG); // if (attributeValue != null && attributeValue.length() > 0) { // returnObject = attributeValue; // } // } else { // String attributeValue = DOM.getElementAttribute(checkBox.getElement(), CheckBoxGVO.UNCHECKED_VALUE_ATTRIBUTE_TAG); // if (attributeValue != null && attributeValue.length() > 0) { // returnObject = attributeValue; // } // } // } else if (uiObject instanceof FormPanel) { // FormPanel fp = (FormPanel) uiObject; // if (fp instanceof HasWidgets) { // HasWidgets hasWidgets = (HasWidgets) fp; // Iterator<Widget> itr = hasWidgets.iterator(); // while (itr.hasNext()) { // Widget widget = itr.next(); // if (widget instanceof Grid) { // Grid gridPanel = (Grid) widget; // FileUpload fileUpload = (FileUpload) gridPanel.getWidget(0, 0); // returnObject = DOM.getElementAttribute(fileUpload.getElement(), "fu-uuid"); // hasSimpleValue = true; // } // } // } // } else if (uiObject instanceof ListBox) { // ListBox listBox = (ListBox) uiObject; // if (!(listBox.isMultipleSelect()) && listBox.getSelectedIndex() != -1) { // dropdown // int index = listBox.getSelectedIndex(); // if (idValueOnly) { // returnObject = listBox.getValue(index); // hasSimpleValue = true; // } else { // DataMap dm = new DataMap(); // dm.put("id", new DataContainerGVO(listBox.getValue(index))); // dm.put("value", new DataContainerGVO(listBox.getItemText(index))); // // DataContainerGVO dtcMap = new DataContainerGVO(); // dtcMap.setKind(DataContainerGVO.KIND_MAP); // dtcMap.setDataMap(dm); // returnObject = dtcMap; // // // TODO: refactor, this is a workaround for checking simple value // dtcMap.setDataString(listBox.getValue(index)); // hasSimpleValue = true; // } // } else if (listBox.getSelectedIndex() != -1) { // DataContainerGVO dtclist = new DataContainerGVO(); // dtclist.setKind(DataContainerGVO.KIND_COLLECTION); // List<DataContainerGVO> list = new ArrayList<DataContainerGVO>(); // dtclist.setListofDC(list); // int items = listBox.getItemCount(); // for (int itemIndex = 0; itemIndex < items; itemIndex++) { // if (listBox.isItemSelected(itemIndex)) { // DataMap dataMap = new DataMap(); // DataContainerGVO dtcId = new DataContainerGVO(); // dtcId.setKind(DataContainerGVO.KIND_STRING); // dtcId.setDataString(listBox.getValue(itemIndex)); // dtcId.setStringDataType(DataContainerGVO.TYPE_STRING); // dataMap.put("id", dtcId); // // DataContainerGVO dtcValue = new DataContainerGVO(); // dtcValue.setKind(DataContainerGVO.KIND_STRING); // dtcValue.setDataString(listBox.getItemText(itemIndex)); // dtcValue.setStringDataType(DataContainerGVO.TYPE_STRING); // dataMap.put("value", dtcValue); // // list.add(new DataContainerGVO(dataMap)); // } // } // returnObject = dtclist; // } // } else if (uiObject instanceof QDatePicker) { // DataContainerGVO data = new DataContainerGVO(); // data.setKind(DataContainerGVO.KIND_STRING); // data.setStringDataType(DataContainerGVO.TYPE_DATE); // data.setDateData(((QDatePicker) uiObject).getValue()); // returnObject = data; // hasSimpleValue = true; // } else if (uiObject instanceof HasText) { // returnObject = ((HasText) uiObject).getText(); // hasSimpleValue = true; // } else if (uiObject instanceof MapWidget) { // MapWidget mapWidget = (MapWidget) uiObject; // AreaWidget[] areas = mapWidget.getItems(); // if (areas != null) { // for (int k = 0; k < areas.length; k++) { // if (areas[k] == sender) { // returnObject = sender.getTitle(); // hasSimpleValue = true; // // The senderId has to be the one of the Map, not of the area. // String senderId = DOM.getElementProperty(mapWidget.getElement(), "id"); // eventDataObject.setSender(senderId); // } // } // } // } else if (uiObject instanceof HasDataGridMethods) { // HasDataGridMethods dataGridSortableTable = (HasDataGridMethods) uiObject; // // MaxRowSize with the call // if (dataGridSortableTable.getMaxRows() != null) { // eventDataObject.getInputVariables().add(new InputVariableGVO(DOM.getElementAttribute(uiObject.getElement(), "id") + ".max_rows", null, dataGridSortableTable.getMaxRows().toString())); // } // eventDataObject.getInputVariables().add(new InputVariableGVO(DOM.getElementAttribute(uiObject.getElement(), "id") + ".pagesize", null, "" + dataGridSortableTable.getPageSize())); // } else if (uiObject instanceof Image) { // Image img = (Image) uiObject; // if (img.getUrl() != null) { // returnObject = img.getUrl(); // hasSimpleValue = true; // } // } else if (uiObject instanceof ValueSpinner) { // ValueSpinner spinner = (ValueSpinner) uiObject; // if (spinner.getTextBox() != null) { // returnObject = spinner.getTextBox().getValue(); // hasSimpleValue = true; // } // } else if (uiObject instanceof Tiles) { // Tiles tiles = (Tiles) uiObject; // DataContainerGVO dtc = new DataContainerGVO(); // dtc.setKind(DataContainerGVO.KIND_MAP); // DataMap dataMap = new DataMap(); // dtc.setDataMap(dataMap); // if (eventDataObject.getOriginalSenderId() != null) { // String index = eventDataObject.getOriginalSenderId().substring(0, eventDataObject.getOriginalSenderId().lastIndexOf("#")); // index = index.replace("#", ""); // Integer i = Integer.parseInt(index); // UIObject tileElement = tiles.getTileElements().get(i); // if (tileElement instanceof HasWidgets) { // HasWidgets hasWidgets = (HasWidgets) tileElement; // try { // processWidgets(hasWidgets, dataMap, sender, eventDataObject); // } catch (RequiredFieldException e) { // throw new RequiredFieldMissingException(e); // } // } // // } // returnObject = dtc; // } else if(uiObject instanceof SliderBar){ // SliderBar slider = (SliderBar)uiObject; // if(slider.getCurrentValue() > 0){ // returnObject = String.valueOf(slider.getCurrentValue()); // } // } // // if (hasSimpleValue) { // String value = null; // if (returnObject instanceof String) { // value = (String)returnObject; // } else if (returnObject instanceof DataContainerGVO) { // DataContainerGVO gvo = (DataContainerGVO)returnObject; // if (gvo.getDataString() != null) { // value = gvo.getDataString(); // } else if (gvo.getDateData() != null) { // value = gvo.getDateData().toString(); // } // } // // Required field check // handleRequired(uiObject, value); // // Validation based on type- for textfield with type // handleTypeValidation(uiObject, value); // } // return returnObject; } private static DataContainerGVO convertToDataGVO(Object returnObject) { DataContainerGVO dtc = null; if (returnObject instanceof DataMap) { dtc = new DataContainerGVO(); dtc.setDataMap((DataMap) returnObject); dtc.setKind(DataContainerGVO.KIND_MAP); } else if (returnObject instanceof List) { dtc = new DataContainerGVO(); dtc.setListofDC((List<DataContainerGVO>) returnObject); dtc.setKind(DataContainerGVO.KIND_COLLECTION); } return dtc; } private static void handleRequired(UIObject uiObject, String value) { if (RendererHelper.isRequiredComponent(uiObject)) { if(uiObject instanceof ListBox) { ListBox listBox = (ListBox) uiObject; if(listBox.getSelectedIndex() == 0 ) { value = null; } } if (value == null || value.trim().length() == 0) { ClientApplicationContext.getInstance().log("Required field not filled in", "Please check the input since a required field is not filled in.(" + RendererHelper.getComponentId(uiObject) + ").", false); String componentFullId = RendererHelper.getComponentId(uiObject); String componentId = componentFullId; if(componentFullId != null) { componentId = componentFullId.substring(0, componentFullId.indexOf('|')); } throw new RequiredFieldMissingException("Please check the input since a required field is not filled in(" +componentId + ")."); } } } private static void handleTypeValidation(UIObject uiObject, String value) { String type = null; // if(uiObject instanceof TextBox || uiObject instanceof LabeledTextFieldWidget ) { // // type = RendererHelper.getComponentAttributeValue(uiObject, TextFieldGVO.REGEXPTYPE); // // if(type!= null && type.trim().length() >0 ) { // if( value!=null && value.length()!=0 && !isValidType(uiObject,value) ) { // // String componentFullId = RendererHelper.getComponentId(uiObject); // String componentId = componentFullId; // if(componentFullId != null) { // componentId = componentFullId.substring(0, componentFullId.indexOf('|')); // } // // throw new TypeValidationException(TextFieldGVO.getRegExpMessage(type) + "(" + componentId + ")."); // } // } // } } private static boolean isValidType(UIObject uiObject, String value) { boolean valid = false; String type = RendererHelper.getComponentAttributeValue(uiObject, TextFieldGVO.REGEXPTYPE); String regExp = TextFieldGVO.getRegExp(type); if( regExp == null || value == null || value.replaceFirst(regExp, "").length()>0) { return false; } return true; } private static Object getDataGridValue(UIObject uiObject, UIObject sender, EventDataGVO eventDataObject) { String id = DOM.getElementAttribute(sender.getElement(), "id"); String row = id.substring(0, id.lastIndexOf("||") + 2); row = row.replace("||", ""); String datagridUUID = id.substring(id.lastIndexOf("||") + 2); ; String postfix = datagridUUID.substring(datagridUUID.indexOf("|") + 1); String prefix = datagridUUID.substring(0, datagridUUID.indexOf("|")); if (prefix.contains(".")) { prefix = prefix.substring(0, prefix.indexOf(".")); } DataContainerGVO dtc = null; List<UIObject> ui = ComponentRepository.getInstance().getComponent(prefix + "|" + postfix); if (ui != null) { for (UIObject u : ui) { // if (u instanceof QPagingScrollTable) { // QPagingScrollTable qps = (QPagingScrollTable) u; // dtc = qps.getRowValue(Integer.valueOf(row)); // // } } } return dtc; } private static boolean isDataGridField(UIObject uiObject) { String id = DOM.getElementAttribute(uiObject.getElement(), "id"); return (id != null && id.startsWith("||")); } }