All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.ops4j.pax.exam.options.WrappedUrlProvisionOption Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2008 Alin Dreghiciu.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied.
 *
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.ops4j.pax.exam.options;

import static org.osgi.framework.Constants.BUNDLE_SYMBOLICNAME;
import static org.osgi.framework.Constants.BUNDLE_VERSION;
import static org.osgi.framework.Constants.EXPORT_PACKAGE;
import static org.osgi.framework.Constants.IMPORT_PACKAGE;

/**
 * Option specifying a provision url that will wrap (osgify) another bundle.
 * 
 * @author Alin Dreghiciu ([email protected])
 * @since 0.3.0, December 27, 2008
 */
public class WrappedUrlProvisionOption extends
    AbstractUrlProvisionOption {

    /**
     * Wrapped jar bundle symbolic name. Can be null.
     */
    private String bundleSymbolicName;
    /**
     * Wrapped jar bundle version. Can be null.
     */
    private String bundleVersion;
    /**
     * Wrapped jar imports.
     */
    private String[] imports;
    /**
     * Wrapped jar exports.
     */
    private String[] exports;
    /**
     * Wrapped jar raw instructions.
     */
    private String[] instructions;
    private WrappedUrlProvisionOption.OverwriteMode overwriteMode;

    /**
     * Constructor.
     * 
     * @param url
     *            wrapped jar url (cannot be null or empty)
     * 
     * @throws IllegalArgumentException
     *             - If url is null or empty
     */
    public WrappedUrlProvisionOption(final String url) {
        super(url);
    }

    /**
     * Constructor.
     * 
     * @param url
     *            wrapped jar url (cannot be null)
     * 
     * @throws IllegalArgumentException
     *             - If url is null
     */
    public WrappedUrlProvisionOption(final UrlReference url) {
        super(url);
    }

    public String getURL() {
        final StringBuilder options = new StringBuilder();
        if (overwriteMode != null) {
            if (options.length() > 0) {
                options.append("&");
            }
            options.append("overwrite=").append(overwriteMode);
        }
        if (bundleSymbolicName != null) {
            if (options.length() > 0) {
                options.append("&");
            }
            options.append(BUNDLE_SYMBOLICNAME).append("=").append(bundleSymbolicName);
        }
        if (bundleVersion != null) {
            if (options.length() > 0) {
                options.append("&");
            }
            options.append(BUNDLE_VERSION).append("=").append(bundleVersion);
        }
        if (imports != null && imports.length > 0) {
            if (options.length() > 0) {
                options.append("&");
            }
            options.append(IMPORT_PACKAGE).append("=");
            for (String entry : imports) {
                options.append(entry).append(",");
            }
            options.delete(options.length() - 1, options.length());
        }
        if (exports != null && exports.length > 0) {
            if (options.length() > 0) {
                options.append("&");
            }
            options.append(EXPORT_PACKAGE).append("=");
            for (String entry : exports) {
                options.append(entry).append(",");
            }
            options.delete(options.length() - 1, options.length());
        }
        if (instructions != null && instructions.length > 0) {
            for (String entry : instructions) {
                if (options.length() > 0) {
                    options.append("&");
                }
                options.append(entry);
            }
        }
        if (options.length() > 0) {
            options.insert(0, "$");
        }
        return "wrap:" + super.getURL() + options.toString();
    }

    /**
     * Sets wrapped jar bundle symbolic name.
     * 
     * @param _bundleSymbolicName
     *            bundle symbolic name
     * 
     * @return itself
     */
    public WrappedUrlProvisionOption bundleSymbolicName(final String _bundleSymbolicName) {
        this.bundleSymbolicName = _bundleSymbolicName;

        return this;
    }

    /**
     * Sets wrapped jar bundle version.
     * 
     * @param _bundleVersion
     *            bundle symbolic name
     * 
     * @return itself
     */
    public WrappedUrlProvisionOption bundleVersion(final String _bundleVersion) {
        this.bundleVersion = _bundleVersion;

        return this;
    }

    /**
     * Sets wrapped jar imports.
     * 
     * @param _imports
     *            BND style imports
     * 
     * @return itself
     */
    public WrappedUrlProvisionOption imports(final String... _imports) {
        this.imports = _imports;

        return this;
    }

    /**
     * Sets wrapped jar exports.
     * 
     * @param _exports
     *            BND style exports
     * 
     * @return itself
     */
    public WrappedUrlProvisionOption exports(final String... _exports) {
        this.exports = _exports;

        return this;
    }

    /**
     * Sets wrapped jar manifest overwrite mode.
     * 
     * @param mode
     *            overwrite mode
     * 
     * @return itself
     */
    public WrappedUrlProvisionOption overwriteManifest(final OverwriteMode mode) {
        overwriteMode = mode;

        return this;
    }

    /**
     * Sets wrapped jar raw BND instructions.
     * 
     * @param _instructions
     *            BND instructions
     * 
     * @return itself
     */
    public WrappedUrlProvisionOption instructions(final String... _instructions) {
        this.instructions = _instructions;

        return this;
    }

    protected WrappedUrlProvisionOption itself() {
        return this;
    }

    /**
     * Strategy to use regarding manifest rewrite, for a jar that is already a bundle (has osgi
     * manifest attributes).
     */
    public static enum OverwriteMode {

        /**
         * Keep existing manifest.
         */
        KEEP,

        /**
         * Merge instructions with current manifest entries.
         */
        MERGE,

        /**
         * Full rewrite.
         */
        FULL

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy