You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2010/03/19 16:32:19 UTC
svn commit: r925279 [3/3] - in /felix/trunk: bundleplugin/
bundleplugin/src/main/java/org/apache/felix/bundleplugin/
bundleplugin/src/main/java/org/apache/felix/obrplugin/
bundleplugin/src/main/java/org/osgi/impl/bundle/obr/resource/
bundleplugin/src/t...
Modified: felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/RequirementImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/RequirementImpl.java?rev=925279&r1=925278&r2=925279&view=diff
==============================================================================
--- felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/RequirementImpl.java (original)
+++ felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/RequirementImpl.java Fri Mar 19 15:32:17 2010
@@ -20,6 +20,7 @@ package org.apache.felix.bundlerepositor
import org.apache.felix.bundlerepository.Capability;
import org.apache.felix.bundlerepository.Requirement;
+import org.apache.felix.utils.filter.FilterImpl;
import org.osgi.framework.InvalidSyntaxException;
public class RequirementImpl implements Requirement
@@ -35,75 +36,89 @@ public class RequirementImpl implements
{
}
- public synchronized String getName()
+ public RequirementImpl(String name)
+ {
+ setName(name);
+ }
+
+ public String getName()
{
return m_name;
}
- public synchronized void setName(String name)
+ public void setName(String name)
{
// Name of capabilities and requirements are interned for performances
- // (with a very slow inter consumption as there are only a handful of values)
+ // (with a very low memory consumption as there are only a handful of values)
m_name = name.intern();
}
- public synchronized String getFilter()
+ public String getFilter()
{
return m_filter.toString();
}
- public synchronized void setFilter(String filter) throws InvalidSyntaxException
+ public void setFilter(String filter)
{
- m_filter = FilterImpl.newInstance(filter, true);
+ try
+ {
+ m_filter = FilterImpl.newInstance(filter, true);
+ }
+ catch (InvalidSyntaxException e)
+ {
+ IllegalArgumentException ex = new IllegalArgumentException();
+ ex.initCause(e);
+ throw ex;
+ }
}
- public synchronized boolean isSatisfied(Capability capability)
+ public boolean isSatisfied(Capability capability)
{
- return m_name.equals(capability.getName()) && m_filter.matchCase(capability.getProperties())
- && (m_filter.toString().indexOf("(mandatory:<*") >= 0 || capability.getProperties().get("mandatory:") == null);
+ return m_name.equals(capability.getName()) && m_filter.matchCase(capability.getPropertiesAsMap())
+ && (m_filter.toString().indexOf("(mandatory:<*") >= 0 || capability.getPropertiesAsMap().get("mandatory:") == null);
}
- public synchronized boolean isExtend()
+ public boolean isExtend()
{
return m_extend;
}
- public synchronized void setExtend(String s)
+ public void setExtend(boolean extend)
{
- m_extend = Boolean.valueOf(s).booleanValue();
+ m_extend = extend;
}
- public synchronized boolean isMultiple()
+ public boolean isMultiple()
{
return m_multiple;
}
- public synchronized void setMultiple(String s)
+ public void setMultiple(boolean multiple)
{
- m_multiple = Boolean.valueOf(s).booleanValue();
+ m_multiple = multiple;
}
- public synchronized boolean isOptional()
+ public boolean isOptional()
{
return m_optional;
}
- public synchronized void setOptional(String s)
+ public void setOptional(boolean optional)
{
- m_optional = Boolean.valueOf(s).booleanValue();
+ m_optional = optional;
}
- public synchronized String getComment()
+ public String getComment()
{
return m_comment;
}
- public synchronized void addText(String s)
+ public void addText(String s)
{
m_comment = s;
}
- public synchronized boolean equals(Object o)
+ public boolean equals(Object o)
{
if (this == o)
{
@@ -122,12 +137,12 @@ public class RequirementImpl implements
return false;
}
- public synchronized int hashCode()
+ public int hashCode()
{
return m_filter.toString().hashCode();
}
- public synchronized String toString()
+ public String toString()
{
return m_name + ":" + getFilter();
}
Modified: felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/ResolverImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/ResolverImpl.java?rev=925279&r1=925278&r2=925279&view=diff
==============================================================================
--- felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/ResolverImpl.java (original)
+++ felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/ResolverImpl.java Fri Mar 19 15:32:17 2010
@@ -23,6 +23,8 @@ import java.util.*;
import org.apache.felix.bundlerepository.*;
import org.apache.felix.bundlerepository.Resolver;
+import org.apache.felix.bundlerepository.impl.ResourceImpl;
+import org.apache.felix.utils.log.Logger;
import org.osgi.framework.*;
public class ResolverImpl implements Resolver
@@ -420,7 +422,7 @@ public class ResolverImpl implements Res
{
best = current;
bestLocal = isCurrentLocal;
- Object v = current.getCapability().getProperties().get(Resource.VERSION);
+ Object v = current.getCapability().getPropertiesAsMap().get(Resource.VERSION);
if ((v != null) && (v instanceof Version))
{
bestVersion = (Version) v;
@@ -428,7 +430,7 @@ public class ResolverImpl implements Res
}
else if ((m_resolutionFlags & DO_NOT_PREFER_LOCAL) != 0 || !bestLocal || isCurrentLocal)
{
- Object v = current.getCapability().getProperties().get(Resource.VERSION);
+ Object v = current.getCapability().getPropertiesAsMap().get(Resource.VERSION);
// If there is no version, then select the resource
// with the greatest number of capabilities.
@@ -575,7 +577,7 @@ public class ResolverImpl implements Res
{
m_logger.log(
Logger.LOG_ERROR,
- "Resolver: Update error - " + Util.getBundleName(localResource.getBundle()),
+ "Resolver: Update error - " + getBundleName(localResource.getBundle()),
ex);
return;
}
@@ -767,4 +769,13 @@ public class ResolverImpl implements Res
}
return null;
}
+
+ public static String getBundleName(Bundle bundle)
+ {
+ String name = (String) bundle.getHeaders().get(Constants.BUNDLE_NAME);
+ return (name == null)
+ ? "Bundle " + Long.toString(bundle.getBundleId())
+ : name;
+ }
+
}
\ No newline at end of file
Modified: felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/ResourceImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/ResourceImpl.java?rev=925279&r1=925278&r2=925279&view=diff
==============================================================================
--- felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/ResourceImpl.java (original)
+++ felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/ResourceImpl.java Fri Mar 19 15:32:17 2010
@@ -19,40 +19,28 @@
package org.apache.felix.bundlerepository.impl;
import java.net.URI;
-import java.net.URISyntaxException;
import java.util.*;
import org.apache.felix.bundlerepository.Capability;
+import org.apache.felix.bundlerepository.Property;
import org.apache.felix.bundlerepository.Repository;
import org.apache.felix.bundlerepository.Requirement;
import org.apache.felix.bundlerepository.Resource;
+import org.apache.felix.utils.version.VersionTable;
import org.osgi.framework.Version;
public class ResourceImpl implements Resource
{
private final Map m_map = new HashMap();
+ private final List m_capList = new ArrayList();
+ private final List m_reqList = new ArrayList();
private Repository m_repo;
- private List m_capList = new ArrayList();
- private List m_reqList = new ArrayList();
-
private Map m_uris;
-
- private int m_hash;
+ private transient int m_hash;
public ResourceImpl()
{
- this(null);
- }
-
- public ResourceImpl(ResourceImpl resource)
- {
- if (resource != null)
- {
- m_map.putAll(resource.getProperties());
- m_capList.addAll(resource.m_capList);
- m_reqList.addAll(resource.m_reqList);
- }
}
public boolean equals(Object o)
@@ -85,11 +73,13 @@ public class ResourceImpl implements Res
return m_hash;
}
- public Repository getRepository() {
+ public Repository getRepository()
+ {
return m_repo;
}
- public void setRepository(Repository repository) {
+ public void setRepository(Repository repository)
+ {
this.m_repo = repository;
}
@@ -127,12 +117,17 @@ public class ResourceImpl implements Res
return (String) m_map.get(Resource.URI);
}
+ public Long getSize()
+ {
+ return ((Long) m_map.get(Resource.SIZE));
+ }
+
public Requirement[] getRequirements()
{
return (Requirement[]) m_reqList.toArray(new Requirement[m_reqList.size()]);
}
- protected void addRequire(Requirement req)
+ public void addRequire(Requirement req)
{
m_reqList.add(req);
}
@@ -142,7 +137,7 @@ public class ResourceImpl implements Res
return (Capability[]) m_capList.toArray(new Capability[m_capList.size()]);
}
- protected void addCapability(Capability cap)
+ public void addCapability(Capability cap)
{
m_capList.add(cap);
}
@@ -157,7 +152,7 @@ public class ResourceImpl implements Res
return (String[]) catList.toArray(new String[catList.size()]);
}
- protected void addCategory(CategoryImpl cat)
+ public void addCategory(String category)
{
List catList = (List) m_map.get(CATEGORY);
if (catList == null)
@@ -165,7 +160,7 @@ public class ResourceImpl implements Res
catList = new ArrayList();
m_map.put(CATEGORY, catList);
}
- catList.add(cat.getId());
+ catList.add(category);
}
public boolean isLocal()
@@ -175,18 +170,18 @@ public class ResourceImpl implements Res
/**
* Default setter method when setting parsed data from the XML file.
- **/
- protected Object put(Object key, Object value)
+ **/
+ public Object put(Object key, Object value)
{
put(key.toString(), value.toString(), null);
return null;
}
- protected void put(String key, String value, String type)
+ public void put(String key, String value, String type)
{
key = key.toLowerCase();
m_hash = 0;
- if ("uri".equals(type) || URI.equals(key))
+ if (Property.URI.equals(type) || URI.equals(key))
{
if (m_uris == null)
{
@@ -194,17 +189,23 @@ public class ResourceImpl implements Res
}
m_uris.put(key, value);
}
- else if ("version".equals(type) || VERSION.equals(key))
+ else if (Property.VERSION.equals(type) || VERSION.equals(key))
{
- m_map.put(key, Version.parseVersion(value));
+ m_map.put(key, VersionTable.getVersion(value));
}
- else if ("long".equals(type) || SIZE.equals(key))
+ else if (Property.LONG.equals(type) || SIZE.equals(key))
{
- m_map.put(key, Long.valueOf(value.toString()));
+ m_map.put(key, Long.valueOf(value));
}
- else if (CATEGORY.equals(key))
+ else if (Property.SET.equals(type) || CATEGORY.equals(key))
{
- m_map.put(key, Arrays.asList(value.toString().split(",")));
+ StringTokenizer st = new StringTokenizer(value, ",");
+ Set s = new HashSet();
+ while (st.hasMoreTokens())
+ {
+ s.add(st.nextToken().trim());
+ }
+ m_map.put(key, s);
}
else
{
Modified: felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/StaxParser.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/StaxParser.java?rev=925279&r1=925278&r2=925279&view=diff
==============================================================================
--- felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/StaxParser.java (original)
+++ felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/StaxParser.java Fri Mar 19 15:32:17 2010
@@ -19,6 +19,7 @@
package org.apache.felix.bundlerepository.impl;
import java.io.InputStream;
+import java.io.Reader;
import javax.xml.stream.Location;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
@@ -26,25 +27,33 @@ import javax.xml.stream.XMLStreamExcepti
import javax.xml.stream.XMLStreamReader;
/**
- * Repository XML parser based on StaX
+ * Repository XML xml based on StaX
*/
-public class StaxParser implements RepositoryImpl.RepositoryParser
+public class StaxParser extends RepositoryParser
{
static XMLInputFactory factory;
- public StaxParser()
+ public static synchronized void setFactory(XMLInputFactory factory)
{
- synchronized (StaxParser.class)
+ StaxParser.factory = factory;
+ }
+
+ public static synchronized XMLInputFactory getFactory()
+ {
+ if (factory == null)
{
- if (factory == null)
- {
- factory = XMLInputFactory.newInstance();
- setProperty(factory, XMLInputFactory.IS_NAMESPACE_AWARE, false);
- setProperty(factory, XMLInputFactory.IS_VALIDATING, false);
- setProperty(factory, XMLInputFactory.IS_COALESCING, false);
- }
+ XMLInputFactory factory = XMLInputFactory.newInstance();
+ setProperty(factory, XMLInputFactory.IS_NAMESPACE_AWARE, false);
+ setProperty(factory, XMLInputFactory.IS_VALIDATING, false);
+ setProperty(factory, XMLInputFactory.IS_COALESCING, false);
+ StaxParser.factory = factory;
}
+ return factory;
+ }
+
+ public StaxParser()
+ {
}
protected static boolean setProperty(XMLInputFactory factory, String name, boolean value)
@@ -60,54 +69,110 @@ public class StaxParser implements Repos
return false;
}
- public void parse(RepositoryImpl repository, InputStream is) throws Exception
+ public RepositoryImpl parseRepository(InputStream is) throws Exception
{
- XMLStreamReader reader = factory.createXMLStreamReader(is);
- try
+ XMLStreamReader reader = getFactory().createXMLStreamReader(is);
+ int event = reader.nextTag();
+ if (event != XMLStreamConstants.START_ELEMENT || !REPOSITORY.equals(reader.getLocalName()))
{
- int event = reader.nextTag();
- if (event != XMLStreamConstants.START_ELEMENT || !REPOSITORY.equals(reader.getLocalName()))
- {
- throw new Exception("Expected element 'repository' at the root of the document");
- }
- for (int i = 0, nb = reader.getAttributeCount(); i < nb; i++)
+ throw new Exception("Expected element 'repository' at the root of the document");
+ }
+ return parseRepository(reader);
+ }
+
+ public RepositoryImpl parseRepository(Reader r) throws Exception
+ {
+ XMLStreamReader reader = getFactory().createXMLStreamReader(r);
+ int event = reader.nextTag();
+ if (event != XMLStreamConstants.START_ELEMENT || !REPOSITORY.equals(reader.getLocalName()))
+ {
+ throw new Exception("Expected element 'repository' at the root of the document");
+ }
+ return parseRepository(reader);
+ }
+
+ public ResourceImpl parseResource(Reader r) throws Exception
+ {
+ XMLStreamReader reader = getFactory().createXMLStreamReader(r);
+ int event = reader.nextTag();
+ if (event != XMLStreamConstants.START_ELEMENT || !RESOURCE.equals(reader.getLocalName()))
+ {
+ throw new Exception("Expected element 'resource'");
+ }
+ return parseResource(reader);
+ }
+
+ public CapabilityImpl parseCapability(Reader r) throws Exception
+ {
+ XMLStreamReader reader = getFactory().createXMLStreamReader(r);
+ int event = reader.nextTag();
+ if (event != XMLStreamConstants.START_ELEMENT || !CAPABILITY.equals(reader.getLocalName()))
+ {
+ throw new Exception("Expected element 'capability'");
+ }
+ return parseCapability(reader);
+ }
+
+ public PropertyImpl parseProperty(Reader r) throws Exception
+ {
+ XMLStreamReader reader = getFactory().createXMLStreamReader(r);
+ int event = reader.nextTag();
+ if (event != XMLStreamConstants.START_ELEMENT || !P.equals(reader.getLocalName()))
+ {
+ throw new Exception("Expected element 'p'");
+ }
+ return parseProperty(reader);
+ }
+
+ public RequirementImpl parseRequirement(Reader r) throws Exception
+ {
+ XMLStreamReader reader = getFactory().createXMLStreamReader(r);
+ int event = reader.nextTag();
+ if (event != XMLStreamConstants.START_ELEMENT || !REQUIRE.equals(reader.getLocalName()))
+ {
+ throw new Exception("Expected element 'require'");
+ }
+ return parseRequire(reader);
+ }
+
+ public RepositoryImpl parseRepository(XMLStreamReader reader) throws Exception
+ {
+ RepositoryImpl repository = new RepositoryImpl();
+ for (int i = 0, nb = reader.getAttributeCount(); i < nb; i++)
+ {
+ String name = reader.getAttributeLocalName(i);
+ String value = reader.getAttributeValue(i);
+ if (NAME.equals(name))
{
- String name = reader.getAttributeLocalName(i);
- String value = reader.getAttributeValue(i);
- if (NAME.equals(name))
- {
- repository.setName(value);
- }
- else if (LASTMODIFIED.equals(name))
- {
- repository.setLastmodified(value);
- }
+ repository.setName(value);
}
- while ((event = reader.nextTag()) == XMLStreamConstants.START_ELEMENT)
+ else if (LASTMODIFIED.equals(name))
{
- String element = reader.getLocalName();
- if (REFERRAL.equals(element))
- {
- Referral referral = parseReferral(reader);
- repository.addReferral(referral);
- }
- else if (RESOURCE.equals(element))
- {
- ResourceImpl resource = parseResource(reader);
- repository.addResource(resource);
- }
- else
- {
- ignoreTag(reader);
- }
+ repository.setLastModified(value);
}
- // Sanity check
- sanityCheckEndElement(reader, event, REPOSITORY);
}
- finally
+ int event;
+ while ((event = reader.nextTag()) == XMLStreamConstants.START_ELEMENT)
{
- reader.close();
+ String element = reader.getLocalName();
+ if (REFERRAL.equals(element))
+ {
+ Referral referral = parseReferral(reader);
+ repository.addReferral(referral);
+ }
+ else if (RESOURCE.equals(element))
+ {
+ ResourceImpl resource = parseResource(reader);
+ repository.addResource(resource);
+ }
+ else
+ {
+ ignoreTag(reader);
+ }
}
+ // Sanity check
+ sanityCheckEndElement(reader, event, REPOSITORY);
+ return repository;
}
private void sanityCheckEndElement(XMLStreamReader reader, int event, String element)
@@ -153,7 +218,7 @@ public class StaxParser implements Repos
String element = reader.getLocalName();
if (CATEGORY.equals(element))
{
- CategoryImpl category = parseCategory(reader);
+ String category = parseCategory(reader);
resource.addCategory(category);
}
else if (CAPABILITY.equals(element))
@@ -211,18 +276,18 @@ public class StaxParser implements Repos
}
}
- private CategoryImpl parseCategory(XMLStreamReader reader) throws XMLStreamException
+ private String parseCategory(XMLStreamReader reader) throws XMLStreamException
{
- CategoryImpl category = new CategoryImpl();
+ String id = null;
for (int i = 0, nb = reader.getAttributeCount(); i < nb; i++)
{
if (ID.equals(reader.getAttributeLocalName(i)))
{
- category.setId(reader.getAttributeValue(i));
+ id = reader.getAttributeValue(i);
}
}
sanityCheckEndElement(reader, reader.nextTag(), CATEGORY);
- return category;
+ return id;
}
private CapabilityImpl parseCapability(XMLStreamReader reader) throws Exception
@@ -244,7 +309,7 @@ public class StaxParser implements Repos
if (P.equals(element))
{
PropertyImpl prop = parseProperty(reader);
- capability.addP(prop);
+ capability.addProperty(prop);
}
else
{
@@ -299,15 +364,15 @@ public class StaxParser implements Repos
}
else if (EXTEND.equals(name))
{
- requirement.setExtend(value);
+ requirement.setExtend(Boolean.parseBoolean(value));
}
else if (MULTIPLE.equals(name))
{
- requirement.setMultiple(value);
+ requirement.setMultiple(Boolean.parseBoolean(value));
}
else if (OPTIONAL.equals(name))
{
- requirement.setOptional(value);
+ requirement.setOptional(Boolean.parseBoolean(value));
}
}
int event;
Modified: felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/SystemRepositoryImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/SystemRepositoryImpl.java?rev=925279&r1=925278&r2=925279&view=diff
==============================================================================
--- felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/SystemRepositoryImpl.java (original)
+++ felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/SystemRepositoryImpl.java Fri Mar 19 15:32:17 2010
@@ -19,6 +19,7 @@
package org.apache.felix.bundlerepository.impl;
import org.apache.felix.bundlerepository.Resource;
+import org.apache.felix.utils.log.Logger;
import org.osgi.framework.BundleContext;
import org.osgi.framework.InvalidSyntaxException;
import org.apache.felix.bundlerepository.Repository;
Added: felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/XmlWriter.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/XmlWriter.java?rev=925279&view=auto
==============================================================================
--- felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/XmlWriter.java (added)
+++ felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/XmlWriter.java Fri Mar 19 15:32:17 2010
@@ -0,0 +1,145 @@
+/*
+ * 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.apache.felix.bundlerepository.impl;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.List;
+
+public class XmlWriter
+{
+ private final Writer w;
+ private final List elements = new ArrayList();
+ private boolean empty;
+ private boolean endAttr = true;
+ private boolean indent;
+
+ public XmlWriter(Writer w)
+ {
+ this(w, true);
+ }
+
+ public XmlWriter(Writer w, boolean indent)
+ {
+ this.w = w;
+ this.indent = indent;
+ }
+
+ public XmlWriter indent(int nb) throws IOException
+ {
+ if (indent)
+ {
+ while (nb-- > 0)
+ {
+ w.append(" ");
+ }
+ }
+ return this;
+ }
+
+ public XmlWriter newLine() throws IOException
+ {
+ if (indent)
+ {
+ w.append("\n");
+ }
+ return this;
+ }
+
+ public XmlWriter element(String name) throws IOException
+ {
+ if (!endAttr)
+ {
+ endAttr = true;
+ w.append(">");
+ }
+ if (!elements.isEmpty())
+ {
+ newLine();
+ indent(elements.size());
+ }
+ w.append("<").append(name);
+ elements.add(name);
+ empty = true;
+ endAttr = false;
+ return this;
+ }
+
+ public XmlWriter attribute(String name, Object value) throws IOException
+ {
+ if (value != null)
+ {
+ w.append(" ").append(name).append("='").append(encode(value.toString())).append("'");
+ }
+ return this;
+ }
+
+ public XmlWriter end() throws IOException
+ {
+ return end(true);
+ }
+
+ public XmlWriter end(boolean indent) throws IOException
+ {
+ String name = (String) elements.remove(elements.size() - 1);
+ if (!endAttr)
+ {
+ endAttr = true;
+ w.append("/>");
+ }
+ else
+ {
+ if (indent && !empty)
+ {
+ newLine();
+ indent(elements.size());
+ }
+ w.append("</").append(name).append(">");
+ }
+ empty = false;
+ return this;
+ }
+
+ public XmlWriter text(Object value) throws IOException
+ {
+ if (!endAttr)
+ {
+ endAttr = true;
+ w.append(">");
+ }
+ w.append(encode(value.toString()));
+ return this;
+ }
+
+ public XmlWriter textElement(String name, Object value) throws IOException
+ {
+ if (value != null)
+ {
+ element(name).text(value).end(false);
+ }
+ return this;
+ }
+
+ private static String encode(Object o) {
+ String s = o != null ? o.toString() : "";
+ return s.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">");
+ }
+
+}
Modified: felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/wrapper/CapabilityWrapper.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/wrapper/CapabilityWrapper.java?rev=925279&r1=925278&r2=925279&view=diff
==============================================================================
--- felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/wrapper/CapabilityWrapper.java (original)
+++ felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/wrapper/CapabilityWrapper.java Fri Mar 19 15:32:17 2010
@@ -36,6 +36,6 @@ public class CapabilityWrapper implement
}
public Map getProperties() {
- return capability.getProperties();
+ return capability.getPropertiesAsMap();
}
}
Added: felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/DataModelHelperTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/DataModelHelperTest.java?rev=925279&view=auto
==============================================================================
--- felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/DataModelHelperTest.java (added)
+++ felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/DataModelHelperTest.java Fri Mar 19 15:32:17 2010
@@ -0,0 +1,55 @@
+/*
+ * 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.apache.felix.bundlerepository.impl;
+
+import java.util.jar.Attributes;
+
+import junit.framework.TestCase;
+import org.apache.felix.bundlerepository.DataModelHelper;
+import org.apache.felix.bundlerepository.Resource;
+
+public class DataModelHelperTest extends TestCase
+{
+
+ private DataModelHelper dmh = new DataModelHelperImpl();
+
+ public void testResource() throws Exception
+ {
+ Attributes attr = new Attributes();
+ attr.putValue("Manifest-Version", "1.0");
+ attr.putValue("Bundle-Name", "Apache Felix Utils");
+ attr.putValue("Bundle-Version", "0.1.0.SNAPSHOT");
+ attr.putValue("Bundle-ManifestVersion", "2");
+ attr.putValue("Bundle-License", "http://www.apache.org/licenses/LICENSE-2.0.txt");
+ attr.putValue("Bundle-Description", "Utility classes for OSGi.");
+ attr.putValue("Import-Package", "org.osgi.framework;version=\"[1.4,2)\"");
+ attr.putValue("Bundle-SymbolicName", "org.apache.felix.utils");
+
+ Resource resource = dmh.createResource(attr);
+
+ String xml = dmh.writeResource(resource);
+ System.out.println(xml);
+
+ Resource resource2 = dmh.readResource(xml);
+ String xml2 = dmh.writeResource(resource2);
+ System.out.println(xml2);
+
+ assertEquals(xml, xml2);
+ }
+}
Modified: felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/RepositoryAdminTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/RepositoryAdminTest.java?rev=925279&r1=925278&r2=925279&view=diff
==============================================================================
--- felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/RepositoryAdminTest.java (original)
+++ felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/RepositoryAdminTest.java Fri Mar 19 15:32:17 2010
@@ -23,6 +23,8 @@ import java.util.Hashtable;
import junit.framework.TestCase;
import org.apache.felix.bundlerepository.Resource;
+import org.apache.felix.utils.filter.FilterImpl;
+import org.apache.felix.utils.log.Logger;
import org.easymock.Capture;
import org.easymock.EasyMock;
import org.easymock.IAnswer;
@@ -55,6 +57,7 @@ public class RepositoryAdminTest extends
BundleContext bundleContext = (BundleContext) EasyMock.createMock(BundleContext.class);
Bundle systemBundle = (Bundle) EasyMock.createMock(Bundle.class);
+ Activator.setContext(bundleContext);
EasyMock.expect(bundleContext.getProperty((String) EasyMock.anyObject())).andReturn(null).anyTimes();
EasyMock.expect(bundleContext.getBundle(0)).andReturn(systemBundle);
EasyMock.expect(systemBundle.getHeaders()).andReturn(new Hashtable());
Modified: felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/RepositoryImplTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/RepositoryImplTest.java?rev=925279&r1=925278&r2=925279&view=diff
==============================================================================
--- felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/RepositoryImplTest.java (original)
+++ felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/RepositoryImplTest.java Fri Mar 19 15:32:17 2010
@@ -25,6 +25,7 @@ import java.util.Hashtable;
import junit.framework.TestCase;
import org.apache.felix.bundlerepository.Repository;
import org.apache.felix.bundlerepository.Resource;
+import org.apache.felix.utils.log.Logger;
import org.easymock.EasyMock;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
@@ -94,6 +95,7 @@ public class RepositoryImplTest extends
BundleContext bundleContext = (BundleContext) EasyMock.createMock(BundleContext.class);
Bundle systemBundle = (Bundle) EasyMock.createMock(Bundle.class);
+ Activator.setContext(bundleContext);
EasyMock.expect(bundleContext.getProperty((String) EasyMock.anyObject())).andReturn(null).anyTimes();
EasyMock.expect(bundleContext.getBundle(0)).andReturn(systemBundle);
EasyMock.expect(systemBundle.getHeaders()).andReturn(new Hashtable());
Modified: felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/ResolverImplTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/ResolverImplTest.java?rev=925279&r1=925278&r2=925279&view=diff
==============================================================================
--- felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/ResolverImplTest.java (original)
+++ felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/ResolverImplTest.java Fri Mar 19 15:32:17 2010
@@ -25,6 +25,8 @@ import junit.framework.TestCase;
import org.apache.felix.bundlerepository.Requirement;
import org.apache.felix.bundlerepository.Resource;
+import org.apache.felix.utils.filter.FilterImpl;
+import org.apache.felix.utils.log.Logger;
import org.easymock.Capture;
import org.easymock.EasyMock;
import org.easymock.IAnswer;
@@ -61,7 +63,7 @@ public class ResolverImplTest extends Te
repoAdmin.addRepository(getClass().getResource("/repo_for_resolvertest.xml"));
Resource[] res = repoAdmin.discoverResources(
- new Requirement[] { repoAdmin.requirement(
+ new Requirement[] { repoAdmin.getHelper().requirement(
"package", "(package=org.apache.felix.test.osgi)") });
assertNotNull(res);
assertEquals(1, res.length);
@@ -73,7 +75,7 @@ public class ResolverImplTest extends Te
repoAdmin.addRepository(getClass().getResource("/repo_for_resolvertest.xml"));
Resolver resolver = repoAdmin.resolver();
- resolver.add(repoAdmin.requirement("package", "(package=org.apache.felix.test.osgi)"));
+ resolver.add(repoAdmin.getHelper().requirement("package", "(package=org.apache.felix.test.osgi)"));
assertTrue(resolver.resolve());
}
@@ -83,7 +85,7 @@ public class ResolverImplTest extends Te
repoAdmin.addRepository(getClass().getResource("/repo_for_resolvertest.xml"));
Resolver resolver = repoAdmin.resolver();
- resolver.add(repoAdmin.requirement("package", "(package=org.apache.felix.test.osgi)"));
+ resolver.add(repoAdmin.getHelper().requirement("package", "(package=org.apache.felix.test.osgi)"));
Thread.currentThread().interrupt();
try
@@ -103,7 +105,7 @@ public class ResolverImplTest extends Te
repoAdmin.addRepository(getClass().getResource("/repo_for_optional_resources.xml"));
Resolver resolver = repoAdmin.resolver();
- resolver.add(repoAdmin.requirement("bundle", "(symbolicname=res1)"));
+ resolver.add(repoAdmin.getHelper().requirement("bundle", "(symbolicname=res1)"));
assertTrue(resolver.resolve());
assertEquals(1, resolver.getRequiredResources().length);
@@ -116,15 +118,15 @@ public class ResolverImplTest extends Te
repoAdmin.addRepository(getClass().getResource("/repo_for_mandatory.xml"));
Resolver resolver = repoAdmin.resolver();
- resolver.add(repoAdmin.requirement("bundle", "(symbolicname=res2)"));
+ resolver.add(repoAdmin.getHelper().requirement("bundle", "(symbolicname=res2)"));
assertFalse(resolver.resolve());
resolver = repoAdmin.resolver();
- resolver.add(repoAdmin.requirement("bundle", "(symbolicname=res3)"));
+ resolver.add(repoAdmin.getHelper().requirement("bundle", "(symbolicname=res3)"));
assertTrue(resolver.resolve());
resolver = repoAdmin.resolver();
- resolver.add(repoAdmin.requirement("bundle", "(symbolicname=res4)"));
+ resolver.add(repoAdmin.getHelper().requirement("bundle", "(symbolicname=res4)"));
assertFalse(resolver.resolve());
}
@@ -139,6 +141,7 @@ public class ResolverImplTest extends Te
BundleContext bundleContext = (BundleContext) EasyMock.createMock(BundleContext.class);
Bundle systemBundle = (Bundle) EasyMock.createMock(Bundle.class);
+ Activator.setContext(bundleContext);
EasyMock.expect(bundleContext.getProperty(RepositoryAdminImpl.REPOSITORY_URL_PROP))
.andReturn(getClass().getResource("/referred.xml").toExternalForm());
EasyMock.expect(bundleContext.getProperty((String) EasyMock.anyObject())).andReturn(null).anyTimes();
Modified: felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/StaxParserTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/StaxParserTest.java?rev=925279&r1=925278&r2=925279&view=diff
==============================================================================
--- felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/StaxParserTest.java (original)
+++ felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/StaxParserTest.java Fri Mar 19 15:32:17 2010
@@ -18,13 +18,16 @@
*/
package org.apache.felix.bundlerepository.impl;
-import java.io.File;
import java.net.URL;
import java.util.Hashtable;
import junit.framework.TestCase;
+import org.apache.felix.bundlerepository.impl.PullParser;
import org.apache.felix.bundlerepository.Resolver;
import org.apache.felix.bundlerepository.Resource;
+import org.apache.felix.bundlerepository.impl.StaxParser;
+import org.apache.felix.utils.filter.FilterImpl;
+import org.apache.felix.utils.log.Logger;
import org.easymock.Capture;
import org.easymock.EasyMock;
import org.easymock.IAnswer;
@@ -80,7 +83,7 @@ public class StaxParserTest extends Test
{
long t0, t1;
- StaxParser.factory = null;
+ StaxParser.setFactory(null);
System.setProperty("javax.xml.stream.XMLInputFactory", "com.ctc.wstx.stax.WstxInputFactory");
for (int i = 0; i < nbWarm; i++)
{
@@ -97,7 +100,7 @@ public class StaxParserTest extends Test
System.err.println("Woodstox: " + (t1 - t0) + " ms");
- StaxParser.factory = null;
+ StaxParser.setFactory(null);
System.setProperty("javax.xml.stream.XMLInputFactory", "com.sun.xml.internal.stream.XMLInputFactoryImpl");
for (int i = 0; i < nbWarm; i++)
{
@@ -138,9 +141,10 @@ public class StaxParserTest extends Test
BundleContext bundleContext = (BundleContext) EasyMock.createMock(BundleContext.class);
Bundle systemBundle = (Bundle) EasyMock.createMock(Bundle.class);
+ Activator.setContext(bundleContext);
EasyMock.expect(bundleContext.getProperty(RepositoryAdminImpl.REPOSITORY_URL_PROP))
.andReturn(getClass().getResource("/referral1_repository.xml").toExternalForm());
- EasyMock.expect(bundleContext.getProperty(RepositoryImpl.OBR_PARSER_CLASS))
+ EasyMock.expect(bundleContext.getProperty(RepositoryParser.OBR_PARSER_CLASS))
.andReturn(repositoryParser.getName());
EasyMock.expect(bundleContext.getProperty((String) EasyMock.anyObject())).andReturn(null).anyTimes();
EasyMock.expect(bundleContext.getBundle(0)).andReturn(systemBundle);