/*******************************************************************************
 * Copyright (c) 2010 Neil Bartlett.
 * 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:
 *     Neil Bartlett - initial API and implementation
 ******************************************************************************/
package org.bndtools.builder;

import org.eclipse.core.runtime.IPath;

import aQute.bnd.version.Version;

/**
 * <p>
 * A bundle exported by a project.
 * </p>
 * <p>
 * This class implements the {@link Comparable} interface. Instances are compared first on the lexical ordering of their
 * symbolic names, and if these are equal then on their version.
 * </p>
 * 
 * @author Neil Bartlett
 */
class ExportedBundle implements Comparable<ExportedBundle> {

    private final IPath path;
    private final String symbolicName;
    private final Version version;
    private final IPath sourceBndFilePath;

    public ExportedBundle(IPath bundlePath, IPath sourceBndFilePath, String symbolicName, Version version) {
        this.path = bundlePath;
        this.sourceBndFilePath = sourceBndFilePath;
        this.symbolicName = symbolicName;
        this.version = version;
    }

    public IPath getPath() {
        return path;
    }

    public IPath getSourceBndFilePath() {
        return sourceBndFilePath;
    }

    public String getSymbolicName() {
        return symbolicName;
    }

    public Version getVersion() {
        return version;
    }

    @Override
    public String toString() {
        return "ExportedBundle [symbolicName=" + symbolicName + ", version=" + version + ", path=" + path + "]";
    }

    @Override
    public int compareTo(ExportedBundle other) {
        int diff = this.getSymbolicName()
            .compareTo(other.getSymbolicName());
        if (diff == 0) {
            Version version1 = this.getVersion();
            if (version1 == null)
                version1 = new Version(0);
            Version version2 = other.getVersion();
            if (version2 == null)
                version2 = new Version(0);

            diff = version1.compareTo(version2);
        }
        return diff;
    }
}
