/* * *************************************************************************** * * @(#) Copyright (C) Siemens AG 2010-2014 All Rights Reserved Confidential * * *************************************************************************** */ package com.siemens.opal.ui.cep.ctl.data; import com.siemens.opal.ui.i18n.CtlConstants; import com.siemens.opal.ui.i18n.I18NHelper; import com.siemens.opal.ui.shared.utils.OpalBackendType; import com.siemens.opal.ui.shared.utils.RestClientUtil; import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DSResponse; import com.smartgwt.client.data.OperationBinding; import com.smartgwt.client.data.Record; import com.smartgwt.client.data.RestDataSource; import com.smartgwt.client.data.fields.DataSourceBooleanField; import com.smartgwt.client.data.fields.DataSourceDateTimeField; import com.smartgwt.client.data.fields.DataSourceIntegerField; import com.smartgwt.client.data.fields.DataSourceTextField; import com.smartgwt.client.types.DSDataFormat; import com.smartgwt.client.types.DSOperationType; import com.smartgwt.client.types.DSProtocol; import com.smartgwt.client.util.SC; import java.util.HashMap; import java.util.Map; /** * Rest Data Source for production orders. * * @author klevgert */ public final class OrderTimelineEventDS extends RestDataSource { private static OrderTimelineEventDS instance = null; private String productionPlanId; private final CtlConstants constants = I18NHelper.getCtlConstants(); /** * Get an instance of the datasource. * * @return */ public static OrderTimelineEventDS getInstance() { if (instance == null) { instance = new OrderTimelineEventDS("OrderTimelineEventsDS"); } return instance; } /** * Creates a instance of the data source. * * @param id id of data source. */ private OrderTimelineEventDS(String id) { setID(id); setDataFormat(DSDataFormat.XML); setRecordXPath("data/orderCalendarEvent"); // define data source fields cause it is specific. DataSourceTextField idField = new DataSourceTextField("eventId", constants.id(), 20, false); idField.setPrimaryKey(true); DataSourceTextField nameField = new DataSourceTextField("name", constants.name(), 100, false); DataSourceTextField descField = new DataSourceTextField("description", constants.name(), 100, false); DataSourceDateTimeField startField = new DataSourceDateTimeField("startDate", constants.scheduledStart(), 100, false); DataSourceDateTimeField endField = new DataSourceDateTimeField("endDate", constants.scheduledEnd(), 100, false); DataSourceTextField styleField = new DataSourceTextField("styleName"); DataSourceTextField laneField = new DataSourceTextField("lane"); DataSourceTextField subLaneField = new DataSourceTextField("sublane"); DataSourceDateTimeField plannedStartField = new DataSourceDateTimeField("plannedStart", constants.scheduledStart(), 100, false); DataSourceDateTimeField plannedEndField = new DataSourceDateTimeField("plannedEnd", constants.scheduledEnd(), 100, false); DataSourceDateTimeField actualStartField = new DataSourceDateTimeField("actualStart", constants.actualStart(), 100, false); DataSourceDateTimeField actualEndField = new DataSourceDateTimeField("actualEnd", constants.actualEnd(), 100, false); DataSourceDateTimeField earliestStartField = new DataSourceDateTimeField("earliestStart", constants.earliestStart(), 100, false); DataSourceDateTimeField latestEndField = new DataSourceDateTimeField("latestEnd", constants.latestEnd(), 100, false); DataSourceBooleanField canDragField = new DataSourceBooleanField("canDrag"); DataSourceBooleanField canResizeField = new DataSourceBooleanField("canResize"); DataSourceBooleanField canEditField = new DataSourceBooleanField("canEdit"); DataSourceIntegerField orderIdField = new DataSourceIntegerField("orderId"); setFields(idField, nameField, descField, startField, endField, styleField, laneField, subLaneField, plannedStartField, plannedEndField, actualStartField, actualEndField, earliestStartField, latestEndField, canDragField, canResizeField, canEditField, orderIdField); OperationBinding fetch = new OperationBinding(); fetch.setOperationType(DSOperationType.FETCH); fetch.setDataProtocol(DSProtocol.GETPARAMS); OperationBinding add = new OperationBinding(); add.setOperationType(DSOperationType.ADD); add.setDataProtocol(DSProtocol.POSTMESSAGE); OperationBinding update = new OperationBinding(); update.setOperationType(DSOperationType.UPDATE); DSRequest updateProps = new DSRequest(); updateProps.setHttpMethod("PUT"); update.setRequestProperties(updateProps); update.setDataProtocol(DSProtocol.POSTMESSAGE); OperationBinding remove = new OperationBinding(); remove.setOperationType(DSOperationType.REMOVE); remove.setDataProtocol(DSProtocol.POSTMESSAGE); setOperationBindings(fetch, add, update, remove); StringBuilder sb = new StringBuilder(); sb.append(RestClientUtil.getResourcePathBaseUrl(OpalBackendType.CONTROL)) .append("order-timeline-events"); String url = sb.toString(); setFetchDataURL(url); setAddDataURL(url); setUpdateDataURL(url); setRemoveDataURL(url); } /** * Set the production plan id. If set, only orders of that production plan * will be loaded. * * @param planId */ public void setProductionPlanId(String planId) { this.productionPlanId = planId; } /** * Get the production plan id. If set, only orders of that production plan * will be loaded. * * @return production plan id */ public String getProductionPlanId() { return this.productionPlanId; } /** * Overriden tranformation of the request. This method checks for a plan id. * If it exists, then it will be added as a query parameter. * * @param request REST request * @return modified REST request. */ @Override protected Object transformRequest(DSRequest request) { String planId = this.getProductionPlanId(); if (planId != null) { Map params = new HashMap(); params.put("planId", planId); request.setParams(params); SC.logInfo("Plan Id: " + planId + "; Action Url: " + request.getActionURL()); } if (request.getOperationType() != DSOperationType.FETCH) { request.setContentType("application/opal.client+xml"); } return super.transformRequest(request); } /** * Overriding transformation of response. * * @param dsResponse response after fetching or updating the data. * @param dsRequest request data * @param data */ @Override protected void transformResponse(DSResponse dsResponse, DSRequest dsRequest, Object data) { // Record[] records = dsResponse.getData(); // for (Record record : records) { // String[] attributes = record.getAttributes(); // for (String attr : attributes) { // SC.logWarn(attr + " == " + record.getAttribute(attr)); // } // } super.transformResponse(dsResponse, dsRequest, data); } }