public String get(Object key) { if (!(key instanceof String)) return null; String sKey = (String) key; if (Constants.EXPORT_PACKAGE.equalsIgnoreCase(sKey) || Constants.PROVIDE_CAPABILITY.equalsIgnoreCase(sKey)) { String systemProvideHeader = getEquinoxContainer() .getConfiguration() .getConfiguration( EquinoxConfiguration.PROP_SYSTEM_PROVIDE_HEADER, EquinoxConfiguration.SYSTEM_PROVIDE_HEADER_SYSTEM_EXTRA); boolean useSystemExtra = systemProvideHeader.equals(EquinoxConfiguration.SYSTEM_PROVIDE_HEADER_SYSTEM_EXTRA); boolean useSystem = systemProvideHeader.equals(EquinoxConfiguration.SYSTEM_PROVIDE_HEADER_SYSTEM) || useSystemExtra; String systemProp = useSystem ? (Constants.EXPORT_PACKAGE.equalsIgnoreCase(sKey) ? Constants.FRAMEWORK_SYSTEMPACKAGES : Constants.FRAMEWORK_SYSTEMCAPABILITIES) : null; String systemExtraProp = useSystemExtra ? (Constants.EXPORT_PACKAGE.equalsIgnoreCase(sKey) ? Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA : Constants.FRAMEWORK_SYSTEMCAPABILITIES_EXTRA) : null; return getExtra(sKey, systemProp, systemExtraProp); } return headers.get(key); }
private String getExtra(String header, String systemProp, String systemExtraProp) { String systemValue = systemProp != null ? getEquinoxContainer().getConfiguration().getConfiguration(systemProp) : null; String systemExtraValue = systemExtraProp != null ? getEquinoxContainer().getConfiguration().getConfiguration(systemExtraProp) : null; if (systemValue == null) systemValue = systemExtraValue; else if (systemExtraValue != null && systemExtraValue.trim().length() > 0) systemValue += ", " + systemExtraValue; // $NON-NLS-1$ String result = headers.get(header); if (systemValue != null && systemValue.trim().length() > 0) { if (result != null) result += ", " + systemValue; // $NON-NLS-1$ else result = systemValue; } return result; }
private BundleResourceBundle lookupResourceBundle(String localeString) { // get the localization header as late as possible to avoid accessing the raw headers // getting the first value from the raw headers forces the manifest to be parsed (bug 332039) String localizationHeader = rawHeaders.get(Constants.BUNDLE_LOCALIZATION); if (localizationHeader == null) localizationHeader = Constants.BUNDLE_LOCALIZATION_DEFAULT_BASENAME; BundleResourceBundle result = cache.get(localeString); if (result != null) return result.isEmpty() ? null : result; // Collect all the necessary inputstreams to create the resource bundle without // holding any locks. Finding resources and inputstreams from the wirings requires a // read lock on the module database. We must not hold the cache lock while doing this; // otherwise out of order locks will be possible when the resolver needs to clear the cache String[] nlVarients = buildNLVariants(localeString); InputStream[] nlStreams = new InputStream[nlVarients.length]; for (int i = nlVarients.length - 1; i >= 0; i--) { URL url = findResource( localizationHeader + (nlVarients[i].equals("") ? nlVarients[i] : '_' + nlVarients[i]) + ".properties"); //$NON-NLS-1$ //$NON-NLS-2$ if (url != null) { try { nlStreams[i] = url.openStream(); } catch (IOException e) { // ignore } } } synchronized (cache) { BundleResourceBundle parent = null; for (int i = nlVarients.length - 1; i >= 0; i--) { BundleResourceBundle varientBundle = null; InputStream varientStream = nlStreams[i]; if (varientStream == null) { varientBundle = cache.get(nlVarients[i]); } else { try { varientBundle = new LocalizationResourceBundle(varientStream); } catch (IOException e) { // ignore and continue } finally { if (varientStream != null) { try { varientStream.close(); } catch (IOException e3) { // Ignore exception } } } } if (varientBundle == null) { varientBundle = new EmptyResouceBundle(nlVarients[i]); } if (parent != null) varientBundle.setParent((ResourceBundle) parent); cache.put(nlVarients[i], varientBundle); parent = varientBundle; } result = cache.get(localeString); return result.isEmpty() ? null : result; } }