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 <gno...@gmail.com> Authored: Tue May 27 15:13:35 2014 +0200 Committer: Guillaume Nodet <gno...@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; }