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;
}