You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by dj...@apache.org on 2011/03/09 01:51:27 UTC

svn commit: r1079624 - in /karaf/trunk: assemblies/features/ assemblies/features/framework/ features/core/ features/core/src/main/java/org/apache/karaf/features/internal/ features/core/src/main/java/org/apache/karaf/features/internal/model/ features/co...

Author: djencks
Date: Wed Mar  9 00:51:26 2011
New Revision: 1079624

URL: http://svn.apache.org/viewvc?rev=1079624&view=rev
Log:
KARAF-424 Move features jaxb tree to features.core and use it, removing non-jaxb classes. Use executions rather than kar packaging to build framework kar

Added:
    karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/
    karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Bundle.java   (contents, props changed)
      - copied, changed from r1078752, karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Bundle.java
    karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Config.java   (contents, props changed)
      - copied, changed from r1078752, karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Config.java
    karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/ConfigFile.java   (contents, props changed)
      - copied, changed from r1078752, karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/ConfigFile.java
    karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Dependency.java   (contents, props changed)
      - copied, changed from r1078752, karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Dependency.java
    karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Feature.java   (contents, props changed)
      - copied, changed from r1078752, karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Feature.java
    karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Features.java   (contents, props changed)
      - copied, changed from r1078752, karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Features.java
    karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/JaxbUtil.java   (contents, props changed)
      - copied, changed from r1078752, karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/JaxbUtil.java
    karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/ObjectFactory.java   (contents, props changed)
      - copied, changed from r1078752, karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/ObjectFactory.java
    karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/package-info.java   (contents, props changed)
      - copied, changed from r1078752, karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/package-info.java
Removed:
    karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/BundleInfoImpl.java
    karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/ConfigFileInfoImpl.java
    karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeatureImpl.java
    karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Bundle.java
    karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Config.java
    karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/ConfigFile.java
    karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Dependency.java
    karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Feature.java
    karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Features.java
    karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/ObjectFactory.java
    karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/package-info.java
    karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/JaxbUtil.java
Modified:
    karaf/trunk/assemblies/features/framework/pom.xml
    karaf/trunk/assemblies/features/pom.xml
    karaf/trunk/features/core/pom.xml
    karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
    karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/RepositoryImpl.java
    karaf/trunk/features/core/src/main/resources/org/apache/karaf/features/karaf-features-1.0.0.xsd
    karaf/trunk/features/core/src/test/java/org/apache/karaf/features/FeatureTest.java
    karaf/trunk/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java
    karaf/trunk/features/core/src/test/java/org/apache/karaf/features/RepositoryTest.java
    karaf/trunk/features/core/src/test/java/org/apache/karaf/features/internal/FeaturesServiceImplTest.java
    karaf/trunk/features/core/src/test/resources/org/apache/karaf/features/repo1.xml
    karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java
    karaf/trunk/tooling/features-maven-plugin/pom.xml
    karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ArchiveKarMojo.java
    karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateFeaturesXmlMojo2.java
    karaf/trunk/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/GenerateFeaturesXmlMojo2Test.java

Modified: karaf/trunk/assemblies/features/framework/pom.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/assemblies/features/framework/pom.xml?rev=1079624&r1=1079623&r2=1079624&view=diff
==============================================================================
--- karaf/trunk/assemblies/features/framework/pom.xml (original)
+++ karaf/trunk/assemblies/features/framework/pom.xml Wed Mar  9 00:51:26 2011
@@ -28,7 +28,7 @@
     </parent>
 
     <artifactId>karaf-framework</artifactId>
-    <packaging>kar</packaging>
+    <packaging>pom</packaging>
     <name>Apache Karaf :: Assemblies :: Framework KAR</name>
 
     <properties>
@@ -325,10 +325,25 @@
                 <groupId>org.apache.karaf.tooling</groupId>
                 <artifactId>features-maven-plugin</artifactId>
                 <version>${project.version}</version>
-                <extensions>true</extensions>
+                <!--<extensions>true</extensions>-->
                 <configuration>
                     <repositoryPath>resources/system/</repositoryPath>
                 </configuration>
+                <executions>
+                    <execution>
+                        <id>compile</id>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>generate-features-xml2</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>package</id>
+                        <goals>
+                            <goal>archive-kar</goal>
+                        </goals>
+                    </execution>
+                </executions>
             </plugin>
 
         </plugins>

Modified: karaf/trunk/assemblies/features/pom.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/assemblies/features/pom.xml?rev=1079624&r1=1079623&r2=1079624&view=diff
==============================================================================
--- karaf/trunk/assemblies/features/pom.xml (original)
+++ karaf/trunk/assemblies/features/pom.xml Wed Mar  9 00:51:26 2011
@@ -35,6 +35,7 @@
     <modules>
         <module>standard</module>
         <module>enterprise</module>
+        <module>framework</module>
     </modules>
 
     <profiles>

Modified: karaf/trunk/features/core/pom.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/pom.xml?rev=1079624&r1=1079623&r2=1079624&view=diff
==============================================================================
--- karaf/trunk/features/core/pom.xml (original)
+++ karaf/trunk/features/core/pom.xml Wed Mar  9 00:51:26 2011
@@ -126,6 +126,7 @@
                         </Import-Package>
                         <Private-Package>
                             org.apache.karaf.features.internal,
+                            org.apache.karaf.features.internal.model,
                             org.apache.felix.utils.version,
                             org.apache.felix.utils.manifest
                         </Private-Package>

Modified: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java?rev=1079624&r1=1079623&r2=1079624&view=diff
==============================================================================
--- karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java (original)
+++ karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java Wed Mar  9 00:51:26 2011
@@ -95,6 +95,7 @@ import static java.lang.String.format;
 public class FeaturesServiceImpl implements FeaturesService, FrameworkListener {
 
     public static final String CONFIG_KEY = "org.apache.karaf.features.configKey";
+    public static String VERSION_PREFIX = "version=";
 
     private static final Logger LOGGER = LoggerFactory.getLogger(FeaturesServiceImpl.class);
 
@@ -260,7 +261,7 @@ public class FeaturesServiceImpl impleme
     }
 
     public void installFeature(String name) throws Exception {
-    	installFeature(name, FeatureImpl.DEFAULT_VERSION);
+    	installFeature(name, org.apache.karaf.features.internal.model.Feature.DEFAULT_VERSION);
     }
 
     public void installFeature(String name, String version) throws Exception {
@@ -420,7 +421,7 @@ public class FeaturesServiceImpl impleme
             System.out.println("Installing feature " + feature.getName() + " " + feature.getVersion());
         }
         for (Feature dependency : feature.getDependencies()) {
-            VersionRange range = FeatureImpl.DEFAULT_VERSION.equals(dependency.getVersion())
+            VersionRange range = org.apache.karaf.features.internal.model.Feature.DEFAULT_VERSION.equals(dependency.getVersion())
                         ? VersionRange.ANY_VERSION : new VersionRange(dependency.getVersion(), true, true);
             Feature fi = null;
             for (Feature f : installed.keySet()) {
@@ -813,7 +814,7 @@ public class FeaturesServiceImpl impleme
     }
 
     public Feature getFeature(String name) throws Exception {
-        return getFeature(name, FeatureImpl.DEFAULT_VERSION);
+        return getFeature(name, org.apache.karaf.features.internal.model.Feature.DEFAULT_VERSION);
     }
 
     public Feature getFeature(String name, String version) throws Exception {
@@ -826,7 +827,7 @@ public class FeaturesServiceImpl impleme
         } else {
             Feature feature = versions.get(version);
             if (feature == null) {
-                if (FeatureImpl.DEFAULT_VERSION.equals(version)) {
+                if (org.apache.karaf.features.internal.model.Feature.DEFAULT_VERSION.equals(version)) {
                     Version latest = new Version(cleanupVersion(version));
                     for (String available : versions.keySet()) {
                         Version availableVersion = new Version(cleanupVersion(available));
@@ -836,7 +837,7 @@ public class FeaturesServiceImpl impleme
                         }
                     }
                 } else {
-                    Version latest = new Version(cleanupVersion(FeatureImpl.DEFAULT_VERSION));
+                    Version latest = new Version(cleanupVersion(org.apache.karaf.features.internal.model.Feature.DEFAULT_VERSION));
                     VersionRange versionRange = new VersionRange(version, true, true);
                     for (String available : versions.keySet()) {
                         Version availableVersion = new Version(cleanupVersion(available));
@@ -931,14 +932,14 @@ public class FeaturesServiceImpl impleme
                             String featureName = parts[0];
                             for (String part : parts) {
                                 // if the part starts with "version=" it contains the version info
-                                if (part.startsWith(FeatureImpl.VERSION_PREFIX)) {
-                                    featureVersion = part.substring(FeatureImpl.VERSION_PREFIX.length());
+                                if (part.startsWith(VERSION_PREFIX)) {
+                                    featureVersion = part.substring(VERSION_PREFIX.length());
                                 }
                             }
 
                             if (featureVersion == null) {
                                 // no version specified - use default version
-                                featureVersion = FeatureImpl.DEFAULT_VERSION;
+                                featureVersion = org.apache.karaf.features.internal.model.Feature.DEFAULT_VERSION;
                             }
 
                             try {
@@ -1117,7 +1118,7 @@ public class FeaturesServiceImpl impleme
             if (key.startsWith(prefix)) {
                 String val = (String) props.get(key);
                 Set<Long> set = readValue(val);
-                map.put(FeatureImpl.valueOf(key.substring(prefix.length())), set);
+                map.put(org.apache.karaf.features.internal.model.Feature.valueOf(key.substring(prefix.length())), set);
             }
         }
         return map;

Modified: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/RepositoryImpl.java?rev=1079624&r1=1079623&r2=1079624&view=diff
==============================================================================
--- karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/RepositoryImpl.java (original)
+++ karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/RepositoryImpl.java Wed Mar  9 00:51:26 2011
@@ -19,6 +19,8 @@ package org.apache.karaf.features.intern
 import org.apache.karaf.features.ConfigFileInfo;
 import org.apache.karaf.features.Feature;
 import org.apache.karaf.features.Repository;
+import org.apache.karaf.features.internal.model.Features;
+import org.apache.karaf.features.internal.model.JaxbUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -31,6 +33,7 @@ import javax.xml.parsers.DocumentBuilder
 import javax.xml.parsers.ParserConfigurationException;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URLConnection;
@@ -45,18 +48,17 @@ public class RepositoryImpl implements R
 
     private static final Logger LOGGER = LoggerFactory.getLogger(RepositoryImpl.class);
     private int unnamedRepoId = 0;
-    private String name;
     private URI uri;
-    private List<Feature> features;
     private List<URI> repositories;
     private boolean valid;
+    private Features features;
 
     public RepositoryImpl(URI uri) {
         this.uri = uri;
     }
 
     public String getName() {
-        return name;
+        return features.getName();
     }
 
     public URI getURI() {
@@ -64,175 +66,35 @@ public class RepositoryImpl implements R
     }
 
     public URI[] getRepositories() throws Exception {
-        if (repositories == null) {
-            load();
+        load();
+        URI[] result = new URI[features.getRepository().size()];
+        for (int i = 0; i < features.getRepository().size(); i++) {
+            result[i] = URI.create(features.getRepository().get(i));
         }
-        return repositories.toArray(new URI[repositories.size()]);
+        return result;
     }
 
-    public Feature[] getFeatures() throws Exception {
-        if (features == null) {
-            load();
-        }
-        return features.toArray(new Feature[features.size()]);
+    public org.apache.karaf.features.Feature[] getFeatures() throws Exception {
+        load();
+        return features.getFeature().toArray(new org.apache.karaf.features.Feature[0]);
     }
 
-    public void load() throws IOException {
-        try {
-            valid = true;
-            repositories = new ArrayList<URI>();
-            features = new ArrayList<Feature>();
-            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-            URLConnection conn = uri.toURL().openConnection();
-            conn.setDefaultUseCaches(false);
-            Document doc = factory.newDocumentBuilder().parse(conn.getInputStream());
-            String temp = doc.getDocumentElement().getAttribute("name");
-            if ("".equals(temp)) {
-                name = "repo-" + String.valueOf(unnamedRepoId++);
-            } else {
-                name = temp;
-            }
-            if (uri.toString().startsWith("bundle")) {
-                name += "*";
-            }
 
-            NodeList nodes = doc.getDocumentElement().getChildNodes();
-            for (int i = 0; i < nodes.getLength(); i++) {
-                Node node = nodes.item(i);
-                if (!(node instanceof Element)) {
-                    continue;
-                }
-                if ("repository".equals(node.getNodeName())) {
-                    Element e = (Element) nodes.item(i);
-                    try {
-                        URI newrepo = new URI(e.getTextContent().trim());
-                        repositories.add(newrepo);
-                    } catch (URISyntaxException ex) {
-                        LOGGER.error("Could not load feature repository: " + ex.getMessage() + " in feature repository " + uri);
-                    }
-                } else if ("feature".equals(node.getNodeName())) {
-                    Element e = (Element) nodes.item(i);
-                    String name = e.getAttribute("name");
-                    String version = e.getAttribute("version");
-                    FeatureImpl f;
-                    if (version != null && version.length() > 0) {
-                        f = new FeatureImpl(name, version);
-                    } else {
-                        f = new FeatureImpl(name);
-                    }
-
-                    String resolver = e.getAttribute("resolver");
-                    if (resolver != null && resolver.length() > 0) {
-                        f.setResolver(resolver);
-                    }
-
-                    String description = e.getAttribute("description");
-                    if (description != null && description.length() > 0) {
-                        f.setDescription(description);
-                    }
-
-                    NodeList detailsNodes = e.getElementsByTagName("details");
-                    StringBuffer detailsBuffer = new StringBuffer();
-                    for (int j = 0; j < detailsNodes.getLength(); j++) {
-                        Element b = (Element) detailsNodes.item(j);
-                        String detail = b.getTextContent().trim();
-                        detailsBuffer.append(detail).append("\n");
-                    }
-                    String details = detailsBuffer.toString();
-                    if (details != null && details.length() > 0)
-                        f.setDetails(details);
-
-                    NodeList featureNodes = e.getElementsByTagName("feature");
-                    for (int j = 0; j < featureNodes.getLength(); j++) {
-                        Element b = (Element) featureNodes.item(j);
-                        String dependencyFeatureVersion = b.getAttribute("version");
-                        if (dependencyFeatureVersion != null && dependencyFeatureVersion.length() > 0) {
-                            f.addDependency(new FeatureImpl(b.getTextContent(), dependencyFeatureVersion));
-                        } else {
-                            f.addDependency(new FeatureImpl(b.getTextContent()));
-                        }
-                    }
-                    NodeList configNodes = e.getElementsByTagName("config");
-                    for (int j = 0; j < configNodes.getLength(); j++) {
-                        Element c = (Element) configNodes.item(j);
-                        String cfgName = c.getAttribute("name");
-                        String data = c.getTextContent();
-                        Properties properties = new Properties();
-                        properties.load(new ByteArrayInputStream(data.getBytes()));
-                        interpolation(properties);
-                        Map<String, String> hashtable = new Hashtable<String, String>();
-                        for (Object key : properties.keySet()) {
-                            String n = key.toString();
-                            hashtable.put(n, properties.getProperty(n));
-                        }
-                        f.addConfig(cfgName, hashtable);
-                    }
-                    NodeList configurationFiles = e.getElementsByTagName("configfile");
-                    for (int j = 0; j < configurationFiles.getLength(); j++) {
-                    	Element cf = (Element) configurationFiles.item(j);
-                    	String finalname = cf.getAttribute("finalname");
-                    	String location = cf.getTextContent().trim();
-                    	f.addConfigurationFile(new ConfigFileInfoImpl(location, finalname));
-                    }
-                    NodeList bundleNodes = e.getElementsByTagName("bundle");
-                    for (int j = 0; j < bundleNodes.getLength(); j++) {
-                        Element b = (Element) bundleNodes.item(j);
-                        String bStartLevel = b.getAttribute("start-level");
-                        String bStart = b.getAttribute("start");
-                        String bDependency = b.getAttribute("dependency");
-                        boolean bs = true;
-                        boolean bd = false;
-                        int bsl = 0;
-
-                        // Check the value of the "start" attribute
-                        if (bStart != null && bStart.length() > 0) {
-                            bs = Boolean.parseBoolean(bStart);
-                        }
-                        // Check the value of the "dependency" attribute
-                        if (bDependency != null && bDependency.length() > 0) {
-                            bd = Boolean.parseBoolean(bDependency);
-                        }
-                        // Check start level
-                        if (bStartLevel != null && bStartLevel.length() > 0) {
-                            try {
-                                bsl = Integer.parseInt(bStartLevel);
-                            } catch (Exception ex) {
-                                LOGGER.error("The start-level is not an int value for the bundle : " + b.getTextContent());
-                            }
-                        }
-                        f.addBundle(new BundleInfoImpl(b.getTextContent().trim(), bsl, bs, bd));
-                    }
-                    features.add(f);
-                }
-            }
-        } catch (SAXException e) {
-            valid = false;
-            throw (IOException) new IOException().initCause(e);
-        } catch (ParserConfigurationException e) {
-            valid = false;
-            throw (IOException) new IOException().initCause(e);
-        } catch (IllegalArgumentException e) {
-            valid = false;
-            throw (IOException) new IOException(e.getMessage() + " : " + uri).initCause(e);
-        } catch (Exception e) {
-            valid = false;
-            throw (IOException) new IOException(e.getMessage() + " : " + uri).initCause(e);
-        }
-    }
-
-    protected void interpolation(Properties properties) {
-        for (Enumeration e = properties.propertyNames(); e.hasMoreElements();) {
-            String key = (String) e.nextElement();
-            String val = properties.getProperty(key);
-            Matcher matcher = Pattern.compile("\\$\\{([^}]+)\\}").matcher(val);
-            while (matcher.find()) {
-                String rep = System.getProperty(matcher.group(1));
-                if (rep != null) {
-                    val = val.replace(matcher.group(0), rep);
-                    matcher.reset(val);
+    public void load() throws IOException {
+        if (features == null) {
+            try {
+                InputStream inputStream = uri.toURL().openStream();
+                try {
+                    features = JaxbUtil.unmarshal(inputStream, false);
+                } finally {
+                    inputStream.close();
                 }
+                valid = true;
+            } catch (IllegalArgumentException e) {
+                throw (IOException) new IOException(e.getMessage() + " : " + uri).initCause(e);
+            } catch (Exception e) {
+                throw (IOException) new IOException(e.getMessage() + " : " + uri).initCause(e);
             }
-            properties.put(key, val);
         }
     }
 

Copied: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Bundle.java (from r1078752, karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Bundle.java)
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Bundle.java?p2=karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Bundle.java&p1=karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Bundle.java&r1=1078752&r2=1079624&rev=1079624&view=diff
==============================================================================
--- karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Bundle.java (original)
+++ karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Bundle.java Wed Mar  9 00:51:26 2011
@@ -18,7 +18,7 @@
  */
 
 
-package org.apache.karaf.features.internal;
+package org.apache.karaf.features.internal.model;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
@@ -26,6 +26,7 @@ import javax.xml.bind.annotation.XmlAttr
 import javax.xml.bind.annotation.XmlSchemaType;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlValue;
+import org.apache.karaf.features.BundleInfo;
 
 
 /**
@@ -55,17 +56,25 @@ import javax.xml.bind.annotation.XmlValu
 @XmlType(name = "bundle", propOrder = {
     "value"
 })
-public class Bundle {
+public class Bundle implements BundleInfo {
 
     @XmlValue
     @XmlSchemaType(name = "anyURI")
     protected String value;
     @XmlAttribute(name = "start-level")
-    protected Integer startLevel;
+    protected int startLevel;
     @XmlAttribute
-    protected Boolean start;
+    protected boolean start = true;
     @XmlAttribute
-    protected Boolean dependency;
+    protected boolean dependency;
+
+
+    public Bundle() {
+    }
+
+    public Bundle(String value) {
+        this.value = value;
+    }
 
     /**
      * Gets the value of the value property.
@@ -75,7 +84,7 @@ public class Bundle {
      *     {@link String }
      *     
      */
-    public String getValue() {
+    public String getLocation() {
         return value;
     }
 
@@ -87,7 +96,7 @@ public class Bundle {
      *     {@link String }
      *     
      */
-    public void setValue(String value) {
+    public void setLocation(String value) {
         this.value = value;
     }
 
@@ -99,7 +108,7 @@ public class Bundle {
      *     {@link Integer }
      *     
      */
-    public Integer getStartLevel() {
+    public int getStartLevel() {
         return startLevel;
     }
 
@@ -123,7 +132,7 @@ public class Bundle {
      *     {@link Boolean }
      *     
      */
-    public Boolean isStart() {
+    public boolean isStart() {
         return start;
     }
 
@@ -147,7 +156,7 @@ public class Bundle {
      *     {@link Boolean }
      *     
      */
-    public Boolean isDependency() {
+    public boolean isDependency() {
         return dependency;
     }
 

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Bundle.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Bundle.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Bundle.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Config.java (from r1078752, karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Config.java)
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Config.java?p2=karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Config.java&p1=karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Config.java&r1=1078752&r2=1079624&rev=1079624&view=diff
==============================================================================
--- karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Config.java (original)
+++ karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Config.java Wed Mar  9 00:51:26 2011
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.karaf.features.internal;
+package org.apache.karaf.features.internal.model;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Config.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Config.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Config.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/ConfigFile.java (from r1078752, karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/ConfigFile.java)
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/ConfigFile.java?p2=karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/ConfigFile.java&p1=karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/ConfigFile.java&r1=1078752&r2=1079624&rev=1079624&view=diff
==============================================================================
--- karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/ConfigFile.java (original)
+++ karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/ConfigFile.java Wed Mar  9 00:51:26 2011
@@ -17,13 +17,14 @@
  * under the License.
  */
 
-package org.apache.karaf.features.internal;
+package org.apache.karaf.features.internal.model;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlValue;
+import org.apache.karaf.features.ConfigFileInfo;
 
 
 /**
@@ -51,7 +52,7 @@ import javax.xml.bind.annotation.XmlValu
 @XmlType(name = "configFile", propOrder = {
     "value"
 })
-public class ConfigFile {
+public class ConfigFile implements ConfigFileInfo {
 
     @XmlValue
     protected String value;
@@ -66,7 +67,7 @@ public class ConfigFile {
      *     {@link String }
      *     
      */
-    public String getValue() {
+    public String getLocation() {
         return value;
     }
 
@@ -78,7 +79,7 @@ public class ConfigFile {
      *     {@link String }
      *     
      */
-    public void setValue(String value) {
+    public void setLocation(String value) {
         this.value = value;
     }
 

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/ConfigFile.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/ConfigFile.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/ConfigFile.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Dependency.java (from r1078752, karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Dependency.java)
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Dependency.java?p2=karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Dependency.java&p1=karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Dependency.java&r1=1078752&r2=1079624&rev=1079624&view=diff
==============================================================================
--- karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Dependency.java (original)
+++ karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Dependency.java Wed Mar  9 00:51:26 2011
@@ -18,13 +18,17 @@
  */
 
 
-package org.apache.karaf.features.internal;
+package org.apache.karaf.features.internal.model;
+
+import java.util.List;
+import java.util.Map;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlValue;
+import org.apache.karaf.features.*;
 
 
 /**
@@ -52,13 +56,17 @@ import javax.xml.bind.annotation.XmlValu
 @XmlType(name = "dependency", propOrder = {
     "value"
 })
-public class Dependency {
+public class Dependency implements org.apache.karaf.features.Feature {
 
     @XmlValue
     protected String value;
     @XmlAttribute
     protected String version;
 
+    public String getId() {
+        return null;
+    }
+
     /**
      * 
      * Feature name should be non empty string.
@@ -69,10 +77,18 @@ public class Dependency {
      *     {@link String }
      *     
      */
-    public String getValue() {
+    public String getName() {
         return value;
     }
 
+    public String getDescription() {
+        return null;
+    }
+
+    public String getDetails() {
+        return null;
+    }
+
     /**
      * Sets the value of the value property.
      * 
@@ -81,7 +97,7 @@ public class Dependency {
      *     {@link String }
      *     
      */
-    public void setValue(String value) {
+    public void setName(String value) {
         this.value = value;
     }
 
@@ -101,6 +117,27 @@ public class Dependency {
         }
     }
 
+    //Following are unimplemented methods of Feature interface.
+    public String getResolver() {
+        return null;
+    }
+
+    public List<org.apache.karaf.features.Feature> getDependencies() {
+        return null;
+    }
+
+    public List<BundleInfo> getBundles() {
+        return null;
+    }
+
+    public Map<String, Map<String, String>> getConfigurations() {
+        return null;
+    }
+
+    public List<ConfigFileInfo> getConfigurationFiles() {
+        return null;
+    }
+
     /**
      * Sets the value of the version property.
      * 
@@ -113,4 +150,9 @@ public class Dependency {
         this.version = value;
     }
 
+    public String toString() {
+    	String ret = getName() + Feature.SPLIT_FOR_NAME_AND_VERSION + getVersion();
+    	return ret;
+    }
+
 }

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Dependency.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Dependency.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Dependency.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Feature.java (from r1078752, karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Feature.java)
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Feature.java?p2=karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Feature.java&p1=karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Feature.java&r1=1078752&r2=1079624&rev=1079624&view=diff
==============================================================================
--- karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Feature.java (original)
+++ karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Feature.java Wed Mar  9 00:51:26 2011
@@ -17,14 +17,27 @@
  * under the License.
  */
 
-package org.apache.karaf.features.internal;
+package org.apache.karaf.features.internal.model;
 
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.StringReader;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlType;
+import org.apache.karaf.features.BundleInfo;
+import org.apache.karaf.features.ConfigFileInfo;
 
 
 /**
@@ -66,7 +79,9 @@ import javax.xml.bind.annotation.XmlType
     "feature",
     "bundle"
 })
-public class Feature {
+public class Feature implements org.apache.karaf.features.Feature {
+    public static String SPLIT_FOR_NAME_AND_VERSION = "_split_for_name_and_version_";
+    public static String DEFAULT_VERSION = "0.0.0";
 
     protected List<String> details;
     protected List<Config> config;
@@ -82,6 +97,33 @@ public class Feature {
     @XmlAttribute
     protected String resolver;
 
+
+    public Feature() {
+    }
+
+    public Feature(String name) {
+        this.name = name;
+    }
+
+    public Feature(String name, String version) {
+        this.name = name;
+        this.version = version;
+    }
+
+
+    public static org.apache.karaf.features.Feature valueOf(String str) {
+    	if (str.indexOf(SPLIT_FOR_NAME_AND_VERSION) >= 0) {
+    		String strName = str.substring(0, str.indexOf(SPLIT_FOR_NAME_AND_VERSION));
+        	String strVersion = str.substring(str.indexOf(SPLIT_FOR_NAME_AND_VERSION)
+        			+ SPLIT_FOR_NAME_AND_VERSION.length(), str.length());
+        	return new Feature(strName, strVersion);
+    	} else {
+    		return new Feature(str);
+    	}
+
+
+    }
+
     /**
      * Gets the value of the details property.
      * 
@@ -104,7 +146,7 @@ public class Feature {
      * 
      * 
      */
-    public List<String> getDetails() {
+    public List<String> getDetailsList() {
         if (details == null) {
             details = new ArrayList<String>();
         }
@@ -227,6 +269,10 @@ public class Feature {
         return this.bundle;
     }
 
+    public String getId() {
+        return getName() + "-" + getVersion();
+    }
+
     /**
      * Gets the value of the name property.
      * 
@@ -291,6 +337,10 @@ public class Feature {
         return description;
     }
 
+    public String getDetails() {
+        return null;
+    }
+
     /**
      * Sets the value of the description property.
      * 
@@ -315,6 +365,39 @@ public class Feature {
         return resolver;
     }
 
+    public List<org.apache.karaf.features.Feature> getDependencies() {
+        return Collections.<org.apache.karaf.features.Feature>unmodifiableList(getFeature());
+    }
+
+    public List<BundleInfo> getBundles() {
+        return Collections.<BundleInfo>unmodifiableList(getBundle());
+    }
+
+    public Map<String, Map<String, String>> getConfigurations() {
+        Map<String, Map<String, String>> result = new HashMap<String, Map<String, String>>();
+        for (Config config: getConfig()) {
+            String name = config.getName();
+            StringReader propStream = new StringReader(config.getValue());
+            Properties props = new Properties();
+            try {
+                props.load(propStream);
+            } catch (IOException e) {
+                //ignore??
+            }
+            interpolation(props);
+            Map<String, String> propMap = new HashMap<String, String>();
+            for (Map.Entry<Object, Object> entry: props.entrySet()) {
+                propMap.put((String)entry.getKey(), (String)entry.getValue());
+            }
+            result.put(name, propMap);
+        }
+        return result;
+    }
+
+    public List<ConfigFileInfo> getConfigurationFiles() {
+        return Collections.<ConfigFileInfo>unmodifiableList(getConfigfile());
+    }
+
     /**
      * Sets the value of the resolver property.
      * 
@@ -327,4 +410,45 @@ public class Feature {
         this.resolver = value;
     }
 
+    public String toString() {
+    	String ret = getName() + SPLIT_FOR_NAME_AND_VERSION + getVersion();
+    	return ret;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        Feature feature = (Feature) o;
+
+        if (name != null ? !name.equals(feature.name) : feature.name != null) return false;
+        if (version != null ? !version.equals(feature.version) : feature.version != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = name != null ? name.hashCode() : 0;
+        result = 31 * result + (version != null ? version.hashCode() : 0);
+        return result;
+    }
+
+    protected void interpolation(Properties properties) {
+        for (Enumeration e = properties.propertyNames(); e.hasMoreElements();) {
+            String key = (String) e.nextElement();
+            String val = properties.getProperty(key);
+            Matcher matcher = Pattern.compile("\\$\\{([^}]+)\\}").matcher(val);
+            while (matcher.find()) {
+                String rep = System.getProperty(matcher.group(1));
+                if (rep != null) {
+                    val = val.replace(matcher.group(0), rep);
+                    matcher.reset(val);
+                }
+            }
+            properties.put(key, val);
+        }
+    }
+
 }

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Feature.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Feature.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Feature.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Features.java (from r1078752, karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Features.java)
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Features.java?p2=karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Features.java&p1=karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Features.java&r1=1078752&r2=1079624&rev=1079624&view=diff
==============================================================================
--- karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/Features.java (original)
+++ karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Features.java Wed Mar  9 00:51:26 2011
@@ -17,8 +17,9 @@
  * under the License.
  */
 
-package org.apache.karaf.features.internal;
+package org.apache.karaf.features.internal.model;
 
+import java.net.URI;
 import java.util.ArrayList;
 import java.util.List;
 import javax.xml.bind.annotation.XmlAccessType;
@@ -27,6 +28,7 @@ import javax.xml.bind.annotation.XmlAttr
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlSchemaType;
 import javax.xml.bind.annotation.XmlType;
+import org.apache.karaf.features.Repository;
 
 
 /**
@@ -68,7 +70,7 @@ public class Features {
     protected List<String> repository;
     protected List<Feature> feature;
     @XmlAttribute
-    protected String name;
+    protected String name ="<unnamed>";
 
     /**
      * Gets the value of the repository property.

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Features.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Features.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/Features.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/JaxbUtil.java (from r1078752, karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/JaxbUtil.java)
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/JaxbUtil.java?p2=karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/JaxbUtil.java&p1=karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/JaxbUtil.java&r1=1078752&r2=1079624&rev=1079624&view=diff
==============================================================================
--- karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/JaxbUtil.java (original)
+++ karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/JaxbUtil.java Wed Mar  9 00:51:26 2011
@@ -18,7 +18,7 @@
  */
 
 
-package org.apache.karaf.tooling.features;
+package org.apache.karaf.features.internal.model;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -39,7 +39,6 @@ import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.transform.sax.SAXSource;
-import org.apache.karaf.features.internal.Features;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/JaxbUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/JaxbUtil.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/JaxbUtil.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/ObjectFactory.java (from r1078752, karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/ObjectFactory.java)
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/ObjectFactory.java?p2=karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/ObjectFactory.java&p1=karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/ObjectFactory.java&r1=1078752&r2=1079624&rev=1079624&view=diff
==============================================================================
--- karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/ObjectFactory.java (original)
+++ karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/ObjectFactory.java Wed Mar  9 00:51:26 2011
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.karaf.features.internal;
+package org.apache.karaf.features.internal.model;
 
 import javax.xml.bind.JAXBElement;
 import javax.xml.bind.annotation.XmlElementDecl;

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/ObjectFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/ObjectFactory.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/ObjectFactory.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/package-info.java (from r1078752, karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/package-info.java)
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/package-info.java?p2=karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/package-info.java&p1=karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/package-info.java&r1=1078752&r2=1079624&rev=1079624&view=diff
==============================================================================
--- karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/features/internal/package-info.java (original)
+++ karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/package-info.java Wed Mar  9 00:51:26 2011
@@ -18,4 +18,4 @@
  */
 
 @javax.xml.bind.annotation.XmlSchema(namespace = "http://karaf.apache.org/xmlns/features/v1.0.0", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
-package org.apache.karaf.features.internal;
+package org.apache.karaf.features.internal.model;

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/package-info.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/package-info.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/model/package-info.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: karaf/trunk/features/core/src/main/resources/org/apache/karaf/features/karaf-features-1.0.0.xsd
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/main/resources/org/apache/karaf/features/karaf-features-1.0.0.xsd?rev=1079624&r1=1079623&r2=1079624&view=diff
==============================================================================
--- karaf/trunk/features/core/src/main/resources/org/apache/karaf/features/karaf-features-1.0.0.xsd (original)
+++ karaf/trunk/features/core/src/main/resources/org/apache/karaf/features/karaf-features-1.0.0.xsd Wed Mar  9 00:51:26 2011
@@ -141,7 +141,8 @@ Dependency of feature.
         <xs:annotation>
             <xs:documentation><![CDATA[
 Configuration entries which should be created during feature installation. This
-configuration may be used with OSGi Configuration Admin.
+configuration may be used with OSGi Configuration Admin. The element content is
+read in as a properties file.
             ]]></xs:documentation>
         </xs:annotation>
         <xs:simpleContent>

Modified: karaf/trunk/features/core/src/test/java/org/apache/karaf/features/FeatureTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/test/java/org/apache/karaf/features/FeatureTest.java?rev=1079624&r1=1079623&r2=1079624&view=diff
==============================================================================
--- karaf/trunk/features/core/src/test/java/org/apache/karaf/features/FeatureTest.java (original)
+++ karaf/trunk/features/core/src/test/java/org/apache/karaf/features/FeatureTest.java Wed Mar  9 00:51:26 2011
@@ -17,17 +17,16 @@
 package org.apache.karaf.features;
 
 import junit.framework.TestCase;
-import org.apache.karaf.features.internal.FeatureImpl;
 
 public class FeatureTest extends TestCase {
 	
 	public void testValueOf() {
-		Feature feature = FeatureImpl.valueOf("name" + FeatureImpl.SPLIT_FOR_NAME_AND_VERSION + "version");
+		Feature feature = org.apache.karaf.features.internal.model.Feature.valueOf("name" + org.apache.karaf.features.internal.model.Feature.SPLIT_FOR_NAME_AND_VERSION + "version");
 		assertEquals(feature.getName(), "name");
 		assertEquals(feature.getVersion(), "version");
-		feature = FeatureImpl.valueOf("name");
+		feature = org.apache.karaf.features.internal.model.Feature.valueOf("name");
 		assertEquals(feature.getName(), "name");
-		assertEquals(feature.getVersion(), FeatureImpl.DEFAULT_VERSION);
+		assertEquals(feature.getVersion(), org.apache.karaf.features.internal.model.Feature.DEFAULT_VERSION);
 	}
 	
 }

Modified: karaf/trunk/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java?rev=1079624&r1=1079623&r2=1079624&view=diff
==============================================================================
--- karaf/trunk/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java (original)
+++ karaf/trunk/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java Wed Mar  9 00:51:26 2011
@@ -44,7 +44,6 @@ import java.util.jar.JarInputStream;
 
 import junit.framework.TestCase;
 
-import org.apache.karaf.features.internal.FeatureImpl;
 import org.apache.karaf.features.internal.FeaturesServiceImpl;
 import org.easymock.EasyMock;
 import org.osgi.framework.Bundle;
@@ -123,7 +122,7 @@ public class FeaturesServiceTest extends
 
         replay(bundleContext, installedBundle);
 
-        svc.installFeature("f1", FeatureImpl.DEFAULT_VERSION, EnumSet.of(FeaturesService.Option.NoAutoRefreshBundles));
+        svc.installFeature("f1", org.apache.karaf.features.internal.model.Feature.DEFAULT_VERSION, EnumSet.of(FeaturesService.Option.NoAutoRefreshBundles));
         
         Feature[] installed = svc.listInstalledFeatures();
         assertEquals(1, installed.length);

Modified: karaf/trunk/features/core/src/test/java/org/apache/karaf/features/RepositoryTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/test/java/org/apache/karaf/features/RepositoryTest.java?rev=1079624&r1=1079623&r2=1079624&view=diff
==============================================================================
--- karaf/trunk/features/core/src/test/java/org/apache/karaf/features/RepositoryTest.java (original)
+++ karaf/trunk/features/core/src/test/java/org/apache/karaf/features/RepositoryTest.java Wed Mar  9 00:51:26 2011
@@ -20,7 +20,6 @@ import java.net.URI;
 
 import junit.framework.TestCase;
 import org.apache.karaf.features.internal.RepositoryImpl;
-import org.apache.karaf.features.internal.FeatureImpl;
 
 
 public class RepositoryTest extends TestCase {
@@ -55,7 +54,7 @@ public class RepositoryTest extends Test
         assertEquals(0, features[1].getConfigurations().size());
         assertNotNull(features[1].getDependencies());
         assertEquals(1, features[1].getDependencies().size());
-        assertEquals("f1" + FeatureImpl.SPLIT_FOR_NAME_AND_VERSION + FeatureImpl.DEFAULT_VERSION, features[1].getDependencies().get(0).toString());
+        assertEquals("f1" + org.apache.karaf.features.internal.model.Feature.SPLIT_FOR_NAME_AND_VERSION + org.apache.karaf.features.internal.model.Feature.DEFAULT_VERSION, features[1].getDependencies().get(0).toString());
         assertNotNull(features[1].getBundles());
         assertEquals(1, features[1].getBundles().size());
         assertEquals("b3", features[1].getBundles().get(0).getLocation());

Modified: karaf/trunk/features/core/src/test/java/org/apache/karaf/features/internal/FeaturesServiceImplTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/test/java/org/apache/karaf/features/internal/FeaturesServiceImplTest.java?rev=1079624&r1=1079623&r2=1079624&view=diff
==============================================================================
--- karaf/trunk/features/core/src/test/java/org/apache/karaf/features/internal/FeaturesServiceImplTest.java (original)
+++ karaf/trunk/features/core/src/test/java/org/apache/karaf/features/internal/FeaturesServiceImplTest.java Wed Mar  9 00:51:26 2011
@@ -48,7 +48,7 @@ public class FeaturesServiceImplTest ext
     public void testGetFeature() throws Exception {
         final Map<String, Map<String, Feature>> features = new HashMap<String, Map<String,Feature>>();
         Map<String, Feature> versions = new HashMap<String, Feature>();
-        FeatureImpl feature = new FeatureImpl("transaction");
+        org.apache.karaf.features.internal.model.Feature feature = new org.apache.karaf.features.internal.model.Feature("transaction");
         versions.put("1.0.0", feature);
         features.put("transaction", versions);
         final FeaturesServiceImpl impl = new FeaturesServiceImpl() {
@@ -56,14 +56,14 @@ public class FeaturesServiceImplTest ext
                 return features;
             };
         };
-        assertNotNull(impl.getFeature("transaction", FeatureImpl.DEFAULT_VERSION));
-        assertSame(feature, impl.getFeature("transaction", FeatureImpl.DEFAULT_VERSION));
+        assertNotNull(impl.getFeature("transaction", org.apache.karaf.features.internal.model.Feature.DEFAULT_VERSION));
+        assertSame(feature, impl.getFeature("transaction", org.apache.karaf.features.internal.model.Feature.DEFAULT_VERSION));
     }
     
     public void testGetFeatureStripVersion() throws Exception {
         final Map<String, Map<String, Feature>> features = new HashMap<String, Map<String,Feature>>();
         Map<String, Feature> versions = new HashMap<String, Feature>();
-        FeatureImpl feature = new FeatureImpl("transaction");
+        org.apache.karaf.features.internal.model.Feature feature = new org.apache.karaf.features.internal.model.Feature("transaction");
         versions.put("1.0.0", feature);
         features.put("transaction", versions);
         final FeaturesServiceImpl impl = new FeaturesServiceImpl() {
@@ -78,29 +78,29 @@ public class FeaturesServiceImplTest ext
     public void testGetFeatureNotAvailable() throws Exception {
         final Map<String, Map<String, Feature>> features = new HashMap<String, Map<String,Feature>>();
         Map<String, Feature> versions = new HashMap<String, Feature>();
-        versions.put("1.0.0", new FeatureImpl("transaction"));
+        versions.put("1.0.0", new org.apache.karaf.features.internal.model.Feature("transaction"));
         features.put("transaction", versions);
         final FeaturesServiceImpl impl = new FeaturesServiceImpl() {
             protected Map<String,Map<String,Feature>> getFeatures() throws Exception {
                 return features;
             };
         };
-        assertNull(impl.getFeature("activemq", FeatureImpl.DEFAULT_VERSION));
+        assertNull(impl.getFeature("activemq", org.apache.karaf.features.internal.model.Feature.DEFAULT_VERSION));
     }
     
     public void testGetFeatureHighestAvailable() throws Exception {
         final Map<String, Map<String, Feature>> features = new HashMap<String, Map<String,Feature>>();
         Map<String, Feature> versions = new HashMap<String, Feature>();
-        versions.put("1.0.0", new FeatureImpl("transaction", "1.0.0"));
-        versions.put("2.0.0", new FeatureImpl("transaction", "2.0.0"));
+        versions.put("1.0.0", new org.apache.karaf.features.internal.model.Feature("transaction", "1.0.0"));
+        versions.put("2.0.0", new org.apache.karaf.features.internal.model.Feature("transaction", "2.0.0"));
         features.put("transaction", versions);
         final FeaturesServiceImpl impl = new FeaturesServiceImpl() {
             protected Map<String,Map<String,Feature>> getFeatures() throws Exception {
                 return features;
             };
         };
-        assertNotNull(impl.getFeature("transaction", FeatureImpl.DEFAULT_VERSION));
-        assertSame("2.0.0", impl.getFeature("transaction", FeatureImpl.DEFAULT_VERSION).getVersion());
+        assertNotNull(impl.getFeature("transaction", org.apache.karaf.features.internal.model.Feature.DEFAULT_VERSION));
+        assertSame("2.0.0", impl.getFeature("transaction", org.apache.karaf.features.internal.model.Feature.DEFAULT_VERSION).getVersion());
     }
 
     public void testStartDoesNotFailWithOneInvalidUri()  {
@@ -127,12 +127,12 @@ public class FeaturesServiceImplTest ext
 
         final Map<String, Map<String, Feature>> features = new HashMap<String, Map<String,Feature>>();
         Map<String, Feature> versions = new HashMap<String, Feature>();
-        versions.put("1.0.0", new FeatureImpl("transaction", "1.0.0"));
-        versions.put("2.0.0", new FeatureImpl("transaction", "2.0.0"));
+        versions.put("1.0.0", new org.apache.karaf.features.internal.model.Feature("transaction", "1.0.0"));
+        versions.put("2.0.0", new org.apache.karaf.features.internal.model.Feature("transaction", "2.0.0"));
         features.put("transaction", versions);
 
         Map<String, Feature> versions2 = new HashMap<String, Feature>();
-        versions2.put("1.0.0", new FeatureImpl("ssh", "1.0.0"));
+        versions2.put("1.0.0", new org.apache.karaf.features.internal.model.Feature("ssh", "1.0.0"));
         features.put("ssh", versions2);
 
         final FeaturesServiceImpl impl = new FeaturesServiceImpl() {

Modified: karaf/trunk/features/core/src/test/resources/org/apache/karaf/features/repo1.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/test/resources/org/apache/karaf/features/repo1.xml?rev=1079624&r1=1079623&r2=1079624&view=diff
==============================================================================
--- karaf/trunk/features/core/src/test/resources/org/apache/karaf/features/repo1.xml (original)
+++ karaf/trunk/features/core/src/test/resources/org/apache/karaf/features/repo1.xml Wed Mar  9 00:51:26 2011
@@ -15,7 +15,7 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 -->
-<features>
+<features xmlns="http://karaf.apache.org/xmlns/features/v1.0.0">
     <repository>urn:r1</repository>
     <feature name="f1">
         <config name="c1">

Modified: karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java?rev=1079624&r1=1079623&r2=1079624&view=diff
==============================================================================
--- karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java (original)
+++ karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java Wed Mar  9 00:51:26 2011
@@ -26,7 +26,7 @@ import org.apache.felix.bundlerepository
 import org.apache.felix.bundlerepository.impl.DataModelHelperImpl;
 import org.apache.felix.bundlerepository.impl.ReasonImpl;
 import org.apache.karaf.features.BundleInfo;
-import org.apache.karaf.features.internal.FeatureImpl;
+import org.apache.karaf.features.internal.model.Bundle;
 import org.easymock.Capture;
 import org.easymock.EasyMock;
 import org.easymock.IAnswer;
@@ -45,9 +45,9 @@ public class ObrResolverTest {
     public void testResolver() throws Exception {
         final String requirement = "bundle:(&(symbolicname=org.apache.camel.camel-blueprint)(version>=2.4.0)(version<2.4.1))";
 
-        final FeatureImpl f = new FeatureImpl("f1", "1.0");
+        final org.apache.karaf.features.internal.model.Feature f = new org.apache.karaf.features.internal.model.Feature("f1", "1.0");
         f.setResolver("obr");
-        f.addBundle(new BundleInfoImpl(requirement));
+        f.getBundle().add(new Bundle(requirement));
         final RepositoryAdmin admin = createMock(RepositoryAdmin.class);
         final Resolver resolver = createMock(Resolver.class);
         final Resource resource = createMock(Resource.class);

Modified: karaf/trunk/tooling/features-maven-plugin/pom.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/tooling/features-maven-plugin/pom.xml?rev=1079624&r1=1079623&r2=1079624&view=diff
==============================================================================
--- karaf/trunk/tooling/features-maven-plugin/pom.xml (original)
+++ karaf/trunk/tooling/features-maven-plugin/pom.xml Wed Mar  9 00:51:26 2011
@@ -57,6 +57,10 @@
             <artifactId>maven-bundle-plugin</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.fileinstall</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.apache.karaf.features</groupId>
             <artifactId>org.apache.karaf.features.core</artifactId>
             <exclusions>

Modified: karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ArchiveKarMojo.java
URL: http://svn.apache.org/viewvc/karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ArchiveKarMojo.java?rev=1079624&r1=1079623&r2=1079624&view=diff
==============================================================================
--- karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ArchiveKarMojo.java (original)
+++ karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ArchiveKarMojo.java Wed Mar  9 00:51:26 2011
@@ -26,9 +26,11 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.karaf.features.internal.Bundle;
-import org.apache.karaf.features.internal.Feature;
-import org.apache.karaf.features.internal.Features;
+import org.apache.karaf.features.BundleInfo;
+import org.apache.karaf.features.internal.model.Bundle;
+import org.apache.karaf.features.internal.model.Feature;
+import org.apache.karaf.features.internal.model.Features;
+import org.apache.karaf.features.internal.model.JaxbUtil;
 import org.apache.maven.archiver.MavenArchiveConfiguration;
 import org.apache.maven.archiver.MavenArchiver;
 import org.apache.maven.artifact.Artifact;
@@ -121,7 +123,10 @@ public class ArchiveKarMojo extends Mojo
         File archive = createArchive(bundles);
 
         // Attach the generated archive for install/deploy
-        project.getArtifact().setFile(archive);
+        Artifact artifact = factory.createArtifact(project.getGroupId(), project.getArtifactId(), project.getVersion(), null, "kar");
+        artifact.setFile(archive);
+
+        project.addAttachedArtifact(artifact);
     }
 
     private List<Artifact> readBundles() throws MojoExecutionException {
@@ -131,9 +136,9 @@ public class ArchiveKarMojo extends Mojo
             try {
                 Features features = JaxbUtil.unmarshal(in, false);
                 for (Feature feature : features.getFeature()) {
-                    for (Bundle bundle : feature.getBundle()) {
-                        if (bundle.isDependency() == null || !bundle.isDependency()) {
-                            bundles.add(bundleToArtifact(bundle.getValue(), false));
+                    for (BundleInfo bundle : feature.getBundles()) {
+                        if (!bundle.isDependency()) {
+                            bundles.add(bundleToArtifact(bundle.getLocation(), false));
                         }
                     }
                 }

Modified: karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateFeaturesXmlMojo2.java
URL: http://svn.apache.org/viewvc/karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateFeaturesXmlMojo2.java?rev=1079624&r1=1079623&r2=1079624&view=diff
==============================================================================
--- karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateFeaturesXmlMojo2.java (original)
+++ karaf/trunk/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateFeaturesXmlMojo2.java Wed Mar  9 00:51:26 2011
@@ -33,10 +33,11 @@ import java.util.Set;
 import javax.xml.bind.JAXBException;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.stream.XMLStreamException;
-import org.apache.karaf.features.internal.Bundle;
-import org.apache.karaf.features.internal.Feature;
-import org.apache.karaf.features.internal.Features;
-import org.apache.karaf.features.internal.ObjectFactory;
+import org.apache.karaf.features.internal.model.Feature;
+import org.apache.karaf.features.internal.model.Bundle;
+import org.apache.karaf.features.internal.model.Features;
+import org.apache.karaf.features.internal.model.JaxbUtil;
+import org.apache.karaf.features.internal.model.ObjectFactory;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
@@ -54,7 +55,6 @@ import org.apache.maven.project.MavenPro
 import org.apache.maven.project.MavenProjectHelper;
 import org.apache.maven.project.artifact.InvalidDependencyVersionException;
 import org.apache.maven.shared.dependency.tree.DependencyNode;
-import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
 import org.apache.maven.shared.dependency.tree.DependencyTreeResolutionListener;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.xml.sax.SAXException;
@@ -180,6 +180,9 @@ public class GenerateFeaturesXmlMojo2 ex
         } else {
             featuresRoot = objectFactory.createFeaturesRoot();
         }
+        if (featuresRoot.getName() == null) {
+            featuresRoot.setName(project.getArtifactId());
+        }
 
         Feature feature = null;
         for (Feature test: featuresRoot.getFeature()) {
@@ -202,7 +205,7 @@ public class GenerateFeaturesXmlMojo2 ex
                 bundleName = String.format("mvn:%s/%s/%s/%s", artifact.getGroupId(), artifact.getArtifactId(), artifact.getBaseVersion(), artifact.getType());
             }
             Bundle bundle = objectFactory.createBundle();
-            bundle.setValue(bundleName);
+            bundle.setLocation(bundleName);
             if ("runtime".equals(artifact.getScope())) {
                 bundle.setDependency(true);
             }

Modified: karaf/trunk/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/GenerateFeaturesXmlMojo2Test.java
URL: http://svn.apache.org/viewvc/karaf/trunk/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/GenerateFeaturesXmlMojo2Test.java?rev=1079624&r1=1079623&r2=1079624&view=diff
==============================================================================
--- karaf/trunk/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/GenerateFeaturesXmlMojo2Test.java (original)
+++ karaf/trunk/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/GenerateFeaturesXmlMojo2Test.java Wed Mar  9 00:51:26 2011
@@ -26,7 +26,8 @@ import java.io.InputStream;
 import javax.xml.bind.JAXBException;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.stream.XMLStreamException;
-import org.apache.karaf.features.internal.Features;
+import org.apache.karaf.features.internal.model.Features;
+import org.apache.karaf.features.internal.model.JaxbUtil;
 import org.junit.Test;
 import org.xml.sax.SAXException;