Hi Vincent,
you can retrieve a color representation in the post method by requesting the
Color resource with a color uri :
Representation color1 = null;
Response response = getContext().getDispatcher().get(color1Uri);
if (response.getStatus().isSuccess){
color1 = response.getEntity();
}
You can also define your own ColorRepresentation (sent by the Color resource
according to the client accepted media types).
best regards,
Thierry Boileau
On 8/28/07, Vincent <[EMAIL PROTECTED]> wrote:
>
> Hello,
>
> Here is what I'm trying to do:
>
> POST /colorMixer
> form:
> color1=http://www.colors.com/color/blue
> color2=http://www.colors.com/color/red
>
> A successful call will return
> 201 CREATED
> http://www.colors.com/clor/purple
>
> My question is how do I implement the ColorMixerResource.post
> (Representation)
> method?
> More exactly, how to I get the Blue and Red objects from the uris?
>
> I have a ColorResource class that has a constructor that knows how to
> retrieve the right color from the DB:
>
> public ColorResource(contex,request,response){
> String colorCode = (String) request.getAttributes().get("color");
> // lookup that color code in the DB
> Color color = ....
> }
>
>
> Solution 1
> ==========
> I am tempted to try to reuse that code, because when I get to this
> constructor,
> the request is already parsed, the attributes are extracted according to
> the
> template I specified for this resource.
>
> ColorMixer.post(Representation entity){
> Form f = getRequest().getEntityAsForm();
> String color1Uri = f.getFiestValue("color1");
> String color2Uri = f.getFiestValue("color2");
>
> Request request1 = new Request(color1Uri...)
> color1Resource = new Color1Resource(getContext(),request1,
> getResponse());
> Color color1 = color1Resource.getColor();
>
> // same thing for color2
> ...
>
> Color result = Mixer.mix(color1,color2);
>
> // return the representation of the resulting color in the response
> }
>
>
>
>
> Solution 2
> ===========
> A second approach would be to -somehow- reuse the template for the
> ColorResource resource and use it to parse the uris.
>
> ColorMixer.post(Representation entity){
> Form f = getRequest().getEntityAsForm();
> String color1Uri = f.getFiestValue("color1");
> String color2Uri = f.getFiestValue("color2");
>
> Map<String, Object> variables = new HashMap<String,Object>();
> if (ColorTemplate.parse(color1Uri,variables) != -1){
> String Color1Code = (String)variables.get("color");
> // get the color from the DB
> }
>
>
> // etc.
>
> }
>
> To make this work the createRoute method would have to stick the templates
> in the context so that they are available to resources.
>
>
> Neither approaches satisfies me. Yet, I'm sure there is a simple and
> elegant
> solution.
>
> Any suggestions?
>
> Thanks,
>
> -Vincent.
>
>
>
>
>
>
>
>