You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ri...@apache.org on 2009/07/13 15:26:06 UTC
svn commit: r793581 [10/23] - in /felix/trunk/sigil: ./ bld-ivy/
bld-ivy/example/ bld-ivy/example/dependence/
bld-ivy/example/dependence/dependee/ bld-ivy/example/dependence/dependee/src/
bld-ivy/example/dependence/dependee/src/standalone/ bld-ivy/exam...
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/ParseState.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/ParseState.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/ParseState.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/ParseState.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,83 @@
+/*
+ * 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.cauldron.sigil.model.common;
+
+import java.io.Serializable;
+
+/**
+ * @author dave
+ *
+ */
+class ParseState implements Serializable {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ int pos;
+
+ String str;
+
+ ParseState(String str) {
+ this.str = str;
+ }
+
+ public boolean lookingAt(String start) {
+ return str.substring(pos).startsWith(start);
+ }
+
+ public CharSequence skip(int n) {
+ int end = pos + n < str.length() ? pos + n : str.length();
+ int start = pos;
+ pos = end;
+ return str.subSequence(start, end);
+ }
+
+ public char read() {
+ char ch = str.charAt(pos);
+ if (pos < str.length()) {
+ pos++;
+ }
+ return ch;
+ }
+
+ public char readAndSkipWhiteSpace() {
+ char ch = read();
+ skipWhitespace();
+ return ch;
+ }
+
+ char peek() {
+ if (isEndOfString()) {
+ return (char) -1;
+ }
+ return str.charAt(pos);
+ }
+
+ boolean isEndOfString() {
+ return pos == str.length();
+ }
+
+ void skipWhitespace() {
+ while (pos < str.length() && Character.isWhitespace(str.charAt(pos))) {
+ pos++;
+ }
+ }
+}
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/SimpleTerm.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/SimpleTerm.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/SimpleTerm.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/SimpleTerm.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,281 @@
+/*
+ * 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.cauldron.sigil.model.common;
+
+import java.lang.reflect.Constructor;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Vector;
+
+public class SimpleTerm implements LDAPExpr {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ public static final char WILDCARD = 2 ^ 16 - 1;
+ private static final String WILDCARD_STRING = new String(new char[] { SimpleTerm.WILDCARD });
+
+ private Ops op;
+ private String name;
+ private String rval;
+
+ public SimpleTerm(String name, Ops op, String value) {
+ this.op = op;
+ this.name = name.intern();
+ this.rval = value.intern();
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Ops getOp() {
+ return op;
+ }
+
+ public String getRval() {
+ return rval;
+ }
+
+ public boolean eval(Map<String, ?> map) {
+
+ Object lval = map.get(name);
+ if (lval == null) {
+ return false;
+ }
+ else if (Ops.EQ == op && WILDCARD_STRING.equals(lval)) {
+ return true;
+ }
+ // any match in the vector will do
+ else if (lval instanceof Vector<?>) {
+ Vector<?> vec = (Vector<?>) lval;
+ for (Iterator<?> i = vec.iterator(); i.hasNext();) {
+ if (check(i.next())) {
+ return true;
+ }
+ }
+ return false;
+ }
+ // any match in the array will do
+ else if (lval instanceof Object[]) {
+ Object[] arr = (Object[]) lval;
+ for (int i = 0; i < arr.length; i++) {
+ if (check(arr[i])) {
+ return true;
+ }
+ }
+ return false;
+ }
+ return check(lval);
+ }
+
+ @SuppressWarnings("unchecked")
+ private boolean check(Object lval) {
+ if (lval == null) {
+ return false;
+ }
+ else if (Ops.EQ == op && WILDCARD_STRING.equals(lval)) {
+ return true;
+ }
+
+ Object rhs = null;
+
+ if (lval instanceof String) {
+
+ if (Ops.APPROX == op) {
+ rhs = collapseWhiteSpace(rval);
+ lval = collapseWhiteSpace((String) lval);
+ }
+
+ if (Ops.EQ == op || Ops.APPROX == op) {
+ return stringCheck((String) lval);
+ }
+ // rhs already a string
+
+ }
+ else if (lval.getClass() == Byte.class) {
+ rhs = Byte.valueOf(rval);
+ }
+ else if (lval.getClass() == Short.class) {
+ rhs = Short.valueOf(rval);
+ }
+ else if (lval.getClass() == Integer.class) {
+ rhs = Integer.valueOf(rval);
+ }
+ else if (lval.getClass() == Long.class) {
+ rhs = Long.valueOf(rval);
+ }
+ else if (lval.getClass() == Float.class) {
+ rhs = Float.valueOf(rval);
+ }
+ else if (lval.getClass() == Double.class) {
+ rhs = Double.valueOf(rval);
+ }
+ else {
+ try {
+ Constructor<?> stringCtor = lval.getClass().getConstructor(new Class[] { String.class });
+ rhs = stringCtor.newInstance(rval);
+ }
+ catch (Exception e) {
+ // log it
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ if (!(lval instanceof Comparable)) {
+ return Ops.EQ == op && lval.equals(rval);
+ }
+ else {
+
+ Comparable<? super Object> lhs = (Comparable<? super Object>) lval;
+
+ int compare = lhs.compareTo(rhs);
+
+ switch (op) {
+ case EQ:
+ return compare == 0;
+ case APPROX:
+ return compare == 0;
+ case GE:
+ return compare >= 0;
+ case LE:
+ return compare <= 0;
+ case GT:
+ return compare > 0;
+ case LT:
+ return compare < 0;
+ }
+ }
+
+ return false;
+ }
+
+ private boolean stringCheck(String lhs) {
+
+ String rhs;
+ switch (op) {
+ case EQ:
+ case APPROX:
+ rhs = rval;
+ break;
+ default:
+ return false;
+ }
+
+ int valLength = lhs.length();
+ int patLength = rval.length();
+
+ if (valLength == 0 && patLength == 0) {
+ return true;
+ }
+
+ boolean wc = false;
+ int j = 0;
+ for (int i = 0; i < patLength; i++) {
+ // trailing wildcards
+ char pc = rhs.charAt(i);
+ if (j == valLength) {
+ if (pc != SimpleTerm.WILDCARD) {
+ return false;
+ }
+ continue;
+ }
+ if (pc == SimpleTerm.WILDCARD) {
+ wc = true;
+ continue;
+ }
+ while (wc && j < valLength - 1 && lhs.charAt(j) != pc) {
+ j++;
+ }
+ if (lhs.charAt(j) != pc) {
+ return false;
+ }
+ else {
+ wc = false;
+ j++;
+ }
+ }
+ return (wc || j == valLength);
+
+ }
+
+ private String collapseWhiteSpace(String in) {
+ StringBuffer out = new StringBuffer(in.trim().length());
+ boolean white = false;
+ for (int i = 0; i < in.length(); i++) {
+ char ch = in.charAt(i);
+ if (Character.isWhitespace(ch)) {
+ white = true;
+ }
+ else {
+ if (white) {
+ out.append(" ");
+ white = false;
+ }
+ out.append(ch);
+ }
+ }
+ return out.toString();
+ }
+
+ public void visit(ExprVisitor v) {
+ v.visitSimple(this);
+ }
+
+ public LDAPExpr[] getChildren() {
+ return CHILDLESS;
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other instanceof SimpleTerm) {
+ SimpleTerm that = (SimpleTerm) other;
+ return name.equals(that.name) && op.equals(that.op) && rval.equals(that.rval);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return "(" + name + " " + op.toString() + " " + escape(rval) + ")";
+ }
+
+ private String escape(String raw) {
+ StringBuffer buf = new StringBuffer(raw.length() + 10);
+ for (int i = 0; i < raw.length(); i++) {
+ char ch = raw.charAt(i);
+ switch (ch) {
+ case SimpleTerm.WILDCARD:
+ buf.append("*");
+ break;
+ case '(':
+ case ')':
+ case '*':
+ buf.append("\\").append(ch);
+ break;
+ default:
+ buf.append(ch);
+ }
+ }
+ return buf.toString();
+ }
+}
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/Utils.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/Utils.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/Utils.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/Utils.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,71 @@
+/*
+ * 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.cauldron.sigil.model.common;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class Utils {
+ public static MapBuilder map(String name, Object value) {
+ return new MapBuilder().put(name, value);
+ }
+
+ public static String toString(Map<String, Object> attrs) {
+ if (attrs == null) {
+ return "NULL";
+ }
+
+ StringBuffer buf = new StringBuffer(128);
+ List<String> keys = new ArrayList<String>(attrs.keySet());
+ Collections.sort(keys);
+ buf.append("{");
+
+ for (int i = 0; i < keys.size(); i++) {
+ Object name = keys.get(i);
+ Object value = attrs.get(name);
+ buf.append(name).append("=").append(value).append(",");
+ }
+
+ if (buf.length() > 1) {
+ buf.delete(buf.length() - 1, buf.length());
+ }
+
+ buf.append("}");
+
+ return buf.toString();
+ }
+
+ public static class MapBuilder {
+ private Map<String, Object> map = new HashMap<String, Object>();
+
+ public MapBuilder put(String name, Object value) {
+ map.put(name, value);
+
+ return this;
+ }
+
+ public Map<String, Object> toMap() {
+ return map;
+ }
+ }
+}
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/VersionRange.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/VersionRange.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/VersionRange.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/VersionRange.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,252 @@
+/*
+ * 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.cauldron.sigil.model.common;
+
+import java.io.Serializable;
+
+import org.osgi.framework.Version;
+
+public class VersionRange implements Serializable {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ public static final Version INFINITE_VERSION = new Version(Integer.MAX_VALUE, Integer.MAX_VALUE,
+ Integer.MAX_VALUE, "");
+ public static final VersionRange ANY_VERSION = new VersionRange(false, Version.emptyVersion, INFINITE_VERSION, true);
+
+ private boolean openFloor;
+ private Version floor;
+ private Version ceiling;
+ private boolean openCeiling;
+
+ /**
+ * Interval constructor
+ *
+ * @param openFloor Whether the lower bound of the range is inclusive (false) or exclusive (true).
+ * @param floor The lower bound version of the range.
+ * @param ceiling The upper bound version of the range.
+ * @param openCeiling Whether the upper bound of the range is inclusive (false) or exclusive (true).
+ */
+ public VersionRange(boolean openFloor, Version floor, Version ceiling, boolean openCeiling) {
+ this.openFloor = openFloor;
+ this.floor = floor;
+ this.ceiling = ceiling;
+ this.openCeiling = openCeiling;
+ }
+
+ /**
+ * atLeast constructor
+ *
+ * @param openFloor
+ * @param floor
+ */
+ public VersionRange(Version atLeast) {
+ this.openFloor = false;
+ this.floor = atLeast;
+ this.ceiling = INFINITE_VERSION;
+ this.openCeiling = true;
+ }
+
+ public static VersionRange parseVersionRange(String val) throws IllegalArgumentException, NumberFormatException {
+ if ( val == null || val.trim().length() == 0 ) {
+ return ANY_VERSION;
+ }
+
+ boolean openFloor;
+ boolean openCeiling;
+ val = val.replaceAll("\\s", "");
+ val = val.replaceAll("\"", "");
+ int fst = val.charAt(0);
+ if (fst == '[') {
+ openFloor = false;
+ }
+ else if (fst == '(') {
+ openFloor = true;
+ }
+ else {
+ Version atLeast = Version.parseVersion(val);
+ return new VersionRange(atLeast);
+ }
+
+ int lst = val.charAt(val.length() - 1);
+ if (lst == ']') {
+ openCeiling = false;
+ }
+ else if (lst == ')') {
+ openCeiling = true;
+ }
+ else {
+ throw new IllegalArgumentException("illegal version range syntax " + val + ": range must end in ')' or ']'");
+ }
+
+ String inner = val.substring(1, val.length() - 1);
+ String[] floorCeiling = inner.split(",");
+ if (floorCeiling.length != 2) {
+ throw new IllegalArgumentException("illegal version range syntax " + "too many commas");
+ }
+ Version floor = Version.parseVersion(floorCeiling[0]);
+ Version ceiling = "*".equals( floorCeiling[1] ) ? INFINITE_VERSION : Version.parseVersion(floorCeiling[1]);
+ return new VersionRange(openFloor, floor, ceiling, openCeiling);
+ }
+ public Version getCeiling() {
+ return ceiling;
+ }
+
+ public Version getFloor() {
+ return floor;
+ }
+
+ public boolean isOpenCeiling() {
+ return openCeiling;
+ }
+
+ public boolean isOpenFloor() {
+ return openFloor;
+ }
+
+ public boolean isPointVersion() {
+ return !openFloor && !openCeiling && floor.equals(ceiling);
+ }
+
+ /**
+ * test a version to see if it falls in the range
+ *
+ * @param version
+ * @return
+ */
+ public boolean contains(Version version) {
+ if (version.equals(INFINITE_VERSION)) {
+ return ceiling.equals(INFINITE_VERSION);
+ }
+ else {
+ return (version.compareTo(floor) > 0 && version.compareTo(ceiling) < 0)
+ || (!openFloor && version.equals(floor)) || (!openCeiling && version.equals(ceiling));
+ }
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((ceiling == null) ? 0 : ceiling.hashCode());
+ result = prime * result + ((floor == null) ? 0 : floor.hashCode());
+ result = prime * result + (openCeiling ? 1231 : 1237);
+ result = prime * result + (openFloor ? 1231 : 1237);
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ final VersionRange other = (VersionRange) obj;
+ if (ceiling == null) {
+ if (other.ceiling != null)
+ return false;
+ }
+ else if (!ceiling.equals(other.ceiling))
+ return false;
+ if (floor == null) {
+ if (other.floor != null)
+ return false;
+ }
+ else if (!floor.equals(other.floor))
+ return false;
+ if (openCeiling != other.openCeiling)
+ return false;
+ if (openFloor != other.openFloor)
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ if (ANY_VERSION.equals(this)) {
+ return makeString(openFloor, Version.emptyVersion, INFINITE_VERSION, openCeiling);
+ }
+ return makeString(openFloor, floor, ceiling, openCeiling);
+ }
+
+ private String makeString(boolean openFloor, Version floor, Version ceiling, boolean openCeiling) {
+ StringBuffer vr = new StringBuffer(32);
+ if ( INFINITE_VERSION.equals(ceiling) ) {
+ vr.append( Version.emptyVersion.equals(floor) ? "0" : floor.toString() );
+ }
+ else {
+ vr.append(openFloor ? "(" : "[");
+ String floorStr = Version.emptyVersion.equals(floor) ? "0" : floor.toString();
+ String ceilingStr = ceiling.toString();
+ vr.append(floorStr).append(",").append(ceilingStr);
+ vr.append(openCeiling ? ")" : "]");
+ }
+ return vr.toString();
+ }
+
+
+ public static VersionRange newInstance(Version pointVersion, VersionRangeBoundingRule lowerBoundRule, VersionRangeBoundingRule upperBoundRule) {
+ Version floor = null;
+ switch (lowerBoundRule) {
+ case Any:
+ floor = new Version(0, 0, 0);
+ break;
+ case Major:
+ floor = new Version(pointVersion.getMajor(), 0, 0);
+ break;
+ case Minor:
+ floor = new Version(pointVersion.getMajor(), pointVersion.getMinor(), 0);
+ break;
+ case Micro:
+ floor = new Version(pointVersion.getMajor(), pointVersion.getMinor(), pointVersion.getMicro());
+ break;
+ case Exact:
+ floor = pointVersion;
+ break;
+ }
+
+ Version ceiling = null;
+ boolean openCeiling = true;
+ switch (upperBoundRule) {
+ case Any:
+ ceiling = INFINITE_VERSION;
+ break;
+ case Major:
+ ceiling = new Version(pointVersion.getMajor() + 1, 0, 0);
+ break;
+ case Minor:
+ ceiling = new Version(pointVersion.getMajor(), pointVersion.getMinor() + 1, 0);
+ break;
+ case Micro:
+ ceiling = new Version(pointVersion.getMajor(), pointVersion.getMinor(), pointVersion.getMicro() + 1);
+ break;
+ case Exact:
+ ceiling = pointVersion;
+ openCeiling = false;
+ break;
+ }
+
+ return new VersionRange(false, floor, ceiling, openCeiling);
+ }
+}
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/VersionRangeBoundingRule.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/VersionRangeBoundingRule.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/VersionRangeBoundingRule.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/common/VersionRangeBoundingRule.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,24 @@
+/*
+ * 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.cauldron.sigil.model.common;
+
+public enum VersionRangeBoundingRule {
+ Exact, Micro, Minor, Major, Any
+}
\ No newline at end of file
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/IDownloadJar.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/IDownloadJar.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/IDownloadJar.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/IDownloadJar.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,35 @@
+/*
+ * 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.cauldron.sigil.model.eclipse;
+
+import java.util.Set;
+
+import org.cauldron.sigil.model.IModelElement;
+import org.eclipse.core.runtime.IPath;
+
+public interface IDownloadJar extends IModelElement {
+ void addEntry(IPath entry);
+ void removeEntry(IPath entry);
+ // XXX bad spelling on purpose so that ModelElementSupport picks up method
+ // TODO fix in ModelElementSupport
+ Set<IPath> getEntrys();
+
+ void clearEntries();
+}
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/ILibrary.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/ILibrary.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/ILibrary.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/ILibrary.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,36 @@
+/*
+ * 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.cauldron.sigil.model.eclipse;
+
+import java.util.Collection;
+
+import org.cauldron.sigil.model.IModelElement;
+import org.cauldron.sigil.model.osgi.IPackageImport;
+import org.osgi.framework.Version;
+
+public interface ILibrary extends IModelElement {
+ String getName();
+ void setName(String name);
+ Version getVersion();
+ void setVersion(Version version);
+ void addImport(IPackageImport pi);
+ void removeImport(IPackageImport pi);
+ Collection<IPackageImport> getImports();
+}
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/ILibraryImport.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/ILibraryImport.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/ILibraryImport.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/ILibraryImport.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,30 @@
+/*
+ * 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.cauldron.sigil.model.eclipse;
+
+import org.cauldron.sigil.model.IModelElement;
+import org.cauldron.sigil.model.common.VersionRange;
+
+public interface ILibraryImport extends IModelElement {
+ String getLibraryName();
+ void setLibraryName(String name);
+ VersionRange getVersions();
+ void setVersions(VersionRange range);
+}
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/INewtonSystem.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/INewtonSystem.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/INewtonSystem.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/INewtonSystem.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,33 @@
+/*
+ * 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.cauldron.sigil.model.eclipse;
+
+import org.cauldron.sigil.model.IModelElement;
+import org.eclipse.core.runtime.IPath;
+
+/**
+ * @author dave
+ *
+ */
+public interface INewtonSystem extends IModelElement {
+ IPath getLocation();
+
+ void setLocation(IPath location);
+}
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/ISCAComposite.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/ISCAComposite.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/ISCAComposite.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/ISCAComposite.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,33 @@
+/*
+ * 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.cauldron.sigil.model.eclipse;
+
+import org.cauldron.sigil.model.IModelElement;
+import org.eclipse.core.runtime.IPath;
+
+/**
+ * @author dave
+ *
+ */
+public interface ISCAComposite extends IModelElement {
+ IPath getLocation();
+
+ void setLocation(IPath location);
+}
\ No newline at end of file
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/ISigilBundle.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/ISigilBundle.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/ISigilBundle.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/eclipse/ISigilBundle.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,141 @@
+/*
+ * 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.cauldron.sigil.model.eclipse;
+
+import java.io.IOException;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.cauldron.sigil.model.ICompoundModelElement;
+import org.cauldron.sigil.model.osgi.IBundleModelElement;
+import org.cauldron.sigil.model.osgi.IPackageExport;
+import org.cauldron.sigil.model.osgi.IPackageImport;
+import org.cauldron.sigil.model.osgi.IVersionedModelElement;
+
+/**
+ * @author dave
+ *
+ */
+public interface ISigilBundle extends ICompoundModelElement, IVersionedModelElement {
+ void synchronize(IProgressMonitor monitor) throws IOException;
+
+ boolean isSynchronized();
+
+ IBundleModelElement getBundleInfo();
+
+ String getSymbolicName();
+
+ void setBundleInfo(IBundleModelElement bundle);
+
+ IDownloadJar getDownloadJar();
+
+ void setDownloadJar(IDownloadJar download);
+
+ void addComposite(ISCAComposite composite);
+
+ void removeComposite(ISCAComposite composite);
+
+ Set<ISCAComposite> getComposites();
+
+ void addLibraryPath(IPath path);
+
+ void removeLibraryPath(IPath path);
+
+ Set<IPath> getLibraryPaths();
+
+ void addSourcePath(IPath path);
+
+ void removeSourcePath(IPath path);
+
+ Set<IPath> getSourcePaths();
+
+ void clearSourcePaths();
+
+ Set<String> getClasspathEntrys();
+
+ void addClasspathEntry(String encodedClasspath);
+
+ void removeClasspathEntry(String encodedClasspath);
+
+ IPath getLocation();
+
+ void setLocation(IPath location);
+
+ IPath getSourcePathLocation();
+
+ void setSourcePathLocation( IPath location );
+
+ IPath getSourceRootPath();
+
+ void setSourceRootPath( IPath location );
+
+ void setLicencePathLocation(IPath cacheSourceLocation);
+
+ IPath getLicencePathLocation();
+
+ /**
+ * get package names included in bundle.
+ * Can contain wildcards e.g. org.foo.*
+ */
+ Set<String> getPackages();
+
+ /**
+ * remove package name from those included in bundle.
+ */
+ boolean removePackage(String pkg);
+
+ /**
+ * add package name to be included in bundle.
+ */
+ void addPackage(String pkg);
+
+
+ /**
+ * get package names included in download jar.
+ * Can contain wildcards e.g. org.foo.*
+ */
+ Set<String> getDownloadPackages();
+
+ /**
+ * remove package name from those included in download jar.
+ */
+ boolean removeDownloadPackage(String pkg);
+
+ /**
+ * add package name to be included in download jar.
+ */
+ void addDownloadPackage(String pkg);
+
+ /**
+ * Attempt to find a package export that matches the given name or return null if none specified
+ *
+ * @param elementName
+ * @return
+ */
+ IPackageExport findExport(String elementName);
+
+ /**
+ * Attempt to find a package import that matches the given name or return null if none specified
+ * @param packageName
+ * @return
+ */
+ IPackageImport findImport(String packageName);
+}
\ No newline at end of file
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IBundleModelElement.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IBundleModelElement.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IBundleModelElement.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IBundleModelElement.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,114 @@
+/*
+ * 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.cauldron.sigil.model.osgi;
+
+import java.net.URI;
+import java.util.Collection;
+import java.util.Set;
+
+import org.cauldron.sigil.model.ICompoundModelElement;
+import org.cauldron.sigil.model.INamedModelElement;
+import org.cauldron.sigil.model.eclipse.ILibraryImport;
+import org.osgi.framework.Version;
+
+public interface IBundleModelElement extends INamedModelElement, ICompoundModelElement, IVersionedModelElement {
+
+ String getActivator();
+
+ void setActivator(String activator);
+
+ String getCategory();
+
+ void setCategory(String category);
+
+ String getContactAddress();
+
+ void setContactAddress(String contactAddress);
+
+ String getCopyright();
+
+ void setCopyright(String copyright);
+
+ URI getDocURI();
+
+ void setDocURI(URI docURI);
+
+ Set<IPackageExport> getExports();
+
+ void addExport(IPackageExport packageExport);
+
+ void removeExport(IPackageExport packageExport);
+
+ Set<IPackageImport> getImports();
+
+ void addImport(IPackageImport packageImport);
+
+ void removeImport(IPackageImport packageImport);
+
+ Set<IRequiredBundle> getRequiredBundles();
+
+ void addRequiredBundle(IRequiredBundle bundle);
+
+ void removeRequiredBundle(IRequiredBundle bundle);
+
+ void addLibraryImport(ILibraryImport library);
+
+ void removeLibraryImport(ILibraryImport library);
+
+ Set<ILibraryImport> getLibraryImports();
+
+ URI getLicenseURI();
+
+ void setLicenseURI(URI licenseURI);
+
+ URI getSourceLocation();
+
+ void setSourceLocation(URI sourceLocation);
+
+ String getSymbolicName();
+
+ void setSymbolicName(String symbolicName);
+
+ URI getUpdateLocation();
+
+ void setUpdateLocation(URI updateLocation);
+
+ String getVendor();
+
+ void setVendor(String vendor);
+
+ Version getVersion();
+
+ void setVersion(Version version);
+
+ void setDescription(String elementText);
+
+ String getDescription();
+
+ Collection<String> getClasspaths();
+
+ void addClasspath(String path);
+
+ void removeClasspath(String path);
+
+ void setFragmentHost(IRequiredBundle fragmentHost);
+
+ IRequiredBundle getFragmentHost();
+}
\ No newline at end of file
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IPackageExport.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IPackageExport.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IPackageExport.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IPackageExport.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,36 @@
+/*
+ * 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.cauldron.sigil.model.osgi;
+
+import java.util.Collection;
+
+import org.osgi.framework.Version;
+
+public interface IPackageExport extends IPackageModelElement, IVersionedModelElement, Comparable<IPackageExport> {
+ void addUse(String uses);
+
+ void removeUse(String uses);
+
+ Collection<String> getUses();
+
+ void setUses(Collection<String> asList);
+
+ Version getRawVersion();
+}
\ No newline at end of file
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IPackageImport.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IPackageImport.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IPackageImport.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IPackageImport.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,65 @@
+/*
+ * 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.cauldron.sigil.model.osgi;
+
+import org.cauldron.sigil.model.IRequirementModelElement;
+
+public interface IPackageImport extends IPackageModelElement, IVersionRangeModelElement, IRequirementModelElement, Comparable<IPackageImport> {
+ /**
+ * indicates whether the OSGi attribute "resolution=optional" is specified.
+ */
+ boolean isOptional();
+
+ void setOptional(boolean optional);
+
+ /**
+ * indicates whether import is needed at compile-time.
+ * Default true. Used in conjunction with OSGiHeader.ALWAYS,
+ * to add an OSGI import, without creating a dependency.
+ */
+ boolean isDependency();
+
+ void setDependency(boolean dependency);
+
+ /**
+ * indicates whether import should be added to OSGi Package-Import header.
+ * Default: AUTO.
+ */
+ OSGiImport getOSGiImport();
+
+ void setOSGiImport(OSGiImport osgiImport);
+
+ enum OSGiImport {
+ /**
+ * only add to OSGi header, if it appears to be needed.
+ */
+ AUTO,
+
+ /**
+ * always add to OSGi header, even if it appears unnecessary.
+ */
+ ALWAYS,
+
+ /**
+ * never add to OSGi header.
+ */
+ NEVER
+ }
+}
\ No newline at end of file
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IPackageModelElement.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IPackageModelElement.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IPackageModelElement.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IPackageModelElement.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,30 @@
+/*
+ * 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.cauldron.sigil.model.osgi;
+
+import org.cauldron.sigil.model.IModelElement;
+
+public interface IPackageModelElement extends IModelElement {
+
+ String getPackageName();
+
+ void setPackageName(String packageName);
+
+}
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IRequiredBundle.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IRequiredBundle.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IRequiredBundle.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IRequiredBundle.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,38 @@
+/*
+ * 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.cauldron.sigil.model.osgi;
+
+import org.cauldron.sigil.model.IModelElement;
+import org.cauldron.sigil.model.IRequirementModelElement;
+import org.cauldron.sigil.model.common.VersionRange;
+
+public interface IRequiredBundle extends IModelElement, IRequirementModelElement, Comparable<IRequiredBundle> {
+ String getSymbolicName();
+
+ void setSymbolicName(String symbolicName);
+
+ VersionRange getVersions();
+
+ void setVersions(VersionRange versions);
+
+ boolean isOptional();
+
+ void setOptional(boolean optional);
+}
\ No newline at end of file
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IVersionRangeModelElement.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IVersionRangeModelElement.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IVersionRangeModelElement.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IVersionRangeModelElement.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,30 @@
+/*
+ * 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.cauldron.sigil.model.osgi;
+
+import org.cauldron.sigil.model.common.VersionRange;
+
+public interface IVersionRangeModelElement {
+
+ VersionRange getVersions();
+
+ void setVersions(VersionRange version);
+
+}
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IVersionedModelElement.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IVersionedModelElement.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IVersionedModelElement.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/model/osgi/IVersionedModelElement.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,30 @@
+/*
+ * 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.cauldron.sigil.model.osgi;
+
+import org.osgi.framework.Version;
+
+public interface IVersionedModelElement {
+
+ Version getVersion();
+
+ void setVersion(Version version);
+
+}
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/AbstractBundleRepository.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/AbstractBundleRepository.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/AbstractBundleRepository.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/AbstractBundleRepository.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,380 @@
+/*
+ * 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.cauldron.sigil.repository;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.jar.Attributes;
+import java.util.jar.Manifest;
+
+import org.cauldron.bld.core.BldCore;
+import org.cauldron.bld.core.licence.ILicenseManager;
+import org.cauldron.bld.core.licence.ILicensePolicy;
+import org.cauldron.bld.core.util.QuoteUtil;
+import org.cauldron.sigil.model.IModelElement;
+import org.cauldron.sigil.model.ModelElementFactory;
+import org.cauldron.sigil.model.ModelElementFactoryException;
+import org.cauldron.sigil.model.common.VersionRange;
+import org.cauldron.sigil.model.eclipse.ILibrary;
+import org.cauldron.sigil.model.eclipse.ISigilBundle;
+import org.cauldron.sigil.model.osgi.IBundleModelElement;
+import org.cauldron.sigil.model.osgi.IPackageExport;
+import org.cauldron.sigil.model.osgi.IPackageImport;
+import org.cauldron.sigil.model.osgi.IRequiredBundle;
+import org.osgi.framework.Version;
+
+public abstract class AbstractBundleRepository implements IBundleRepository {
+
+ private final String id;
+ private final HashSet<IBundleRepositoryListener> listeners = new HashSet<IBundleRepositoryListener>();
+
+ public AbstractBundleRepository(String id) {
+ this.id = id;
+ }
+
+ public abstract void accept(IRepositoryVisitor visitor, int options);
+
+ public void addBundleRepositoryListener(IBundleRepositoryListener listener) {
+ synchronized(listeners) {
+ listeners.add(listener);
+ }
+ }
+
+ public void removeBundleRepositoryListener(IBundleRepositoryListener listener) {
+ synchronized(listeners) {
+ listeners.remove(listener);
+ }
+ }
+
+ protected void notifyChange() {
+ for ( IBundleRepositoryListener l : listeners ) {
+ l.notifyChange(this);
+ }
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void accept(IRepositoryVisitor visitor) {
+ accept( visitor, 0 );
+ }
+
+ public void writeOBR(OutputStream out) throws IOException {
+ throw new UnsupportedOperationException();
+ }
+
+ public Collection<ISigilBundle> findProviders(final ILibrary library, int options) {
+ final ArrayList<ISigilBundle> found = new ArrayList<ISigilBundle>();
+
+ final ILicensePolicy policy = findPolicy(library);
+
+ IRepositoryVisitor visitor = new IRepositoryVisitor() {
+ public boolean visit(ISigilBundle bundle) {
+ if (policy.accept(bundle)) {
+ IBundleModelElement info = bundle.getBundleInfo();
+ for ( IPackageImport pi : library.getImports() ) {
+ for ( IPackageExport e : info.getExports() ) {
+ if ( pi.getPackageName().equals( e.getPackageName() ) && pi.getVersions().contains( e.getVersion() ) ) {
+ found.add(bundle);
+ break;
+ }
+ }
+ }
+ }
+ return true;
+ }
+ };
+
+ accept( visitor, options );
+
+ return found;
+ }
+
+ public Collection<ISigilBundle> findAllProviders(final IRequiredBundle req, int options) {
+ final ArrayList<ISigilBundle> found = new ArrayList<ISigilBundle>();
+
+ final ILicensePolicy policy = findPolicy(req);
+
+ IRepositoryVisitor visitor = new IRepositoryVisitor() {
+ public boolean visit(ISigilBundle bundle) {
+ if (policy.accept(bundle)) {
+ IBundleModelElement info = bundle.getBundleInfo();
+ if ( req.getSymbolicName().equals( info.getSymbolicName() ) && req.getVersions().contains( info.getVersion() ) ) {
+ found.add(bundle);
+ }
+ }
+ return true;
+ }
+ };
+
+ accept( visitor, options );
+
+ return found;
+ }
+
+ public Collection<ISigilBundle> findAllProviders(final IPackageImport pi, int options) {
+ final ArrayList<ISigilBundle> found = new ArrayList<ISigilBundle>();
+
+ final ILicensePolicy policy = findPolicy(pi);
+
+ IRepositoryVisitor visitor = new IRepositoryVisitor() {
+
+ public boolean visit(ISigilBundle bundle) {
+ if (policy.accept(bundle)) {
+ IBundleModelElement info = bundle.getBundleInfo();
+ if ( info != null ) {
+ for ( IPackageExport e : info.getExports() ) {
+ if ( pi.getPackageName().equals( e.getPackageName() ) ) {
+ if ( pi.getVersions().contains( e.getVersion() ) ) {
+ found.add(bundle);
+ break;
+ }
+ }
+ }
+ }
+ }
+ return true;
+ }
+
+ };
+
+ accept( visitor, options );
+
+ return found;
+ }
+
+ public ISigilBundle findProvider(final IPackageImport pi, int options) {
+ final ArrayList<ISigilBundle> found = new ArrayList<ISigilBundle>();
+
+ final ILicensePolicy policy = findPolicy(pi);
+
+ IRepositoryVisitor visitor = new IRepositoryVisitor() {
+ public boolean visit(ISigilBundle bundle) {
+ if (policy.accept(bundle)) {
+ IBundleModelElement info = bundle.getBundleInfo();
+ for ( IPackageExport e : info.getExports() ) {
+ if ( pi.getPackageName().equals( e.getPackageName() ) && pi.getVersions().contains( e.getVersion() ) ) {
+ found.add( bundle );
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ };
+
+ accept( visitor, options );
+
+ return found.isEmpty() ? null : found.iterator().next();
+ }
+
+ public ISigilBundle findProvider(final IRequiredBundle req, int options) {
+ final ArrayList<ISigilBundle> found = new ArrayList<ISigilBundle>();
+
+ final ILicensePolicy policy = findPolicy(req);
+
+ IRepositoryVisitor visitor = new IRepositoryVisitor() {
+
+ public boolean visit(ISigilBundle bundle) {
+ if (policy.accept(bundle)) {
+ IBundleModelElement info = bundle.getBundleInfo();
+ if ( req.getSymbolicName().equals( info.getSymbolicName() ) && req.getVersions().contains( info.getVersion() ) ) {
+ found.add( bundle );
+ return false;
+ }
+ }
+ return true;
+ }
+
+ };
+
+ accept( visitor, options );
+
+ return found.isEmpty() ? null : found.iterator().next();
+ }
+
+ public IBundleModelElement buildBundleModelElement(Manifest mf) {
+ IBundleModelElement info = null;
+
+ if ( mf != null ) {
+ Attributes attrs = mf.getMainAttributes();
+ String name = attrs.getValue("Bundle-SymbolicName");
+ if (name == null) {
+ // framework.jar doesn't have Bundle-SymbolicName!
+ name = attrs.getValue("Bundle-Name");
+ }
+
+ if (name != null) {
+ try {
+ info = ModelElementFactory.getInstance().newModelElement( IBundleModelElement.class );
+ info.setSymbolicName( name.split(";")[0] );
+ info.setVersion( Version.parseVersion( attrs.getValue( "Bundle-Version" ) ) );
+ info.setName( attrs.getValue( "Bundle-Name" ) );
+ info.setDescription( attrs.getValue( "Bundle-Description" ) );
+ info.setVendor( attrs.getValue( "Bundle-Vendor" ) );
+
+ String importStr = attrs.getValue( "Import-Package" );
+ if ( importStr != null ) {
+ addImports( info, importStr );
+ }
+ String exportStr = attrs.getValue( "Export-Package" );
+ if ( exportStr != null ) {
+ addExports( info, exportStr );
+ }
+
+ String reqStr = attrs.getValue( "Require-Bundle" );
+ if ( reqStr != null ) {
+ addRequires( info, reqStr );
+ }
+
+ String cpStr = attrs.getValue( "Bundle-Classpath" );
+
+ if ( cpStr != null ) {
+ addClasspath( info, cpStr );
+ }
+ }
+ catch (RuntimeException e) {
+ BldCore.error( "Failed to read info from bundle " + name, e );
+ // clear elements as clearly got garbage
+ info = null;
+ }
+ }
+ }
+
+ return info;
+ }
+
+ protected ILicensePolicy findPolicy(IModelElement elem) {
+ ILicenseManager man = BldCore.getLicenseManager();
+
+/* ISigilProjectModel p = elem.getAncestor(ISigilProjectModel.class);
+
+ ILicensePolicy policy = null;
+
+ if ( p != null ) {
+ policy = man.getPolicy(p);
+ }
+ else {
+ policy = man.getDefaultPolicy();
+ }
+
+ return policy; */
+
+ return man.getDefaultPolicy();
+ }
+
+ private void addClasspath(IBundleModelElement info, String cpStr) {
+ for ( String cp : cpStr.split( "," ) ) {
+ info.addClasspath( cp );
+ }
+ }
+
+ private void addExports(IBundleModelElement info, String exportStr) throws ModelElementFactoryException {
+ for ( String exp : QuoteUtil.split( exportStr ) ) {
+ try {
+ String[] parts = exp.split( ";" );
+ IPackageExport pe = ModelElementFactory.getInstance().newModelElement(IPackageExport.class);
+ pe.setPackageName( parts[0].trim() );
+
+ if ( parts.length > 1 ) {
+ for (int i = 1; i < parts.length; i++ ) {
+ String check = parts[i];
+ if ( check.toLowerCase().startsWith( "version=" ) ) {
+ pe.setVersion( parseVersion(check.substring("version=".length())));
+ }
+ else if ( check.toLowerCase().startsWith( "specification-version=" ) ) {
+ pe.setVersion( parseVersion( check.substring("specification-version=".length()) ) );
+ }
+ else if ( check.toLowerCase().startsWith( "uses:=" ) ) {
+ for (String use : parseUses( check.substring( "uses:=".length() ) ) ) {
+ pe.addUse(use);
+ }
+ }
+ }
+ }
+ info.addExport(pe);
+ }
+ catch (RuntimeException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private Collection<String> parseUses(String uses) {
+ if ( uses.startsWith( "\"") ) {
+ uses = uses.substring(1, uses.length() - 2 );
+ }
+
+ return Arrays.asList( uses.split(",") );
+ }
+
+ private Version parseVersion(String val) {
+ val = val.replaceAll("\"", "");
+ return new Version(val);
+ }
+
+ private void addImports(IBundleModelElement info, String importStr) throws ModelElementFactoryException {
+ for ( String imp : QuoteUtil.split( importStr ) ) {
+ String[] parts = imp.split( ";" );
+ IPackageImport pi = ModelElementFactory.getInstance().newModelElement(IPackageImport.class);
+ pi.setPackageName( parts[0].trim() );
+
+ if ( parts.length > 1 ) {
+ for ( int i = 1; i < parts.length; i++ ) {
+ String p = parts[i];
+ if ( p.toLowerCase().startsWith( "version=" ) ) {
+ pi.setVersions( VersionRange.parseVersionRange(p.substring("version=".length())));
+ }
+ else if ( p.toLowerCase().startsWith( "specification-version=" ) ) {
+ pi.setVersions( VersionRange.parseVersionRange( p.substring("specification-version=".length()) ));
+ }
+ else if ( p.toLowerCase().startsWith( "resolution:=" ) ) {
+ pi.setOptional( p.toLowerCase().substring("resolution:=".length()).equals( "optional") );
+ }
+ }
+ }
+ info.addImport(pi);
+ }
+ }
+
+ private void addRequires(IBundleModelElement info, String reqStr) throws ModelElementFactoryException {
+ for ( String imp : QuoteUtil.split( reqStr ) ) {
+ String[] parts = imp.split( ";" );
+ IRequiredBundle req = ModelElementFactory.getInstance().newModelElement(IRequiredBundle.class);
+ req.setSymbolicName( parts[0] );
+
+ if ( parts.length > 1 ) {
+ if ( parts[1].toLowerCase().startsWith( "version=" ) ) {
+ req.setVersions( VersionRange.parseVersionRange(parts[1].substring("version=".length())));
+ }
+ else if ( parts[1].toLowerCase().startsWith( "specification-version=" ) ) {
+ req.setVersions( VersionRange.parseVersionRange( parts[1].substring("specification-version=".length()) ));
+ }
+ }
+ info.addRequiredBundle(req);
+ }
+ }
+}
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/AbstractRepositoryManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/AbstractRepositoryManager.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/AbstractRepositoryManager.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/AbstractRepositoryManager.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,330 @@
+/*
+ * 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.cauldron.sigil.repository;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.cauldron.bld.core.repository.BundleResolver;
+import org.cauldron.sigil.model.IModelWalker;
+import org.cauldron.sigil.model.eclipse.ILibrary;
+import org.cauldron.sigil.model.eclipse.ILibraryImport;
+import org.cauldron.sigil.model.eclipse.ISigilBundle;
+import org.cauldron.sigil.repository.RepositoryChangeEvent.Type;
+
+public abstract class AbstractRepositoryManager implements IRepositoryManager, IBundleRepositoryListener {
+
+ private HashSet<IRepositoryChangeListener> listeners = new HashSet<IRepositoryChangeListener>();
+
+ private boolean initialised;
+
+ private HashMap<String, IBundleRepository> repositories = new HashMap<String, IBundleRepository>();
+ private ArrayList<IBundleRepository> order = new ArrayList<IBundleRepository>();
+ private TreeMap<Integer, HashSet<IBundleRepository>> levelMap = new TreeMap<Integer, HashSet<IBundleRepository>>();
+ private int[] levels;
+
+ private BundleResolver resolver = new BundleResolver(this);
+
+ private ArrayList<ILibrary> libraries = new ArrayList<ILibrary>();
+
+ public void initialise() {
+ synchronized( repositories ) {
+ if ( !initialised ) {
+ initialised = true;
+ loadRepositories();
+ }
+ }
+ }
+
+ protected abstract void loadRepositories();
+
+ public void addRepositoryChangeListener(IRepositoryChangeListener listener) {
+ synchronized(listeners) {
+ listeners.add(listener);
+ }
+ }
+
+ public void removeRepositoryChangeListener(IRepositoryChangeListener listener) {
+ synchronized(listeners) {
+ listeners.remove(listener);
+ }
+ }
+
+ public void notifyChange(IBundleRepository repository) {
+ notifyListeners( new RepositoryChangeEvent(repository, Type.CHANGED ) );
+ }
+
+ private void notifyListeners(RepositoryChangeEvent event) {
+ ArrayList<IRepositoryChangeListener> safe = null;
+ synchronized(listeners) {
+ safe = new ArrayList<IRepositoryChangeListener>(listeners);
+ }
+ for ( IRepositoryChangeListener l : safe ) {
+ l.repositoryChanged(event);
+ }
+ }
+
+ protected void setRepositories(IBundleRepository[] repos) {
+ synchronized( repositories ) {
+ repositories.clear();
+ order.clear();
+ levelMap.clear();
+ resetLevels();
+ if ( repos != null ) {
+ for ( int i = 0; i < repos.length; i++ ) {
+ addRepository(repos[i], i);
+ }
+ }
+ }
+ }
+
+ protected void addRepository(IBundleRepository rep, int level) {
+ Type type = null;
+
+ synchronized( repositories ) {
+ IBundleRepository old = repositories.put(rep.getId(), rep);
+ if ( old == null ) {
+ type = Type.ADDED;
+ rep.addBundleRepositoryListener(this);
+ }
+ else {
+ old.removeBundleRepositoryListener(this);
+ type = Type.CHANGED;
+ order.remove(old);
+ clearLevel(rep);
+ }
+
+ order.add(rep);
+
+ HashSet<IBundleRepository> set = levelMap.get(level);
+
+ if ( set == null ) {
+ set = new HashSet<IBundleRepository>();
+ levelMap.put( level, set );
+ }
+
+ set.add( rep );
+ resetLevels();
+ }
+
+ notifyListeners( new RepositoryChangeEvent(rep, type ) );
+ }
+
+ protected void removeRepository(IBundleRepository rep) {
+ Type type = null;
+
+ synchronized( repositories ) {
+ if ( repositories.remove(rep.getId()) != null ) {
+ order.remove(rep);
+ type = Type.REMOVED;
+ clearLevel(rep);
+ resetLevels();
+ }
+ }
+
+ if ( type != null ) {
+ notifyListeners( new RepositoryChangeEvent(rep, type ) );
+ }
+ }
+
+ private void clearLevel(IBundleRepository rep) {
+ for ( Iterator<Map.Entry<Integer, HashSet<IBundleRepository>>> iter = levelMap.entrySet().iterator(); iter.hasNext(); ) {
+ Map.Entry<Integer, HashSet<IBundleRepository>> e = iter.next();
+ if ( e.getValue().remove(rep) ) {
+ if ( e.getValue().isEmpty() ) {
+ iter.remove();
+ }
+ break;
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.cauldron.sigil.internal.repository.IRepositoryManager#getRepositories()
+ */
+ public Collection<IBundleRepository> getRepositories() {
+ initialise();
+ ArrayList<IBundleRepository> safe = null;
+
+ synchronized( repositories ) {
+ safe = new ArrayList<IBundleRepository>( order );
+ }
+
+ return safe;
+ }
+
+ private void resetLevels() {
+ Collections.sort(order, new Comparator<IBundleRepository>() {
+ public int compare(IBundleRepository o1, IBundleRepository o2) {
+ int l1 = findLevel(o1);
+ int l2 = findLevel(o2);
+
+ if ( l1 < l2 ) {
+ return -1;
+ }
+ else if ( l1 > l2 ) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ }
+
+ private int findLevel(IBundleRepository rep) {
+ for ( Map.Entry<Integer, HashSet<IBundleRepository>> e : levelMap.entrySet() ) {
+ if ( e.getValue().contains( rep ) ) {
+ return e.getKey();
+ }
+ }
+ throw new IllegalStateException();
+ }
+ });
+ levels = new int[levelMap.size()];
+ int i = 0;
+ for ( Integer v : levelMap.keySet() ) {
+ levels[i++] = v;
+ }
+ }
+
+
+ public int[] getPriorityLevels() {
+ initialise();
+ synchronized( repositories ) {
+ return levels;
+ }
+ }
+
+ public Collection<IBundleRepository> getRepositories(int priorityLevel) {
+ initialise();
+ List<IBundleRepository> found = null;
+
+ synchronized (repositories) {
+ HashSet<IBundleRepository> b = levelMap.get(priorityLevel);
+ if ( b == null ) {
+ found = Collections.emptyList();
+ }
+ else {
+ found = new ArrayList<IBundleRepository>(b);
+ }
+ }
+
+ return found;
+ }
+
+ /* (non-Javadoc)
+ * @see org.cauldron.sigil.internal.repository.IRepositoryManager#addLibrary(org.cauldron.sigil.model.eclipse.ILibrary)
+ */
+ public void addLibrary(ILibrary library) {
+ synchronized( libraries ) {
+ libraries.add(library);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.cauldron.sigil.internal.repository.IRepositoryManager#removeLibrary(org.cauldron.sigil.model.eclipse.ILibrary)
+ */
+ public void removeLibrary(ILibrary library) {
+ synchronized( libraries ) {
+ libraries.remove(library);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.cauldron.sigil.internal.repository.IRepositoryManager#getLibraries()
+ */
+ public Collection<ILibrary> getLibraries() {
+ synchronized( libraries ) {
+ return libraries;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.cauldron.sigil.internal.repository.IRepositoryManager#resolveLibrary(org.cauldron.sigil.model.eclipse.ILibraryImport)
+ */
+ public ILibrary resolveLibrary(final ILibraryImport l) {
+ final ArrayList<ILibrary> found = new ArrayList<ILibrary>(1);
+ //ISigilProjectModel p = l.getAncestor(ISigilProjectModel.class);
+ //
+ //IModelWalker w = new IModelWalker() {
+ // public boolean visit(IModelElement element) {
+ // if ( element instanceof ILibrary ) {
+ // updateLibrary(l, (ILibrary) element, found);
+ // return false;
+ // }
+ //
+ // return true;
+ // }
+ //};
+
+ //p.visit( w );
+
+ //if ( found.isEmpty() ) { // no project specific libraries - check workspace definitions
+ synchronized( libraries ) {
+ for ( ILibrary lib : libraries ) {
+ if ( l.getLibraryName().equals( lib.getName() ) && l.getVersions().contains(lib.getVersion()) ) {
+ updateLibrary(l, lib, found);
+ }
+ }
+ }
+ //}
+
+ return found.isEmpty() ? null : found.get(0);
+ }
+
+ protected void updateLibrary(ILibraryImport li, ILibrary l, ArrayList<ILibrary> found) {
+ if ( li.getLibraryName().equals( l.getName() ) && li.getVersions().contains(l.getVersion()) ) {
+ if ( found.isEmpty() ) {
+ found.add( l );
+ }
+ else {
+ ILibrary c = found.get(0);
+ if ( l.getVersion().compareTo(c.getVersion()) > 0 ) {
+ found.remove(0);
+ found.add(l);
+ }
+ }
+ }
+ }
+
+ public IBundleResolver getBundleResolver() {
+ return resolver;
+ }
+
+ public void visit(final IModelWalker walker) {
+ for (IBundleRepository rep : getRepositories()) {
+ IRepositoryVisitor wrapper = new IRepositoryVisitor() {
+ public boolean visit(ISigilBundle bundle) {
+ bundle.visit(walker);
+ // return true as still want to visit other bundles
+ return true;
+ }
+ };
+ rep.accept(wrapper);
+ }
+ }
+}
\ No newline at end of file
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IBundleRepository.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IBundleRepository.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IBundleRepository.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IBundleRepository.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,59 @@
+/*
+ * 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.cauldron.sigil.repository;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Collection;
+
+import org.cauldron.sigil.model.eclipse.ILibrary;
+import org.cauldron.sigil.model.eclipse.ISigilBundle;
+import org.cauldron.sigil.model.osgi.IPackageImport;
+import org.cauldron.sigil.model.osgi.IRequiredBundle;
+
+public interface IBundleRepository {
+ static final int NORMAL_PRIORITY = 0;
+ static final int MAXIMUM_PRIORITY = -500;
+ static final int MINIMUM_PRIORITY = 500;
+
+ String getId();
+
+ void addBundleRepositoryListener(IBundleRepositoryListener listener);
+
+ void removeBundleRepositoryListener(IBundleRepositoryListener listener);
+
+ void accept(IRepositoryVisitor visitor);
+
+ void accept(IRepositoryVisitor visitor, int options);
+
+ void writeOBR(OutputStream out) throws IOException;
+
+ void refresh();
+
+ ISigilBundle findProvider(IPackageImport packageImport, int options);
+
+ ISigilBundle findProvider(IRequiredBundle bundle, int options);
+
+ Collection<ISigilBundle> findAllProviders(IRequiredBundle bundle, int options);
+
+ Collection<ISigilBundle> findAllProviders(IPackageImport packageImport, int options);
+
+ Collection<ISigilBundle> findProviders(ILibrary library, int options);
+}
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IBundleRepositoryListener.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IBundleRepositoryListener.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IBundleRepositoryListener.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IBundleRepositoryListener.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,24 @@
+/*
+ * 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.cauldron.sigil.repository;
+
+public interface IBundleRepositoryListener {
+ void notifyChange(IBundleRepository repository);
+}
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IBundleResolver.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IBundleResolver.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IBundleResolver.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IBundleResolver.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,26 @@
+/*
+ * 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.cauldron.sigil.repository;
+
+import org.cauldron.sigil.model.IModelElement;
+
+public interface IBundleResolver {
+ IResolution resolve(IModelElement element, ResolutionConfig config, IResolutionMonitor monitor) throws ResolutionException;
+}
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IProviderChangeListener.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IProviderChangeListener.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IProviderChangeListener.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IProviderChangeListener.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,24 @@
+/*
+ * 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.cauldron.sigil.repository;
+
+public interface IProviderChangeListener {
+ void notifyChange(IRepositoryProvider provider);
+}
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IRepositoryChangeListener.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IRepositoryChangeListener.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IRepositoryChangeListener.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IRepositoryChangeListener.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,24 @@
+/*
+ * 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.cauldron.sigil.repository;
+
+public interface IRepositoryChangeListener {
+ void repositoryChanged(RepositoryChangeEvent event);
+}
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IRepositoryManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IRepositoryManager.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IRepositoryManager.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IRepositoryManager.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,51 @@
+/*
+ * 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.cauldron.sigil.repository;
+
+import java.util.Collection;
+
+import org.cauldron.sigil.model.IModelWalker;
+import org.cauldron.sigil.model.eclipse.ILibrary;
+import org.cauldron.sigil.model.eclipse.ILibraryImport;
+import org.eclipse.core.runtime.CoreException;
+
+public interface IRepositoryManager {
+ void addRepositoryChangeListener(IRepositoryChangeListener listener);
+
+ void removeRepositoryChangeListener(IRepositoryChangeListener listener);
+
+ Collection<IBundleRepository> getRepositories();
+
+ Collection<IBundleRepository> getRepositories(int level);
+
+ void addLibrary(ILibrary library);
+
+ void removeLibrary(ILibrary library);
+
+ Collection<ILibrary> getLibraries();
+
+ ILibrary resolveLibrary(final ILibraryImport l);
+
+ IBundleResolver getBundleResolver();
+
+ int[] getPriorityLevels();
+
+ void visit(IModelWalker modelWalker);
+}
\ No newline at end of file
Added: felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IRepositoryProvider.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IRepositoryProvider.java?rev=793581&view=auto
==============================================================================
--- felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IRepositoryProvider.java (added)
+++ felix/trunk/sigil/org.cauldron.bld.core/src/org/cauldron/sigil/repository/IRepositoryProvider.java Mon Jul 13 13:25:46 2009
@@ -0,0 +1,26 @@
+/*
+ * 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.cauldron.sigil.repository;
+
+import java.util.Properties;
+
+public interface IRepositoryProvider {
+ IBundleRepository createRepository(String id, Properties properties) throws RepositoryException;
+}