org.solmix.runtime.support.spring.SpringResourceResolver.java Source code

Java tutorial

Introduction

Here is the source code for org.solmix.runtime.support.spring.SpringResourceResolver.java

Source

/*
 * Copyright 2013 The Solmix Project
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.gnu.org/licenses/ 
 * or see the FSF site: http://www.fsf.org. 
 */
package org.solmix.runtime.support.spring;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import org.solmix.runtime.resource.ResourceResolver;
import org.solmix.runtime.resource.ResourceResolverAdaptor;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.io.Resource;

/**
 * 
 * @author solmix.f@gmail.com
 * @version $Id$  2014729
 */

public class SpringResourceResolver extends ResourceResolverAdaptor
        implements ResourceResolver, ApplicationContextAware {
    ApplicationContext context;

    /**
     * @param applicationContext
     */
    public SpringResourceResolver(ApplicationContext applicationContext) {
        this.context = applicationContext;
    }

    @Override
    public InputStream getAsStream(String name) {
        Resource r = context.getResource(name);
        if (r != null && r.exists()) {
            try {
                return r.getInputStream();
            } catch (IOException e) {
                //ignore and return null
            }
        }
        r = context.getResource("/" + name);
        if (r != null && r.exists()) {
            try {
                return r.getInputStream();
            } catch (IOException e) {
                //ignore and return null
            }
        }
        return null;
    }

    @Override
    public <T> T resolve(String resourceName, Class<T> resourceType) {

        try {
            T resource = null;
            if (resourceName == null) {
                String names[] = context.getBeanNamesForType(resourceType);
                if (names != null && names.length > 0) {
                    resource = resourceType.cast(context.getBean(names[0], resourceType));
                }
            } else {
                resource = resourceType.cast(context.getBean(resourceName, resourceType));
            }
            return resource;
        } catch (NoSuchBeanDefinitionException def) {
            //ignore
        }
        try {
            if (ClassLoader.class.isAssignableFrom(resourceType)) {
                return resourceType.cast(context.getClassLoader());
            } else if (URL.class.isAssignableFrom(resourceType)) {
                Resource r = context.getResource(resourceName);
                if (r != null && r.exists()) {
                    r.getInputStream().close(); //checks to see if the URL really can resolve
                    return resourceType.cast(r.getURL());
                }
            }
        } catch (IOException e) {
            //ignore
        }
        return null;
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        context = applicationContext;
    }

}