blob: eef5937249156c8b1da29f32427053dbe678ade2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2007 Oracle Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Oracle - initial API and implementation
*
********************************************************************************/
package org.eclipse.jst.jsf.common.metadata.internal;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ResourceBundle;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.osgi.framework.Bundle;
/**
* Default implementation of StandardMetaDataSourceFileLocator that will locate standard metadata files
* and resource bundles relative to the plugin that registered the files using the
* <code>org.eclipse.jst.jsf.common.StandardMetaDataFiles</code> ext-pt.
*
*/
public class PluginRelativeStandardMetaDataSourceFileLocator extends StandardMetaDataSourceFileLocator{
private ResourceBundle resourceBundle;
/*
* Returns InputStream of standard metadata file from plugin relative location.
*
*/
public InputStream getInputStream() throws IOException {
URL url = getURL();
if (url != null)
return url.openStream();
String fileName = Path.fromOSString(fileInfo.getLocation()).toString() + " (Plugin: " + fileInfo.getBundleId()+")" ;
throw new FileNotFoundException("Metadata file not found: "+ fileName);
}
/* (non-Javadoc)
* @see org.eclipse.jst.jsf.common.metadata.internal.StandardMetaDataSourceFileLocator#getURL()
*/
public URL getURL() {
final Bundle bundle = Platform.getBundle(fileInfo.getBundleId());
if (bundle == null)
{
return null;
}
final IPath fromOSString = Path.fromOSString(fileInfo.getLocation());
return FileLocator.find(bundle, fromOSString, null);
}
/*
* Returns property resource bundle if it exists. May return null.
* This implementation assumes that the basename of the bundle is the same
* as the source file name and in the same directory.
*
*/
public ResourceBundle getResourceBundle() throws IOException, MalformedURLException {
if (resourceBundle == null){
URL bundleURL = getStandardMetaDataSourceFileBasenameURL();
if (bundleURL == null)
return null;
resourceBundle = ResourceBundleHelper.getResourceBundle(bundleURL);
}
return resourceBundle;
}
private URL getStandardMetaDataSourceFileBasenameURL() {
IPath annotationPath = Path.fromOSString(fileInfo.getLocation());
IPath annotationFolder = annotationPath.removeLastSegments(1);
IPath propertiesLocation = annotationPath.removeFirstSegments(annotationPath.segmentCount() - 1).removeFileExtension();
// append location of properties file
IPath propertiesFile = annotationFolder.append(propertiesLocation);
// append .properties extension if needed
if (propertiesFile.getFileExtension() == null)
propertiesFile = propertiesFile.addFileExtension("properties"); //$NON-NLS-1$
// create a URL out of the properties file location
return FileLocator.find(Platform.getBundle(fileInfo.getBundleId()),
propertiesFile, null);
}
}