Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Custom REST DataSource - DSRequest data

    Hi, I'm trying to code a custom DS for accessing our REST-JSON web services.
    I don't really like RestDataSource so here's my own:
    Code:
    package it.celi.client;
    
    import it.celi.client.overlay.BusinessFunction;
    
    import org.restlet.gwt.Callback;
    import org.restlet.gwt.Client;
    import org.restlet.gwt.data.Protocol;
    import org.restlet.gwt.data.Request;
    import org.restlet.gwt.data.Response;
    
    import com.google.gwt.core.client.GWT;
    import com.google.gwt.core.client.JsArray;
    import com.smartgwt.client.data.DSRequest;
    import com.smartgwt.client.data.DSResponse;
    import com.smartgwt.client.data.DataSource;
    import com.smartgwt.client.data.fields.DataSourceTextField;
    import com.smartgwt.client.types.DSDataFormat;
    import com.smartgwt.client.types.DSProtocol;
    import com.smartgwt.client.widgets.grid.ListGridRecord;
    
    public class BusinessFunctionDataSource extends DataSource {
    
    	private final Client client = new Client(Protocol.HTTP);
    
    	public BusinessFunctionDataSource() {
    
    		setDataProtocol(DSProtocol.CLIENTCUSTOM);
    		setDataFormat(DSDataFormat.JSON);
    		setClientOnly(false);
    
    		DataSourceTextField idField = new DataSourceTextField("id", "ID");
    		DataSourceTextField descriptionField = new DataSourceTextField("description", "Descrizione");
    		idField.setPrimaryKey(true);
    		addField(idField);
    		addField(descriptionField);
    	}
    
    	private final native JsArray<BusinessFunction> asJsonArray(String json) /*-{return eval(json); }-*/;
    
    	@Override
    	protected Object transformRequest(DSRequest request) {
    		String requestId = request.getRequestId();
    		DSResponse response = new DSResponse();
    		response.setAttribute("clientContext", request.getAttributeAsObject("clientContext"));
    		response.setStatus(0);
    		switch (request.getOperationType()) {
    		case FETCH:
    			executeFetch(requestId, request, response);
    			break;
    		case ADD:
    			executeAdd(requestId, request, response);
    			break;
    		case UPDATE:
    			executeUpdate(requestId, request, response);
    			break;
    		case REMOVE:
    			executeRemove(requestId, request, response);
    			break;
    		default:
    			break;
    		}
    		return request.getData();
    	}
    
    	protected void executeFetch(final String requestId, DSRequest request, final DSResponse response) {
    
    		client.get(getDataURL(), new Callback() {
    			@Override
    			public void onEvent(Request request, Response eventResponse) {
    				JsArray<BusinessFunction> jsonBfs = asJsonArray(eventResponse.getEntity().getText());
    				ListGridRecord[] records = new ListGridRecord[jsonBfs.length()];
    				for (int i = 0; i < jsonBfs.length(); i++) {
    					records[i] = new ListGridRecord(jsonBfs.get(i));
    				}
    				response.setData(records);
    				response.setTotalRows(records.length);
    				processResponse(requestId, response);
    			}
    		});
    
    	}
    
    	protected void executeAdd(String requestId, DSRequest request, DSResponse response) {
    		GWT.log("ADD", null);
    		client.post(getDataURL(), "{\"description\":\"scolpita nella pietra\",\"id\":\"DACODICE\"}", new Callback() {
    			@Override
    			public void onEvent(Request request, Response response) {
    				 GWT.log("SUCCESS!", null);
    			}
    		});
    	}
    
    	protected void executeUpdate(String requestId, DSRequest request, DSResponse response) {
    		GWT.log("UPD" + request.getJsObj().toString(), null);
    	}
    
    	protected void executeRemove(String requestId, DSRequest request, DSResponse response) {
    		GWT.log("DEL" + request.getData().toString(), null);
    	}
    }
    My problem is on executeAdd() : now you see a stub json object passed as a string.


    What I want to do is to get my new data as json (or simply a string that I can parse) from dsrequest (data come from a listGrid) and use them.
    getData() and getDataAsString() keep returning me [Object object]

    Can you help me please?
    Thanks to all in advice!

    F.B.
Working...
X