Hi all!
I'm new to the SmartClient and to SmartGWT, and I don't know how obvious my information is, but for I needed to do a lot of research to get a good solution, and take a piece off the puzzle here and there to accomplish my objective, and I want to contribute.
In my project, we are using a Restful architecture, and I extended the RestDataSource setting all the properties to use GET, PUT, POST and DELETE verbs, and to do parameter replacement in case like http://server/resources/order/{id}/orderitem{id}.
The code follows:
Please, if you know how to do this better, send the code and show how miserable I am.
Thanks!
I'm new to the SmartClient and to SmartGWT, and I don't know how obvious my information is, but for I needed to do a lot of research to get a good solution, and take a piece off the puzzle here and there to accomplish my objective, and I want to contribute.
In my project, we are using a Restful architecture, and I extended the RestDataSource setting all the properties to use GET, PUT, POST and DELETE verbs, and to do parameter replacement in case like http://server/resources/order/{id}/orderitem{id}.
The code follows:
Code:
public class RestfulDataSource extends RestDataSource {
private OperationBinding[] operationBindings;
public RestfulDataSource(String id, String fetchUrl, String addUrl, String updateUrl, String removeUrl) {
super();
this.setID(id);
Map<String, String> headers = new HashMap<String, String>();
headers.put("Accept", "text/xml");
setDataFormat(DSDataFormat.XML);
setJsonRecordXPath("data");
OperationBinding fetch = new OperationBinding();
fetch.setOperationType(DSOperationType.FETCH);
fetch.setDataProtocol(DSProtocol.GETPARAMS);
fetch.setDataURL(fetchUrl);
DSRequest fetchRequest = new DSRequest();
fetchRequest.setHttpHeaders(headers);
fetch.setRequestProperties(fetchRequest);
OperationBinding add = new OperationBinding();
add.setOperationType(DSOperationType.ADD);
add.setDataProtocol(DSProtocol.POSTMESSAGE);
add.setDataURL(addUrl);
DSRequest addRequest = new DSRequest();
addRequest.setHttpHeaders(headers);
add.setRequestProperties(fetchRequest);
OperationBinding update = new OperationBinding();
update.setOperationType(DSOperationType.UPDATE);
update.setDataProtocol(DSProtocol.GETPARAMS);
DSRequest updateRequest = new DSRequest();
updateRequest.setHttpMethod("PUT");
updateRequest.setHttpHeaders(headers);
update.setRequestProperties(updateRequest);
update.setDataURL(updateUrl);
OperationBinding remove = new OperationBinding();
remove.setOperationType(DSOperationType.REMOVE);
remove.setDataProtocol(DSProtocol.GETPARAMS);
DSRequest removeRequest = new DSRequest();
removeRequest.setHttpMethod("DELETE");
removeRequest.setHttpHeaders(headers);
remove.setRequestProperties(removeRequest);
remove.setDataURL(removeUrl);
operationBindings = new OperationBinding[]{fetch, add, update, remove};
this.setOperationBindings(operationBindings);
}
@Override
protected Object transformRequest(DSRequest dsRequest) {
for (OperationBinding operationBinding : operationBindings) {
if (dsRequest.getOperationType().equals(operationBinding.getOperationType())) {
String url = operationBinding.getDataURL();
int start = url.indexOf('{');
int end = url.indexOf('}');
while (start != -1 && end != -1) {
String parametro = url.substring(start + 1, end);
url = url.replace("{" + parametro + "}",
JSOHelper.getAttribute(dsRequest.getData(), parametro));
start = url.indexOf('{');
end = url.indexOf('}');
}
dsRequest.setActionURL(url);
return super.transformRequest(dsRequest);
}
}
return super.transformRequest(dsRequest);
}
}
Thanks!
Comment