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

com.github.pms1.tppt.p2.BundleEclipseSourceBundleHeaderComparator Maven / Gradle / Ivy

package com.github.pms1.tppt.p2;

import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Consumer;

import org.codehaus.plexus.component.annotations.Component;
import org.eclipse.osgi.util.ManifestElement;

import com.google.common.collect.Sets;

@Component(role = BundleHeaderComparator.class, hint = BundleEclipseSourceBundleHeaderComparator.HINT)
public class BundleEclipseSourceBundleHeaderComparator extends AbstractManifestHeaderComparator {
	public final static String HINT = "Eclipse-SourceBundle";

	@Override
	public boolean compare(FileId file1, FileId file2, ManifestElement[] headers1, ManifestElement[] headers2,
			Consumer dest) {

		if (headers1.length != 1)
			throw new Error();
		if (headers2.length != 1)
			throw new Error();

		if (!Objects.equals(headers1[0].getValue(), headers2[0].getValue()))
			return false;

		if (!Objects.equals(directives(file1, headers1[0]), directives(file2, headers2[0])))
			return false;

		Map> a1 = attributes(file1, headers1[0]);
		Map> a2 = attributes(file2, headers2[0]);

		List v1 = null;
		List v2 = null;
		for (String k : Sets.union(a1.keySet(), a2.keySet())) {
			switch (k) {
			case "version":
				v1 = a1.get(k);
				v2 = a2.get(k);
				break;
			default:
				return false;
			}
		}
		if (v1 == null || v1.size() != 1 || v2 == null || v2.size() != 1)
			return false;

		String baseline = v1.get(0);
		String current = v2.get(0);

		if (!Objects.equals(baseline, current))
			dest.accept(new ManifestEclipseSourceBundleVersionDelta(file1, file2, headers1[0].getValue(),
					VersionParser.valueOf(baseline), VersionParser.valueOf(current)));

		return true;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy