org.eclipse.virgo.ide.manifest.internal.core.validation.rules.ImportPackageBundleAndLibraryRule.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.virgo.ide.manifest.internal.core.validation.rules.ImportPackageBundleAndLibraryRule.java

Source

/*******************************************************************************
 * Copyright (c) 2009 SpringSource, a divison of VMware, Inc.
 * 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:
 *     SpringSource, a division of VMware, Inc. - initial API and implementation
 *******************************************************************************/
package org.eclipse.virgo.ide.manifest.internal.core.validation.rules;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.osgi.util.ManifestElement;
import org.eclipse.pde.internal.core.util.VersionUtil;
import org.eclipse.virgo.ide.manifest.core.BundleManifestUtils;
import org.eclipse.virgo.ide.manifest.internal.core.model.BundleManifestHeader;
import org.eclipse.virgo.ide.manifest.internal.core.model.BundleManifestHeaderElement;
import org.eclipse.virgo.ide.manifest.internal.core.validation.BundleManifestValidationContext;
import org.osgi.framework.Constants;
import org.springframework.ide.eclipse.core.model.validation.ValidationProblemAttribute;

/**
 * @author Christian Dupuis
 * @since 1.0.0
 */
/**
 * TODO CD add comments
 */
@SuppressWarnings("restriction")
public class ImportPackageBundleAndLibraryRule extends AbstractBundleManifestHeaderRule {

    private void validateResolutionDirective(BundleManifestHeader header, ManifestElement element,
            BundleManifestValidationContext context) {
        String resolution = element.getDirective(Constants.RESOLUTION_DIRECTIVE);
        if (resolution != null) {
            context.validateDirectiveValue(header, element, Constants.RESOLUTION_DIRECTIVE,
                    new String[] { Constants.RESOLUTION_MANDATORY, Constants.RESOLUTION_OPTIONAL });
        }
    }

    private void validateVersionAttribute(BundleManifestHeader header, ManifestElement element,
            BundleManifestValidationContext context) {
        String version = null;
        if (Constants.REQUIRE_BUNDLE.equals(header.getElementName())) {
            version = element.getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE);
        } else {
            version = element.getAttribute(Constants.VERSION_ATTRIBUTE);
        }

        if (version == null)
            return;
        IStatus status = VersionUtil.validateVersionRange(version);
        if (!status.isOK()) {
            String errorId = getIllegalVersionErrorId(header);
            String artifactName = element.getValue();
            context.error(errorId, status.getMessage(),
                    BundleManifestUtils.getPackageLineNumber(context.getBundleManifest().getDocument(), header,
                            element),
                    new ValidationProblemAttribute(ManifestValidationRuleConstants.IMPORT_ARTIFACT_NAME,
                            artifactName));
        }
    }

    protected String getIllegalVersionErrorId(BundleManifestHeader header) {
        if (header.getElementName().equals(Constants.IMPORT_PACKAGE)) {
            return ManifestValidationRuleConstants.ILLEGAL_IMPORT_PACKAGE_VERSION;
        } else if (header.getElementName().equals("Import-Bundle")) {
            return ManifestValidationRuleConstants.ILLEGAL_IMPORT_BUNDLE_VERSION;
        } else if (header.getElementName().equals("Require-Bundle")) {
            return ManifestValidationRuleConstants.ILLEGAL_REQUIRE_BUNDLE_VERSION;
        } else if (header.getElementName().equals("Import-Library")) {
            return ManifestValidationRuleConstants.ILLEGAL_IMPORT_LIBRARY_VERSION;
        }
        return "";
    }

    @Override
    protected String[] getHeaderName() {
        return new String[] { Constants.IMPORT_PACKAGE, "Import-Bundle", "Import-Library",
                Constants.REQUIRE_BUNDLE };
    }

    @Override
    protected void validateHeader(BundleManifestHeader header, BundleManifestValidationContext context) {
        for (BundleManifestHeaderElement element : header.getBundleManifestHeaderElements()) {
            validateResolutionDirective(header, element.getManifestElement(), context);
            validateVersionAttribute(header, element.getManifestElement(), context);
        }
    }

}