/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 org.apache.isis.viewer.restfulobjects.applib; import org.apache.isis.viewer.restfulobjects.applib.client.ClientRequestConfigurer; import org.jboss.resteasy.client.ClientRequest; public enum RestfulHttpMethod { GET(javax.ws.rs.HttpMethod.GET, ArgStrategy.QUERY_STRING), PUT(javax.ws.rs.HttpMethod.PUT, ArgStrategy.BODY), DELETE(javax.ws.rs.HttpMethod.DELETE, ArgStrategy.QUERY_STRING), POST(javax.ws.rs.HttpMethod.POST, ArgStrategy.BODY); private enum ArgStrategy { /** * Individually encodes each query arg. */ QUERY_ARGS { @Override void setUpArgs(final ClientRequestConfigurer clientRequestConfigurer, final JsonRepresentation requestArgs) { clientRequestConfigurer.queryArgs(requestArgs); } }, /** * Sends entire request args as a URL encoded map */ QUERY_STRING { @Override void setUpArgs(final ClientRequestConfigurer clientRequestConfigurer, final JsonRepresentation requestArgs) { clientRequestConfigurer.queryString(requestArgs); } }, BODY { @Override void setUpArgs(final ClientRequestConfigurer clientRequestConfigurer, final JsonRepresentation requestArgs) { clientRequestConfigurer.body(requestArgs); } }; abstract void setUpArgs(ClientRequestConfigurer clientRequestConfigurer, JsonRepresentation requestArgs); } private final String javaxRsMethod; private final ArgStrategy argStrategy; private RestfulHttpMethod(final String javaxRsMethod, final ArgStrategy argStrategy) { this.javaxRsMethod = javaxRsMethod; this.argStrategy = argStrategy; } public String getJavaxRsMethod() { return javaxRsMethod; } /** * It's a bit nasty that we need to ask for the {@link org.jboss.resteasy.specimpl.ResteasyUriBuilder} as * well as the {@link ClientRequest}, but that's because the * {@link ClientRequest} does not allow us to setup raw query strings (only * query name/arg pairs) * * @param clientRequestConfigurer * @param requestArgs */ public void setUpArgs(final ClientRequestConfigurer clientRequestConfigurer, final JsonRepresentation requestArgs) { clientRequestConfigurer.setHttpMethod(this); if (requestArgs == null) { return; } if (!requestArgs.isMap()) { throw new IllegalArgumentException("requestArgs must be a map; instead got: " + requestArgs); } argStrategy.setUpArgs(clientRequestConfigurer, requestArgs); } }