Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.jboss.osgi.framework.internal;
  /*
   * #%L
   * JBossOSGi Framework
   * %%
   * Copyright (C) 2010 - 2012 JBoss by Red Hat
   * %%
   * This program is free software: you can redistribute it and/or modify
   * it under the terms of the GNU Lesser General Public License as
  * published by the Free Software Foundation, either version 2.1 of the
  * License, or (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Lesser Public License for more details.
  *
  * You should have received a copy of the GNU General Lesser Public
  * License along with this program.  If not, see
  * <http://www.gnu.org/licenses/lgpl-2.1.html>.
  * #L%
  */
 
 import static org.jboss.osgi.framework.FrameworkMessages.MESSAGES;
 import static org.osgi.framework.Constants.EXTENSION_BOOTCLASSPATH;
 import static org.osgi.framework.Constants.EXTENSION_DIRECTIVE;
 import static org.osgi.framework.Constants.EXTENSION_FRAMEWORK;
 import static org.osgi.framework.Constants.PACKAGE_SPECIFICATION_VERSION;
 import static org.osgi.framework.Constants.SYSTEM_BUNDLE_SYMBOLICNAME;
 import static org.osgi.framework.Constants.VERSION_ATTRIBUTE;
 
 import java.util.List;
 import java.util.Set;
 
A bundle validator for OSGi R4.

Author(s):
thomas.diesler@jboss.com
Version:
$Revision: 1.1 $
 
 final class BundleValidatorR4 implements BundleValidator {
 
     @SuppressWarnings("deprecation")
     public void validateBundle(UserBundleState userBundleOSGiMetaData osgiMetaDatathrows BundleException {
 
         // Missing Bundle-SymbolicName
         final String symbolicName = osgiMetaData.getBundleSymbolicName();
         if (symbolicName == null)
             throw .missingBundleSymbolicName(userBundle);
 
         // Bundle-ManifestVersion value not equal to 2, unless the Framework specifically
         // recognizes the semantics of a later release.
         int manifestVersion = osgiMetaData.getBundleManifestVersion();
         if (manifestVersion > 2)
             throw .unsupportedBundleManifestVersion(manifestVersionuserBundle);
 
         // Multiple imports of a given package.
         // Specification-version and version specified together (for the same package(s)) but with different values
         List<PackageAttributeimportPackages = osgiMetaData.getImportPackages();
         if (importPackages != null) {
             Set<Stringpackages = new HashSet<String>();
             for (PackageAttribute packageAttribute : importPackages) {
                 String packageName = packageAttribute.getAttribute();
                 if (packages.contains(packageName))
                     throw .duplicatePackageImport(packageNameuserBundle);
                 packages.add(packageName);
 
                 if (packageName.startsWith("java."))
                     throw .notAllowdToImportJavaPackage(userBundle);
 
                 String version = packageAttribute.getAttributeValue(String.class);
                 String specificationVersion = packageAttribute.getAttributeValue(String.class);
                 if (version != null && specificationVersion != null && version.equals(specificationVersion) == false)
                     throw .packageVersionAndSpecificationVersionMissmatch(packageNameuserBundle);
             }
         }
 
         // Export or import of java.*.
         // Specification-version and version specified together (for the same package(s)) but with different values
         // The export statement must not specify an explicit bundle symbolic name nor bundle version
         List<PackageAttributeexportPackages = osgiMetaData.getExportPackages();
         if (exportPackages != null) {
             for (PackageAttribute packageAttr : exportPackages) {
                 String packageName = packageAttr.getAttribute();
                 if (packageName.startsWith("java."))
                     throw .notAllowdToExportJavaPackage(userBundle);
 
                 String versionAttr = packageAttr.getAttributeValue(.String.class);
                 String specificationAttr = packageAttr.getAttributeValue(.String.class);
                 if (versionAttr != null && specificationAttr != null && versionAttr.equals(specificationAttr) == false)
                     throw .packageVersionAndSpecificationVersionMissmatch(packageNameuserBundle);
                String symbolicNameAttr = packageAttr.getAttributeValue(.String.class);
                if (symbolicNameAttr != null)
                    throw .packageCannotSpecifyBundleSymbolicName(packageNameuserBundle);
                String bundleVersionAttr = packageAttr.getAttributeValue(.String.class);
                if (bundleVersionAttr != null)
                    throw .packageCannotSpecifyBundleVersion(packageNameuserBundle);
            }
        }
        // A bundle with a dynamic imported package having different values for version and specification-version attributes must fail to install
        List<PackageAttributedynamicImports = osgiMetaData.getDynamicImports();
        if (dynamicImports != null) {
            for (PackageAttribute packageAttr : dynamicImports) {
                String packageName = packageAttr.getAttribute();
                String versionAttr = packageAttr.getAttributeValue(.String.class);
                String specificationAttr = packageAttr.getAttributeValue(.String.class);
                if (versionAttr != null && specificationAttr != null && versionAttr.equals(specificationAttr) == false)
                    throw .packageVersionAndSpecificationVersionMissmatch(packageNameuserBundle);
            }
        }
        // Installing a bundle that has the same symbolic name and version as an already installed bundle.
        for (Bundle bundle : userBundle.getBundleManager().getBundles()) {
            if (userBundle.getSymbolicName().equals(bundle.getSymbolicName()) && userBundle.getVersion().equals(bundle.getVersion())) {
                throw .nameAndVersionAlreadyInstalled(userBundle);
            }
        }
        // Verify Fragment-Host header
        if (userBundle.isFragment()) {
            ParameterizedAttribute hostAttr = osgiMetaData.getFragmentHost();
            String fragmentHost = hostAttr.getAttribute();
            String extension = hostAttr.getDirectiveValue(String.class);
            if (extension != null) {
                if (.equals(fragmentHost) == false)
                    throw .invalidFragmentHostForExtensionFragment(userBundle);
                if (.equals(extension))
                    throw .unsupportedBootClasspathExtension();
                if (.equals(extension))
                    throw .unsupportedFrameworkExtension();
            }
        }
        // [TODO] Duplicate attribute or duplicate directive (except in the Bundle-Native code clause).
        // [TODO] Export-Package with a mandatory attribute that is not defined.
        // [TODO] Updating a bundle to a bundle that has the same symbolic name and version as another installed bundle.
        // [TODO] Any syntactic error (for example, improperly formatted version or bundle symbolic name, unrecognized directive
        // value, etc.).
        // [TODO] The manifest lists a OSGI-INF/permission.perm file but no such file is present.
        // [TODO] Requiring the same bundle symbolic name more than once
    }
New to GrepCode? Check out our FAQ X