public boolean matches(Capability capability) { if (capability instanceof BundleCapability) return matches((BundleCapability) capability); // now we must do the generic thing if (!namespace.equals(capability.getNamespace())) return false; String filterSpec = getDirectives().get(Namespace.REQUIREMENT_FILTER_DIRECTIVE); try { if (filterSpec != null && !FrameworkUtil.createFilter(filterSpec).matches(capability.getAttributes())) return false; } catch (InvalidSyntaxException e) { return false; } return hasMandatoryAttributes( ManifestElement.getArrayFromList( capability .getDirectives() .get(AbstractWiringNamespace.CAPABILITY_MANDATORY_DIRECTIVE))); }
private static Properties findVMProfile(Properties properties) { Properties result = new Properties(); // Find the VM profile name using J2ME properties String j2meConfig = properties.getProperty(Constants.J2ME_MICROEDITION_CONFIGURATION); String j2meProfiles = properties.getProperty(Constants.J2ME_MICROEDITION_PROFILES); String vmProfile = null; String javaEdition = null; Version javaVersion = null; if (j2meConfig != null && j2meConfig.length() > 0 && j2meProfiles != null && j2meProfiles.length() > 0) { // save the vmProfile based off of the config and profile // use the last profile; assuming that is the highest one String[] j2meProfileList = ManifestElement.getArrayFromList(j2meProfiles, " "); // $NON-NLS-1$ if (j2meProfileList != null && j2meProfileList.length > 0) vmProfile = j2meConfig + '_' + j2meProfileList[j2meProfileList.length - 1]; } else { // No J2ME properties; use J2SE properties // Note that the CDC spec appears not to require VM implementations to set the // javax.microedition properties!! So we will try to fall back to the // java.specification.name property, but this is pretty ridiculous!! String javaSpecVersion = properties.getProperty("java.specification.version"); // $NON-NLS-1$ // set the profile and EE based off of the java.specification.version // TODO We assume J2ME Foundation and J2SE here. need to support other profiles J2EE ... if (javaSpecVersion != null) { StringTokenizer st = new StringTokenizer(javaSpecVersion, " _-"); // $NON-NLS-1$ javaSpecVersion = st.nextToken(); String javaSpecName = properties.getProperty("java.specification.name"); // $NON-NLS-1$ if ("J2ME Foundation Specification".equals(javaSpecName)) // $NON-NLS-1$ vmProfile = "CDC-" + javaSpecVersion + "_Foundation-" + javaSpecVersion; //$NON-NLS-1$ //$NON-NLS-2$ else { // look for JavaSE if 1.6 or greater; otherwise look for J2SE Version v16 = new Version("1.6"); // $NON-NLS-1$ javaEdition = J2SE; try { javaVersion = new Version(javaSpecVersion); if (v16.compareTo(javaVersion) <= 0) javaEdition = JAVASE; } catch (IllegalArgumentException e) { // do nothing } vmProfile = javaEdition + javaSpecVersion; } } } URL url = null; // check for the java profile property for a url String propJavaProfile = FrameworkProperties.getProperty(Constants.OSGI_JAVA_PROFILE); if (propJavaProfile != null) try { // we assume a URL url = new URL(propJavaProfile); } catch (MalformedURLException e1) { // try using a relative path in the system bundle url = findInSystemBundle(propJavaProfile); } if (url == null && vmProfile != null) { // look for a profile in the system bundle based on the vm profile String javaProfile = vmProfile + PROFILE_EXT; url = findInSystemBundle(javaProfile); if (url == null) url = getNextBestProfile(javaEdition, javaVersion); } if (url == null) // the profile url is still null then use the osgi min profile in OSGi by default url = findInSystemBundle("OSGi_Minimum-1.1.profile"); // $NON-NLS-1$ if (url != null) { InputStream in = null; try { in = url.openStream(); result.load(new BufferedInputStream(in)); } catch (IOException e) { // TODO consider logging ... } finally { if (in != null) try { in.close(); } catch (IOException ee) { // do nothing } } } // set the profile name if it does not provide one if (result.getProperty(Constants.OSGI_JAVA_PROFILE_NAME) == null) if (vmProfile != null) result.put(Constants.OSGI_JAVA_PROFILE_NAME, vmProfile.replace('_', '/')); else // last resort; default to the absolute minimum profile name for the framework result.put(Constants.OSGI_JAVA_PROFILE_NAME, "OSGi/Minimum-1.1"); // $NON-NLS-1$ return result; }