/* * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program 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. * * Copyright 2006 - 2009 Pentaho Corporation. All rights reserved. * */ package org.pentaho.platform.plugin.action.jfreereport.helper; import java.net.URL; import java.util.HashMap; import java.util.Map; import org.pentaho.reporting.libraries.resourceloader.ResourceData; import org.pentaho.reporting.libraries.resourceloader.ResourceException; import org.pentaho.reporting.libraries.resourceloader.ResourceKey; import org.pentaho.reporting.libraries.resourceloader.ResourceKeyCreationException; import org.pentaho.reporting.libraries.resourceloader.ResourceLoader; import org.pentaho.reporting.libraries.resourceloader.ResourceLoadingException; import org.pentaho.reporting.libraries.resourceloader.ResourceManager; import org.pentaho.reporting.libraries.resourceloader.loader.LoaderUtils; /** * This class is implemented to support loading solution files * from the pentaho repository into JFreeReport * * @author Will Gorman */ public class PentahoResourceLoader implements ResourceLoader { public static final String SOLUTION_SCHEMA_NAME = "solution"; //$NON-NLS-1$ public static final String SCHEMA_SEPARATOR = ":/"; //$NON-NLS-1$ public static final String PATH_SEPARATOR = "/"; //$NON-NLS-1$ public static final String WIN_PATH_SEPARATOR = "\\"; //$NON-NLS-1$ /** keep track of the resource manager */ private ResourceManager manager; /** * default constructor */ public PentahoResourceLoader() { } /** * set the resource manager * * @param manager resource manager */ public void setResourceManager(final ResourceManager manager) { this.manager = manager; } /** * get the resource manager * * @return resource manager */ public ResourceManager getManager() { return manager; } /** * get the schema name, in this case it's always "solution" * * @return the schema name */ public String getSchema() { return PentahoResourceLoader.SOLUTION_SCHEMA_NAME; } /** * create a resource data object * * @param key resource key * @return resource data * @throws ResourceLoadingException */ public ResourceData load(final ResourceKey key) throws ResourceLoadingException { return new PentahoResourceData(key); } /** * see if the pentaho resource loader can support the content key path * * @param values map of values to look in * @return true if class supports the content key. */ public boolean isSupportedKey(final ResourceKey key) { if (key.getSchema().equals(getSchema())) { return true; } return false; } /** * create a new key based on the values provided * * @param values map of values * @return new resource key * @throws ResourceKeyCreationException */ public ResourceKey createKey(final Object value, final Map factoryKeys) throws ResourceKeyCreationException { if (value instanceof String) { String valueString = (String) value; if (valueString.startsWith(getSchema() + PentahoResourceLoader.SCHEMA_SEPARATOR)) { valueString = valueString.replace('\\', '/'); String path = valueString.substring(getSchema().length() + PentahoResourceLoader.SCHEMA_SEPARATOR.length()); return new ResourceKey(getSchema(), path, factoryKeys); } } return null; } /** * derive a key from an existing key, used when a relative path is given. * * @param parent the parent key * @param data the new data to be keyed * @return derived key * @throws ResourceKeyCreationException */ public ResourceKey deriveKey(final ResourceKey parent, final String path, final Map data) throws ResourceKeyCreationException { if (isSupportedKey(parent) == false) { throw new ResourceKeyCreationException("Assertation: Unsupported parent key type"); //$NON-NLS-1$ } final String resource; if (path.startsWith("solution://")) //$NON-NLS-1$ { resource = path; } else if (path.startsWith("/")) //$NON-NLS-1$ { resource = "solution:/" + path; //$NON-NLS-1$ } else { resource = LoaderUtils.mergePaths((String) parent.getIdentifier(), path); } final Map map; if (data != null) { map = new HashMap(); map.putAll(parent.getFactoryParameters()); map.putAll(data); } else { map = parent.getFactoryParameters(); } return new ResourceKey(parent.getSchema(), resource, map); } public URL toURL(final ResourceKey key) { // not supported .. return null; } public ResourceKey deserialize(ResourceKey bundleKey, String stringKey) throws ResourceKeyCreationException { return null; } public boolean isSupportedDeserializer(String data) { return false; } public String serialize(ResourceKey resourceKey, ResourceKey key) throws ResourceException { return null; } }