You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2014/05/27 15:14:42 UTC

git commit: [KARAF-1169] Support for hidden features

Repository: karaf
Updated Branches:
  refs/heads/master 3b336bb29 -> 2fefe3fa9


[KARAF-1169] Support for hidden features


Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/2fefe3fa
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/2fefe3fa
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/2fefe3fa

Branch: refs/heads/master
Commit: 2fefe3fa9be75793c0a0edcf78b500c8c3447ca7
Parents: 3b336bb
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Tue May 27 15:13:35 2014 +0200
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Tue May 27 15:14:37 2014 +0200

----------------------------------------------------------------------
 .../features/command/ListFeaturesCommand.java   |  7 ++
 .../completers/AvailableFeatureCompleter.java   |  2 +-
 .../command/ListFeaturesCommandTest.java        | 96 ++++++++++++++++++++
 .../java/org/apache/karaf/features/Feature.java |  2 +
 .../karaf/features/internal/model/Feature.java  | 16 ++++
 .../karaf/features/karaf-features-1.3.0.xsd     |  1 +
 .../service/FeaturesValidationTest.java         |  4 +-
 .../karaf/features/internal/service/f07.xml     |  1 +
 .../webconsole/features/ExtendedFeature.java    |  5 +
 9 files changed, 131 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/2fefe3fa/features/command/src/main/java/org/apache/karaf/features/command/ListFeaturesCommand.java
----------------------------------------------------------------------
diff --git a/features/command/src/main/java/org/apache/karaf/features/command/ListFeaturesCommand.java b/features/command/src/main/java/org/apache/karaf/features/command/ListFeaturesCommand.java
index e86ff64..79a2447 100644
--- a/features/command/src/main/java/org/apache/karaf/features/command/ListFeaturesCommand.java
+++ b/features/command/src/main/java/org/apache/karaf/features/command/ListFeaturesCommand.java
@@ -39,6 +39,9 @@ public class ListFeaturesCommand extends FeaturesCommandSupport {
     @Option(name = "-r", aliases = {"--required"}, description = "Display a list of all required features only", required = false, multiValued = false)
     boolean onlyRequired;
 
+    @Option(name = "-s", aliases = {"--show-hidden"}, description = "Display hidden features", required = false, multiValued = false)
+    boolean showHidden;
+
     @Option(name = "-o", aliases = {"--ordered"}, description = "Display a list using alphabetical order ", required = false, multiValued = false)
     boolean ordered;
 
@@ -72,6 +75,10 @@ public class ListFeaturesCommand extends FeaturesCommandSupport {
                     // Filter out not installed features if we only want to see the installed ones
                     continue;
                 }
+                if (!showHidden && f.isHidden()) {
+                    // Filter out hidden feature if not asked to display those
+                    continue;
+                }
                 table.addRow().addContent(
                         f.getName(),
                         f.getVersion(),

http://git-wip-us.apache.org/repos/asf/karaf/blob/2fefe3fa/features/command/src/main/java/org/apache/karaf/features/command/completers/AvailableFeatureCompleter.java
----------------------------------------------------------------------
diff --git a/features/command/src/main/java/org/apache/karaf/features/command/completers/AvailableFeatureCompleter.java b/features/command/src/main/java/org/apache/karaf/features/command/completers/AvailableFeatureCompleter.java
index 79cd280..5881c84 100644
--- a/features/command/src/main/java/org/apache/karaf/features/command/completers/AvailableFeatureCompleter.java
+++ b/features/command/src/main/java/org/apache/karaf/features/command/completers/AvailableFeatureCompleter.java
@@ -27,7 +27,7 @@ public class AvailableFeatureCompleter extends FeatureCompleterSupport {
 
     @Override
     protected boolean acceptsFeature(Feature feature) {
-        return !featuresService.isInstalled(feature);
+        return !featuresService.isInstalled(feature) && !feature.isHidden();
     }
 
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/2fefe3fa/features/command/src/test/java/org/apache/karaf/features/command/ListFeaturesCommandTest.java
----------------------------------------------------------------------
diff --git a/features/command/src/test/java/org/apache/karaf/features/command/ListFeaturesCommandTest.java b/features/command/src/test/java/org/apache/karaf/features/command/ListFeaturesCommandTest.java
new file mode 100644
index 0000000..f3bb619
--- /dev/null
+++ b/features/command/src/test/java/org/apache/karaf/features/command/ListFeaturesCommandTest.java
@@ -0,0 +1,96 @@
+/*
+ * 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.karaf.features.command;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+
+import org.apache.karaf.features.Feature;
+import org.apache.karaf.features.FeaturesService;
+import org.apache.karaf.features.Repository;
+import org.easymock.EasyMock;
+import org.junit.Test;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+
+public class ListFeaturesCommandTest {
+
+    @Test
+    public void testHiddenFeatures() throws Exception {
+
+        FeaturesService service = EasyMock.createMock(FeaturesService.class);
+        Repository repo = EasyMock.createMock(Repository.class);
+        Feature feature = EasyMock.createMock(Feature.class);
+
+        EasyMock.expect(service.listRepositories()).andReturn(new Repository[] { repo });
+        EasyMock.expect(repo.getFeatures()).andReturn(new Feature[] { feature });
+        EasyMock.expect(feature.isHidden()).andReturn(true);
+
+        EasyMock.replay(service, repo, feature);
+
+        ListFeaturesCommand command = new ListFeaturesCommand();
+        command.setFeaturesService(service);
+        command.noFormat = true;
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        PrintStream out = new PrintStream(baos);
+        System.setOut(out);
+
+        command.execute();
+
+        out.flush();
+        assertFalse(baos.toString().contains("feature"));
+        EasyMock.verify(service, repo, feature);
+    }
+
+    @Test
+    public void testShowHiddenFeatures() throws Exception {
+
+        FeaturesService service = EasyMock.createMock(FeaturesService.class);
+        Repository repo = EasyMock.createMock(Repository.class);
+        Feature feature = EasyMock.createMock(Feature.class);
+
+        EasyMock.expect(service.listRepositories()).andReturn(new Repository[] { repo });
+        EasyMock.expect(repo.getFeatures()).andReturn(new Feature[] { feature });
+        EasyMock.expect(feature.isHidden()).andReturn(true).anyTimes();
+        EasyMock.expect(feature.getName()).andReturn("feature");
+        EasyMock.expect(feature.getDescription()).andReturn("description");
+        EasyMock.expect(feature.getVersion()).andReturn("1.0.0");
+        EasyMock.expect(service.isRequired(feature)).andReturn(true);
+        EasyMock.expect(service.isInstalled(feature)).andReturn(true);
+        EasyMock.expect(repo.getName()).andReturn("repository").anyTimes();
+
+        EasyMock.replay(service, repo, feature);
+
+        ListFeaturesCommand command = new ListFeaturesCommand();
+        command.setFeaturesService(service);
+        command.noFormat = true;
+        command.showHidden = true;
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        PrintStream out = new PrintStream(baos);
+        System.setOut(out);
+
+        command.execute();
+
+        out.flush();
+        assertTrue(baos.toString().contains("feature"));
+        EasyMock.verify(service, repo, feature);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/karaf/blob/2fefe3fa/features/core/src/main/java/org/apache/karaf/features/Feature.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/Feature.java b/features/core/src/main/java/org/apache/karaf/features/Feature.java
index de2de9b..b6844d2 100644
--- a/features/core/src/main/java/org/apache/karaf/features/Feature.java
+++ b/features/core/src/main/java/org/apache/karaf/features/Feature.java
@@ -42,6 +42,8 @@ public interface Feature {
 
     String getInstall();
 
+    boolean isHidden();
+
     List<Dependency> getDependencies();
 
     List<BundleInfo> getBundles();

http://git-wip-us.apache.org/repos/asf/karaf/blob/2fefe3fa/features/core/src/main/java/org/apache/karaf/features/internal/model/Feature.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/model/Feature.java b/features/core/src/main/java/org/apache/karaf/features/internal/model/Feature.java
index 4d3eb12..924d68c 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/model/Feature.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/model/Feature.java
@@ -94,6 +94,8 @@ public class Feature extends Content implements org.apache.karaf.features.Featur
     protected String install;
     @XmlAttribute(name = "start-level")
     protected Integer startLevel;
+    @XmlAttribute
+    protected boolean hidden;
     protected List<Conditional> conditional;
     protected List<Capability> capability;
     protected List<Requirement> requirement;
@@ -260,6 +262,20 @@ public class Feature extends Content implements org.apache.karaf.features.Featur
     }
 
     /**
+     * Gets the value of the hidden property.
+     */
+    public boolean isHidden() {
+        return hidden;
+    }
+
+    /**
+     * Sets the value of the hidden property.
+     */
+    public void setHidden(boolean value) {
+        this.hidden = value;
+    }
+
+    /**
      * Gets the value of the conditional property.
      * <p/>
      * <p/>

http://git-wip-us.apache.org/repos/asf/karaf/blob/2fefe3fa/features/core/src/main/resources/org/apache/karaf/features/karaf-features-1.3.0.xsd
----------------------------------------------------------------------
diff --git a/features/core/src/main/resources/org/apache/karaf/features/karaf-features-1.3.0.xsd b/features/core/src/main/resources/org/apache/karaf/features/karaf-features-1.3.0.xsd
index 4d6e81d..ef0f434 100644
--- a/features/core/src/main/resources/org/apache/karaf/features/karaf-features-1.3.0.xsd
+++ b/features/core/src/main/resources/org/apache/karaf/features/karaf-features-1.3.0.xsd
@@ -101,6 +101,7 @@ from the default start level defined in Karaf's config.properties.
                 </xs:documentation>
              </xs:annotation>
          </xs:attribute>
+        <xs:attribute name="hidden" type="xs:boolean" default="false" />
     </xs:complexType>
 
     <xs:complexType name="conditional">

http://git-wip-us.apache.org/repos/asf/karaf/blob/2fefe3fa/features/core/src/test/java/org/apache/karaf/features/internal/service/FeaturesValidationTest.java
----------------------------------------------------------------------
diff --git a/features/core/src/test/java/org/apache/karaf/features/internal/service/FeaturesValidationTest.java b/features/core/src/test/java/org/apache/karaf/features/internal/service/FeaturesValidationTest.java
index 8a0fbca..e16f4a8 100644
--- a/features/core/src/test/java/org/apache/karaf/features/internal/service/FeaturesValidationTest.java
+++ b/features/core/src/test/java/org/apache/karaf/features/internal/service/FeaturesValidationTest.java
@@ -16,16 +16,15 @@
  */
 package org.apache.karaf.features.internal.service;
 
-import java.io.InputStream;
 import java.net.URL;
 
-import org.apache.karaf.features.Repository;
 import org.apache.karaf.features.internal.model.Features;
 import org.apache.karaf.features.internal.model.JaxbUtil;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 public class FeaturesValidationTest {
@@ -99,6 +98,7 @@ public class FeaturesValidationTest {
         Features features = JaxbUtil.unmarshal(url.toExternalForm(), true);
         assertNotNull(features);
         assertEquals("2.5.6.SEC02", features.getFeature().get(0).getVersion());
+        assertTrue(features.getFeature().get(1).isHidden());
     }
 
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/2fefe3fa/features/core/src/test/resources/org/apache/karaf/features/internal/service/f07.xml
----------------------------------------------------------------------
diff --git a/features/core/src/test/resources/org/apache/karaf/features/internal/service/f07.xml b/features/core/src/test/resources/org/apache/karaf/features/internal/service/f07.xml
index d1a5745..8c59514 100644
--- a/features/core/src/test/resources/org/apache/karaf/features/internal/service/f07.xml
+++ b/features/core/src/test/resources/org/apache/karaf/features/internal/service/f07.xml
@@ -42,5 +42,6 @@
             </import>
         </scoping>
     </feature>
+    <feature name="hidden" hidden="true"/>
 </features>
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/2fefe3fa/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/ExtendedFeature.java
----------------------------------------------------------------------
diff --git a/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/ExtendedFeature.java b/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/ExtendedFeature.java
index 890c510..f169b6a 100644
--- a/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/ExtendedFeature.java
+++ b/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/ExtendedFeature.java
@@ -125,6 +125,11 @@ public class ExtendedFeature implements Feature {
         return feature.getInstall();
     }
 
+    @Override
+    public boolean isHidden() {
+        return feature.isHidden();
+    }
+
     public State getState() {
         return this.state;
     }