From 85ac895bb923a73ba917c576d65990aa8293f32a Mon Sep 17 00:00:00 2001 From: Keith Woodlock Date: Fri, 11 May 2012 00:55:42 +0100 Subject: [PATCH] add CORs filter for backend platform and hook view all offices up to it. --- .../webapp/WEB-INF/views/admin/orghome.jsp | 32 ++++++++++++------- .../platform/filters/ResponseCorsFilter.java | 32 +++++++++++++++++++ .../src/main/webapp/WEB-INF/web.xml | 17 ++++++++-- 3 files changed, 67 insertions(+), 14 deletions(-) create mode 100644 mifosng-provider/src/main/java/org/mifosng/platform/filters/ResponseCorsFilter.java diff --git a/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/admin/orghome.jsp b/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/admin/orghome.jsp index 3f2548f24..e04e68733 100644 --- a/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/admin/orghome.jsp +++ b/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/admin/orghome.jsp @@ -53,9 +53,9 @@ return false; } }, - globalDate: function(dateParts) { + globalDate: function(localDateAsISOString) { try { - + var dateParts = localDateAsISOString.split("-") var year = dateParts[0]; var month = parseInt(dateParts[1]) - 1; // month is zero indexed var day = dateParts[2]; @@ -68,9 +68,9 @@ return "??"; } }, - globalDateTime: function(dateParts) { + globalDateTime: function(dateInMillis) { try { - var d = new Date(dateParts); + var d = new Date(dateInMillis); return Globalize.format(d,"F"); } catch(e) { @@ -165,10 +165,10 @@ }).dialog('open'); } - function popupDialogWithFormView(url, titleCode, templateSelector, width, height, saveSuccessFunction) { + function popupDialogWithFormView(getUrl, postUrl, titleCode, templateSelector, width, height, saveSuccessFunction) { var dialogDiv = $("
"); var jqxhr = $.ajax({ - url: url, + url: getUrl, type: 'GET', contentType: 'application/json', dataType: 'json', @@ -196,7 +196,7 @@ var form_data = $('#entityform').serialize(); var jqxhr = $.ajax({ - url: url, + url: postUrl, type: 'POST', data: form_data, success: saveSuccessFunction, @@ -248,7 +248,10 @@ }); $('#addloanproduct').click(function(e) { - var url = '${rootContext}portfolio/product/loan/new'; + var getUrl = 'http://localhost:8085/mifosng-provider/api/v1/loanproducts/template'; + var postUrl = 'http://localhost:8085/mifosng-provider/api/v1/loanproducts'; + + //var url = '${rootContext}portfolio/product/loan/new'; var templateSelector = "#productFormTemplate"; var width = 800; var height = 550; @@ -258,7 +261,7 @@ refreshLoanProductsView(); } - popupDialogWithFormView(url, "dialog.title.add.loan.product", templateSelector, width, height, saveSuccessFunction); + popupDialogWithFormView(getUrl, postUrl,"dialog.title.add.loan.product", templateSelector, width, height, saveSuccessFunction); e.preventDefault(); }); @@ -338,7 +341,8 @@ }); $('#addoffice').click(function(e) { - var url = '${rootContext}org/office/new'; + var getUrl = 'http://localhost:8085/mifosng-provider/api/v1/offices/template'; + var postUrl = 'http://localhost:8085/mifosng-provider/api/v1/offices'; var templateSelector = "#officeFormTemplate"; var width = 600; var height = 400; @@ -354,14 +358,18 @@ function refreshOfficesView() { var jqxhr = $.ajax({ - url: '${allOfficesUrl}', + url: 'http://localhost:8085/mifosng-provider/api/v1/offices', // '${allOfficesUrl}', type: 'GET', contentType: 'application/json', dataType: 'json', success: function(data, textStatus, jqXHR) { + $.each(data.offices, function(i, item) { + //alert(item.name); + }); + console.log(data); var officelistParent = new Object(); - officelistParent.items = data; + officelistParent.items = data.offices; var officeListHtml = $("#officeListTemplate").render(officelistParent); $("#listplaceholder").html(officeListHtml); diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/filters/ResponseCorsFilter.java b/mifosng-provider/src/main/java/org/mifosng/platform/filters/ResponseCorsFilter.java new file mode 100644 index 000000000..dd2b9b519 --- /dev/null +++ b/mifosng-provider/src/main/java/org/mifosng/platform/filters/ResponseCorsFilter.java @@ -0,0 +1,32 @@ +package org.mifosng.platform.filters; + +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.ResponseBuilder; + +import com.sun.jersey.spi.container.ContainerRequest; +import com.sun.jersey.spi.container.ContainerResponse; +import com.sun.jersey.spi.container.ContainerResponseFilter; + +/** + * General approach to turn back-end capabilities exposed through resource-oriented API as Cross-Origin-Request complaint. + */ +public class ResponseCorsFilter implements ContainerResponseFilter { + + @Override + public ContainerResponse filter(ContainerRequest request, ContainerResponse response) { + + ResponseBuilder resp = Response.fromResponse(response.getResponse()); + + resp.header("Access-Control-Allow-Origin", "*").header("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); + + String reqHead = request.getHeaderValue("Access-Control-Request-Headers"); + + if (null != reqHead && !reqHead.equals(null)) { + resp.header("Access-Control-Allow-Headers", reqHead); + } + + response.setResponse(resp.build()); + + return response; + } +} \ No newline at end of file diff --git a/mifosng-provider/src/main/webapp/WEB-INF/web.xml b/mifosng-provider/src/main/webapp/WEB-INF/web.xml index 17821a1d7..3e713fdf6 100644 --- a/mifosng-provider/src/main/webapp/WEB-INF/web.xml +++ b/mifosng-provider/src/main/webapp/WEB-INF/web.xml @@ -51,12 +51,25 @@ jersey-serlvet com.sun.jersey.spi.spring.container.servlet.SpringServlet - com.sun.jersey.api.json.POJOMappingFeature true - + + + + com.sun.jersey.spi.container.ContainerResponseFilters + org.mifosng.platform.filters.ResponseCorsFilter + 1