/** * 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.provider; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.entry; import java.math.BigDecimal; import java.security.Principal; import java.util.List; import java.util.Locale; import java.util.Optional; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.CookieValue; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestParam; import ch.ralscha.extdirectspring.annotation.ExtDirectMethod; import ch.ralscha.extdirectspring.annotation.ExtDirectMethodType; import ch.ralscha.extdirectspring.bean.ExtDirectStoreReadRequest; import ch.ralscha.extdirectspring.bean.ExtDirectStoreResult; import ch.ralscha.extdirectspring.provider.RemoteProviderSimpleNamed.ResultObject; import ch.ralscha.extdirectspring.provider.RemoteProviderTreeLoad.Node; @Service public class RemoteProviderOptional { @ExtDirectMethod(group = "optional") public String method1(Optional<Integer> i, Optional<BigDecimal> bd, String s) { return String.format("method1() called-%d-%.3f-%s", i.orElse(-1), bd.orElse(new BigDecimal("3.141")), s); } @ExtDirectMethod(group = "optional") public Optional<String> method2(Optional<String> str) { if (str.isPresent()) { return Optional.of(str.get()); } return Optional.of("default"); } @ExtDirectMethod(group = "optional") public String method4(Optional<Integer> id, Optional<String> dummy, @RequestHeader Optional<String> header) { return id.get() + ";" + dummy.get() + ";" + header.get(); } @ExtDirectMethod(group = "optional") public Optional<String> method5(Optional<Integer> id, @RequestHeader("anotherName") Optional<String> header) { return Optional.of(id.get() + ";" + header.get()); } @ExtDirectMethod(group = "optional") public String method6(@RequestHeader(value = "anotherName", defaultValue = "default") Optional<String> header) { return header.orElse("another default"); } @ExtDirectMethod(group = "optional", synchronizeOnSession = true) public String method7(@RequestHeader(defaultValue = "default", required = false) Optional<String> header) { return header.orElse("this is the default"); } @ExtDirectMethod(group = "optional", synchronizeOnSession = true) public String method8( @RequestHeader(defaultValue = "default1", required = false) Optional<String> header1, final Optional<Integer> id, @RequestHeader(defaultValue = "default2", required = false) Optional<String> header2, @RequestHeader(value = "last") Optional<String> header3) { return id.get() + ";" + header1.get() + ";" + header2.get() + ";" + header3.get(); } @ExtDirectMethod(group = "optional", synchronizeOnSession = true) public String method9(@RequestHeader Optional<Integer> intHeader, @RequestHeader Optional<Boolean> booleanHeader) { return intHeader.get() + ";" + booleanHeader.get(); } @ExtDirectMethod(group = "optional") public String method10(Optional<String> name, Optional<List<String>> strings, Optional<Integer> id) { StringBuilder sb = new StringBuilder(); if (strings.isPresent()) { for (String str : strings.get()) { sb.append(str); sb.append("-"); } } return name.get() + ";" + sb.toString() + ";" + id.get(); } @ExtDirectMethod(group = "optional") public String method11(Optional<String> name, Optional<Set<Integer>> ids, Optional<Integer> id) { StringBuilder sb = new StringBuilder(); if (ids.isPresent()) { SortedSet<Integer> sorted = new TreeSet<Integer>(ids.get()); for (int i : sorted) { sb.append(i); sb.append("+"); } } return name.get() + ";" + sb.toString() + ";" + id.get(); } @ExtDirectMethod(group = "optional") public String method12(Optional<String> name, Optional<List<String>> strings, Optional<Integer> id) { StringBuilder sb = new StringBuilder(); if (strings.isPresent()) { for (String str : strings.get()) { sb.append(str); sb.append("-"); } } return name.get() + ";" + sb.toString() + ";" + id.get(); } @ExtDirectMethod(group = "optional") public String method13(Optional<String> name, Optional<Integer> id, int... ids) { StringBuilder sb = new StringBuilder(); if (ids != null) { for (int i : ids) { sb.append(i); sb.append("+"); } } return name.get() + ";" + sb.toString() + ";" + id.get(); } @ExtDirectMethod(group = "optional") public String method16(@CookieValue Optional<Integer> intCookie, @CookieValue Optional<Boolean> booleanCookie) { return intCookie.orElse(-1) + ";" + booleanCookie.orElse(false); } @ExtDirectMethod(group = "optional") public String method17(@CookieValue(required = false, defaultValue = "theDefaultValue") Optional<String> stringCookie) { return stringCookie.orElse("anotherDefault"); } @ExtDirectMethod(group = "optional") public String method18( @CookieValue(value = "nameOfTheCookie") Optional<String> aStr) { return aStr.orElse("default"); } @ExtDirectMethod(group = "optional") public String method19(@CookieValue Optional<String> stringCookie) { return stringCookie.orElse(null); } @ExtDirectMethod(value = ExtDirectMethodType.POLL, event = "opoll1", group = "optional") public Optional<String> opoll1(Locale locale, @RequestParam(value = "id") Optional<Integer> id) { assertThat(locale).isEqualTo(Locale.ENGLISH); return Optional.of("Result: " + id.get()); } @ExtDirectMethod(value = ExtDirectMethodType.POLL, event = "opoll2", synchronizeOnSession = true, group = "optional") public int opoll2(@RequestParam(value = "id") Optional<Integer> id, HttpServletRequest request) { assertThat(request).isNotNull(); return id.orElse(2) * 2; } @ExtDirectMethod(value = ExtDirectMethodType.POLL, event = "opoll3", group = "optional") public Optional<Integer> opoll3(@RequestParam(value = "id") Optional<Integer> id, Optional<String> dummy) { assertThat(dummy.isPresent()).isFalse(); if (id.isPresent()) { return Optional.of(id.get() * 2); } return Optional.empty(); } @ExtDirectMethod(value = ExtDirectMethodType.POLL, group = "optional") public Optional<String> opoll4(@RequestParam(value = "id") Optional<Integer> id, Optional<String> dummy, @RequestHeader Optional<String> header) { return Optional.of(id.orElse(100) + ";" + dummy.orElse("dummy") + ";" + header.orElse("header")); } @ExtDirectMethod(value = ExtDirectMethodType.POLL, group = "optional") public Optional<String> opoll5( @RequestParam(value = "id", required = false) Optional<Integer> id, Optional<String> dummy, @CookieValue Optional<String> cookie) { return Optional.of(id.orElse(23) + ";" + dummy.orElse("dummy") + ";" + cookie.orElse("cookie")); } @OptionalNamedMethod public Optional<String> namedMethod1(Optional<Long> i, Optional<Double> d, Optional<String> s) { return Optional.of(String.format("namedMethod1() called-%d-%.3f-%s", i.orElse(-1L), d.orElse(3.141), s.orElse("default"))); } @OptionalNamedMethod public Optional<ResultObject> namedMethod2(HttpSession session, @RequestParam(value = "lastName") Optional<String> name, @RequestParam(value = "theAge") Optional<Integer> age, Optional<Boolean> active) { assertThat(session).isNotNull(); return Optional .of(new ResultObject(name.get(), age.orElse(21), active.orElse(true))); } @OptionalNamedMethod public Optional<String> namedMethod3( @CookieValue("aSimpleCookie") Optional<String> cookie, Optional<Long> i) { return Optional.of(i.orElse(100L) + ":" + cookie.orElse("defaultCookieValue")); } @OptionalNamedMethod public Optional<String> namedMethod4( @RequestHeader("aSimpleHeader") Optional<String> header, Optional<BigDecimal> bd) { return Optional.of(bd.orElse(new BigDecimal("3.141")) + ":" + header.orElse("defaultHeaderValue")); } @ExtDirectMethod(value = ExtDirectMethodType.STORE_READ, group = "optional") public ExtDirectStoreResult<Row> storeRead1(ExtDirectStoreReadRequest request, Locale locale, @RequestParam(value = "id") Optional<Integer> id) { if (id.isPresent()) { assertThat(id.get()).isEqualTo(10); assertThat(request.getParams().size()).isEqualTo(1); assertThat(request.getParams()).contains(entry("id", 10)); } else { assertThat(id.orElse(20)).isEqualTo(20); assertThat(request.getParams().isEmpty()).isTrue(); } assertThat(locale).isEqualTo(Locale.ENGLISH); return RemoteProviderStoreRead.createExtDirectStoreResult(request, ":" + id.orElse(20) + ";" + locale); } @ExtDirectMethod(value = ExtDirectMethodType.STORE_READ, group = "optional") public ExtDirectStoreResult<Row> storeRead2(ExtDirectStoreReadRequest request, @CookieValue Optional<String> cookie, @RequestHeader Optional<String> requestHeader) { return RemoteProviderStoreRead.createExtDirectStoreResult(request, ":" + cookie.orElse("defaultCookie") + ":" + requestHeader.orElse("defaultHeader")); } @ExtDirectMethod(value = ExtDirectMethodType.TREE_LOAD, group = "optional") public List<Node> treeLoad1(@RequestParam("node") Optional<String> node, HttpServletResponse response, final HttpServletRequest request, @RequestParam Optional<String> foo, @CookieValue Optional<String> theCookie, final HttpSession session, Locale locale, Principal principal) { return RemoteProviderTreeLoad.createTreeList(node.get(), ":" + foo.orElse("defaultValue2") + ";" + theCookie.orElse("defaultCookieValue") + ";" + (response != null) + ";" + (request != null) + ";" + (session != null) + ";" + locale); } @ExtDirectMethod(value = ExtDirectMethodType.TREE_LOAD, group = "optional") public List<Node> treeLoad2(@RequestParam("node") Optional<String> node, HttpServletResponse response, @RequestHeader Optional<Boolean> aHeader, HttpServletRequest request) { return RemoteProviderTreeLoad.createTreeList(node.get(), ":" + aHeader.orElse(true) + ";" + (response != null) + ";" + (request != null)); } }