| /******************************************************************************* |
| * Copyright (c) 2006 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: |
| * Gerry Kessler/Oracle - initial API and implementation |
| * |
| ********************************************************************************/ |
| |
| package org.eclipse.jst.jsf.contentmodel.annotation.internal; |
| |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.jst.jsf.common.JSFCommonPlugin; |
| import org.eclipse.jst.jsf.contentmodel.annotation.CMAnnotationSourceFileLocator; |
| import org.eclipse.jst.jsf.contentmodel.annotation.ICMAnnotationFileParser; |
| import org.eclipse.jst.jsf.contentmodel.annotation.ICMAnnotationSourceFileInfo; |
| import org.eclipse.osgi.util.NLS; |
| import org.osgi.framework.Bundle; |
| |
| /** |
| * Helper class used by the annotations registry to parse and poplulate the annotation maps using |
| * the specified parsed, and source file locator from the extension. |
| * |
| * @author Gerry Kessler - Oracle |
| * @deprecated see common.metadata package |
| */ |
| public class CMAnnotationFileParserHelper { |
| private static final String DEFAULT_PARSER_NAME = "org.eclipse.jst.jsf.contentmodel.annotation.internal.CMAnnotationFileParser"; //$NON-NLS-1$ |
| private static final String DEFAULT_LOCATOR_NAME = "org.eclipse.jst.jsf.contentmodel.annotation.internal.CMPluginRelativeSourceFileLocator"; //$NON-NLS-1$ |
| |
| /** |
| * default constructor |
| */ |
| public CMAnnotationFileParserHelper() { |
| super(); |
| } |
| |
| /** |
| * @param map |
| */ |
| public void parse(CMAnnotationMap map){ |
| ICMAnnotationFileParser parser = getParser(map.getFileInfo()); |
| ICMAnnotationAdvisor advisor = new CMAnnotationAdvisor(map); |
| CMAnnotationSourceFileLocator locator = getLocator(map.getFileInfo()); |
| map.setLocator(locator); |
| try { |
| parser.parse(advisor, locator); |
| } catch (Exception e) { |
| JSFCommonPlugin.log(e, NLS.bind(Messages.CMAnnotationFileParserHelper_unable_to_parse , new String[]{map.getFileInfo().getAnnotationFileLocation(), map.getFileInfo().getAnnotationFileLocatorClassname()})); |
| } |
| } |
| |
| private ICMAnnotationFileParser getParser(ICMAnnotationSourceFileInfo fileInfo) { |
| String parserClassName = fileInfo.getParserClassName(); |
| Object obj = null; |
| if (parserClassName != null && !parserClassName.equals("")){ //$NON-NLS-1$ |
| obj = getObjectForClassname(fileInfo.getBundleId(), parserClassName); |
| } |
| else {//return default |
| obj = getObjectForClassname(JSFCommonPlugin.PLUGIN_ID, DEFAULT_PARSER_NAME ); |
| } |
| if (obj != null && obj instanceof ICMAnnotationFileParser) |
| return (ICMAnnotationFileParser)obj; |
| |
| return null; |
| } |
| |
| private CMAnnotationSourceFileLocator getLocator(ICMAnnotationSourceFileInfo fileInfo) { |
| String locatorClassName = fileInfo.getAnnotationFileLocatorClassname(); |
| Object obj = null; |
| if (locatorClassName != null && !locatorClassName.equals("")){ //$NON-NLS-1$ |
| obj = getObjectForClassname(fileInfo.getBundleId(), locatorClassName); |
| } |
| else {//return default |
| obj = getObjectForClassname(JSFCommonPlugin.PLUGIN_ID, DEFAULT_LOCATOR_NAME); |
| } |
| if (obj != null && obj instanceof CMAnnotationSourceFileLocator){ |
| CMAnnotationSourceFileLocator locator = (CMAnnotationSourceFileLocator)obj; |
| locator.setFileInfo(fileInfo); |
| return locator; |
| } |
| return null; |
| } |
| |
| private static Object getObjectForClassname(String bundleId, String providerClassName){ |
| try { |
| Bundle bundle =Platform.getBundle(bundleId); |
| if (bundle == null){ |
| JSFCommonPlugin.log(IStatus.ERROR, NLS.bind(Messages.CMAnnotationFileParserHelper_unable_to_find_bundleid, new String[]{bundleId, providerClassName})); |
| return null; |
| } |
| Class klass = bundle.loadClass(providerClassName); |
| if (klass != null){ |
| return klass.newInstance(); |
| } |
| return null; |
| } catch (ClassNotFoundException e) { |
| JSFCommonPlugin.log(e, NLS.bind(Messages.CMAnnotationFileParserHelper_class_not_found, new String[]{bundleId, providerClassName})); |
| } catch (InstantiationException e) { |
| JSFCommonPlugin.log(e, NLS.bind(Messages.CMAnnotationFileParserHelper_instantiation_exception, new String[]{bundleId, providerClassName})); |
| } catch (IllegalAccessException e) { |
| JSFCommonPlugin.log(e, NLS.bind(Messages.CMAnnotationFileParserHelper_illegal_access_exception, new String[]{bundleId, providerClassName})); |
| } |
| return null; |
| } |
| |
| } |