/** * Copyright 2010-2016 Ralph Schaer <ralphschaer@gmail.com> * * 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 ch.ralscha.extdirectspring.controller; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.http.MediaType; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.util.StringUtils; import org.springframework.web.context.WebApplicationContext; import ch.ralscha.extdirectspring.bean.api.Action; import ch.ralscha.extdirectspring.bean.api.PollingProvider; import ch.ralscha.extdirectspring.bean.api.RemotingApi; import ch.ralscha.extdirectspring.util.ApiCache; import ch.ralscha.extdirectspring.util.MethodInfoCache; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration("classpath:/testApplicationContext.xml") public class ApiControllerTest { @Autowired private WebApplicationContext wac; private MockMvc mockMvc; @Autowired private ConfigurationService configurationService; @Autowired private MethodInfoCache methodInfoCache; @Autowired private ApiCache apiCache; @Before public void setupApiController() throws Exception { this.methodInfoCache.clear(); this.apiCache.clear(); this.wac.publishEvent(new ContextRefreshedEvent(this.wac)); Configuration config = new Configuration(); ReflectionTestUtils.setField(this.configurationService, "configuration", config); this.configurationService.afterPropertiesSet(); this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); } @Test public void testNoActionNamespaceDebugDefaultConfig() throws Exception { ApiRequestParams params = ApiRequestParams.builder().apiNs("test") .remotingApiVar("remotingApiVar").pollingUrlsVar("pollingUrlsVar") .build(); runTest(this.mockMvc, params, allApis(null)); } @Test public void testNoActionNamespaceDebugCustomConfig() throws Exception { Configuration config = new Configuration(); config.setEnableBuffer(10); config.setMaxRetries(2); config.setTimeout(12000); ReflectionTestUtils.setField(this.configurationService, "configuration", config); this.configurationService.afterPropertiesSet(); ApiRequestParams params = ApiRequestParams.builder().apiNs("testC") .remotingApiVar("remotingApiV").pollingUrlsVar("pollingUrlsV") .configuration(config).build(); runTest(this.mockMvc, params, allApis(null)); } @Test public void testWithActionNamespaceDefaultConfig() throws Exception { ApiRequestParams params = ApiRequestParams.builder().apiNs("Ext.ns") .actionNs("actionns").remotingApiVar("TEST_REMOTING_API") .pollingUrlsVar("TEST_POLLING_URLS").build(); runTest(this.mockMvc, params, allApis("actionns")); } @Test public void testWithActionNamespaceCustomConfig() throws Exception { Configuration config = new Configuration(); config.setEnableBuffer(Boolean.FALSE); config.setTimeout(10000); ReflectionTestUtils.setField(this.configurationService, "configuration", config); this.configurationService.afterPropertiesSet(); ApiRequestParams params = ApiRequestParams.builder().apiNs("Ext.ns") .actionNs("actionns").remotingApiVar("TEST_REMOTING_API") .pollingUrlsVar("TEST_POLLING_URLS").configuration(config).build(); runTest(this.mockMvc, params, allApis("actionns")); } @Test public void testEmptyGroupDefaultConfig() throws Exception { ApiRequestParams params = ApiRequestParams.builder().apiNs("test") .remotingApiVar("TEST_REMOTING_API").pollingUrlsVar("TEST_POLLING_URLS") .group("").build(); runTest(this.mockMvc, params, emptyGroupApis(null)); } @Test public void testBlankStringGroupDefaultConfig() throws Exception { ApiRequestParams params = ApiRequestParams.builder().apiNs("test") .remotingApiVar("TEST_REMOTING_API").pollingUrlsVar("TEST_POLLING_URLS") .group(" ").build(); runTest(this.mockMvc, params, emptyGroupApis(null)); } @Test public void testEmptyGroupCustomConfig() throws Exception { Configuration config = new Configuration(); config.setEnableBuffer(Boolean.TRUE); config.setTimeout(33333); ReflectionTestUtils.setField(this.configurationService, "configuration", config); this.configurationService.afterPropertiesSet(); ApiRequestParams params = ApiRequestParams.builder().apiNs("test") .remotingApiVar("TEST_REMOTING_API").pollingUrlsVar("TEST_POLLING_URLS") .group("").configuration(config).build(); runTest(this.mockMvc, params, emptyGroupApis(null)); } @Test public void testBlankStringGroupCustomConfig() throws Exception { Configuration config = new Configuration(); config.setEnableBuffer(Boolean.TRUE); config.setTimeout(33333); ReflectionTestUtils.setField(this.configurationService, "configuration", config); this.configurationService.afterPropertiesSet(); ApiRequestParams params = ApiRequestParams.builder().apiNs("test") .remotingApiVar("TEST_REMOTING_API").pollingUrlsVar("TEST_POLLING_URLS") .group(" ").configuration(config).build(); runTest(this.mockMvc, params, emptyGroupApis(null)); } @Test public void testBlankStringGroupCustomConfigBufferLimit() throws Exception { Configuration config = new Configuration(); config.setEnableBuffer(Boolean.TRUE); config.setTimeout(333); config.setBufferLimit(4); ReflectionTestUtils.setField(this.configurationService, "configuration", config); this.configurationService.afterPropertiesSet(); ApiRequestParams params = ApiRequestParams.builder().apiNs("test") .remotingApiVar("TEST_REMOTING_API").pollingUrlsVar("TEST_POLLING_URLS") .group(" ").configuration(config).build(); runTest(this.mockMvc, params, emptyGroupApis(null)); } @Test public void testUnknownGroupDefaultConfig() throws Exception { ApiRequestParams params = ApiRequestParams.builder().apiNs("test") .remotingApiVar("TEST_REMOTING_API").pollingUrlsVar("TEST_POLLING_URLS") .group("xy").build(); runTest(this.mockMvc, params, noApis(null)); } @Test public void testUnknownGroupCustomConfig() throws Exception { Configuration config = new Configuration(); config.setEnableBuffer(Boolean.TRUE); ReflectionTestUtils.setField(this.configurationService, "configuration", config); this.configurationService.afterPropertiesSet(); ApiRequestParams params = ApiRequestParams.builder().apiNs("test") .remotingApiVar("TEST_REMOTING_API").pollingUrlsVar("TEST_POLLING_URLS") .group("xy").configuration(config).build(); runTest(this.mockMvc, params, noApis(null)); } @Test public void testGroup1() throws Exception { testGroup1(null, null); testGroup1(null, null); this.apiCache.clear(); testGroup1(null, "-1.0.0"); this.apiCache.clear(); testGroup1(null, "-fingerprinted"); } @Test public void testGroup1WithConfig() throws Exception { Configuration config = new Configuration(); config.setTimeout(12000); ReflectionTestUtils.setField(this.configurationService, "configuration", config); this.configurationService.afterPropertiesSet(); testGroup1(config, null); testGroup1(config, null); this.apiCache.clear(); testGroup1(config, "-1.0.0"); } private void testGroup1(Configuration config, String fingerprint) throws Exception { ApiRequestParams params = ApiRequestParams.builder().apiNs("Ext.ns") .actionNs("actionns").group("group1").configuration(config).build(); doTest("/api-debug-doc.js", params, group1Apis("actionns")); doTest("/api-debug.js", params, group1Apis("actionns")); if (fingerprint == null) { doTest("/api.js", params, group1Apis("actionns")); } else { MvcResult result = doTest("/api" + fingerprint + ".js", params, group1Apis("actionns")); MockHttpServletResponse response = result.getResponse(); assertThat(response.getHeaderNames()).hasSize(5); assertThat(response.getHeader("ETag")).isNotNull(); assertThat(response.getHeader("Cache-Control")) .isEqualTo("public, max-age=" + 6 * 30 * 24 * 60 * 60); String expiresHeader = (String) response.getHeaderValue("Expires"); DateTimeFormatter fmt = DateTimeFormat .forPattern("EEE, dd MMM yyyy HH:mm:ss z"); DateTime expires = DateTime.parse(expiresHeader, fmt); DateTime inSixMonths = DateTime.now(DateTimeZone.UTC) .plusSeconds(6 * 30 * 24 * 60 * 60); assertThat(expires.getYear()).isEqualTo(inSixMonths.getYear()); assertThat(expires.getMonthOfYear()).isEqualTo(inSixMonths.getMonthOfYear()); assertThat(expires.getDayOfMonth()).isEqualTo(inSixMonths.getDayOfMonth()); assertThat(expires.getHourOfDay()).isEqualTo(inSixMonths.getHourOfDay()); assertThat(expires.getMinuteOfDay()).isEqualTo(inSixMonths.getMinuteOfDay()); } } @Test public void testGroup2() throws Exception { ApiRequestParams params = ApiRequestParams.builder().apiNs("test") .remotingApiVar("TEST_REMOTING_API").pollingUrlsVar("TEST_POLLING_URLS") .group("group2").build(); runTest(this.mockMvc, params, group2Apis(null)); runTest(this.mockMvc, params, group2Apis(null)); } @Test public void testGroup3() throws Exception { ApiRequestParams params = ApiRequestParams.builder().apiNs("Extns").actionNs("ns") .remotingApiVar("RAPI").pollingUrlsVar("PURLS").group("group3").build(); runTest(this.mockMvc, params, group3Apis("ns")); runTest(this.mockMvc, params, group3Apis("ns")); } @Test public void testGroup4() throws Exception { ApiRequestParams params = ApiRequestParams.builder().apiNs("test").actionNs("") .remotingApiVar("TEST_REMOTING_API").pollingUrlsVar("TEST_POLLING_URLS") .group("group4").build(); runTest(this.mockMvc, params, group4Apis(null)); params = ApiRequestParams.builder().apiNs("test") .remotingApiVar("TEST_REMOTING_API").pollingUrlsVar("TEST_POLLING_URLS") .group("group4").build(); runTest(this.mockMvc, params, group4Apis(null)); } @Test public void testGroup1and2() throws Exception { ApiRequestParams params = ApiRequestParams.builder().apiNs("Ext.ns") .actionNs("actionns").group("group1,group2").build(); runTest(this.mockMvc, params, group1and2Apis("actionns")); } @Test public void testGroup1andUnknown() throws Exception { ApiRequestParams params = ApiRequestParams.builder().apiNs("Ext.ns") .actionNs("actionns").group("group1,unknown").build(); runTest(this.mockMvc, params, group1Apis("actionns")); } @Test public void testInterfaceGroup() throws Exception { ApiRequestParams params = ApiRequestParams.builder().apiNs("test").actionNs("") .remotingApiVar("TEST_REMOTING_API").pollingUrlsVar("TEST_POLLING_URLS") .group("interface").build(); runTest(this.mockMvc, params, interfaceApis(null)); params = ApiRequestParams.builder().apiNs("test") .remotingApiVar("TEST_REMOTING_API").pollingUrlsVar("TEST_POLLING_URLS") .group("interface").build(); runTest(this.mockMvc, params, interfaceApis(null)); } @Test public void testNoApiNs() throws Exception { ApiRequestParams params = ApiRequestParams.builder().apiNs("").actionNs("") .remotingApiVar("TEST_REMOTING_API").pollingUrlsVar("TEST_POLLING_URLS") .group("group4").build(); runTest(this.mockMvc, params, group4Apis(null)); params = ApiRequestParams.builder().apiNs("").remotingApiVar("TEST_REMOTING_API") .pollingUrlsVar("TEST_POLLING_URLS").group("group4").build(); runTest(this.mockMvc, params, group4Apis(null)); } @Test public void testFullRouterUrl() throws Exception { ApiRequestParams params = ApiRequestParams.builder().apiNs("apiNs").actionNs("") .remotingApiVar("TEST_RMT_API").pollingUrlsVar("TEST_POLL_URLS") .fullRouterUrl(Boolean.TRUE).group("group2").build(); runTest(this.mockMvc, params, group2Apis(null, "http://localhost/router")); params = ApiRequestParams.builder().apiNs("apiNs").remotingApiVar("TEST_RMT_API") .pollingUrlsVar("TEST_POLL_URLS").fullRouterUrl(Boolean.TRUE) .group("group2").build(); runTest(this.mockMvc, params, group2Apis(null, "http://localhost/router")); params = ApiRequestParams.builder().apiNs("apiNs").actionNs("") .remotingApiVar("TEST_RMT_API").pollingUrlsVar("TEST_POLL_URLS") .fullRouterUrl(Boolean.FALSE).group("group2").build(); runTest(this.mockMvc, params, group2Apis(null, "/router")); params = ApiRequestParams.builder().apiNs("apiNs").remotingApiVar("TEST_RMT_API") .pollingUrlsVar("TEST_POLL_URLS").fullRouterUrl(Boolean.FALSE) .group("group2").build(); runTest(this.mockMvc, params, group2Apis(null, "/router")); } @Test public void testFormat() throws Exception { ApiRequestParams params = ApiRequestParams.builder().actionNs("").apiNs("apiNs") .remotingApiVar("TEST_RMT_API").pollingUrlsVar("TEST_POLL_URLS") .group("group2").format("json").build(); runTest(this.mockMvc, params, group2Apis(null, "http://localhost/router")); params = ApiRequestParams.builder().actionNs("ns").apiNs("") .remotingApiVar("TEST_RMT_API").pollingUrlsVar("TEST_POLL_URLS") .group("group2").format("json").fullRouterUrl(Boolean.TRUE).build(); runTest(this.mockMvc, params, group2Apis("ns", "http://localhost/router")); } @Test public void testBaseRouterUrl() throws Exception { ApiRequestParams params = ApiRequestParams.builder().actionNs("").apiNs("an") .remotingApiVar("rapi").pollingUrlsVar("papi").group("group2") .baseRouterUrl("test").build(); runTest(this.mockMvc, params, group2Apis(null, "test/router")); } @Test public void testBaseRouterUrlWithEndingSlash() throws Exception { ApiRequestParams params = ApiRequestParams.builder().actionNs("").apiNs("an") .remotingApiVar("rapi").pollingUrlsVar("papi").group("group2") .fullRouterUrl(Boolean.TRUE).baseRouterUrl("service/test/").build(); runTest(this.mockMvc, params, group2Apis(null, "service/test/router")); } @Test public void testBaseRouterUrlEmptyString() throws Exception { ApiRequestParams params = ApiRequestParams.builder().actionNs("").apiNs("an") .remotingApiVar("rapi").pollingUrlsVar("papi").group("group2") .baseRouterUrl("").build(); runTest(this.mockMvc, params, group2Apis(null, "/router")); } static void runTest(MockMvc mockMvc, ApiRequestParams params, RemotingApi api) throws Exception { doTest(mockMvc, "/api-debug-doc.js", params, api); doTest(mockMvc, "/api-debug.js", params, api); doTest(mockMvc, "/api.js", params, api); } private MvcResult doTest(String url, ApiRequestParams params, RemotingApi expectedApi) throws Exception { return doTest(this.mockMvc, url, params, expectedApi); } public static MvcResult doTest(MockMvc mockMvc, String url, ApiRequestParams params, RemotingApi expectedApi) throws Exception { MockHttpServletRequestBuilder request = get(url).accept(MediaType.ALL) .characterEncoding("UTF-8"); if (params.getApiNs() != null) { request.param("apiNs", params.getApiNs()); } if (params.getActionNs() != null) { request.param("actionNs", params.getActionNs()); } if (params.getFormat() != null) { request.param("format", params.getFormat()); } if (params.getGroup() != null) { request.param("group", params.getGroup()); } if (params.getPollingUrlsVar() != null) { request.param("pollingUrlsVar", params.getPollingUrlsVar()); } if (params.getRemotingApiVar() != null) { request.param("remotingApiVar", params.getRemotingApiVar()); } if (params.isFullRouterUrl() != null && params.isFullRouterUrl()) { request.param("fullRouterUrl", "true"); } if (params.getBaseRouterUrl() != null) { request.param("baseRouterUrl", params.getBaseRouterUrl()); } String contentType = "application/javascript"; if ("json".equals(params.getFormat())) { contentType = "application/json;charset=UTF-8"; } else if (params.getConfiguration() != null) { contentType = params.getConfiguration().getJsContentType(); } MvcResult result = mockMvc.perform(request).andExpect(status().isOk()) .andExpect(content().contentType(contentType)).andReturn(); if ("json".equals(params.getFormat())) { compareJson(result, expectedApi, params); } else { compare(result, expectedApi, params); } return result; } public static RemotingApi noApis(String namespace) { return new RemotingApi("remoting", "/router", namespace); } static RemotingApi group1Apis(String namespace) { RemotingApi remotingApi = new RemotingApi("remoting", "/router", namespace); remotingApi.addAction("remoteProviderSimple", Action.create("method1", 0)); remotingApi.addAction("remoteProviderTreeLoad", Action.create("method1", 1)); return remotingApi; } static RemotingApi groupApisWithDoc(String namespace) { RemotingApi remotingApi = new RemotingApi("remoting", "/router", namespace); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method1", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method2", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method3", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method4", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method5", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method6", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method7", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method8", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method9", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method10", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method11", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method12", 0)); return remotingApi; } public static RemotingApi group2Apis(String namespace, String url) { RemotingApi remotingApi = new RemotingApi("remoting", url, namespace); remotingApi.addAction("remoteProviderSimple", Action.create("method3", 3)); remotingApi.addAction("remoteProviderSimple", Action.create("method5", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method6", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method6Ed", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method7", 1)); remotingApi.addAction("remoteProviderStoreModify", Action.create("update4", 1)); remotingApi.addAction("remoteProviderStoreModifyArray", Action.create("update4", 1)); remotingApi.addAction("remoteProviderStoreModifyInterface", Action.create("update4", 1)); remotingApi.addAction("remoteProviderStoreModifySingle", Action.create("update4", 1)); remotingApi.addAction("formInfoController", Action.createFormHandler("upload", 0)); remotingApi.addAction("uploadService", Action.createFormHandler("upload", 0)); remotingApi.addAction("uploadService", Action.createFormHandler("uploadEd", 0)); remotingApi.addPollingProvider( new PollingProvider("pollProvider", "handleMessage1", "message1")); remotingApi.addPollingProvider( new PollingProvider("pollProvider", "handleMessage2", "message2")); remotingApi.addPollingProvider( new PollingProvider("pollProvider", "message6", "message6")); return remotingApi; } public static RemotingApi group1and2Apis(String namespace) { RemotingApi remotingApi = new RemotingApi("remoting", "/router", namespace); remotingApi.addAction("remoteProviderSimple", Action.create("method1", 0)); remotingApi.addAction("remoteProviderTreeLoad", Action.create("method1", 1)); remotingApi.addAction("remoteProviderSimple", Action.create("method3", 3)); remotingApi.addAction("remoteProviderSimple", Action.create("method5", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method6", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method6Ed", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method7", 1)); remotingApi.addAction("remoteProviderStoreModify", Action.create("update4", 1)); remotingApi.addAction("remoteProviderStoreModifyArray", Action.create("update4", 1)); remotingApi.addAction("remoteProviderStoreModifyInterface", Action.create("update4", 1)); remotingApi.addAction("remoteProviderStoreModifySingle", Action.create("update4", 1)); remotingApi.addAction("formInfoController", Action.createFormHandler("upload", 0)); remotingApi.addAction("uploadService", Action.createFormHandler("upload", 0)); remotingApi.addAction("uploadService", Action.createFormHandler("uploadEd", 0)); remotingApi.addPollingProvider( new PollingProvider("pollProvider", "handleMessage1", "message1")); remotingApi.addPollingProvider( new PollingProvider("pollProvider", "handleMessage2", "message2")); remotingApi.addPollingProvider( new PollingProvider("pollProvider", "message6", "message6")); return remotingApi; } static RemotingApi group2Apis(String namespace) { return group2Apis(namespace, "/router"); } public static RemotingApi group3Apis(String namespace) { RemotingApi remotingApi = new RemotingApi("remoting", "/router", namespace); remotingApi.addAction("remoteProviderSimple", Action.create("method5", 1)); remotingApi.addAction("remoteProviderSimple", Action.create("method9", 0)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method5", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method5Ed", 1)); remotingApi.addAction("remoteProviderStoreModify", Action.create("destroy", 1)); remotingApi.addAction("remoteProviderStoreModify", Action.create("destroyNotBatched", 1, false)); remotingApi.addAction("remoteProviderStoreModifyArray", Action.create("destroy", 1)); remotingApi.addAction("remoteProviderStoreModifySingle", Action.create("destroy", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method1", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method5", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method5Ed", 1)); remotingApi.addAction("formInfoController", Action.createFormHandler("updateInfo", 0)); remotingApi.addAction("formInfoController", Action.createFormHandler("updateInfoDirect", 0)); remotingApi.addAction("formInfoController", Action.createFormHandler("updateInfoDirectEd", 0)); remotingApi.addAction("formInfoController2", Action.createFormHandler("updateInfo1", 0)); remotingApi.addAction("formInfoController2", Action.createFormHandler("updateInfo2", 0)); remotingApi.addAction("remoteProviderTreeLoad", Action.create("method3", 1)); remotingApi.addPollingProvider( new PollingProvider("pollProvider", "handleMessage5", "message5")); return remotingApi; } public static RemotingApi group4Apis(String namespace) { RemotingApi remotingApi = new RemotingApi("remoting", "/router", namespace); remotingApi.addPollingProvider( new PollingProvider("pollProvider", "handleMessage3", "message3")); return remotingApi; } public static RemotingApi interfaceApis(String namespace) { RemotingApi remotingApi = new RemotingApi("remoting", "/router", namespace); remotingApi.addAction("remoteProviderImplementation", Action.create("storeRead", 1)); remotingApi.addAction("remoteProviderImplementation", Action.create("method2", 0)); remotingApi.addAction("remoteProviderImplementation", Action.create("method3", 3)); return remotingApi; } public static RemotingApi allApis(String namespace) { RemotingApi remotingApi = new RemotingApi("remoting", "/router", namespace); remotingApi.addAction("remoteProviderSimple", Action.create("method1", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method2", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method3", 3)); remotingApi.addAction("remoteProviderSimple", Action.create("method4b", 3)); remotingApi.addAction("remoteProviderSimple", Action.create("method5", 1)); remotingApi.addAction("remoteProviderSimple", Action.create("method6", 2)); remotingApi.addAction("remoteProviderSimple", Action.create("method7", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method8", 1)); remotingApi.addAction("remoteProviderSimple", Action.create("method9", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method10", 9)); remotingApi.addAction("remoteProviderSimple", Action.create("method11", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method11b", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method12", 1)); remotingApi.addAction("remoteProviderSimple", Action.create("method13", 9)); remotingApi.addAction("remoteProviderSimple", Action.create("method14", 4)); remotingApi.addAction("remoteProviderSimple", Action.create("method15", 2)); remotingApi.addAction("remoteProviderSimple", Action.create("method16", 1)); remotingApi.addAction("remoteProviderSimple", Action.create("method17", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method18", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method19", 1)); remotingApi.addAction("remoteProviderSimple", Action.create("method20", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method21", 3)); remotingApi.addAction("remoteProviderSimple", Action.create("method22", 3)); remotingApi.addAction("remoteProviderSimple", Action.create("method23", 3)); remotingApi.addAction("remoteProviderSimple", Action.create("method24", 3)); remotingApi.addAction("remoteProviderSimple", Action.create("method25", 3)); remotingApi.addAction("remoteProviderSimple", Action.create("method26", 3)); remotingApi.addAction("remoteProviderSimple", Action.create("method27", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method28", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method29", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method30", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method31", 1, false)); remotingApi.addAction("remoteProviderSimple", Action.create("methodWithOptional", 1)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method1", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method2", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method3", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method4", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method5", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method6", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method7", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method8", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method9", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method10", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method11", 0)); remotingApi.addAction("remoteProviderSimpleDoc", Action.create("method12", 0)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method1", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method2", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method3", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method4", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method4Ed", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method5", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method6", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method5Ed", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method6Ed", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method7", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method8", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method9", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method10", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method11", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method12", 1, false)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method8Ed", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method9Ed", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method10Ed", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method11Ed", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method12Ed", 1, false)); remotingApi.addAction("remoteProviderStoreRead", Action.create("methodFilter", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("methodMetadata", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("methodMetadataEd", 1)); remotingApi.addAction("remoteProviderStoreModify", Action.create("create1", 1)); remotingApi.addAction("remoteProviderStoreModify", Action.create("create2", 1)); remotingApi.addAction("remoteProviderStoreModify", Action.create("update1", 1)); remotingApi.addAction("remoteProviderStoreModify", Action.create("update2", 1)); remotingApi.addAction("remoteProviderStoreModify", Action.create("update3", 1)); remotingApi.addAction("remoteProviderStoreModify", Action.create("update4", 1)); remotingApi.addAction("remoteProviderStoreModify", Action.create("destroy", 1)); remotingApi.addAction("remoteProviderStoreModify", Action.create("destroyNotBatched", 1, false)); remotingApi.addAction("remoteProviderStoreModifyArray", Action.create("create1", 1)); remotingApi.addAction("remoteProviderStoreModifyArray", Action.create("create2", 1)); remotingApi.addAction("remoteProviderStoreModifyArray", Action.create("update1", 1)); remotingApi.addAction("remoteProviderStoreModifyArray", Action.create("update2", 1)); remotingApi.addAction("remoteProviderStoreModifyArray", Action.create("update3", 1)); remotingApi.addAction("remoteProviderStoreModifyArray", Action.create("update4", 1)); remotingApi.addAction("remoteProviderStoreModifyArray", Action.create("destroy", 1)); remotingApi.addAction("remoteProviderStoreModifyInterface", Action.create("create1", 1)); remotingApi.addAction("remoteProviderStoreModifyInterface", Action.create("create2", 1)); remotingApi.addAction("remoteProviderStoreModifyInterface", Action.create("update1", 1)); remotingApi.addAction("remoteProviderStoreModifyInterface", Action.create("update2", 1)); remotingApi.addAction("remoteProviderStoreModifyInterface", Action.create("update3", 1)); remotingApi.addAction("remoteProviderStoreModifyInterface", Action.create("update4", 1)); remotingApi.addAction("remoteProviderStoreModifySingle", Action.create("create1", 1)); remotingApi.addAction("remoteProviderStoreModifySingle", Action.create("create2", 1)); remotingApi.addAction("remoteProviderStoreModifySingle", Action.create("update1", 1)); remotingApi.addAction("remoteProviderStoreModifySingle", Action.create("update2", 1)); remotingApi.addAction("remoteProviderStoreModifySingle", Action.create("update3", 1)); remotingApi.addAction("remoteProviderStoreModifySingle", Action.create("update4", 1)); remotingApi.addAction("remoteProviderStoreModifySingle", Action.create("destroy", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method1", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method2", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method3", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method4", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method5", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method6", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method7", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method5Ed", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method6Ed", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method7Ed", 1)); remotingApi.addAction("formInfoController", Action.createFormHandler("updateInfo", 0)); remotingApi.addAction("formInfoController", Action.createFormHandler("updateInfoDirect", 0)); remotingApi.addAction("formInfoController", Action.createFormHandler("updateInfoDirectEd", 0)); remotingApi.addAction("formInfoController", Action.createFormHandler("upload", 0)); remotingApi.addAction("uploadService", Action.createFormHandler("upload", 0)); remotingApi.addAction("uploadService", Action.createFormHandler("uploadEd", 0)); remotingApi.addAction("formInfoController3", Action.create("updateInfoJson", 1)); remotingApi.addAction("formInfoController3", Action.create("updateInfoJsonDirect", 1)); remotingApi.addAction("formInfoController3", Action.create("updateInfoJsonDirectError", 1)); remotingApi.addAction("formInfoController3", Action.create("updateInfoJsonEd", 1)); remotingApi.addAction("formInfoController3", Action.create("updateInfoJsonDirectEd", 1)); remotingApi.addAction("formInfoController3", Action.create("updateInfoJsonDirectErrorEd", 1)); remotingApi.addAction("formInfoController2", Action.createFormHandler("updateInfo1", 0)); remotingApi.addAction("formInfoController2", Action.createFormHandler("updateInfo2", 0)); remotingApi.addAction("remoteProviderTreeLoad", Action.create("method1", 1)); remotingApi.addAction("remoteProviderTreeLoad", Action.create("method2", 1)); remotingApi.addAction("remoteProviderTreeLoad", Action.create("method3", 1)); remotingApi.addAction("remoteProviderTreeLoad", Action.create("method4", 1)); remotingApi.addAction("remoteProviderTreeLoad", Action.create("method5", 1)); remotingApi.addAction("remoteProviderTreeLoad", Action.create("method6", 1)); remotingApi.addAction("remoteProviderTreeLoad", Action.create("method7", 1, false)); remotingApi.addAction("remoteProviderImplementation", Action.create("storeRead", 1)); remotingApi.addAction("remoteProviderImplementation", Action.create("method2", 0)); remotingApi.addAction("remoteProviderImplementation", Action.create("method3", 3)); remotingApi.addAction("bookService", Action.create("read", 1)); remotingApi.addAction("bookService", Action.create("readWithPaging", 1)); remotingApi.addAction("bookService", Action.create("readWithPagingEd", 1)); remotingApi.addAction("bookService", Action.create("update3", 1)); remotingApi.addAction("bookService", Action.create("update4", 1)); remotingApi.addAction("bookService", Action.create("delete3", 1)); remotingApi.addAction("bookService", Action.create("delete4", 1)); remotingApi.addAction("bookService", Action.create("create3", 1)); remotingApi.addAction("bookService", Action.create("create4", 1)); remotingApi.addAction("bookSubAopService", Action.create("read", 1)); remotingApi.addAction("bookSubAopService", Action.create("readWithPaging", 1)); remotingApi.addAction("bookSubAopService", Action.create("update3", 1)); remotingApi.addAction("bookSubAopService", Action.create("update4", 1)); remotingApi.addAction("bookSubAopService", Action.create("delete3", 1)); remotingApi.addAction("bookSubAopService", Action.create("delete4", 1)); remotingApi.addAction("bookSubAopService", Action.create("create3", 1)); remotingApi.addAction("bookSubAopService", Action.create("create4", 1)); remotingApi.addAction("bookSubService", Action.create("read", 1)); remotingApi.addAction("bookSubService", Action.create("readWithPaging", 1)); remotingApi.addAction("bookSubService", Action.create("update3", 1)); remotingApi.addAction("bookSubService", Action.create("update4", 1)); remotingApi.addAction("bookSubService", Action.create("delete3", 1)); remotingApi.addAction("bookSubService", Action.create("delete4", 1)); remotingApi.addAction("bookSubService", Action.create("create3", 1)); remotingApi.addAction("bookSubService", Action.create("create4", 1)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed("method1", new ArrayList<String>(), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed("method2", Arrays.asList("i", "d", "s"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed("method3", Arrays.asList("userName"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed("method4", Arrays.asList("a", "b"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed("method5", Arrays.asList("d"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed("method6", new ArrayList<String>(), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed( "method7", Arrays.asList("flag", "aCharacter", "workflow", "aInt", "aLong", "aDouble", "aFloat", "aShort", "aByte"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed("method9", Arrays.asList("aRow"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed( "method10", Arrays.asList("flag", "aCharacter", "workflow", "aInt", "aLong", "aDouble", "aFloat", "aShort", "aByte"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed("method11", Arrays.asList("endDate", "normalParameter", "aDate", "percent"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed( "methodCollection1", Arrays.asList("name", "collections"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed( "methodCollection2", Arrays.asList("name", "collections"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed( "methodCollection3", Arrays.asList("name", "collections"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action .createNamed("methodArray1", Arrays.asList("name", "array"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action .createNamed("methodArray2", Arrays.asList("name", "array"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action .createNamed("methodArray3", Arrays.asList("name", "array"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action .createNamed("methodArray4", Arrays.asList("name", "array"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed("methodRP1", Arrays.asList("lastName", "theAge", "active"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed("methodRP2", Arrays.asList("lastName", "theAge", "active"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed("methodRP3", Arrays.asList("lastName", "theAge", "active"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed("withCookie", Arrays.asList("i"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed("withRequiredCookie", Arrays.asList("i"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed("withRequestHeader", Arrays.asList("bd"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed( "withRequiredRequestHeader", Arrays.asList("bd"), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action .createNamed("notBatched", Collections.<String>emptyList(), null, false)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed( "nonStrictMethod1", Collections.<String>emptyList(), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed( "nonStrictMethod2", Collections.<String>emptyList(), null, null)); remotingApi.addAction("remoteProviderSimpleNamed", Action.createNamed( "nonStrictMethod3", Collections.<String>emptyList(), null, null)); remotingApi.addPollingProvider( new PollingProvider("pollProvider", "handleMessage1", "message1")); remotingApi.addPollingProvider( new PollingProvider("pollProvider", "handleMessage2", "message2")); remotingApi.addPollingProvider( new PollingProvider("pollProvider", "handleMessage3", "message3")); remotingApi.addPollingProvider( new PollingProvider("pollProvider", "handleMessage4", "message4")); remotingApi.addPollingProvider( new PollingProvider("pollProvider", "handleMessage5", "message5")); remotingApi.addPollingProvider( new PollingProvider("pollProvider", "message6", "message6")); remotingApi.addPollingProvider(new PollingProvider("pollProvider", "messageRequestHeader1", "messageRequestHeader1")); remotingApi.addPollingProvider(new PollingProvider("pollProvider", "messageRequestHeader2", "messageRequestHeader2")); remotingApi.addPollingProvider(new PollingProvider("pollProvider", "messageRequestHeader3", "messageRequestHeader3")); remotingApi.addPollingProvider(new PollingProvider("pollProvider", "messageRequestHeader4", "messageRequestHeader4")); remotingApi.addPollingProvider(new PollingProvider("pollProvider", "messageRequestHeader5", "messageRequestHeader5")); remotingApi.addPollingProvider(new PollingProvider("pollProvider", "messageRequestHeader6", "messageRequestHeader6")); remotingApi.addPollingProvider(new PollingProvider("pollProvider", "messageCookieValue1", "messageCookieValue1")); remotingApi.addPollingProvider(new PollingProvider("pollProvider", "messageCookieValue2", "messageCookieValue2")); remotingApi.addPollingProvider(new PollingProvider("pollProvider", "messageCookieValue3", "messageCookieValue3")); remotingApi.addPollingProvider(new PollingProvider("pollProvider", "messageCookieValue4", "messageCookieValue4")); remotingApi.addPollingProvider(new PollingProvider("pollProvider", "messageCookieValue5", "messageCookieValue5")); remotingApi.addPollingProvider(new PollingProvider("pollProvider", "messageCookieValue6", "messageCookieValue6")); remotingApi.addAction("remoteProviderOptional", Action.create("method1", 3)); remotingApi.addAction("remoteProviderOptional", Action.create("method2", 1)); remotingApi.addAction("remoteProviderOptional", Action.create("method4", 2)); remotingApi.addAction("remoteProviderOptional", Action.create("method5", 1)); remotingApi.addAction("remoteProviderOptional", Action.create("method6", 0)); remotingApi.addAction("remoteProviderOptional", Action.create("method7", 0)); remotingApi.addAction("remoteProviderOptional", Action.create("method8", 1)); remotingApi.addAction("remoteProviderOptional", Action.create("method9", 0)); remotingApi.addAction("remoteProviderOptional", Action.create("method10", 3)); remotingApi.addAction("remoteProviderOptional", Action.create("method11", 3)); remotingApi.addAction("remoteProviderOptional", Action.create("method12", 3)); remotingApi.addAction("remoteProviderOptional", Action.create("method13", 3)); remotingApi.addAction("remoteProviderOptional", Action.create("method16", 0)); remotingApi.addAction("remoteProviderOptional", Action.create("method17", 0)); remotingApi.addAction("remoteProviderOptional", Action.create("method18", 0)); remotingApi.addAction("remoteProviderOptional", Action.create("method19", 0)); remotingApi.addPollingProvider( new PollingProvider("remoteProviderOptional", "opoll1", "opoll1")); remotingApi.addPollingProvider( new PollingProvider("remoteProviderOptional", "opoll2", "opoll2")); remotingApi.addPollingProvider( new PollingProvider("remoteProviderOptional", "opoll3", "opoll3")); remotingApi.addPollingProvider( new PollingProvider("remoteProviderOptional", "opoll4", "opoll4")); remotingApi.addPollingProvider( new PollingProvider("remoteProviderOptional", "opoll5", "opoll5")); remotingApi.addAction("remoteProviderOptional", Action.createNamed("namedMethod1", Arrays.asList("i", "d", "s"), null, null)); remotingApi.addAction("remoteProviderOptional", Action.createNamed("namedMethod2", Arrays.asList("lastName", "theAge", "active"), null, null)); remotingApi.addAction("remoteProviderOptional", Action.createNamed("namedMethod3", Arrays.asList("i"), null, null)); remotingApi.addAction("remoteProviderOptional", Action.createNamed("namedMethod4", Arrays.asList("bd"), null, null)); remotingApi.addAction("remoteProviderOptional", Action.create("storeRead1", 1)); remotingApi.addAction("remoteProviderOptional", Action.create("storeRead2", 1)); remotingApi.addAction("remoteProviderOptional", Action.create("treeLoad1", 1)); remotingApi.addAction("remoteProviderOptional", Action.create("treeLoad2", 1)); remotingApi.addAction("remoteProviderMetadata", Action.createTreeLoad("method1", 1, Collections.singletonList("mp"), null)); remotingApi.addAction("remoteProviderMetadata", Action.createTreeLoad("method2", 1, Collections.singletonList("id"), null)); remotingApi.addAction("remoteProviderMetadata", Action.createTreeLoad("method1Ed", 1, Collections.singletonList("mp"), null)); remotingApi.addAction("remoteProviderMetadata", Action.createTreeLoad("method2Ed", 1, Collections.singletonList("id"), null)); remotingApi.addAction("remoteProviderMetadata", Action.createTreeLoad("method3", 1, Collections.singletonList("id"), null)); remotingApi.addAction("remoteProviderMetadata", Action.createTreeLoad("method4", 1, Collections.singletonList("id"), null)); remotingApi.addAction("remoteProviderMetadata", Action.createTreeLoad("method5", 1, Collections.singletonList("id"), null)); remotingApi.addAction("remoteProviderMetadata", Action.createTreeLoad("method6", 1, Collections.singletonList("id"), null)); remotingApi.addAction("remoteProviderMetadata", Action.createTreeLoad("method5Ed", 1, Collections.singletonList("id"), null)); remotingApi.addAction("remoteProviderMetadata", Action.createTreeLoad("method6Ed", 1, Collections.singletonList("id"), null)); remotingApi.addAction("remoteProviderMetadata", Action.createTreeLoad("update1", 1, Collections.singletonList("id"), null)); remotingApi.addAction("remoteProviderMetadata", Action.createTreeLoad("update2", 1, Collections.singletonList("id"), null)); remotingApi.addAction("remoteProviderMetadata", Action.createTreeLoad("update3", 1, Collections.singletonList("id"), null)); remotingApi.addAction("remoteProviderMetadata", Action.createTreeLoad("treeLoad1", 1, Collections.singletonList("id"), null)); remotingApi.addAction("remoteProviderMetadata", Action.createTreeLoad("treeLoad2", 1, Collections.singletonList("id"), null)); remotingApi.addAction("remoteProviderMetadata", Action.createTreeLoad("treeLoad3", 1, Collections.singletonList("id"), null)); return remotingApi; } public static RemotingApi emptyGroupApis(String namespace) { RemotingApi remotingApi = new RemotingApi("remoting", "/router", namespace); remotingApi.addAction("remoteProviderSimple", Action.create("method2", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method4b", 3)); remotingApi.addAction("remoteProviderSimple", Action.create("method6", 2)); remotingApi.addAction("remoteProviderSimple", Action.create("method7", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method8", 1)); remotingApi.addAction("remoteProviderSimple", Action.create("method10", 9)); remotingApi.addAction("remoteProviderSimple", Action.create("method11", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method11b", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method12", 1)); remotingApi.addAction("remoteProviderSimple", Action.create("method13", 9)); remotingApi.addAction("remoteProviderSimple", Action.create("method14", 4)); remotingApi.addAction("remoteProviderSimple", Action.create("method15", 2)); remotingApi.addAction("remoteProviderSimple", Action.create("method16", 1)); remotingApi.addAction("remoteProviderSimple", Action.create("method17", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method18", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method19", 1)); remotingApi.addAction("remoteProviderSimple", Action.create("method20", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method21", 3)); remotingApi.addAction("remoteProviderSimple", Action.create("method22", 3)); remotingApi.addAction("remoteProviderSimple", Action.create("method23", 3)); remotingApi.addAction("remoteProviderSimple", Action.create("method24", 3)); remotingApi.addAction("remoteProviderSimple", Action.create("method25", 3)); remotingApi.addAction("remoteProviderSimple", Action.create("method26", 3)); remotingApi.addAction("remoteProviderSimple", Action.create("method27", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method28", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method29", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method30", 0)); remotingApi.addAction("remoteProviderSimple", Action.create("method31", 1, false)); remotingApi.addAction("remoteProviderSimple", Action.create("methodWithOptional", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method1", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method2", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method3", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method4", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method4Ed", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method8", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method9", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method10", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method11", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method12", 1, false)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method8Ed", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method9Ed", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method10Ed", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method11Ed", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("method12Ed", 1, false)); remotingApi.addAction("remoteProviderStoreRead", Action.create("methodFilter", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("methodMetadata", 1)); remotingApi.addAction("remoteProviderStoreRead", Action.create("methodMetadataEd", 1)); remotingApi.addAction("remoteProviderStoreModify", Action.create("create1", 1)); remotingApi.addAction("remoteProviderStoreModify", Action.create("create2", 1)); remotingApi.addAction("remoteProviderStoreModify", Action.create("update1", 1)); remotingApi.addAction("remoteProviderStoreModify", Action.create("update2", 1)); remotingApi.addAction("remoteProviderStoreModify", Action.create("update3", 1)); remotingApi.addAction("remoteProviderStoreModifyArray", Action.create("create1", 1)); remotingApi.addAction("remoteProviderStoreModifyArray", Action.create("create2", 1)); remotingApi.addAction("remoteProviderStoreModifyArray", Action.create("update1", 1)); remotingApi.addAction("remoteProviderStoreModifyArray", Action.create("update2", 1)); remotingApi.addAction("remoteProviderStoreModifyArray", Action.create("update3", 1)); remotingApi.addAction("remoteProviderStoreModifyInterface", Action.create("create1", 1)); remotingApi.addAction("remoteProviderStoreModifyInterface", Action.create("create2", 1)); remotingApi.addAction("remoteProviderStoreModifyInterface", Action.create("update1", 1)); remotingApi.addAction("remoteProviderStoreModifyInterface", Action.create("update2", 1)); remotingApi.addAction("remoteProviderStoreModifyInterface", Action.create("update3", 1)); remotingApi.addAction("remoteProviderStoreModifySingle", Action.create("create1", 1)); remotingApi.addAction("remoteProviderStoreModifySingle", Action.create("create2", 1)); remotingApi.addAction("remoteProviderStoreModifySingle", Action.create("update1", 1)); remotingApi.addAction("remoteProviderStoreModifySingle", Action.create("update2", 1)); remotingApi.addAction("remoteProviderStoreModifySingle", Action.create("update3", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method2", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method3", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method4", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method6", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method7", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method6Ed", 1)); remotingApi.addAction("remoteProviderFormLoad", Action.create("method7Ed", 1)); remotingApi.addAction("remoteProviderTreeLoad", Action.create("method2", 1)); remotingApi.addAction("remoteProviderTreeLoad", Action.create("method4", 1)); remotingApi.addAction("remoteProviderTreeLoad", Action.create("method5", 1)); remotingApi.addAction("remoteProviderTreeLoad", Action.create("method6", 1)); remotingApi.addAction("remoteProviderTreeLoad", Action.create("method7", 1, false)); remotingApi.addAction("formInfoController3", Action.create("updateInfoJson", 1)); remotingApi.addAction("formInfoController3", Action.create("updateInfoJsonDirect", 1)); remotingApi.addAction("formInfoController3", Action.create("updateInfoJsonDirectError", 1)); remotingApi.addAction("formInfoController3", Action.create("updateInfoJsonEd", 1)); remotingApi.addAction("formInfoController3", Action.create("updateInfoJsonDirectEd", 1)); remotingApi.addAction("formInfoController3", Action.create("updateInfoJsonDirectErrorEd", 1)); remotingApi.addPollingProvider( new PollingProvider("pollProvider", "handleMessage4", "message4")); return remotingApi; } @SuppressWarnings("unchecked") public static void compareJson(MvcResult result, RemotingApi remotingApi, ApiRequestParams params) throws IOException { String content = result.getResponse().getContentAsString(); assertThat(result.getResponse().getContentType()) .isEqualTo("application/json;charset=UTF-8"); assertThat(content).isNotEmpty(); Map<String, Object> rootAsMap = ControllerUtil.readValue(content, Map.class); if (remotingApi.getNamespace() == null) { assertThat(rootAsMap).hasSize(4); } else { assertThat(rootAsMap).hasSize(5); assertThat(rootAsMap.get("namespace")).isEqualTo(remotingApi.getNamespace()); } assertThat(rootAsMap.get("url")).isEqualTo(remotingApi.getUrl()); assertThat(rootAsMap.get("type")).isEqualTo("remoting"); if (StringUtils.hasText(params.getApiNs())) { assertThat(rootAsMap.get("descriptor")) .isEqualTo(params.getApiNs() + "." + params.getRemotingApiVar()); } else { assertThat(rootAsMap.get("descriptor")).isEqualTo(params.getRemotingApiVar()); } assertThat(rootAsMap.containsKey("actions")).isTrue(); if (remotingApi.getNamespace() != null) { assertThat(rootAsMap.get("namespace")).isEqualTo(remotingApi.getNamespace()); } Map<String, Object> beans = (Map<String, Object>) rootAsMap.get("actions"); assertThat(beans).hasSize(remotingApi.getActions().size()); for (String beanName : remotingApi.getActions().keySet()) { List<Map<String, Object>> actions = (List<Map<String, Object>>) beans .get(beanName); List<Action> expectedActions = remotingApi.getActions().get(beanName); compare(expectedActions, actions); } } static void compare(MvcResult result, RemotingApi remotingApi, ApiRequestParams params) throws UnsupportedEncodingException { if (params.getConfiguration() == null || !params.getConfiguration().isStreamResponse()) { assertThat(result.getResponse().getContentLength()) .isEqualTo(result.getResponse().getContentAsByteArray().length); } compare(result.getResponse().getContentAsString(), result.getResponse().getContentType(), remotingApi, params); } @SuppressWarnings("unchecked") public static void compare(String contentString, String contentTypeString, RemotingApi remotingApi, ApiRequestParams params) { String content = contentString; content = content.replace(";", ";\n"); content = content.replace("{", "{\n"); content = content.replace("}", "}\n"); String contentType = contentTypeString; int cs = contentType.indexOf(';'); if (cs != -1) { contentType = contentType.substring(0, cs); } if (params.getConfiguration() != null) { assertThat(contentType) .isEqualTo(params.getConfiguration().getJsContentType()); } else { assertThat(contentType).isEqualTo("application/javascript"); } assertThat(content).isNotEmpty(); String[] lines = content.split("\n"); String remotingApiLine; String pollingApiLine; String apiNs = params.getApiNs(); if (apiNs == null) { apiNs = "Ext.app"; } String remotingApiVar = params.getRemotingApiVar(); if (remotingApiVar == null) { remotingApiVar = "REMOTING_API"; } String pollingUrlsVar = params.getPollingUrlsVar(); if (pollingUrlsVar == null) { pollingUrlsVar = "POLLING_URLS"; } if (StringUtils.hasText(apiNs)) { String extNsLine = "Ext.ns('" + apiNs + "');"; assertContains(extNsLine, lines); remotingApiLine = apiNs + "." + remotingApiVar + " = {"; pollingApiLine = apiNs + "." + pollingUrlsVar + " = {"; } else { assertDoesNotContains("Ext.ns(", lines); remotingApiLine = remotingApiVar + " = {"; pollingApiLine = pollingUrlsVar + " = {"; } int startRemotingApi = assertContains(remotingApiLine, lines); int startPollingApi = lines.length; if (!remotingApi.getPollingProviders().isEmpty()) { startPollingApi = assertContains(pollingApiLine, lines); } else { assertDoesNotContains(pollingApiLine, lines); } if (remotingApi.getNamespace() != null) { String actionNs = "Ext.ns('" + remotingApi.getNamespace() + "');"; assertContains(actionNs, lines); } String remotingJson = "{"; for (int i = startRemotingApi + 1; i < startPollingApi; i++) { remotingJson += lines[i]; } String pollingJson = "{"; if (!remotingApi.getPollingProviders().isEmpty()) { for (int i = startPollingApi + 1; i < lines.length; i++) { pollingJson += lines[i]; } } int noOfconfigOptions = 0; if (params.getConfiguration() != null) { if (params.getConfiguration().getTimeout() != null) { noOfconfigOptions++; } if (params.getConfiguration().getEnableBuffer() != null) { noOfconfigOptions++; } if (params.getConfiguration().getMaxRetries() != null) { noOfconfigOptions++; } if (params.getConfiguration().getBufferLimit() != null) { noOfconfigOptions++; } } Map<String, Object> rootAsMap = ControllerUtil.readValue(remotingJson, Map.class); if (remotingApi.getNamespace() == null) { if (3 + noOfconfigOptions != rootAsMap.size()) { for (String key : rootAsMap.keySet()) { System.out.println(key + "->" + rootAsMap.get(key)); } } assertThat(rootAsMap).hasSize(3 + noOfconfigOptions); } else { if (4 + noOfconfigOptions != rootAsMap.size()) { System.out.println("NOOFCONFIG: " + noOfconfigOptions); for (String key : rootAsMap.keySet()) { System.out.println(key + "->" + rootAsMap.get(key)); } } assertThat(rootAsMap).hasSize(4 + noOfconfigOptions); } assertThat(rootAsMap.get("url")).isEqualTo(remotingApi.getUrl()); if (params.getProviderType() != null) { assertThat(rootAsMap.get("type")).isEqualTo(params.getProviderType()); } else { assertThat(rootAsMap.get("type")).isEqualTo("remoting"); } assertThat(rootAsMap.containsKey("actions")).isTrue(); if (remotingApi.getNamespace() != null) { assertThat(rootAsMap.get("namespace")).isEqualTo(remotingApi.getNamespace()); } if (params.getConfiguration() != null) { if (params.getConfiguration().getTimeout() != null) { assertThat(rootAsMap.get("timeout")) .isEqualTo(params.getConfiguration().getTimeout()); } else { assertThat(rootAsMap.containsKey("timeout")).isFalse(); } if (params.getConfiguration().getEnableBuffer() != null) { assertThat(rootAsMap.get("enableBuffer")) .isEqualTo(params.getConfiguration().getEnableBuffer()); } else { assertThat(rootAsMap.containsKey("enableBuffer")).isFalse(); } if (params.getConfiguration().getBufferLimit() != null) { assertThat(rootAsMap.get("bufferLimit")) .isEqualTo(params.getConfiguration().getBufferLimit()); } else { assertThat(rootAsMap.containsKey("bufferLimit")).isFalse(); } if (params.getConfiguration().getMaxRetries() != null) { assertThat(rootAsMap.get("maxRetries")) .isEqualTo(params.getConfiguration().getMaxRetries()); } else { assertThat(rootAsMap.containsKey("maxRetries")).isFalse(); } if (params.getConfiguration().getBufferLimit() != null) { assertThat(rootAsMap.get("bufferLimit")) .isEqualTo(params.getConfiguration().getBufferLimit()); } else { assertThat(rootAsMap.containsKey("bufferLimit")).isFalse(); } } else { assertThat(rootAsMap.get("timeout")).isNull(); assertThat(rootAsMap.get("enableBuffer")).isNull(); assertThat(rootAsMap.get("maxRetries")).isNull(); assertThat(rootAsMap.get("bufferLimit")).isNull(); } Map<String, Object> beans = (Map<String, Object>) rootAsMap.get("actions"); assertThat(beans.size()).isEqualTo(remotingApi.getActions().size()); for (String beanName : remotingApi.getActions().keySet()) { List<Map<String, Object>> actions = (List<Map<String, Object>>) beans .get(beanName); List<Action> expectedActions = remotingApi.getActions().get(beanName); compare(expectedActions, actions); } if (!remotingApi.getPollingProviders().isEmpty()) { Map<String, Object> pollingMap = ControllerUtil.readValue(pollingJson, Map.class); assertThat(pollingMap).hasSize(remotingApi.getPollingProviders().size()); for (PollingProvider pp : remotingApi.getPollingProviders()) { String url = (String) pollingMap.get(pp.getEvent()); assertThat(url).isNotNull(); assertEquals(String.format("%s/%s/%s/%s", remotingApi.getUrl().replace("router", "poll"), pp.getBeanName(), pp.getMethod(), pp.getEvent()), url); } } } public static void compareSse(List<String> expectedActions, Map<String, String> actions, String beanName, String url) { assertThat(actions).isNotEmpty(); assertThat(actions).hasSize(expectedActions.size()); for (String expectedAction : expectedActions) { String actionUrl = actions.get(expectedAction); assertThat(actionUrl) .isEqualTo(String.format("%s/%s/%s", url, beanName, expectedAction)); } } @SuppressWarnings({ "null", "unchecked" }) public static void compare(List<Action> expectedActions, List<Map<String, Object>> actions) { assertThat(actions).hasSize(expectedActions.size()); for (Action expectedAction : expectedActions) { Map<String, Object> action = null; for (Map<String, Object> map : actions) { if (map.get("name").equals(expectedAction.getName())) { action = map; break; } } assertThat(action).isNotNull(); assertThat(action.get("name")).isEqualTo(expectedAction.getName()); assertThat(action.get("len")).isEqualTo(expectedAction.getLen()); if (expectedAction.getBatched() != null && !expectedAction.getBatched().booleanValue()) { assertThat(action.get("batched")).isEqualTo(Boolean.FALSE); } else { assertThat(action.containsKey("batched")).isFalse(); } if (expectedAction.getFormHandler() != null && expectedAction.getFormHandler()) { assertThat(action.get("formHandler")) .isEqualTo(expectedAction.getFormHandler()); } else { assertThat(action.containsKey("formHandler")).isFalse(); } List<String> params = (List<String>) action.get("params"); assertTrue(params != null && expectedAction.getParams() != null || params == null && expectedAction.getParams() == null); if (expectedAction.getParams() != null) { assertThat(params).hasSize(expectedAction.getParams().size()); for (String param : expectedAction.getParams()) { assertThat(params.contains(param)).isTrue(); } } } } @SuppressWarnings("null") public static int assertContains(String extNsLine, String[] lines) { if (lines == null) { fail("no lines"); } int lineCount = 0; for (String line : lines) { if (line.startsWith(extNsLine)) { return lineCount; } lineCount++; } fail("lines does not contain : " + extNsLine); return -1; } @SuppressWarnings("null") public static void assertDoesNotContains(String extNsLine, String[] lines) { if (lines == null) { fail("no lines"); } for (String line : lines) { if (line.startsWith(extNsLine)) { fail("lines does contain : " + extNsLine); } } } }