Object remove(VersionSupplier toBeRemoved) { VersionSupplier[] existing = (VersionSupplier[]) internal.get(toBeRemoved.getName()); if (existing != null) { for (int i = 0; i < existing.length; i++) { if (toBeRemoved == existing[i]) { remove(existing, toBeRemoved.getName(), i); return toBeRemoved; } } } return null; }
boolean contains(VersionSupplier vs) { VersionSupplier[] existing = (VersionSupplier[]) internal.get(vs.getName()); if (existing == null) return false; for (int i = 0; i < existing.length; i++) { if (existing[i] == vs) return true; } return false; }
Object put(VersionSupplier versionSupplier) { VersionSupplier[] existing = (VersionSupplier[]) internal.get(versionSupplier.getName()); if (existing == null) { VersionSupplier[] vss = new VersionSupplier[1]; vss[0] = versionSupplier; internal.put(versionSupplier.getName(), vss); } else { for (int i = 0; i < existing.length; i++) { VersionSupplier e = existing[i]; if (e == versionSupplier) return e; if (versionSupplier.getBundle().isResolved() && !e.getBundle().isResolved()) { // Put resolved bundles ahead of unresolved bundles internal.put(versionSupplier.getName(), add(i, versionSupplier, existing)); return null; } else if (versionSupplier.getBundle().isResolved() == e.getBundle().isResolved()) { if (versionSupplier.getVersion().compareTo(e.getVersion()) > 0) { // Put highest versions first internal.put(versionSupplier.getName(), add(i, versionSupplier, existing)); return null; } else if (e.getVersion().equals(versionSupplier.getVersion())) { if (versionSupplier.getBundle().getBundleId() < e.getBundle().getBundleId()) { // Versions match - order by bundle ID internal.put(versionSupplier.getName(), add(i, versionSupplier, existing)); return e; } } } } // Lowest version, so add at end internal.put(versionSupplier.getName(), add(existing.length, versionSupplier, existing)); } return null; }