package org.jboss.resteasy.test.validation.resource; import org.jboss.resteasy.annotations.providers.multipart.MultipartForm; import org.jboss.resteasy.annotations.providers.multipart.PartType; import org.jboss.resteasy.annotations.providers.multipart.XopWithMultipartRelated; import org.jboss.resteasy.plugins.providers.multipart.InputPart; import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput; import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataOutput; import org.jboss.resteasy.plugins.providers.multipart.MultipartInput; import org.jboss.resteasy.plugins.providers.multipart.MultipartOutput; import org.jboss.resteasy.plugins.providers.multipart.MultipartRelatedInput; import org.jboss.resteasy.plugins.providers.multipart.MultipartRelatedOutput; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; @Path("") public class ContextProvidersResource { @GET @Produces("multipart/mixed") @Path("get/mixed") public MultipartOutput getMixed() { MultipartOutput output = new MultipartOutput(); output.addPart(new ContextProvidersCustomer("Bill"), MediaType.APPLICATION_XML_TYPE); output.addPart("Bob", MediaType.TEXT_PLAIN_TYPE); return output; } @GET @Produces("multipart/form-data") @MultipartForm @Path("get/form") public MultipartFormDataOutput getForm() { MultipartFormDataOutput output = new MultipartFormDataOutput(); output.addFormData("bill", new ContextProvidersCustomer("Bill"), MediaType.APPLICATION_XML_TYPE, "tmp1"); output.addFormData("bob", "Bob", MediaType.TEXT_PLAIN_TYPE); return output; } @GET @Produces("multipart/mixed") @PartType("application/xml") @Path("get/list") public List<ContextProvidersCustomer> getList() { List<ContextProvidersCustomer> list = new ArrayList<ContextProvidersCustomer>(); list.add(new ContextProvidersCustomer("Bill")); list.add(new ContextProvidersCustomer("Bob")); return list; } @GET @Produces("multipart/form-data") @PartType("application/xml") @Path("get/map") public Map<String, ContextProvidersCustomer> getMap() { Map<String, ContextProvidersCustomer> map = new HashMap<String, ContextProvidersCustomer>(); map.put("bill", new ContextProvidersCustomer("Bill")); map.put("bob", new ContextProvidersCustomer("Bob")); return map; } @GET @Produces("multipart/related") @Path("get/related") public MultipartRelatedOutput getRelated() { MultipartRelatedOutput output = new MultipartRelatedOutput(); output.setStartInfo("text/html"); output.addPart("Bill", new MediaType("image", "png"), "bill", "binary"); output.addPart("Bob", new MediaType("image", "png"), "bob", "binary"); return output; } @GET @Path("get/multipartform") @Produces("multipart/form-data") @MultipartForm public ContextProvidersCustomerForm getMultipartForm() { ContextProvidersCustomerForm form = new ContextProvidersCustomerForm(); form.setCustomer(new ContextProvidersCustomer("Bill")); return form; } @GET @Path("get/xop") @Produces("multipart/related") @XopWithMultipartRelated public ContextProvidersXop getXop() { return new ContextProvidersXop("goodbye world".getBytes()); } @POST @Consumes("multipart/mixed") @Produces(MediaType.APPLICATION_XML) @Path("post/mixed") public List<ContextProvidersName> postMixed(MultipartInput input) throws IOException { List<InputPart> list = input.getParts(); List<ContextProvidersName> names = new ArrayList<ContextProvidersName>(); for (Iterator<InputPart> it = list.iterator(); it.hasNext(); ) { InputPart inputPart = it.next(); if (MediaType.APPLICATION_XML_TYPE.equals(inputPart.getMediaType())) { names.add(new ContextProvidersName(inputPart.getBody(ContextProvidersCustomer.class, null).getName())); } else { names.add(new ContextProvidersName(inputPart.getBody(String.class, null))); } } return names; } @POST @Consumes("multipart/form-data") @Produces(MediaType.APPLICATION_XML) @Path("post/form") public List<ContextProvidersName> postForm(MultipartFormDataInput input) throws IOException { Map<String, List<InputPart>> map = input.getFormDataMap(); List<ContextProvidersName> names = new ArrayList<ContextProvidersName>(); for (Iterator<String> it = map.keySet().iterator(); it.hasNext(); ) { String key = it.next(); InputPart inputPart = map.get(key).iterator().next(); if (MediaType.APPLICATION_XML_TYPE.equals(inputPart.getMediaType())) { names.add(new ContextProvidersName(inputPart.getBody(ContextProvidersCustomer.class, null).getName())); } else { names.add(new ContextProvidersName(inputPart.getBody(String.class, null))); } } return names; } @POST @Consumes("multipart/mixed") @Produces(MediaType.APPLICATION_XML) @Path("post/list") public List<ContextProvidersName> postList(List<ContextProvidersCustomer> customers) throws IOException { List<ContextProvidersName> names = new ArrayList<ContextProvidersName>(); for (ContextProvidersCustomer customer : customers) { names.add(new ContextProvidersName(customer.getName())); } return names; } @POST @Consumes("multipart/form-data") @Produces(MediaType.APPLICATION_XML) @Path("post/map") public List<ContextProvidersName> postMap(Map<String, ContextProvidersCustomer> customers) throws IOException { List<ContextProvidersName> names = new ArrayList<ContextProvidersName>(); for (Iterator<String> it = customers.keySet().iterator(); it.hasNext(); ) { String key = it.next(); ContextProvidersCustomer customer = customers.get(key); names.add(new ContextProvidersName(key + ":" + customer.getName())); } return names; } @POST @Consumes("multipart/related") @Produces(MediaType.APPLICATION_XML) @Path("post/related") public List<ContextProvidersName> postRelated(MultipartRelatedInput customers) throws IOException { List<ContextProvidersName> names = new ArrayList<ContextProvidersName>(); for (Iterator<InputPart> it = customers.getParts().iterator(); it.hasNext(); ) { InputPart part = it.next(); String name = part.getBody(String.class, null); names.add(new ContextProvidersName(name)); } return names; } @POST @Consumes("multipart/form-data") @Path("post/multipartform") public String postMultipartForm(@MultipartForm ContextProvidersCustomerForm form) throws IOException { return form.getCustomer().getName(); } @POST @Path("post/xop") @Consumes("multipart/related") public String postXop(@XopWithMultipartRelated ContextProvidersXop xop) { return new String(xop.getBytes()); } }