All Downloads are FREE. Search and download functionalities are using the official Maven repository.

br.com.caelum.vraptor.restfulie.serialization.LinkConverterJSON Maven / Gradle / Ivy

/***
 * Copyright (c) 2009 Caelum - www.caelum.com.br/opensource - [email protected]
 * All rights reserved.
 *
 * 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 br.com.caelum.vraptor.restfulie.serialization;

import java.util.List;

import br.com.caelum.vraptor.config.Configuration;
import br.com.caelum.vraptor.restfulie.Restfulie;
import br.com.caelum.vraptor.restfulie.hypermedia.ConfigurableHypermediaResource;
import br.com.caelum.vraptor.restfulie.hypermedia.HypermediaResource;
import br.com.caelum.vraptor.restfulie.relation.Relation;
import br.com.caelum.vraptor.restfulie.relation.RelationBuilder;

import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.ExtendedHierarchicalStreamWriterHelper;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;

/**
 * Reads all transitions from your resource object and converts them into link
 * elements.
* The converter passed in the constructor will be used to marshall the rest of * the object. * * @author guilherme silveira * @author lucas cavalcanti * @author ac de souza * @author marina melo */ public class LinkConverterJSON implements Converter { private final Restfulie restfulie; private final Converter base; private final Configuration config; public LinkConverterJSON(Converter base, Restfulie restfulie, Configuration config) { this.base = base; this.restfulie = restfulie; this.config = config; } public void marshal(Object root, HierarchicalStreamWriter writer, MarshallingContext context) { if (root instanceof ConfigurableHypermediaResource) { context.convertAnother(((ConfigurableHypermediaResource) root).getModel()); } else { base.marshal(root, writer, context); } HypermediaResource resource = (HypermediaResource) root; RelationBuilder builder = restfulie.newRelationBuilder(); resource.configureRelations(builder); if( !builder.getRelations().isEmpty() ) { ExtendedHierarchicalStreamWriterHelper.startNode(writer, "links", List.class); Link link = null; for (Relation t : builder.getRelations()) { link = new Link(t.getName(), config.getApplicationPath() + t.getUri()); ExtendedHierarchicalStreamWriterHelper.startNode(writer, "link", String.class); context.convertAnother(link); writer.endNode(); } writer.endNode(); } } public Object unmarshal(HierarchicalStreamReader arg0, UnmarshallingContext arg1) { return base.unmarshal(arg0, arg1); } @SuppressWarnings("rawtypes") public boolean canConvert(Class type) { return HypermediaResource.class.isAssignableFrom(type) && base.canConvert(type); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy