Package org.carrot2.util.simplexml

Source Code of org.carrot2.util.simplexml.PersisterHelpers

/*
* Carrot2 project.
*
* Copyright (C) 2002-2014, Dawid Weiss, Stanisław Osiński.
* All rights reserved.
*
* Refer to the full license file "carrot2.LICENSE"
* in the root folder of the repository checkout or at:
* http://www.carrot2.org/carrot2.LICENSE
*/

package org.carrot2.util.simplexml;

import java.io.*;
import java.util.Map;

import org.carrot2.util.CloseableUtils;
import org.carrot2.util.resource.IResource;
import org.carrot2.util.resource.ResourceLookup;
import org.simpleframework.xml.convert.AnnotationStrategy;
import org.simpleframework.xml.core.Persister;
import org.simpleframework.xml.strategy.Strategy;

import com.google.common.collect.ImmutableMap;

/**
* Simple XML session context helpers.
*/
public final class PersisterHelpers
{
    /**
     * Resource lookup key in the serialization/ deserialization session.
     */
    private static final String RESOURCE_LOOKUP_KEY = ResourceLookup.class.getName();

    /**
     * Acquire {@link ResourceLookup} from a serialization/ deserialization session.
     */
    public static ResourceLookup getResourceLookup(Map<Object, Object> session)
    {
        ResourceLookup resourceLookup = (ResourceLookup) session.get(RESOURCE_LOOKUP_KEY);
        if (resourceLookup == null)
        {
            throw new RuntimeException("Session does not carry resource lookup context.");
        }
        return resourceLookup;
    }

    /**
     * Create a persister with the given {@link ResourceLookup} key.
     */
    public static Persister createPersister(
        final ResourceLookup resourceLookup, Strategy strategy)
    {
        return createPersister(
            ImmutableMap.<Object, Object> of(RESOURCE_LOOKUP_KEY, resourceLookup),
            strategy);
    }

    /**
     * Read and deserialize an XML resource of class <code>clazz</code>.
     *
     * @param <T> Class to be deserialized.
     * @param required If <code>true</code>, missing resources will throw an IOException.
     *
     * @return Returns the deserialized resource or <code>null</code> if <code>required</code>
     * is <code>false</code>.
     */
    public static <T> T read(ResourceLookup resourceLookup,
        String resource, Class<T> clazz, boolean required)
        throws IOException
    {
        IResource res = resourceLookup.getFirst(resource);
        if (res == null)
        {
            if (required) throw new IOException("Required resource not found: " + resource);
            return null;
        }

        InputStream inputStream = null;
        try
        {
            inputStream = new BufferedInputStream(res.open());
            try
            {
                return PersisterHelpers.createPersister(resourceLookup,
                    new AnnotationStrategy()).read(clazz, inputStream);
            }
            catch (IOException e)
            {
                throw e;
            }
            catch (Exception e)
            {
                throw new IOException(e);
            }
        }
        finally
        {
            CloseableUtils.close(inputStream);
        }
    }
   
    /**
     * Create a persister with an arbitrary session map and deserialization strategy.
     */
    private static Persister createPersister(
        Map<Object, Object> attributes, Strategy strategy)
    {
        return new Persister(new SessionInitStrategy(strategy, attributes));
    }
}
TOP

Related Classes of org.carrot2.util.simplexml.PersisterHelpers

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.