Skip to content

Commit

Permalink
Add KarafDistributionOption.systemBundle
Browse files Browse the repository at this point in the history
  • Loading branch information
Flamenco committed Dec 8, 2016
1 parent 2f9d58d commit 8091ee3
Show file tree
Hide file tree
Showing 4 changed files with 155 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,8 @@
import org.apache.commons.io.FileUtils;
import org.ops4j.pax.exam.ExamSystem;
import org.ops4j.pax.exam.karaf.options.KarafFeaturesOption;
import org.ops4j.pax.exam.options.BootClasspathLibraryOption;
import org.ops4j.pax.exam.options.ProvisionOption;
import org.ops4j.pax.exam.options.UrlReference;
import org.ops4j.pax.exam.karaf.options.SystemBundleOption;
import org.ops4j.pax.exam.options.*;

/**
* Deploys exam and the user specified dependencies and creates the
Expand Down Expand Up @@ -69,7 +68,25 @@ public void copyBootClasspathLibraries() throws IOException {
karafHome + "/lib"), new String[] { "jar" }));
}
}


/**
*
* Copies SystemBundleOption entries into the Karaf system folder using the Maven repository folder convention.
*
* @throws IOException if copy fails
*/
public void copySystemLibraries() throws IOException {
SystemBundleOption[] systemBundleOptions = subsystem
.getOptions(SystemBundleOption.class);
for (SystemBundleOption systemBundleOption : systemBundleOptions) {
UrlReference libraryUrl = systemBundleOption.getLibraryUrl();
String destPath = karafHome + "/system" + systemBundleOption.getRepositoryPath();
FileUtils.copyURLToFile(
new URL(libraryUrl.getURL()),
new File(destPath));
}
}

/**
* Copy dependencies specified as ProvisionOption in system to the deploy folder
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ public synchronized TestContainer start() {
DependenciesDeployer deployer = new DependenciesDeployer(subsystem, karafBase,
karafHome);
deployer.copyBootClasspathLibraries();
deployer.copySystemLibraries();

updateLogProperties(karafHome, subsystem);
setupSystemProperties(karafHome, subsystem);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@

import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.karaf.options.LogLevelOption.LogLevel;
import org.ops4j.pax.exam.options.CompositeOption;
import org.ops4j.pax.exam.options.DefaultCompositeOption;
import org.ops4j.pax.exam.options.UrlReference;
import org.ops4j.pax.exam.options.extra.VMOption;

Expand Down Expand Up @@ -109,6 +111,34 @@ public static KarafDistributionConfigurationSecurityOption configureSecurity() {
return new KarafDistributionConfigurationSecurityOption(null);
}

/**
* Returns an option to adding an artifact to the Karaf system directory using the provided file.
* A corresponding (maven) entry will also be placed into the startup.properties configuration.
*
* @return
*/
public static CompositeOption systemBundle(String aGroup, String artifact, String version, File file) {
return new DefaultCompositeOption(
new SystemBundleOption(aGroup, artifact, version, file),
editConfigurationFilePut("etc/startup.properties",
"mvn:" + aGroup + "/" + artifact + "/" + version, "5")
);
}

/**
* Returns an option to adding an artifact to the Karaf system directory using the provided file.
* A corresponding (maven) entry will also be placed into the startup.properties configuration.
*
* @return
*/
public static CompositeOption systemBundle(String aGroup, String artifact, String version) {
return new DefaultCompositeOption(
new SystemBundleOption(aGroup, artifact, version),
editConfigurationFilePut("etc/startup.properties",
"mvn:" + aGroup + "/" + artifact + "/" + version, "5")
);
}

/**
* Configures which distribution options to use. Relevant are the frameworkURL, the
* frameworkName and the Karaf version since all of those params are relevant to decide which
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
/*
* 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.ops4j.pax.exam.karaf.options;

import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.options.MavenArtifactUrlReference;
import org.ops4j.pax.exam.options.RawUrlReference;
import org.ops4j.pax.exam.options.UrlReference;

import java.io.File;
import java.net.MalformedURLException;

/**
* Copies the specified file into the Karaf system folder. (A Karaf folder that follows the m2 directory structure)
*/
public class SystemBundleOption implements Option {

private String group;
private String artifact;
private String version;
private File file;


public SystemBundleOption(String aGroup, String artifact, String version, File file) {
addSystemBundle(aGroup, artifact, version, file);
}

public SystemBundleOption(String aGroup, String artifact, String version) {
addSystemBundle(aGroup, artifact, version);
}

public String getGroup() {
return group;
}

public String getArtifact() {
return artifact;
}

public String getVersion() {
return version;
}

public SystemBundleOption addSystemBundle(String aGroup, String artifact, String version) {
return addSystemBundle(aGroup, artifact, version, null);
}

public SystemBundleOption addSystemBundle(String aGroup, String artifact, String version, File file) {
this.group = aGroup;
this.artifact = artifact;
this.version = version;
this.file = file;
return this;
}

/**
*
* @return The URL to fetch the artifact
*/
public UrlReference getLibraryUrl() {
if (file != null) {
try {
return new RawUrlReference(file.toURI().toURL().toString());
} catch (MalformedURLException e) {
e.printStackTrace();
return null;
}
} else {
return new MavenArtifactUrlReference().groupId(group).artifactId(artifact).version(version);
}
}

/**
*
* @return The maven repository path to the artifact. Must start with <strong>/</strong>.
* This path should not include the /system prefix.
*/
public String getRepositoryPath() {
String path = "/" + getGroup().replace(".", "/");
path += "/" + getArtifact();
path += "/" + getVersion();
if (file != null) {
path += "/" + file.getName();
} else {
path += "/" + getArtifact() + "-" + getVersion() + ".jar";
}
return path;
}
}

0 comments on commit 8091ee3

Please sign in to comment.