diff options
Diffstat (limited to 'bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderImpl.java')
-rw-r--r-- | bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderImpl.java | 240 |
1 files changed, 0 insertions, 240 deletions
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderImpl.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderImpl.java deleted file mode 100644 index 61527c0df..000000000 --- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderImpl.java +++ /dev/null @@ -1,240 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation and others. - * 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: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.equinox.metatype; - -import java.io.IOException; -import java.util.*; -import javax.xml.parsers.SAXParserFactory; -import org.eclipse.osgi.util.NLS; -import org.osgi.framework.Bundle; -import org.osgi.framework.Constants; -import org.osgi.service.metatype.*; - -/** - * Implementation of MetaTypeProvider - */ -public class MetaTypeProviderImpl implements MetaTypeProvider { - - public static final String METADATA_NOT_FOUND = "METADATA_NOT_FOUND"; //$NON-NLS-1$ - public static final String OCD_ID_NOT_FOUND = "OCD_ID_NOT_FOUND"; //$NON-NLS-1$ - public static final String ASK_INVALID_LOCALE = "ASK_INVALID_LOCALE"; //$NON-NLS-1$ - - public static final String META_FILE_EXT = ".XML"; //$NON-NLS-1$ - public static final String RESOURCE_FILE_CONN = "_"; //$NON-NLS-1$ - public static final String RESOURCE_FILE_EXT = ".properties"; //$NON-NLS-1$ - public static final char DIRECTORY_SEP = '/'; - - Bundle _bundle; - - Hashtable _allPidOCDs = new Hashtable(7); - Hashtable _allFPidOCDs = new Hashtable(7); - - String[] _locales; - boolean _isThereMeta = false; - - /** - * Constructor of class MetaTypeProviderImpl. - */ - MetaTypeProviderImpl(Bundle bundle, SAXParserFactory parserFactory) throws IOException { - - this._bundle = bundle; - - // read all bundle's metadata files and build internal data structures - _isThereMeta = readMetaFiles(bundle, parserFactory); - - if (!_isThereMeta) { - Logging.log(Logging.WARN, NLS.bind(MetaTypeMsg.METADATA_NOT_FOUND, new Long(bundle.getBundleId()), bundle.getSymbolicName())); - } - } - - /** - * This method should do the following: - * <p> - Obtain a SAX parser from the XML Parser Service: - * <p> - * - * <pre> </pre> - * - * The parser may be SAX 1 (eXML) or SAX 2 (XML4J). It should attempt to use - * a SAX2 parser by instantiating an XMLReader and extending DefaultHandler - * BUT if that fails it should fall back to instantiating a SAX1 Parser and - * extending HandlerBase. - * <p> - Pass the parser the URL for the bundle's METADATA.XML file - * <p> - Handle the callbacks from the parser and build the appropriate - * MetaType objects - ObjectClassDefinitions & AttributeDefinitions - * - * @param bundle The bundle object for which the metadata should be read - * @param parserFactory The bundle object for which the metadata should be - * read - * @return void - * @throws IOException If there are errors accessing the metadata.xml file - */ - private boolean readMetaFiles(Bundle bundle, SAXParserFactory parserFactory) throws IOException { - - boolean isThereMetaHere = false; - - Enumeration allFileKeys = FragmentUtils.findEntryPaths(bundle, MetaTypeService.METATYPE_DOCUMENTS_LOCATION); - if (allFileKeys == null) - return isThereMetaHere; - - while (allFileKeys.hasMoreElements()) { - boolean _isMetaDataFile; - String fileName = (String) allFileKeys.nextElement(); - - Hashtable pidToOCD = null; - java.net.URL[] urls = FragmentUtils.findEntries(bundle, fileName); - if (urls != null) { - for (int i = 0; i < urls.length; i++) { - try { - // Assume all XML files are what we want by default. - _isMetaDataFile = true; - DataParser parser = new DataParser(bundle, urls[i], parserFactory); - pidToOCD = parser.doParse(); - if (pidToOCD == null) { - _isMetaDataFile = false; - } - } catch (Exception e) { - // Ok, looks like it is not what we want. - _isMetaDataFile = false; - } - - if ((_isMetaDataFile) && (pidToOCD != null)) { - - // We got some OCDs now. - Enumeration pids = pidToOCD.keys(); - while (pids.hasMoreElements()) { - String pid = (String)pids.nextElement(); - ObjectClassDefinitionImpl ocd = (ObjectClassDefinitionImpl) pidToOCD.get(pid); - - if (ocd.getType() == ObjectClassDefinitionImpl.PID) { - isThereMetaHere = true; - _allPidOCDs.put(pid, ocd); - } else { - isThereMetaHere = true; - _allFPidOCDs.put(pid, ocd); - } - } // End of for - } - } - } // End of if(urls!=null) - } // End of while - - return isThereMetaHere; - } - - /* - * (non-Javadoc) - * - * @see org.osgi.service.metatype.MetaTypeProvider#getObjectClassDefinition(java.lang.String, - * java.lang.String) - */ - public ObjectClassDefinition getObjectClassDefinition(String pid, String locale) { - - if (isInvalidLocale(locale)) { - throw new IllegalArgumentException(NLS.bind(MetaTypeMsg.ASK_INVALID_LOCALE, pid, locale)); - } - - ObjectClassDefinitionImpl ocd; - if (_allPidOCDs.containsKey(pid)) { - ocd = (ObjectClassDefinitionImpl) ((ObjectClassDefinitionImpl) _allPidOCDs.get(pid)).clone(); - ocd.setResourceBundle(locale, _bundle); - return ocd; - } else if (_allFPidOCDs.containsKey(pid)) { - ocd = (ObjectClassDefinitionImpl) ((ObjectClassDefinitionImpl) _allFPidOCDs.get(pid)).clone(); - ocd.setResourceBundle(locale, _bundle); - return ocd; - } else { - throw new IllegalArgumentException(NLS.bind(MetaTypeMsg.OCD_ID_NOT_FOUND, pid)); - } - } - - /** - * Internal Method - Check if the locale is invalid. - */ - public boolean isInvalidLocale(String locale) { - - // Just a simple and quick check here. - if (locale == null || locale.length() == 0) - return false; - - int idx_first = locale.indexOf(ObjectClassDefinitionImpl.LOCALE_SEP); - int idx_second = locale.lastIndexOf(ObjectClassDefinitionImpl.LOCALE_SEP); - if (idx_first == -1 && locale.length() == 2) - // It is format of only language. - return false; - if ((idx_first == 2) && (idx_second == 5 || idx_second == 2)) - // It is format of language + "_" + country [ + "_" + variation ]. - return false; - return true; - } - - /* - * (non-Javadoc) - * - * @see org.osgi.service.metatype.MetaTypeProvider#getLocales() - */ - public synchronized String[] getLocales() { - - if (_locales != null) - return checkForDefault(_locales); - - Vector localizationFiles = new Vector(7); - // get all the localization resources for PIDS - Enumeration ocds = _allPidOCDs.elements(); - while (ocds.hasMoreElements()) { - ObjectClassDefinitionImpl ocd = (ObjectClassDefinitionImpl) ocds.nextElement(); - if (ocd._localization != null && !localizationFiles.contains(ocd._localization)) - localizationFiles.add(ocd._localization); - } - // get all the localization resources for FPIDS - ocds = _allFPidOCDs.elements(); - while (ocds.hasMoreElements()) { - ObjectClassDefinitionImpl ocd = (ObjectClassDefinitionImpl) ocds.nextElement(); - if (ocd._localization != null && !localizationFiles.contains(ocd._localization)) - localizationFiles.add(ocd._localization); - } - if (localizationFiles.size() == 0) - localizationFiles.add(Constants.BUNDLE_LOCALIZATION_DEFAULT_BASENAME); - Vector locales = new Vector(7); - Enumeration eLocalizationFiles = localizationFiles.elements(); - while (eLocalizationFiles.hasMoreElements()) { - String localizationFile = (String) eLocalizationFiles.nextElement(); - int iSlash = localizationFile.lastIndexOf(DIRECTORY_SEP); - String baseDir; - String baseFileName; - if (iSlash < 0) { - baseDir = ""; //$NON-NLS-1$ - } else { - baseDir = localizationFile.substring(0, iSlash); - } - baseFileName = localizationFile + RESOURCE_FILE_CONN; - Enumeration resources = FragmentUtils.findEntryPaths(this._bundle, baseDir); - if (resources != null) { - while (resources.hasMoreElements()) { - String resource = (String) resources.nextElement(); - if (resource.startsWith(baseFileName) && resource.toLowerCase().endsWith(RESOURCE_FILE_EXT)) - locales.add(resource.substring(baseFileName.length(), resource.length() - RESOURCE_FILE_EXT.length())); - } - } - } - _locales = (String[]) locales.toArray(new String[locales.size()]); - return checkForDefault(_locales); - } - - /** - * Internal Method - checkForDefault - */ - private String[] checkForDefault(String[] locales) { - - if (locales == null || locales.length == 0 || (locales.length == 1 && Locale.getDefault().toString().equals(locales[0]))) - return null; - return locales; - } -} |