/* * Copyright (C) 2011 Red Hat, Inc. and/or its affiliates. * * 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 org.jboss.errai.enterprise.rebind; import java.util.Collections; import java.util.HashMap; import java.util.Map; import javax.ws.rs.Consumes; import javax.ws.rs.Produces; import org.apache.commons.lang3.StringUtils; import org.jboss.errai.codegen.meta.MetaClass; import org.jboss.errai.codegen.meta.MetaMethod; /** * Represents HTTP headers based on JAX-RS annotations. * * @author Christian Sadilek <csadilek@redhat.com> */ public class JaxrsHeaders { private Map<String, String> headers; private JaxrsHeaders() {}; public JaxrsHeaders(JaxrsHeaders headers) { this.headers.putAll(headers.get()); } /** * Generates HTTP headers based on the JAX-RS annotations on the provided class or interface. * * @param clazz the JAX-RS resource class * @return headers */ public static JaxrsHeaders fromClass(MetaClass clazz) { JaxrsHeaders headers = new JaxrsHeaders(); Produces p = clazz.getAnnotation(Produces.class); if (p != null) { headers.setAcceptHeader(p.value()); } Consumes c = clazz.getAnnotation(Consumes.class); if (c != null) { headers.setContentTypeHeader(c.value()); } return headers; } /** * Generates HTTP headers based on the JAX-RS annotations on the provided method. * * @param clazz the JAX-RS resource class * @return headers */ public static JaxrsHeaders fromMethod(MetaMethod method) { JaxrsHeaders headers = new JaxrsHeaders(); Produces p = method.getAnnotation(Produces.class); if (p != null) { headers.setAcceptHeader(p.value()); } Consumes c = method.getAnnotation(Consumes.class); if (c != null) { headers.setContentTypeHeader(c.value()); } return headers; } private void setAcceptHeader(String[] value) { if (value == null) return; if (headers == null) headers = new HashMap<String, String>(); headers.put("Accept", StringUtils.join(value, ",")); } private void setContentTypeHeader(String[] value) { if (value == null) return; if (headers == null) headers = new HashMap<String, String>(); if (value.length == 1) headers.put("Content-Type", value[0]); } public Map<String, String> get() { if (headers == null) return Collections.<String, String>emptyMap(); return Collections.<String, String>unmodifiableMap(headers); } }