Package org.apache.sling.maven.projectsupport.bundlelist

Source Code of org.apache.sling.maven.projectsupport.bundlelist.BaseBundleList

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to You 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.apache.sling.maven.projectsupport.bundlelist;

import java.util.List;

import org.apache.maven.shared.osgi.DefaultMaven2OsgiConverter;
import org.apache.maven.shared.osgi.Maven2OsgiConverter;
import org.apache.sling.maven.projectsupport.bundlelist.v1_0_0.Bundle;
import org.apache.sling.maven.projectsupport.bundlelist.v1_0_0.BundleList;
import org.apache.sling.maven.projectsupport.bundlelist.v1_0_0.StartLevel;
import org.osgi.framework.Version;

public abstract class BaseBundleList {

    public abstract List<StartLevel> getStartLevels();

    public Bundle get(Bundle bundle, boolean compareVersions) {
        for (StartLevel sl : getStartLevels()) {
            Bundle foundBundle = sl.getBundle(bundle, compareVersions);
            if (foundBundle != null) {
                return foundBundle;
            }
        }
        return null;
    }

    public boolean remove(List<Bundle> bundles, boolean compareVersions) {
        boolean result = false;
        for (Bundle bundle : bundles) {
            for (StartLevel sl : getStartLevels()) {
                if (sl.removeBundle(bundle, compareVersions)) {
                    result = true;
                    break;
                }
            }
        }
        return result;
    }

    /**
     * Merge the current bundle list with an additional list.
     * @see #add(Bundle)
     *
     * @param bundleList the new bundle list
     */
    public void merge(BundleList bundleList) {
        for (StartLevel sl : bundleList.getStartLevels()) {
            for (Bundle bnd : sl.getBundles()) {
                add(sl, bnd);
            }
        }
    }

    /**
     * Add an artifact definition. If it already exists, update the version, but
     * do not change the start level.
     *
     * @param newBnd the bundle to add
     */
    public void add(List<Bundle> newBnd) {
        for (Bundle bundle : newBnd) {
            add(null, bundle);
        }
    }

    /**
     * Merge bundle into a start level using the supplied level if present.
     * @param mergeStartLevel
     * @param newBnd
     */
    private void add(StartLevel mergeStartLevel, Bundle newBnd) {
        Bundle current = get(newBnd, false);
        if (current != null) {
            final Maven2OsgiConverter converter = new DefaultMaven2OsgiConverter();

            // compare versions, the highest will be used
            final Version newVersion = new Version(converter.getVersion(newBnd.getVersion()));
            final Version oldVersion = new Version(converter.getVersion(current.getVersion()));
            if ( newVersion.compareTo(oldVersion) > 0 ) {
                current.setVersion(newBnd.getVersion());
            }
        } else {
            StartLevel startLevel = null;
            if ( mergeStartLevel == null || newBnd.getStartLevel() != 0) {
                startLevel = getOrCreateStartLevel(newBnd.getStartLevel());
            } else {
                startLevel = getOrCreateStartLevel(mergeStartLevel.getStartLevel());
            }
            startLevel.getBundles().add(newBnd);
        }
    }

    private StartLevel getOrCreateStartLevel(int startLevel) {
        for (StartLevel sl : getStartLevels()) {
            if (sl.getStartLevel() == startLevel) {
                return sl;
            }
        }

        StartLevel sl = new StartLevel();
        getStartLevels().add(sl);
        sl.setRawLevel(startLevel);
        return sl;
    }
}
TOP

Related Classes of org.apache.sling.maven.projectsupport.bundlelist.BaseBundleList

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.