]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.init/src/org/argeo/api/a2/A2Branch.java
Clarify ACR API
[lgpl/argeo-commons.git] / org.argeo.init / src / org / argeo / api / a2 / A2Branch.java
1 package org.argeo.api.a2;
2
3 import java.lang.System.Logger;
4 import java.lang.System.Logger.Level;
5 import java.util.Collections;
6 import java.util.SortedMap;
7 import java.util.TreeMap;
8
9 import org.osgi.framework.Version;
10
11 /**
12 * A logical linear sequence of versions of a given {@link A2Component}. This is
13 * typically a combination of major and minor version, indicating backward
14 * compatibility.
15 */
16 public class A2Branch implements Comparable<A2Branch> {
17 private final static Logger logger = System.getLogger(A2Branch.class.getName());
18
19 private final A2Component component;
20 private final String id;
21
22 final SortedMap<Version, A2Module> modules = Collections.synchronizedSortedMap(new TreeMap<>());
23
24 public A2Branch(A2Component component, String id) {
25 this.component = component;
26 this.id = id;
27 component.branches.put(id, this);
28 }
29
30 public Iterable<A2Module> listModules(Object filter) {
31 return modules.values();
32 }
33
34 A2Module getOrAddModule(Version version, Object locator) {
35 if (modules.containsKey(version)) {
36 A2Module res = modules.get(version);
37 if (!res.getLocator().equals(locator)) {
38 logger.log(Level.TRACE,
39 () -> "Inconsistent locator " + locator + " (registered: " + res.getLocator() + ")");
40 }
41 return res;
42 } else
43 return new A2Module(this, version, locator);
44 }
45
46 public A2Module last() {
47 return modules.get(modules.lastKey());
48 }
49
50 public A2Module first() {
51 return modules.get(modules.firstKey());
52 }
53
54 public A2Component getComponent() {
55 return component;
56 }
57
58 public String getId() {
59 return id;
60 }
61
62 @Override
63 public int compareTo(A2Branch o) {
64 return id.compareTo(id);
65 }
66
67 @Override
68 public int hashCode() {
69 return id.hashCode();
70 }
71
72 @Override
73 public boolean equals(Object obj) {
74 if (obj instanceof A2Branch) {
75 A2Branch o = (A2Branch) obj;
76 return component.equals(o.component) && id.equals(o.id);
77 } else
78 return false;
79 }
80
81 @Override
82 public String toString() {
83 return getCoordinates();
84 }
85
86 public String getCoordinates() {
87 return component + ":" + id;
88 }
89
90 static String versionToBranchId(Version version) {
91 return version.getMajor() + "." + version.getMinor();
92 }
93 }