You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2014/04/22 18:20:04 UTC
git commit: CAMEL-7386: camel-openshift component.
Repository: camel
Updated Branches:
refs/heads/master c1214efb7 -> 189980693
CAMEL-7386: camel-openshift component.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/18998069
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/18998069
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/18998069
Branch: refs/heads/master
Commit: 1899806936c463868d1b843c0240772073de7198
Parents: c1214ef
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Apr 22 18:18:49 2014 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Apr 22 18:19:31 2014 +0200
----------------------------------------------------------------------
apache-camel/pom.xml | 4 +
.../src/main/descriptors/common-bin.xml | 1 +
components/camel-openshift/pom.xml | 67 ++++++
.../component/openshift/OpenShiftComponent.java | 69 ++++++
.../component/openshift/OpenShiftConstants.java | 26 +++
.../component/openshift/OpenShiftEndpoint.java | 106 +++++++++
.../component/openshift/OpenShiftOperation.java | 23 ++
.../component/openshift/OpenShiftProducer.java | 231 +++++++++++++++++++
.../src/main/resources/META-INF/LICENSE.txt | 203 ++++++++++++++++
.../src/main/resources/META-INF/NOTICE.txt | 11 +
.../org/apache/camel/component/openshift | 18 ++
.../OpenShiftListApplicationsTest.java | 60 +++++
.../component/openshift/OpenShiftStateTest.java | 62 +++++
.../src/test/resources/log4j.properties | 41 ++++
components/pom.xml | 1 +
parent/pom.xml | 6 +
.../features/src/main/resources/features.xml | 5 +
.../camel/itest/karaf/CamelOpenshiftTest.java | 40 ++++
18 files changed, 974 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/apache-camel/pom.xml
----------------------------------------------------------------------
diff --git a/apache-camel/pom.xml b/apache-camel/pom.xml
index dce9c39..ce59468 100644
--- a/apache-camel/pom.xml
+++ b/apache-camel/pom.xml
@@ -436,6 +436,10 @@
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
+ <artifactId>camel-openshift</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
<artifactId>camel-optaplanner</artifactId>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/apache-camel/src/main/descriptors/common-bin.xml
----------------------------------------------------------------------
diff --git a/apache-camel/src/main/descriptors/common-bin.xml b/apache-camel/src/main/descriptors/common-bin.xml
index a0b5996..a544060 100644
--- a/apache-camel/src/main/descriptors/common-bin.xml
+++ b/apache-camel/src/main/descriptors/common-bin.xml
@@ -120,6 +120,7 @@
<include>org.apache.camel:camel-netty</include>
<include>org.apache.camel:camel-netty-http</include>
<include>org.apache.camel:camel-ognl</include>
+ <include>org.apache.camel:camel-openshift</include>
<include>org.apache.camel:camel-optaplanner</include>
<include>org.apache.camel:camel-paxlogging</include>
<include>org.apache.camel:camel-printer</include>
http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-openshift/pom.xml b/components/camel-openshift/pom.xml
new file mode 100644
index 0000000..a2c897b
--- /dev/null
+++ b/components/camel-openshift/pom.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>components</artifactId>
+ <version>2.14-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>camel-openshift</artifactId>
+ <packaging>bundle</packaging>
+ <name>Camel :: OpenShift</name>
+ <description>Camel OpenShift support</description>
+
+ <properties>
+ <camel.osgi.export.pkg>org.apache.camel.component.openshift.*</camel.osgi.export.pkg>
+ <camel.osgi.export.service>org.apache.camel.spi.ComponentResolver;component=openshift</camel.osgi.export.service>
+ </properties>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.openshift</groupId>
+ <artifactId>openshift-java-client</artifactId>
+ <version>${openshift-java-client-version}</version>
+ </dependency>
+
+ <!-- testing -->
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+</project>
http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftComponent.java b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftComponent.java
new file mode 100644
index 0000000..2883c5d
--- /dev/null
+++ b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftComponent.java
@@ -0,0 +1,69 @@
+/**
+ * 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.camel.component.openshift;
+
+import java.util.Map;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.impl.UriEndpointComponent;
+
+public class OpenShiftComponent extends UriEndpointComponent {
+
+ private String username;
+ private String password;
+ private String domain;
+
+ public OpenShiftComponent() {
+ super(OpenShiftEndpoint.class);
+ }
+
+ protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
+ String clientId = remaining;
+
+ OpenShiftEndpoint endpoint = new OpenShiftEndpoint(uri, this);
+ endpoint.setClientId(clientId);
+ endpoint.setUsername(getUsername());
+ endpoint.setPassword(getPassword());
+ endpoint.setDomain(getDomain());
+ setProperties(endpoint, parameters);
+ return endpoint;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getDomain() {
+ return domain;
+ }
+
+ public void setDomain(String domain) {
+ this.domain = domain;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftConstants.java
----------------------------------------------------------------------
diff --git a/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftConstants.java b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftConstants.java
new file mode 100644
index 0000000..dcbabbf
--- /dev/null
+++ b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftConstants.java
@@ -0,0 +1,26 @@
+/**
+ * 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.camel.component.openshift;
+
+public final class OpenShiftConstants {
+
+ public static final String OPERATION = "CamelOpenShiftOperation";
+ public static final String APPLICATION = "CamelOpenShiftApplication";
+
+ private OpenShiftConstants() {
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftEndpoint.java b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftEndpoint.java
new file mode 100644
index 0000000..a583cf6
--- /dev/null
+++ b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftEndpoint.java
@@ -0,0 +1,106 @@
+/**
+ * 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.camel.component.openshift;
+
+import org.apache.camel.Component;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.impl.DefaultEndpoint;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.util.ObjectHelper;
+
+@UriEndpoint(scheme = "openshift")
+public class OpenShiftEndpoint extends DefaultEndpoint {
+
+ private String username;
+ private String password;
+ private String clientId;
+ private String domain;
+ private OpenShiftOperation operation;
+ private String application;
+
+ public OpenShiftEndpoint(String endpointUri, Component component) {
+ super(endpointUri, component);
+ }
+
+ @Override
+ public Producer createProducer() throws Exception {
+ ObjectHelper.notEmpty(clientId, "clientId", this);
+ ObjectHelper.notEmpty(username, "username", this);
+ ObjectHelper.notEmpty(password, "password", this);
+ return new OpenShiftProducer(this);
+ }
+
+ @Override
+ public Consumer createConsumer(Processor processor) throws Exception {
+ throw new UnsupportedOperationException("Consumer not supported on this component");
+ }
+
+ @Override
+ public boolean isSingleton() {
+ return true;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getClientId() {
+ return clientId;
+ }
+
+ public void setClientId(String clientId) {
+ this.clientId = clientId;
+ }
+
+ public String getDomain() {
+ return domain;
+ }
+
+ public void setDomain(String domain) {
+ this.domain = domain;
+ }
+
+ public OpenShiftOperation getOperation() {
+ return operation;
+ }
+
+ public void setOperation(OpenShiftOperation operation) {
+ this.operation = operation;
+ }
+
+ public String getApplication() {
+ return application;
+ }
+
+ public void setApplication(String application) {
+ this.application = application;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftOperation.java
----------------------------------------------------------------------
diff --git a/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftOperation.java b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftOperation.java
new file mode 100644
index 0000000..2fd7b8d
--- /dev/null
+++ b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftOperation.java
@@ -0,0 +1,23 @@
+/**
+ * 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.camel.component.openshift;
+
+public enum OpenShiftOperation {
+
+ list, start, stop, restart, state
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftProducer.java b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftProducer.java
new file mode 100644
index 0000000..74e35a2
--- /dev/null
+++ b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftProducer.java
@@ -0,0 +1,231 @@
+/**
+ * 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.camel.component.openshift;
+
+import java.text.SimpleDateFormat;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+
+import com.openshift.client.IApplication;
+import com.openshift.client.IDomain;
+import com.openshift.client.IGear;
+import com.openshift.client.IGearGroup;
+import com.openshift.client.IOpenShiftConnection;
+import com.openshift.client.IUser;
+import com.openshift.client.OpenShiftConnectionFactory;
+import com.openshift.client.cartridge.IEmbeddedCartridge;
+import com.openshift.client.configuration.OpenShiftConfiguration;
+import org.apache.camel.CamelExchangeException;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.impl.DefaultProducer;
+
+public class OpenShiftProducer extends DefaultProducer {
+
+ public static final String TIMESTAMP_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
+
+ public OpenShiftProducer(Endpoint endpoint) {
+ super(endpoint);
+ }
+
+ @Override
+ public OpenShiftEndpoint getEndpoint() {
+ return (OpenShiftEndpoint) super.getEndpoint();
+ }
+
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ String openshiftServer = new OpenShiftConfiguration().getLibraServer();
+
+ IOpenShiftConnection connection =
+ new OpenShiftConnectionFactory().getConnection(getEndpoint().getClientId(), getEndpoint().getUsername(), getEndpoint().getPassword(), openshiftServer);
+
+ IUser user = connection.getUser();
+
+ IDomain domain;
+ if (getEndpoint().getDomain() != null) {
+ domain = user.getDomain(getEndpoint().getDomain());
+ } else {
+ domain = user.getDefaultDomain();
+ }
+ if (domain == null) {
+ throw new CamelExchangeException("User has no domain with id " + getEndpoint().getDomain(), exchange);
+ }
+
+ OpenShiftOperation operation = exchange.getIn().getHeader(OpenShiftConstants.OPERATION, getEndpoint().getOperation(), OpenShiftOperation.class);
+
+ switch (operation) {
+ case list:
+ doList(exchange, domain);
+ break;
+ case start:
+ doStart(exchange, domain);
+ break;
+ case stop:
+ doStop(exchange, domain);
+ break;
+ case restart:
+ doRestart(exchange, domain);
+ break;
+ case state:
+ doState(exchange, domain);
+ break;
+ default:
+ // and do list by default
+ doList(exchange, domain);
+ break;
+ }
+ }
+
+ protected void doList(Exchange exchange, IDomain domain) {
+ StringBuilder sb = new StringBuilder("{\n \"applications\": [");
+
+ boolean first = true;
+ for (IApplication application : domain.getApplications()) {
+ if (!first) {
+ sb.append("\n ],");
+ } else {
+ first = false;
+ }
+
+ String date = new SimpleDateFormat(TIMESTAMP_FORMAT).format(application.getCreationTime());
+
+ // application
+ sb.append("\n {");
+ sb.append("\n \"uuid\": \"" + application.getUUID() + "\",");
+ sb.append("\n \"domain\": \"" + application.getDomain().getId() + "\",");
+ sb.append("\n \"name\": \"" + application.getName() + "\",");
+ sb.append("\n \"creationTime\": \"" + date + "\",");
+ sb.append("\n \"applicationUrl\": \"" + application.getApplicationUrl() + "\",");
+ sb.append("\n \"gitUrl\": \"" + application.getGitUrl() + "\",");
+ sb.append("\n \"sshUrl\": \"" + application.getSshUrl() + "\",");
+
+ // catridge
+ sb.append("\n \"catridge\": {");
+ sb.append("\n \"name\": \"" + application.getCartridge().getName() + "\",");
+ sb.append("\n \"displayName\": \"" + application.getCartridge().getDisplayName() + "\",");
+ sb.append("\n \"description\": \"" + application.getCartridge().getDescription() + "\"");
+ sb.append("\n },");
+
+ // embedded catridges
+ List<IEmbeddedCartridge> embeddedCartridges = application.getEmbeddedCartridges();
+ if (embeddedCartridges != null && !embeddedCartridges.isEmpty()) {
+ sb.append("\n \"embeddedCatridges\": [");
+ for (Iterator<IEmbeddedCartridge> it = embeddedCartridges.iterator(); it.hasNext();) {
+ IEmbeddedCartridge cartridge = it.next();
+ sb.append("\n \"catridge\": {");
+ sb.append("\n \"name\": \"" + cartridge.getName() + "\",");
+ sb.append("\n \"displayName\": \"" + cartridge.getDisplayName() + "\",");
+ sb.append("\n \"description\": \"" + cartridge.getDescription() + "\"");
+ sb.append("\n }");
+ if (it.hasNext()) {
+ sb.append(",");
+ }
+ }
+ sb.append("\n ]");
+ }
+
+ sb.append("\n \"gearProfile\": \"" + application.getGearProfile().getName() + "\",");
+ sb.append("\n \"gears\": [");
+ boolean firstGear = true;
+ for (IGearGroup group : application.getGearGroups()) {
+ for (IGear gear : group.getGears()) {
+ if (!firstGear) {
+ sb.append(",");
+ } else {
+ firstGear = false;
+ }
+ sb.append("\n {");
+ sb.append("\n \"id\": \"" + gear.getId() + "\",");
+ sb.append("\n \"sshUrl\": \"" + gear.getSshUrl() + "\",");
+ sb.append("\n \"state\": \"" + gear.getState().name().toLowerCase(Locale.ENGLISH) + "\"");
+ sb.append("\n }");
+ }
+ }
+ sb.append("\n ]");
+ sb.append("\n }");
+ }
+ sb.append("\n ]");
+ sb.append("\n}");
+
+ exchange.getIn().setBody(sb.toString());
+ }
+
+ protected void doStart(Exchange exchange, IDomain domain) throws CamelExchangeException {
+ String name = exchange.getIn().getHeader(OpenShiftConstants.APPLICATION, getEndpoint().getApplication(), String.class);
+ if (name == null) {
+ throw new CamelExchangeException("Application not specified", exchange);
+ }
+
+ IApplication app = domain.getApplicationByName(name);
+ if (app == null) {
+ throw new CamelExchangeException("Application with id " + name + " not found.", exchange);
+ } else {
+ app.start();
+ }
+ }
+
+ protected void doStop(Exchange exchange, IDomain domain) throws CamelExchangeException {
+ String name = exchange.getIn().getHeader(OpenShiftConstants.APPLICATION, getEndpoint().getApplication(), String.class);
+ if (name == null) {
+ throw new CamelExchangeException("Application not specified", exchange);
+ }
+
+ IApplication app = domain.getApplicationByName(name);
+ if (app == null) {
+ throw new CamelExchangeException("Application with id " + name + " not found.", exchange);
+ } else {
+ app.stop();
+ }
+ }
+
+ protected void doRestart(Exchange exchange, IDomain domain) throws CamelExchangeException {
+ String name = exchange.getIn().getHeader(OpenShiftConstants.APPLICATION, getEndpoint().getApplication(), String.class);
+ if (name == null) {
+ throw new CamelExchangeException("Application not specified", exchange);
+ }
+
+ IApplication app = domain.getApplicationByName(name);
+ if (app == null) {
+ throw new CamelExchangeException("Application with id " + name + " not found.", exchange);
+ } else {
+ app.restart();
+ }
+ }
+
+ protected void doState(Exchange exchange, IDomain domain) throws CamelExchangeException {
+ String name = exchange.getIn().getHeader(OpenShiftConstants.APPLICATION, getEndpoint().getApplication(), String.class);
+ if (name == null) {
+ throw new CamelExchangeException("Application not specified", exchange);
+ }
+
+ IApplication app = domain.getApplicationByName(name);
+ if (app == null) {
+ throw new CamelExchangeException("Application with id " + name + " not found.", exchange);
+ } else {
+ for (IGearGroup group : app.getGearGroups()) {
+ for (IGear gear : group.getGears()) {
+ String state = gear.getState().name().toLowerCase(Locale.ENGLISH);
+ exchange.getIn().setBody(state);
+ break;
+ }
+ }
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/resources/META-INF/LICENSE.txt
----------------------------------------------------------------------
diff --git a/components/camel-openshift/src/main/resources/META-INF/LICENSE.txt b/components/camel-openshift/src/main/resources/META-INF/LICENSE.txt
new file mode 100644
index 0000000..6b0b127
--- /dev/null
+++ b/components/camel-openshift/src/main/resources/META-INF/LICENSE.txt
@@ -0,0 +1,203 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed 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.
+
http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/resources/META-INF/NOTICE.txt
----------------------------------------------------------------------
diff --git a/components/camel-openshift/src/main/resources/META-INF/NOTICE.txt b/components/camel-openshift/src/main/resources/META-INF/NOTICE.txt
new file mode 100644
index 0000000..2e215bf
--- /dev/null
+++ b/components/camel-openshift/src/main/resources/META-INF/NOTICE.txt
@@ -0,0 +1,11 @@
+ =========================================================================
+ == NOTICE file corresponding to the section 4 d of ==
+ == the Apache License, Version 2.0, ==
+ == in this case for the Apache Camel distribution. ==
+ =========================================================================
+
+ This product includes software developed by
+ The Apache Software Foundation (http://www.apache.org/).
+
+ Please read the different LICENSE files present in the licenses directory of
+ this distribution.
http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/resources/META-INF/services/org/apache/camel/component/openshift
----------------------------------------------------------------------
diff --git a/components/camel-openshift/src/main/resources/META-INF/services/org/apache/camel/component/openshift b/components/camel-openshift/src/main/resources/META-INF/services/org/apache/camel/component/openshift
new file mode 100644
index 0000000..9051897
--- /dev/null
+++ b/components/camel-openshift/src/main/resources/META-INF/services/org/apache/camel/component/openshift
@@ -0,0 +1,18 @@
+#
+# 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.
+#
+
+class=org.apache.camel.component.openshift.OpenShiftComponent
http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftListApplicationsTest.java
----------------------------------------------------------------------
diff --git a/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftListApplicationsTest.java b/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftListApplicationsTest.java
new file mode 100644
index 0000000..a8b4e2c
--- /dev/null
+++ b/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftListApplicationsTest.java
@@ -0,0 +1,60 @@
+/**
+ * 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.camel.component.openshift;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class OpenShiftListApplicationsTest extends CamelTestSupport {
+
+ private String username;
+ private String password;
+
+ @Override
+ public void setUp() throws Exception {
+ // INSERT credentials here
+ username = null;
+ password = null;
+ super.setUp();
+ }
+
+ @Test
+ public void testListApplications() throws Exception {
+ if (username == null) {
+ return;
+ }
+
+ getMockEndpoint("mock:result").expectedMessageCount(1);
+
+ template.sendBody("direct:start", "Hello World");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start")
+ .toF("openshift:myApp?operation=list&username=%s&password=%s", username, password)
+ .to("mock:result");
+ }
+ };
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftStateTest.java
----------------------------------------------------------------------
diff --git a/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftStateTest.java b/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftStateTest.java
new file mode 100644
index 0000000..c57992e
--- /dev/null
+++ b/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftStateTest.java
@@ -0,0 +1,62 @@
+/**
+ * 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.camel.component.openshift;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class OpenShiftStateTest extends CamelTestSupport {
+
+ private String username;
+ private String password;
+ private String application;
+
+ @Override
+ public void setUp() throws Exception {
+ // INSERT credentials here
+ username = null;
+ password = null;
+ application = "myapp";
+ super.setUp();
+ }
+
+ @Test
+ public void testState() throws Exception {
+ if (username == null) {
+ return;
+ }
+
+ getMockEndpoint("mock:result").expectedBodiesReceived("started");
+
+ template.sendBody("direct:start", "Hello World");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start")
+ .toF("openshift:myApp?operation=state&application=%s&username=%s&password=%s", application, username, password)
+ .to("mock:result");
+ }
+ };
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/components/camel-openshift/src/test/resources/log4j.properties b/components/camel-openshift/src/test/resources/log4j.properties
new file mode 100644
index 0000000..7127791
--- /dev/null
+++ b/components/camel-openshift/src/test/resources/log4j.properties
@@ -0,0 +1,41 @@
+## ------------------------------------------------------------------------
+## 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.
+## ------------------------------------------------------------------------
+
+#
+# The logging properties used for testing.
+#
+log4j.rootLogger=INFO, file
+
+# uncomment the following to enable camel debugging
+#log4j.logger.org.apache.camel.component.openshift=TRACE
+
+# CONSOLE appender not used by default
+log4j.appender.out=org.apache.log4j.ConsoleAppender
+log4j.appender.out.layout=org.apache.log4j.PatternLayout
+log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
+# MDC
+#log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %-10.10X{camel.breadcrumbId} - %-10.10X{camelexchangeId} - %-10.10X{camel.correlationId} - %-10.10X{camel.routeId} - %m%n
+
+# File appender
+log4j.appender.file=org.apache.log4j.FileAppender
+log4j.appender.file.layout=org.apache.log4j.PatternLayout
+log4j.appender.file.file=target/camel-openshift-test.log
+log4j.appender.file.append=true
+log4j.appender.file.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
+# MDC
+#log4j.appender.file.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %-10.10X{camel.breadcrumbId} - %-10.10X{camel.exchangeId} - %-10.10X{camel.correlationId} - %-10.10X{camel.routeId} - %m%n
+
http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/pom.xml
----------------------------------------------------------------------
diff --git a/components/pom.xml b/components/pom.xml
index 9e5292f..942218f 100644
--- a/components/pom.xml
+++ b/components/pom.xml
@@ -141,6 +141,7 @@
<module>camel-netty</module>
<module>camel-netty-http</module>
<module>camel-ognl</module>
+ <module>camel-openshift</module>
<module>camel-optaplanner</module>
<module>camel-paxlogging</module>
<module>camel-printer</module>
http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/parent/pom.xml
----------------------------------------------------------------------
diff --git a/parent/pom.xml b/parent/pom.xml
index 8ff5f30..01c3689 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -313,6 +313,7 @@
<openejb-version>4.5.2</openejb-version>
<openjpa-version>2.3.0</openjpa-version>
<opensaml-version>2.5.1_2</opensaml-version>
+ <openshift-java-client-version>2.5.0.Final</openshift-java-client-version>
<optaplanner-version>6.0.1.Final</optaplanner-version>
<oro-bundle-version>2.0.8_6</oro-bundle-version>
<oscache-bundle-version>2.4_5</oscache-bundle-version>
@@ -998,6 +999,11 @@
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
+ <artifactId>camel-openshift</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
<artifactId>camel-optaplanner</artifactId>
<version>${project.version}</version>
</dependency>
http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/platforms/karaf/features/src/main/resources/features.xml
----------------------------------------------------------------------
diff --git a/platforms/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml
index 415943d..727f1dc 100644
--- a/platforms/karaf/features/src/main/resources/features.xml
+++ b/platforms/karaf/features/src/main/resources/features.xml
@@ -829,6 +829,11 @@
<bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.javassist/${javassist-bundle-version}</bundle>
<bundle>mvn:org.apache.camel/camel-ognl/${project.version}</bundle>
</feature>
+ <feature name='camel-openshift' version='${project.version}' resolver='(obr)' start-level='50'>
+ <feature version='${project.version}'>camel-core</feature>
+ <bundle dependency='true'>wrap:mvn:com.openshift/openshift-java-client/${openshift-java-client-version}</bundle>
+ <bundle>mvn:org.apache.camel/camel-openshift/${project.version}</bundle>
+ </feature>
<feature name='camel-optaplanner' version='${project.version}' resolver='(obr)' start-level='50'>
<details>The camel-optaplanner feature can only run on a SUN JVM. You need to add the package com.sun.tools.xjc to the java platform packages in the etc/jre.properties file.</details>
<feature version='${project.version}'>camel-core</feature>
http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelOpenshiftTest.java
----------------------------------------------------------------------
diff --git a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelOpenshiftTest.java b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelOpenshiftTest.java
new file mode 100644
index 0000000..e9f73eb
--- /dev/null
+++ b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelOpenshiftTest.java
@@ -0,0 +1,40 @@
+/**
+ * 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.camel.itest.karaf;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.Configuration;
+import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+
+@RunWith(JUnit4TestRunner.class)
+public class CamelOpenshiftTest extends AbstractFeatureTest {
+
+ public static final String COMPONENT = extractName(CamelOpenshiftTest.class);
+
+ @Test
+ public void test() throws Exception {
+ testComponent(COMPONENT);
+ }
+
+ @Configuration
+ public static Option[] configure() {
+ return configure(COMPONENT);
+ }
+
+}
\ No newline at end of file
Re: git commit: CAMEL-7386: camel-openshift component.
Posted by Claus Ibsen <cl...@gmail.com>.
On Tue, Apr 22, 2014 at 10:40 PM, Christian Müller
<ch...@gmail.com> wrote:
> Please also update the NOTICE.txt file as required by [1], because the
> openshift-java-client is using the EPL-1.0 license.
>
> [1] https://www.apache.org/legal/3party.html#category-b
> [2]
> http://search.maven.org/#artifactdetails|com.openshift|openshift-java-client|2.5.0.Final|jar
>
> Best,
>
> Christian
> -----------------
>
Done.
We may have other EPL libraries where we need to do similar.
For example camel-eclipse
> Software Integration Specialist
>
> Apache Member
> V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
> Apache Incubator PMC Member
>
> https://www.linkedin.com/pub/christian-mueller/11/551/642
>
>
> On Tue, Apr 22, 2014 at 6:20 PM, <da...@apache.org> wrote:
>
>> Repository: camel
>> Updated Branches:
>> refs/heads/master c1214efb7 -> 189980693
>>
>>
>> CAMEL-7386: camel-openshift component.
>>
>>
>> Project: http://git-wip-us.apache.org/repos/asf/camel/repo
>> Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/18998069
>> Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/18998069
>> Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/18998069
>>
>> Branch: refs/heads/master
>> Commit: 1899806936c463868d1b843c0240772073de7198
>> Parents: c1214ef
>> Author: Claus Ibsen <da...@apache.org>
>> Authored: Tue Apr 22 18:18:49 2014 +0200
>> Committer: Claus Ibsen <da...@apache.org>
>> Committed: Tue Apr 22 18:19:31 2014 +0200
>>
>> ----------------------------------------------------------------------
>> apache-camel/pom.xml | 4 +
>> .../src/main/descriptors/common-bin.xml | 1 +
>> components/camel-openshift/pom.xml | 67 ++++++
>> .../component/openshift/OpenShiftComponent.java | 69 ++++++
>> .../component/openshift/OpenShiftConstants.java | 26 +++
>> .../component/openshift/OpenShiftEndpoint.java | 106 +++++++++
>> .../component/openshift/OpenShiftOperation.java | 23 ++
>> .../component/openshift/OpenShiftProducer.java | 231 +++++++++++++++++++
>> .../src/main/resources/META-INF/LICENSE.txt | 203 ++++++++++++++++
>> .../src/main/resources/META-INF/NOTICE.txt | 11 +
>> .../org/apache/camel/component/openshift | 18 ++
>> .../OpenShiftListApplicationsTest.java | 60 +++++
>> .../component/openshift/OpenShiftStateTest.java | 62 +++++
>> .../src/test/resources/log4j.properties | 41 ++++
>> components/pom.xml | 1 +
>> parent/pom.xml | 6 +
>> .../features/src/main/resources/features.xml | 5 +
>> .../camel/itest/karaf/CamelOpenshiftTest.java | 40 ++++
>> 18 files changed, 974 insertions(+)
>> ----------------------------------------------------------------------
>>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/apache-camel/pom.xml
>> ----------------------------------------------------------------------
>> diff --git a/apache-camel/pom.xml b/apache-camel/pom.xml
>> index dce9c39..ce59468 100644
>> --- a/apache-camel/pom.xml
>> +++ b/apache-camel/pom.xml
>> @@ -436,6 +436,10 @@
>> </dependency>
>> <dependency>
>> <groupId>org.apache.camel</groupId>
>> + <artifactId>camel-openshift</artifactId>
>> + </dependency>
>> + <dependency>
>> + <groupId>org.apache.camel</groupId>
>> <artifactId>camel-optaplanner</artifactId>
>> </dependency>
>> <dependency>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/apache-camel/src/main/descriptors/common-bin.xml
>> ----------------------------------------------------------------------
>> diff --git a/apache-camel/src/main/descriptors/common-bin.xml
>> b/apache-camel/src/main/descriptors/common-bin.xml
>> index a0b5996..a544060 100644
>> --- a/apache-camel/src/main/descriptors/common-bin.xml
>> +++ b/apache-camel/src/main/descriptors/common-bin.xml
>> @@ -120,6 +120,7 @@
>> <include>org.apache.camel:camel-netty</include>
>> <include>org.apache.camel:camel-netty-http</include>
>> <include>org.apache.camel:camel-ognl</include>
>> + <include>org.apache.camel:camel-openshift</include>
>> <include>org.apache.camel:camel-optaplanner</include>
>> <include>org.apache.camel:camel-paxlogging</include>
>> <include>org.apache.camel:camel-printer</include>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/pom.xml
>> ----------------------------------------------------------------------
>> diff --git a/components/camel-openshift/pom.xml
>> b/components/camel-openshift/pom.xml
>> new file mode 100644
>> index 0000000..a2c897b
>> --- /dev/null
>> +++ b/components/camel-openshift/pom.xml
>> @@ -0,0 +1,67 @@
>> +<?xml version="1.0" encoding="UTF-8"?>
>> +<!--
>> + 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.
>> +-->
>> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="
>> http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
>> http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd
>> ">
>> + <modelVersion>4.0.0</modelVersion>
>> +
>> + <parent>
>> + <groupId>org.apache.camel</groupId>
>> + <artifactId>components</artifactId>
>> + <version>2.14-SNAPSHOT</version>
>> + </parent>
>> +
>> + <artifactId>camel-openshift</artifactId>
>> + <packaging>bundle</packaging>
>> + <name>Camel :: OpenShift</name>
>> + <description>Camel OpenShift support</description>
>> +
>> + <properties>
>> +
>> <camel.osgi.export.pkg>org.apache.camel.component.openshift.*</camel.osgi.export.pkg>
>> +
>> <camel.osgi.export.service>org.apache.camel.spi.ComponentResolver;component=openshift</camel.osgi.export.service>
>> + </properties>
>> +
>> + <dependencies>
>> +
>> + <dependency>
>> + <groupId>org.apache.camel</groupId>
>> + <artifactId>camel-core</artifactId>
>> + </dependency>
>> + <dependency>
>> + <groupId>com.openshift</groupId>
>> + <artifactId>openshift-java-client</artifactId>
>> + <version>${openshift-java-client-version}</version>
>> + </dependency>
>> +
>> + <!-- testing -->
>> + <dependency>
>> + <groupId>org.apache.camel</groupId>
>> + <artifactId>camel-test</artifactId>
>> + <scope>test</scope>
>> + </dependency>
>> + <dependency>
>> + <groupId>junit</groupId>
>> + <artifactId>junit</artifactId>
>> + <scope>test</scope>
>> + </dependency>
>> + <dependency>
>> + <groupId>org.slf4j</groupId>
>> + <artifactId>slf4j-log4j12</artifactId>
>> + <scope>test</scope>
>> + </dependency>
>> + </dependencies>
>> +
>> +</project>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftComponent.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftComponent.java
>> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftComponent.java
>> new file mode 100644
>> index 0000000..2883c5d
>> --- /dev/null
>> +++
>> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftComponent.java
>> @@ -0,0 +1,69 @@
>> +/**
>> + * 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.camel.component.openshift;
>> +
>> +import java.util.Map;
>> +
>> +import org.apache.camel.Endpoint;
>> +import org.apache.camel.impl.UriEndpointComponent;
>> +
>> +public class OpenShiftComponent extends UriEndpointComponent {
>> +
>> + private String username;
>> + private String password;
>> + private String domain;
>> +
>> + public OpenShiftComponent() {
>> + super(OpenShiftEndpoint.class);
>> + }
>> +
>> + protected Endpoint createEndpoint(String uri, String remaining,
>> Map<String, Object> parameters) throws Exception {
>> + String clientId = remaining;
>> +
>> + OpenShiftEndpoint endpoint = new OpenShiftEndpoint(uri, this);
>> + endpoint.setClientId(clientId);
>> + endpoint.setUsername(getUsername());
>> + endpoint.setPassword(getPassword());
>> + endpoint.setDomain(getDomain());
>> + setProperties(endpoint, parameters);
>> + return endpoint;
>> + }
>> +
>> + public String getUsername() {
>> + return username;
>> + }
>> +
>> + public void setUsername(String username) {
>> + this.username = username;
>> + }
>> +
>> + public String getPassword() {
>> + return password;
>> + }
>> +
>> + public void setPassword(String password) {
>> + this.password = password;
>> + }
>> +
>> + public String getDomain() {
>> + return domain;
>> + }
>> +
>> + public void setDomain(String domain) {
>> + this.domain = domain;
>> + }
>> +}
>>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftConstants.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftConstants.java
>> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftConstants.java
>> new file mode 100644
>> index 0000000..dcbabbf
>> --- /dev/null
>> +++
>> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftConstants.java
>> @@ -0,0 +1,26 @@
>> +/**
>> + * 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.camel.component.openshift;
>> +
>> +public final class OpenShiftConstants {
>> +
>> + public static final String OPERATION = "CamelOpenShiftOperation";
>> + public static final String APPLICATION = "CamelOpenShiftApplication";
>> +
>> + private OpenShiftConstants() {
>> + }
>> +}
>>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftEndpoint.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftEndpoint.java
>> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftEndpoint.java
>> new file mode 100644
>> index 0000000..a583cf6
>> --- /dev/null
>> +++
>> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftEndpoint.java
>> @@ -0,0 +1,106 @@
>> +/**
>> + * 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.camel.component.openshift;
>> +
>> +import org.apache.camel.Component;
>> +import org.apache.camel.Consumer;
>> +import org.apache.camel.Processor;
>> +import org.apache.camel.Producer;
>> +import org.apache.camel.impl.DefaultEndpoint;
>> +import org.apache.camel.spi.UriEndpoint;
>> +import org.apache.camel.util.ObjectHelper;
>> +
>> +@UriEndpoint(scheme = "openshift")
>> +public class OpenShiftEndpoint extends DefaultEndpoint {
>> +
>> + private String username;
>> + private String password;
>> + private String clientId;
>> + private String domain;
>> + private OpenShiftOperation operation;
>> + private String application;
>> +
>> + public OpenShiftEndpoint(String endpointUri, Component component) {
>> + super(endpointUri, component);
>> + }
>> +
>> + @Override
>> + public Producer createProducer() throws Exception {
>> + ObjectHelper.notEmpty(clientId, "clientId", this);
>> + ObjectHelper.notEmpty(username, "username", this);
>> + ObjectHelper.notEmpty(password, "password", this);
>> + return new OpenShiftProducer(this);
>> + }
>> +
>> + @Override
>> + public Consumer createConsumer(Processor processor) throws Exception {
>> + throw new UnsupportedOperationException("Consumer not supported
>> on this component");
>> + }
>> +
>> + @Override
>> + public boolean isSingleton() {
>> + return true;
>> + }
>> +
>> + public String getUsername() {
>> + return username;
>> + }
>> +
>> + public void setUsername(String username) {
>> + this.username = username;
>> + }
>> +
>> + public String getPassword() {
>> + return password;
>> + }
>> +
>> + public void setPassword(String password) {
>> + this.password = password;
>> + }
>> +
>> + public String getClientId() {
>> + return clientId;
>> + }
>> +
>> + public void setClientId(String clientId) {
>> + this.clientId = clientId;
>> + }
>> +
>> + public String getDomain() {
>> + return domain;
>> + }
>> +
>> + public void setDomain(String domain) {
>> + this.domain = domain;
>> + }
>> +
>> + public OpenShiftOperation getOperation() {
>> + return operation;
>> + }
>> +
>> + public void setOperation(OpenShiftOperation operation) {
>> + this.operation = operation;
>> + }
>> +
>> + public String getApplication() {
>> + return application;
>> + }
>> +
>> + public void setApplication(String application) {
>> + this.application = application;
>> + }
>> +}
>>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftOperation.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftOperation.java
>> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftOperation.java
>> new file mode 100644
>> index 0000000..2fd7b8d
>> --- /dev/null
>> +++
>> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftOperation.java
>> @@ -0,0 +1,23 @@
>> +/**
>> + * 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.camel.component.openshift;
>> +
>> +public enum OpenShiftOperation {
>> +
>> + list, start, stop, restart, state
>> +
>> +}
>>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftProducer.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftProducer.java
>> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftProducer.java
>> new file mode 100644
>> index 0000000..74e35a2
>> --- /dev/null
>> +++
>> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftProducer.java
>> @@ -0,0 +1,231 @@
>> +/**
>> + * 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.camel.component.openshift;
>> +
>> +import java.text.SimpleDateFormat;
>> +import java.util.Iterator;
>> +import java.util.List;
>> +import java.util.Locale;
>> +
>> +import com.openshift.client.IApplication;
>> +import com.openshift.client.IDomain;
>> +import com.openshift.client.IGear;
>> +import com.openshift.client.IGearGroup;
>> +import com.openshift.client.IOpenShiftConnection;
>> +import com.openshift.client.IUser;
>> +import com.openshift.client.OpenShiftConnectionFactory;
>> +import com.openshift.client.cartridge.IEmbeddedCartridge;
>> +import com.openshift.client.configuration.OpenShiftConfiguration;
>> +import org.apache.camel.CamelExchangeException;
>> +import org.apache.camel.Endpoint;
>> +import org.apache.camel.Exchange;
>> +import org.apache.camel.impl.DefaultProducer;
>> +
>> +public class OpenShiftProducer extends DefaultProducer {
>> +
>> + public static final String TIMESTAMP_FORMAT =
>> "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
>> +
>> + public OpenShiftProducer(Endpoint endpoint) {
>> + super(endpoint);
>> + }
>> +
>> + @Override
>> + public OpenShiftEndpoint getEndpoint() {
>> + return (OpenShiftEndpoint) super.getEndpoint();
>> + }
>> +
>> + @Override
>> + public void process(Exchange exchange) throws Exception {
>> + String openshiftServer = new
>> OpenShiftConfiguration().getLibraServer();
>> +
>> + IOpenShiftConnection connection =
>> + new
>> OpenShiftConnectionFactory().getConnection(getEndpoint().getClientId(),
>> getEndpoint().getUsername(), getEndpoint().getPassword(), openshiftServer);
>> +
>> + IUser user = connection.getUser();
>> +
>> + IDomain domain;
>> + if (getEndpoint().getDomain() != null) {
>> + domain = user.getDomain(getEndpoint().getDomain());
>> + } else {
>> + domain = user.getDefaultDomain();
>> + }
>> + if (domain == null) {
>> + throw new CamelExchangeException("User has no domain with id
>> " + getEndpoint().getDomain(), exchange);
>> + }
>> +
>> + OpenShiftOperation operation =
>> exchange.getIn().getHeader(OpenShiftConstants.OPERATION,
>> getEndpoint().getOperation(), OpenShiftOperation.class);
>> +
>> + switch (operation) {
>> + case list:
>> + doList(exchange, domain);
>> + break;
>> + case start:
>> + doStart(exchange, domain);
>> + break;
>> + case stop:
>> + doStop(exchange, domain);
>> + break;
>> + case restart:
>> + doRestart(exchange, domain);
>> + break;
>> + case state:
>> + doState(exchange, domain);
>> + break;
>> + default:
>> + // and do list by default
>> + doList(exchange, domain);
>> + break;
>> + }
>> + }
>> +
>> + protected void doList(Exchange exchange, IDomain domain) {
>> + StringBuilder sb = new StringBuilder("{\n \"applications\": [");
>> +
>> + boolean first = true;
>> + for (IApplication application : domain.getApplications()) {
>> + if (!first) {
>> + sb.append("\n ],");
>> + } else {
>> + first = false;
>> + }
>> +
>> + String date = new
>> SimpleDateFormat(TIMESTAMP_FORMAT).format(application.getCreationTime());
>> +
>> + // application
>> + sb.append("\n {");
>> + sb.append("\n \"uuid\": \"" + application.getUUID() +
>> "\",");
>> + sb.append("\n \"domain\": \"" +
>> application.getDomain().getId() + "\",");
>> + sb.append("\n \"name\": \"" + application.getName() +
>> "\",");
>> + sb.append("\n \"creationTime\": \"" + date + "\",");
>> + sb.append("\n \"applicationUrl\": \"" +
>> application.getApplicationUrl() + "\",");
>> + sb.append("\n \"gitUrl\": \"" + application.getGitUrl()
>> + "\",");
>> + sb.append("\n \"sshUrl\": \"" + application.getSshUrl()
>> + "\",");
>> +
>> + // catridge
>> + sb.append("\n \"catridge\": {");
>> + sb.append("\n \"name\": \"" +
>> application.getCartridge().getName() + "\",");
>> + sb.append("\n \"displayName\": \"" +
>> application.getCartridge().getDisplayName() + "\",");
>> + sb.append("\n \"description\": \"" +
>> application.getCartridge().getDescription() + "\"");
>> + sb.append("\n },");
>> +
>> + // embedded catridges
>> + List<IEmbeddedCartridge> embeddedCartridges =
>> application.getEmbeddedCartridges();
>> + if (embeddedCartridges != null &&
>> !embeddedCartridges.isEmpty()) {
>> + sb.append("\n \"embeddedCatridges\": [");
>> + for (Iterator<IEmbeddedCartridge> it =
>> embeddedCartridges.iterator(); it.hasNext();) {
>> + IEmbeddedCartridge cartridge = it.next();
>> + sb.append("\n \"catridge\": {");
>> + sb.append("\n \"name\": \"" +
>> cartridge.getName() + "\",");
>> + sb.append("\n \"displayName\": \"" +
>> cartridge.getDisplayName() + "\",");
>> + sb.append("\n \"description\": \"" +
>> cartridge.getDescription() + "\"");
>> + sb.append("\n }");
>> + if (it.hasNext()) {
>> + sb.append(",");
>> + }
>> + }
>> + sb.append("\n ]");
>> + }
>> +
>> + sb.append("\n \"gearProfile\": \"" +
>> application.getGearProfile().getName() + "\",");
>> + sb.append("\n \"gears\": [");
>> + boolean firstGear = true;
>> + for (IGearGroup group : application.getGearGroups()) {
>> + for (IGear gear : group.getGears()) {
>> + if (!firstGear) {
>> + sb.append(",");
>> + } else {
>> + firstGear = false;
>> + }
>> + sb.append("\n {");
>> + sb.append("\n \"id\": \"" + gear.getId() +
>> "\",");
>> + sb.append("\n \"sshUrl\": \"" +
>> gear.getSshUrl() + "\",");
>> + sb.append("\n \"state\": \"" +
>> gear.getState().name().toLowerCase(Locale.ENGLISH) + "\"");
>> + sb.append("\n }");
>> + }
>> + }
>> + sb.append("\n ]");
>> + sb.append("\n }");
>> + }
>> + sb.append("\n ]");
>> + sb.append("\n}");
>> +
>> + exchange.getIn().setBody(sb.toString());
>> + }
>> +
>> + protected void doStart(Exchange exchange, IDomain domain) throws
>> CamelExchangeException {
>> + String name =
>> exchange.getIn().getHeader(OpenShiftConstants.APPLICATION,
>> getEndpoint().getApplication(), String.class);
>> + if (name == null) {
>> + throw new CamelExchangeException("Application not specified",
>> exchange);
>> + }
>> +
>> + IApplication app = domain.getApplicationByName(name);
>> + if (app == null) {
>> + throw new CamelExchangeException("Application with id " +
>> name + " not found.", exchange);
>> + } else {
>> + app.start();
>> + }
>> + }
>> +
>> + protected void doStop(Exchange exchange, IDomain domain) throws
>> CamelExchangeException {
>> + String name =
>> exchange.getIn().getHeader(OpenShiftConstants.APPLICATION,
>> getEndpoint().getApplication(), String.class);
>> + if (name == null) {
>> + throw new CamelExchangeException("Application not specified",
>> exchange);
>> + }
>> +
>> + IApplication app = domain.getApplicationByName(name);
>> + if (app == null) {
>> + throw new CamelExchangeException("Application with id " +
>> name + " not found.", exchange);
>> + } else {
>> + app.stop();
>> + }
>> + }
>> +
>> + protected void doRestart(Exchange exchange, IDomain domain) throws
>> CamelExchangeException {
>> + String name =
>> exchange.getIn().getHeader(OpenShiftConstants.APPLICATION,
>> getEndpoint().getApplication(), String.class);
>> + if (name == null) {
>> + throw new CamelExchangeException("Application not specified",
>> exchange);
>> + }
>> +
>> + IApplication app = domain.getApplicationByName(name);
>> + if (app == null) {
>> + throw new CamelExchangeException("Application with id " +
>> name + " not found.", exchange);
>> + } else {
>> + app.restart();
>> + }
>> + }
>> +
>> + protected void doState(Exchange exchange, IDomain domain) throws
>> CamelExchangeException {
>> + String name =
>> exchange.getIn().getHeader(OpenShiftConstants.APPLICATION,
>> getEndpoint().getApplication(), String.class);
>> + if (name == null) {
>> + throw new CamelExchangeException("Application not specified",
>> exchange);
>> + }
>> +
>> + IApplication app = domain.getApplicationByName(name);
>> + if (app == null) {
>> + throw new CamelExchangeException("Application with id " +
>> name + " not found.", exchange);
>> + } else {
>> + for (IGearGroup group : app.getGearGroups()) {
>> + for (IGear gear : group.getGears()) {
>> + String state =
>> gear.getState().name().toLowerCase(Locale.ENGLISH);
>> + exchange.getIn().setBody(state);
>> + break;
>> + }
>> + }
>> + }
>> + }
>> +
>> +}
>>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/resources/META-INF/LICENSE.txt
>> ----------------------------------------------------------------------
>> diff --git
>> a/components/camel-openshift/src/main/resources/META-INF/LICENSE.txt
>> b/components/camel-openshift/src/main/resources/META-INF/LICENSE.txt
>> new file mode 100644
>> index 0000000..6b0b127
>> --- /dev/null
>> +++ b/components/camel-openshift/src/main/resources/META-INF/LICENSE.txt
>> @@ -0,0 +1,203 @@
>> +
>> + Apache License
>> + Version 2.0, January 2004
>> + http://www.apache.org/licenses/
>> +
>> + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
>> +
>> + 1. Definitions.
>> +
>> + "License" shall mean the terms and conditions for use, reproduction,
>> + and distribution as defined by Sections 1 through 9 of this
>> document.
>> +
>> + "Licensor" shall mean the copyright owner or entity authorized by
>> + the copyright owner that is granting the License.
>> +
>> + "Legal Entity" shall mean the union of the acting entity and all
>> + other entities that control, are controlled by, or are under common
>> + control with that entity. For the purposes of this definition,
>> + "control" means (i) the power, direct or indirect, to cause the
>> + direction or management of such entity, whether by contract or
>> + otherwise, or (ii) ownership of fifty percent (50%) or more of the
>> + outstanding shares, or (iii) beneficial ownership of such entity.
>> +
>> + "You" (or "Your") shall mean an individual or Legal Entity
>> + exercising permissions granted by this License.
>> +
>> + "Source" form shall mean the preferred form for making
>> modifications,
>> + including but not limited to software source code, documentation
>> + source, and configuration files.
>> +
>> + "Object" form shall mean any form resulting from mechanical
>> + transformation or translation of a Source form, including but
>> + not limited to compiled object code, generated documentation,
>> + and conversions to other media types.
>> +
>> + "Work" shall mean the work of authorship, whether in Source or
>> + Object form, made available under the License, as indicated by a
>> + copyright notice that is included in or attached to the work
>> + (an example is provided in the Appendix below).
>> +
>> + "Derivative Works" shall mean any work, whether in Source or Object
>> + form, that is based on (or derived from) the Work and for which the
>> + editorial revisions, annotations, elaborations, or other
>> modifications
>> + represent, as a whole, an original work of authorship. For the
>> purposes
>> + of this License, Derivative Works shall not include works that
>> remain
>> + separable from, or merely link (or bind by name) to the interfaces
>> of,
>> + the Work and Derivative Works thereof.
>> +
>> + "Contribution" shall mean any work of authorship, including
>> + the original version of the Work and any modifications or additions
>> + to that Work or Derivative Works thereof, that is intentionally
>> + submitted to Licensor for inclusion in the Work by the copyright
>> owner
>> + or by an individual or Legal Entity authorized to submit on behalf
>> of
>> + the copyright owner. For the purposes of this definition,
>> "submitted"
>> + means any form of electronic, verbal, or written communication sent
>> + to the Licensor or its representatives, including but not limited to
>> + communication on electronic mailing lists, source code control
>> systems,
>> + and issue tracking systems that are managed by, or on behalf of, the
>> + Licensor for the purpose of discussing and improving the Work, but
>> + excluding communication that is conspicuously marked or otherwise
>> + designated in writing by the copyright owner as "Not a
>> Contribution."
>> +
>> + "Contributor" shall mean Licensor and any individual or Legal Entity
>> + on behalf of whom a Contribution has been received by Licensor and
>> + subsequently incorporated within the Work.
>> +
>> + 2. Grant of Copyright License. Subject to the terms and conditions of
>> + this License, each Contributor hereby grants to You a perpetual,
>> + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
>> + copyright license to reproduce, prepare Derivative Works of,
>> + publicly display, publicly perform, sublicense, and distribute the
>> + Work and such Derivative Works in Source or Object form.
>> +
>> + 3. Grant of Patent License. Subject to the terms and conditions of
>> + this License, each Contributor hereby grants to You a perpetual,
>> + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
>> + (except as stated in this section) patent license to make, have
>> made,
>> + use, offer to sell, sell, import, and otherwise transfer the Work,
>> + where such license applies only to those patent claims licensable
>> + by such Contributor that are necessarily infringed by their
>> + Contribution(s) alone or by combination of their Contribution(s)
>> + with the Work to which such Contribution(s) was submitted. If You
>> + institute patent litigation against any entity (including a
>> + cross-claim or counterclaim in a lawsuit) alleging that the Work
>> + or a Contribution incorporated within the Work constitutes direct
>> + or contributory patent infringement, then any patent licenses
>> + granted to You under this License for that Work shall terminate
>> + as of the date such litigation is filed.
>> +
>> + 4. Redistribution. You may reproduce and distribute copies of the
>> + Work or Derivative Works thereof in any medium, with or without
>> + modifications, and in Source or Object form, provided that You
>> + meet the following conditions:
>> +
>> + (a) You must give any other recipients of the Work or
>> + Derivative Works a copy of this License; and
>> +
>> + (b) You must cause any modified files to carry prominent notices
>> + stating that You changed the files; and
>> +
>> + (c) You must retain, in the Source form of any Derivative Works
>> + that You distribute, all copyright, patent, trademark, and
>> + attribution notices from the Source form of the Work,
>> + excluding those notices that do not pertain to any part of
>> + the Derivative Works; and
>> +
>> + (d) If the Work includes a "NOTICE" text file as part of its
>> + distribution, then any Derivative Works that You distribute must
>> + include a readable copy of the attribution notices contained
>> + within such NOTICE file, excluding those notices that do not
>> + pertain to any part of the Derivative Works, in at least one
>> + of the following places: within a NOTICE text file distributed
>> + as part of the Derivative Works; within the Source form or
>> + documentation, if provided along with the Derivative Works; or,
>> + within a display generated by the Derivative Works, if and
>> + wherever such third-party notices normally appear. The contents
>> + of the NOTICE file are for informational purposes only and
>> + do not modify the License. You may add Your own attribution
>> + notices within Derivative Works that You distribute, alongside
>> + or as an addendum to the NOTICE text from the Work, provided
>> + that such additional attribution notices cannot be construed
>> + as modifying the License.
>> +
>> + You may add Your own copyright statement to Your modifications and
>> + may provide additional or different license terms and conditions
>> + for use, reproduction, or distribution of Your modifications, or
>> + for any such Derivative Works as a whole, provided Your use,
>> + reproduction, and distribution of the Work otherwise complies with
>> + the conditions stated in this License.
>> +
>> + 5. Submission of Contributions. Unless You explicitly state otherwise,
>> + any Contribution intentionally submitted for inclusion in the Work
>> + by You to the Licensor shall be under the terms and conditions of
>> + this License, without any additional terms or conditions.
>> + Notwithstanding the above, nothing herein shall supersede or modify
>> + the terms of any separate license agreement you may have executed
>> + with Licensor regarding such Contributions.
>> +
>> + 6. Trademarks. This License does not grant permission to use the trade
>> + names, trademarks, service marks, or product names of the Licensor,
>> + except as required for reasonable and customary use in describing
>> the
>> + origin of the Work and reproducing the content of the NOTICE file.
>> +
>> + 7. Disclaimer of Warranty. Unless required by applicable law or
>> + agreed to in writing, Licensor provides the Work (and each
>> + Contributor provides its Contributions) on an "AS IS" BASIS,
>> + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> + implied, including, without limitation, any warranties or conditions
>> + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
>> + PARTICULAR PURPOSE. You are solely responsible for determining the
>> + appropriateness of using or redistributing the Work and assume any
>> + risks associated with Your exercise of permissions under this
>> License.
>> +
>> + 8. Limitation of Liability. In no event and under no legal theory,
>> + whether in tort (including negligence), contract, or otherwise,
>> + unless required by applicable law (such as deliberate and grossly
>> + negligent acts) or agreed to in writing, shall any Contributor be
>> + liable to You for damages, including any direct, indirect, special,
>> + incidental, or consequential damages of any character arising as a
>> + result of this License or out of the use or inability to use the
>> + Work (including but not limited to damages for loss of goodwill,
>> + work stoppage, computer failure or malfunction, or any and all
>> + other commercial damages or losses), even if such Contributor
>> + has been advised of the possibility of such damages.
>> +
>> + 9. Accepting Warranty or Additional Liability. While redistributing
>> + the Work or Derivative Works thereof, You may choose to offer,
>> + and charge a fee for, acceptance of support, warranty, indemnity,
>> + or other liability obligations and/or rights consistent with this
>> + License. However, in accepting such obligations, You may act only
>> + on Your own behalf and on Your sole responsibility, not on behalf
>> + of any other Contributor, and only if You agree to indemnify,
>> + defend, and hold each Contributor harmless for any liability
>> + incurred by, or claims asserted against, such Contributor by reason
>> + of your accepting any such warranty or additional liability.
>> +
>> + END OF TERMS AND CONDITIONS
>> +
>> + APPENDIX: How to apply the Apache License to your work.
>> +
>> + To apply the Apache License to your work, attach the following
>> + boilerplate notice, with the fields enclosed by brackets "[]"
>> + replaced with your own identifying information. (Don't include
>> + the brackets!) The text should be enclosed in the appropriate
>> + comment syntax for the file format. We also recommend that a
>> + file or class name and description of purpose be included on the
>> + same "printed page" as the copyright notice for easier
>> + identification within third-party archives.
>> +
>> + Copyright [yyyy] [name of copyright owner]
>> +
>> + Licensed 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.
>> +
>>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/resources/META-INF/NOTICE.txt
>> ----------------------------------------------------------------------
>> diff --git
>> a/components/camel-openshift/src/main/resources/META-INF/NOTICE.txt
>> b/components/camel-openshift/src/main/resources/META-INF/NOTICE.txt
>> new file mode 100644
>> index 0000000..2e215bf
>> --- /dev/null
>> +++ b/components/camel-openshift/src/main/resources/META-INF/NOTICE.txt
>> @@ -0,0 +1,11 @@
>> +
>> =========================================================================
>> + == NOTICE file corresponding to the section 4 d of
>> ==
>> + == the Apache License, Version 2.0,
>> ==
>> + == in this case for the Apache Camel distribution.
>> ==
>> +
>> =========================================================================
>> +
>> + This product includes software developed by
>> + The Apache Software Foundation (http://www.apache.org/).
>> +
>> + Please read the different LICENSE files present in the licenses
>> directory of
>> + this distribution.
>>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/resources/META-INF/services/org/apache/camel/component/openshift
>> ----------------------------------------------------------------------
>> diff --git
>> a/components/camel-openshift/src/main/resources/META-INF/services/org/apache/camel/component/openshift
>> b/components/camel-openshift/src/main/resources/META-INF/services/org/apache/camel/component/openshift
>> new file mode 100644
>> index 0000000..9051897
>> --- /dev/null
>> +++
>> b/components/camel-openshift/src/main/resources/META-INF/services/org/apache/camel/component/openshift
>> @@ -0,0 +1,18 @@
>> +#
>> +# 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.
>> +#
>> +
>> +class=org.apache.camel.component.openshift.OpenShiftComponent
>>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftListApplicationsTest.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftListApplicationsTest.java
>> b/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftListApplicationsTest.java
>> new file mode 100644
>> index 0000000..a8b4e2c
>> --- /dev/null
>> +++
>> b/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftListApplicationsTest.java
>> @@ -0,0 +1,60 @@
>> +/**
>> + * 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.camel.component.openshift;
>> +
>> +import org.apache.camel.builder.RouteBuilder;
>> +import org.apache.camel.test.junit4.CamelTestSupport;
>> +import org.junit.Test;
>> +
>> +public class OpenShiftListApplicationsTest extends CamelTestSupport {
>> +
>> + private String username;
>> + private String password;
>> +
>> + @Override
>> + public void setUp() throws Exception {
>> + // INSERT credentials here
>> + username = null;
>> + password = null;
>> + super.setUp();
>> + }
>> +
>> + @Test
>> + public void testListApplications() throws Exception {
>> + if (username == null) {
>> + return;
>> + }
>> +
>> + getMockEndpoint("mock:result").expectedMessageCount(1);
>> +
>> + template.sendBody("direct:start", "Hello World");
>> +
>> + assertMockEndpointsSatisfied();
>> + }
>> +
>> + @Override
>> + protected RouteBuilder createRouteBuilder() throws Exception {
>> + return new RouteBuilder() {
>> + @Override
>> + public void configure() throws Exception {
>> + from("direct:start")
>> +
>> .toF("openshift:myApp?operation=list&username=%s&password=%s", username,
>> password)
>> + .to("mock:result");
>> + }
>> + };
>> + }
>> +}
>>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftStateTest.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftStateTest.java
>> b/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftStateTest.java
>> new file mode 100644
>> index 0000000..c57992e
>> --- /dev/null
>> +++
>> b/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftStateTest.java
>> @@ -0,0 +1,62 @@
>> +/**
>> + * 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.camel.component.openshift;
>> +
>> +import org.apache.camel.builder.RouteBuilder;
>> +import org.apache.camel.test.junit4.CamelTestSupport;
>> +import org.junit.Test;
>> +
>> +public class OpenShiftStateTest extends CamelTestSupport {
>> +
>> + private String username;
>> + private String password;
>> + private String application;
>> +
>> + @Override
>> + public void setUp() throws Exception {
>> + // INSERT credentials here
>> + username = null;
>> + password = null;
>> + application = "myapp";
>> + super.setUp();
>> + }
>> +
>> + @Test
>> + public void testState() throws Exception {
>> + if (username == null) {
>> + return;
>> + }
>> +
>> + getMockEndpoint("mock:result").expectedBodiesReceived("started");
>> +
>> + template.sendBody("direct:start", "Hello World");
>> +
>> + assertMockEndpointsSatisfied();
>> + }
>> +
>> + @Override
>> + protected RouteBuilder createRouteBuilder() throws Exception {
>> + return new RouteBuilder() {
>> + @Override
>> + public void configure() throws Exception {
>> + from("direct:start")
>> +
>> .toF("openshift:myApp?operation=state&application=%s&username=%s&password=%s",
>> application, username, password)
>> + .to("mock:result");
>> + }
>> + };
>> + }
>> +}
>>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/test/resources/log4j.properties
>> ----------------------------------------------------------------------
>> diff --git
>> a/components/camel-openshift/src/test/resources/log4j.properties
>> b/components/camel-openshift/src/test/resources/log4j.properties
>> new file mode 100644
>> index 0000000..7127791
>> --- /dev/null
>> +++ b/components/camel-openshift/src/test/resources/log4j.properties
>> @@ -0,0 +1,41 @@
>> +##
>> ------------------------------------------------------------------------
>> +## 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.
>> +##
>> ------------------------------------------------------------------------
>> +
>> +#
>> +# The logging properties used for testing.
>> +#
>> +log4j.rootLogger=INFO, file
>> +
>> +# uncomment the following to enable camel debugging
>> +#log4j.logger.org.apache.camel.component.openshift=TRACE
>> +
>> +# CONSOLE appender not used by default
>> +log4j.appender.out=org.apache.log4j.ConsoleAppender
>> +log4j.appender.out.layout=org.apache.log4j.PatternLayout
>> +log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p
>> %-30.30c{1} - %m%n
>> +# MDC
>> +#log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p
>> %-30.30c{1} - %-10.10X{camel.breadcrumbId} - %-10.10X{camelexchangeId} -
>> %-10.10X{camel.correlationId} - %-10.10X{camel.routeId} - %m%n
>> +
>> +# File appender
>> +log4j.appender.file=org.apache.log4j.FileAppender
>> +log4j.appender.file.layout=org.apache.log4j.PatternLayout
>> +log4j.appender.file.file=target/camel-openshift-test.log
>> +log4j.appender.file.append=true
>> +log4j.appender.file.layout.ConversionPattern=%d [%-15.15t] %-5p
>> %-30.30c{1} - %m%n
>> +# MDC
>> +#log4j.appender.file.layout.ConversionPattern=%d [%-15.15t] %-5p
>> %-30.30c{1} - %-10.10X{camel.breadcrumbId} - %-10.10X{camel.exchangeId} -
>> %-10.10X{camel.correlationId} - %-10.10X{camel.routeId} - %m%n
>> +
>>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/pom.xml
>> ----------------------------------------------------------------------
>> diff --git a/components/pom.xml b/components/pom.xml
>> index 9e5292f..942218f 100644
>> --- a/components/pom.xml
>> +++ b/components/pom.xml
>> @@ -141,6 +141,7 @@
>> <module>camel-netty</module>
>> <module>camel-netty-http</module>
>> <module>camel-ognl</module>
>> + <module>camel-openshift</module>
>> <module>camel-optaplanner</module>
>> <module>camel-paxlogging</module>
>> <module>camel-printer</module>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/parent/pom.xml
>> ----------------------------------------------------------------------
>> diff --git a/parent/pom.xml b/parent/pom.xml
>> index 8ff5f30..01c3689 100644
>> --- a/parent/pom.xml
>> +++ b/parent/pom.xml
>> @@ -313,6 +313,7 @@
>> <openejb-version>4.5.2</openejb-version>
>> <openjpa-version>2.3.0</openjpa-version>
>> <opensaml-version>2.5.1_2</opensaml-version>
>> +
>> <openshift-java-client-version>2.5.0.Final</openshift-java-client-version>
>> <optaplanner-version>6.0.1.Final</optaplanner-version>
>> <oro-bundle-version>2.0.8_6</oro-bundle-version>
>> <oscache-bundle-version>2.4_5</oscache-bundle-version>
>> @@ -998,6 +999,11 @@
>> </dependency>
>> <dependency>
>> <groupId>org.apache.camel</groupId>
>> + <artifactId>camel-openshift</artifactId>
>> + <version>${project.version}</version>
>> + </dependency>
>> + <dependency>
>> + <groupId>org.apache.camel</groupId>
>> <artifactId>camel-optaplanner</artifactId>
>> <version>${project.version}</version>
>> </dependency>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/platforms/karaf/features/src/main/resources/features.xml
>> ----------------------------------------------------------------------
>> diff --git a/platforms/karaf/features/src/main/resources/features.xml
>> b/platforms/karaf/features/src/main/resources/features.xml
>> index 415943d..727f1dc 100644
>> --- a/platforms/karaf/features/src/main/resources/features.xml
>> +++ b/platforms/karaf/features/src/main/resources/features.xml
>> @@ -829,6 +829,11 @@
>> <bundle
>> dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.javassist/${javassist-bundle-version}</bundle>
>> <bundle>mvn:org.apache.camel/camel-ognl/${project.version}</bundle>
>> </feature>
>> + <feature name='camel-openshift' version='${project.version}'
>> resolver='(obr)' start-level='50'>
>> + <feature version='${project.version}'>camel-core</feature>
>> + <bundle
>> dependency='true'>wrap:mvn:com.openshift/openshift-java-client/${openshift-java-client-version}</bundle>
>> +
>> <bundle>mvn:org.apache.camel/camel-openshift/${project.version}</bundle>
>> + </feature>
>> <feature name='camel-optaplanner' version='${project.version}'
>> resolver='(obr)' start-level='50'>
>> <details>The camel-optaplanner feature can only run on a SUN JVM. You
>> need to add the package com.sun.tools.xjc to the java platform packages in
>> the etc/jre.properties file.</details>
>> <feature version='${project.version}'>camel-core</feature>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelOpenshiftTest.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelOpenshiftTest.java
>> b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelOpenshiftTest.java
>> new file mode 100644
>> index 0000000..e9f73eb
>> --- /dev/null
>> +++
>> b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelOpenshiftTest.java
>> @@ -0,0 +1,40 @@
>> +/**
>> + * 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.camel.itest.karaf;
>> +
>> +import org.junit.Test;
>> +import org.junit.runner.RunWith;
>> +import org.ops4j.pax.exam.Option;
>> +import org.ops4j.pax.exam.junit.Configuration;
>> +import org.ops4j.pax.exam.junit.JUnit4TestRunner;
>> +
>> +@RunWith(JUnit4TestRunner.class)
>> +public class CamelOpenshiftTest extends AbstractFeatureTest {
>> +
>> + public static final String COMPONENT =
>> extractName(CamelOpenshiftTest.class);
>> +
>> + @Test
>> + public void test() throws Exception {
>> + testComponent(COMPONENT);
>> + }
>> +
>> + @Configuration
>> + public static Option[] configure() {
>> + return configure(COMPONENT);
>> + }
>> +
>> +}
>> \ No newline at end of file
>>
>>
--
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cibsen@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen
hawtio: http://hawt.io/
fabric8: http://fabric8.io/
Re: git commit: CAMEL-7386: camel-openshift component.
Posted by Christian Müller <ch...@gmail.com>.
Please also update the NOTICE.txt file as required by [1], because the
openshift-java-client is using the EPL-1.0 license.
[1] https://www.apache.org/legal/3party.html#category-b
[2]
http://search.maven.org/#artifactdetails|com.openshift|openshift-java-client|2.5.0.Final|jar
Best,
Christian
-----------------
Software Integration Specialist
Apache Member
V.P. Apache Camel | Apache Camel PMC Member | Apache Camel committer
Apache Incubator PMC Member
https://www.linkedin.com/pub/christian-mueller/11/551/642
On Tue, Apr 22, 2014 at 6:20 PM, <da...@apache.org> wrote:
> Repository: camel
> Updated Branches:
> refs/heads/master c1214efb7 -> 189980693
>
>
> CAMEL-7386: camel-openshift component.
>
>
> Project: http://git-wip-us.apache.org/repos/asf/camel/repo
> Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/18998069
> Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/18998069
> Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/18998069
>
> Branch: refs/heads/master
> Commit: 1899806936c463868d1b843c0240772073de7198
> Parents: c1214ef
> Author: Claus Ibsen <da...@apache.org>
> Authored: Tue Apr 22 18:18:49 2014 +0200
> Committer: Claus Ibsen <da...@apache.org>
> Committed: Tue Apr 22 18:19:31 2014 +0200
>
> ----------------------------------------------------------------------
> apache-camel/pom.xml | 4 +
> .../src/main/descriptors/common-bin.xml | 1 +
> components/camel-openshift/pom.xml | 67 ++++++
> .../component/openshift/OpenShiftComponent.java | 69 ++++++
> .../component/openshift/OpenShiftConstants.java | 26 +++
> .../component/openshift/OpenShiftEndpoint.java | 106 +++++++++
> .../component/openshift/OpenShiftOperation.java | 23 ++
> .../component/openshift/OpenShiftProducer.java | 231 +++++++++++++++++++
> .../src/main/resources/META-INF/LICENSE.txt | 203 ++++++++++++++++
> .../src/main/resources/META-INF/NOTICE.txt | 11 +
> .../org/apache/camel/component/openshift | 18 ++
> .../OpenShiftListApplicationsTest.java | 60 +++++
> .../component/openshift/OpenShiftStateTest.java | 62 +++++
> .../src/test/resources/log4j.properties | 41 ++++
> components/pom.xml | 1 +
> parent/pom.xml | 6 +
> .../features/src/main/resources/features.xml | 5 +
> .../camel/itest/karaf/CamelOpenshiftTest.java | 40 ++++
> 18 files changed, 974 insertions(+)
> ----------------------------------------------------------------------
>
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/apache-camel/pom.xml
> ----------------------------------------------------------------------
> diff --git a/apache-camel/pom.xml b/apache-camel/pom.xml
> index dce9c39..ce59468 100644
> --- a/apache-camel/pom.xml
> +++ b/apache-camel/pom.xml
> @@ -436,6 +436,10 @@
> </dependency>
> <dependency>
> <groupId>org.apache.camel</groupId>
> + <artifactId>camel-openshift</artifactId>
> + </dependency>
> + <dependency>
> + <groupId>org.apache.camel</groupId>
> <artifactId>camel-optaplanner</artifactId>
> </dependency>
> <dependency>
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/apache-camel/src/main/descriptors/common-bin.xml
> ----------------------------------------------------------------------
> diff --git a/apache-camel/src/main/descriptors/common-bin.xml
> b/apache-camel/src/main/descriptors/common-bin.xml
> index a0b5996..a544060 100644
> --- a/apache-camel/src/main/descriptors/common-bin.xml
> +++ b/apache-camel/src/main/descriptors/common-bin.xml
> @@ -120,6 +120,7 @@
> <include>org.apache.camel:camel-netty</include>
> <include>org.apache.camel:camel-netty-http</include>
> <include>org.apache.camel:camel-ognl</include>
> + <include>org.apache.camel:camel-openshift</include>
> <include>org.apache.camel:camel-optaplanner</include>
> <include>org.apache.camel:camel-paxlogging</include>
> <include>org.apache.camel:camel-printer</include>
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/pom.xml
> ----------------------------------------------------------------------
> diff --git a/components/camel-openshift/pom.xml
> b/components/camel-openshift/pom.xml
> new file mode 100644
> index 0000000..a2c897b
> --- /dev/null
> +++ b/components/camel-openshift/pom.xml
> @@ -0,0 +1,67 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +<!--
> + 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.
> +-->
> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="
> http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
> http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd
> ">
> + <modelVersion>4.0.0</modelVersion>
> +
> + <parent>
> + <groupId>org.apache.camel</groupId>
> + <artifactId>components</artifactId>
> + <version>2.14-SNAPSHOT</version>
> + </parent>
> +
> + <artifactId>camel-openshift</artifactId>
> + <packaging>bundle</packaging>
> + <name>Camel :: OpenShift</name>
> + <description>Camel OpenShift support</description>
> +
> + <properties>
> +
> <camel.osgi.export.pkg>org.apache.camel.component.openshift.*</camel.osgi.export.pkg>
> +
> <camel.osgi.export.service>org.apache.camel.spi.ComponentResolver;component=openshift</camel.osgi.export.service>
> + </properties>
> +
> + <dependencies>
> +
> + <dependency>
> + <groupId>org.apache.camel</groupId>
> + <artifactId>camel-core</artifactId>
> + </dependency>
> + <dependency>
> + <groupId>com.openshift</groupId>
> + <artifactId>openshift-java-client</artifactId>
> + <version>${openshift-java-client-version}</version>
> + </dependency>
> +
> + <!-- testing -->
> + <dependency>
> + <groupId>org.apache.camel</groupId>
> + <artifactId>camel-test</artifactId>
> + <scope>test</scope>
> + </dependency>
> + <dependency>
> + <groupId>junit</groupId>
> + <artifactId>junit</artifactId>
> + <scope>test</scope>
> + </dependency>
> + <dependency>
> + <groupId>org.slf4j</groupId>
> + <artifactId>slf4j-log4j12</artifactId>
> + <scope>test</scope>
> + </dependency>
> + </dependencies>
> +
> +</project>
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftComponent.java
> ----------------------------------------------------------------------
> diff --git
> a/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftComponent.java
> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftComponent.java
> new file mode 100644
> index 0000000..2883c5d
> --- /dev/null
> +++
> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftComponent.java
> @@ -0,0 +1,69 @@
> +/**
> + * 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.camel.component.openshift;
> +
> +import java.util.Map;
> +
> +import org.apache.camel.Endpoint;
> +import org.apache.camel.impl.UriEndpointComponent;
> +
> +public class OpenShiftComponent extends UriEndpointComponent {
> +
> + private String username;
> + private String password;
> + private String domain;
> +
> + public OpenShiftComponent() {
> + super(OpenShiftEndpoint.class);
> + }
> +
> + protected Endpoint createEndpoint(String uri, String remaining,
> Map<String, Object> parameters) throws Exception {
> + String clientId = remaining;
> +
> + OpenShiftEndpoint endpoint = new OpenShiftEndpoint(uri, this);
> + endpoint.setClientId(clientId);
> + endpoint.setUsername(getUsername());
> + endpoint.setPassword(getPassword());
> + endpoint.setDomain(getDomain());
> + setProperties(endpoint, parameters);
> + return endpoint;
> + }
> +
> + public String getUsername() {
> + return username;
> + }
> +
> + public void setUsername(String username) {
> + this.username = username;
> + }
> +
> + public String getPassword() {
> + return password;
> + }
> +
> + public void setPassword(String password) {
> + this.password = password;
> + }
> +
> + public String getDomain() {
> + return domain;
> + }
> +
> + public void setDomain(String domain) {
> + this.domain = domain;
> + }
> +}
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftConstants.java
> ----------------------------------------------------------------------
> diff --git
> a/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftConstants.java
> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftConstants.java
> new file mode 100644
> index 0000000..dcbabbf
> --- /dev/null
> +++
> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftConstants.java
> @@ -0,0 +1,26 @@
> +/**
> + * 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.camel.component.openshift;
> +
> +public final class OpenShiftConstants {
> +
> + public static final String OPERATION = "CamelOpenShiftOperation";
> + public static final String APPLICATION = "CamelOpenShiftApplication";
> +
> + private OpenShiftConstants() {
> + }
> +}
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftEndpoint.java
> ----------------------------------------------------------------------
> diff --git
> a/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftEndpoint.java
> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftEndpoint.java
> new file mode 100644
> index 0000000..a583cf6
> --- /dev/null
> +++
> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftEndpoint.java
> @@ -0,0 +1,106 @@
> +/**
> + * 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.camel.component.openshift;
> +
> +import org.apache.camel.Component;
> +import org.apache.camel.Consumer;
> +import org.apache.camel.Processor;
> +import org.apache.camel.Producer;
> +import org.apache.camel.impl.DefaultEndpoint;
> +import org.apache.camel.spi.UriEndpoint;
> +import org.apache.camel.util.ObjectHelper;
> +
> +@UriEndpoint(scheme = "openshift")
> +public class OpenShiftEndpoint extends DefaultEndpoint {
> +
> + private String username;
> + private String password;
> + private String clientId;
> + private String domain;
> + private OpenShiftOperation operation;
> + private String application;
> +
> + public OpenShiftEndpoint(String endpointUri, Component component) {
> + super(endpointUri, component);
> + }
> +
> + @Override
> + public Producer createProducer() throws Exception {
> + ObjectHelper.notEmpty(clientId, "clientId", this);
> + ObjectHelper.notEmpty(username, "username", this);
> + ObjectHelper.notEmpty(password, "password", this);
> + return new OpenShiftProducer(this);
> + }
> +
> + @Override
> + public Consumer createConsumer(Processor processor) throws Exception {
> + throw new UnsupportedOperationException("Consumer not supported
> on this component");
> + }
> +
> + @Override
> + public boolean isSingleton() {
> + return true;
> + }
> +
> + public String getUsername() {
> + return username;
> + }
> +
> + public void setUsername(String username) {
> + this.username = username;
> + }
> +
> + public String getPassword() {
> + return password;
> + }
> +
> + public void setPassword(String password) {
> + this.password = password;
> + }
> +
> + public String getClientId() {
> + return clientId;
> + }
> +
> + public void setClientId(String clientId) {
> + this.clientId = clientId;
> + }
> +
> + public String getDomain() {
> + return domain;
> + }
> +
> + public void setDomain(String domain) {
> + this.domain = domain;
> + }
> +
> + public OpenShiftOperation getOperation() {
> + return operation;
> + }
> +
> + public void setOperation(OpenShiftOperation operation) {
> + this.operation = operation;
> + }
> +
> + public String getApplication() {
> + return application;
> + }
> +
> + public void setApplication(String application) {
> + this.application = application;
> + }
> +}
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftOperation.java
> ----------------------------------------------------------------------
> diff --git
> a/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftOperation.java
> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftOperation.java
> new file mode 100644
> index 0000000..2fd7b8d
> --- /dev/null
> +++
> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftOperation.java
> @@ -0,0 +1,23 @@
> +/**
> + * 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.camel.component.openshift;
> +
> +public enum OpenShiftOperation {
> +
> + list, start, stop, restart, state
> +
> +}
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftProducer.java
> ----------------------------------------------------------------------
> diff --git
> a/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftProducer.java
> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftProducer.java
> new file mode 100644
> index 0000000..74e35a2
> --- /dev/null
> +++
> b/components/camel-openshift/src/main/java/org/apache/camel/component/openshift/OpenShiftProducer.java
> @@ -0,0 +1,231 @@
> +/**
> + * 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.camel.component.openshift;
> +
> +import java.text.SimpleDateFormat;
> +import java.util.Iterator;
> +import java.util.List;
> +import java.util.Locale;
> +
> +import com.openshift.client.IApplication;
> +import com.openshift.client.IDomain;
> +import com.openshift.client.IGear;
> +import com.openshift.client.IGearGroup;
> +import com.openshift.client.IOpenShiftConnection;
> +import com.openshift.client.IUser;
> +import com.openshift.client.OpenShiftConnectionFactory;
> +import com.openshift.client.cartridge.IEmbeddedCartridge;
> +import com.openshift.client.configuration.OpenShiftConfiguration;
> +import org.apache.camel.CamelExchangeException;
> +import org.apache.camel.Endpoint;
> +import org.apache.camel.Exchange;
> +import org.apache.camel.impl.DefaultProducer;
> +
> +public class OpenShiftProducer extends DefaultProducer {
> +
> + public static final String TIMESTAMP_FORMAT =
> "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
> +
> + public OpenShiftProducer(Endpoint endpoint) {
> + super(endpoint);
> + }
> +
> + @Override
> + public OpenShiftEndpoint getEndpoint() {
> + return (OpenShiftEndpoint) super.getEndpoint();
> + }
> +
> + @Override
> + public void process(Exchange exchange) throws Exception {
> + String openshiftServer = new
> OpenShiftConfiguration().getLibraServer();
> +
> + IOpenShiftConnection connection =
> + new
> OpenShiftConnectionFactory().getConnection(getEndpoint().getClientId(),
> getEndpoint().getUsername(), getEndpoint().getPassword(), openshiftServer);
> +
> + IUser user = connection.getUser();
> +
> + IDomain domain;
> + if (getEndpoint().getDomain() != null) {
> + domain = user.getDomain(getEndpoint().getDomain());
> + } else {
> + domain = user.getDefaultDomain();
> + }
> + if (domain == null) {
> + throw new CamelExchangeException("User has no domain with id
> " + getEndpoint().getDomain(), exchange);
> + }
> +
> + OpenShiftOperation operation =
> exchange.getIn().getHeader(OpenShiftConstants.OPERATION,
> getEndpoint().getOperation(), OpenShiftOperation.class);
> +
> + switch (operation) {
> + case list:
> + doList(exchange, domain);
> + break;
> + case start:
> + doStart(exchange, domain);
> + break;
> + case stop:
> + doStop(exchange, domain);
> + break;
> + case restart:
> + doRestart(exchange, domain);
> + break;
> + case state:
> + doState(exchange, domain);
> + break;
> + default:
> + // and do list by default
> + doList(exchange, domain);
> + break;
> + }
> + }
> +
> + protected void doList(Exchange exchange, IDomain domain) {
> + StringBuilder sb = new StringBuilder("{\n \"applications\": [");
> +
> + boolean first = true;
> + for (IApplication application : domain.getApplications()) {
> + if (!first) {
> + sb.append("\n ],");
> + } else {
> + first = false;
> + }
> +
> + String date = new
> SimpleDateFormat(TIMESTAMP_FORMAT).format(application.getCreationTime());
> +
> + // application
> + sb.append("\n {");
> + sb.append("\n \"uuid\": \"" + application.getUUID() +
> "\",");
> + sb.append("\n \"domain\": \"" +
> application.getDomain().getId() + "\",");
> + sb.append("\n \"name\": \"" + application.getName() +
> "\",");
> + sb.append("\n \"creationTime\": \"" + date + "\",");
> + sb.append("\n \"applicationUrl\": \"" +
> application.getApplicationUrl() + "\",");
> + sb.append("\n \"gitUrl\": \"" + application.getGitUrl()
> + "\",");
> + sb.append("\n \"sshUrl\": \"" + application.getSshUrl()
> + "\",");
> +
> + // catridge
> + sb.append("\n \"catridge\": {");
> + sb.append("\n \"name\": \"" +
> application.getCartridge().getName() + "\",");
> + sb.append("\n \"displayName\": \"" +
> application.getCartridge().getDisplayName() + "\",");
> + sb.append("\n \"description\": \"" +
> application.getCartridge().getDescription() + "\"");
> + sb.append("\n },");
> +
> + // embedded catridges
> + List<IEmbeddedCartridge> embeddedCartridges =
> application.getEmbeddedCartridges();
> + if (embeddedCartridges != null &&
> !embeddedCartridges.isEmpty()) {
> + sb.append("\n \"embeddedCatridges\": [");
> + for (Iterator<IEmbeddedCartridge> it =
> embeddedCartridges.iterator(); it.hasNext();) {
> + IEmbeddedCartridge cartridge = it.next();
> + sb.append("\n \"catridge\": {");
> + sb.append("\n \"name\": \"" +
> cartridge.getName() + "\",");
> + sb.append("\n \"displayName\": \"" +
> cartridge.getDisplayName() + "\",");
> + sb.append("\n \"description\": \"" +
> cartridge.getDescription() + "\"");
> + sb.append("\n }");
> + if (it.hasNext()) {
> + sb.append(",");
> + }
> + }
> + sb.append("\n ]");
> + }
> +
> + sb.append("\n \"gearProfile\": \"" +
> application.getGearProfile().getName() + "\",");
> + sb.append("\n \"gears\": [");
> + boolean firstGear = true;
> + for (IGearGroup group : application.getGearGroups()) {
> + for (IGear gear : group.getGears()) {
> + if (!firstGear) {
> + sb.append(",");
> + } else {
> + firstGear = false;
> + }
> + sb.append("\n {");
> + sb.append("\n \"id\": \"" + gear.getId() +
> "\",");
> + sb.append("\n \"sshUrl\": \"" +
> gear.getSshUrl() + "\",");
> + sb.append("\n \"state\": \"" +
> gear.getState().name().toLowerCase(Locale.ENGLISH) + "\"");
> + sb.append("\n }");
> + }
> + }
> + sb.append("\n ]");
> + sb.append("\n }");
> + }
> + sb.append("\n ]");
> + sb.append("\n}");
> +
> + exchange.getIn().setBody(sb.toString());
> + }
> +
> + protected void doStart(Exchange exchange, IDomain domain) throws
> CamelExchangeException {
> + String name =
> exchange.getIn().getHeader(OpenShiftConstants.APPLICATION,
> getEndpoint().getApplication(), String.class);
> + if (name == null) {
> + throw new CamelExchangeException("Application not specified",
> exchange);
> + }
> +
> + IApplication app = domain.getApplicationByName(name);
> + if (app == null) {
> + throw new CamelExchangeException("Application with id " +
> name + " not found.", exchange);
> + } else {
> + app.start();
> + }
> + }
> +
> + protected void doStop(Exchange exchange, IDomain domain) throws
> CamelExchangeException {
> + String name =
> exchange.getIn().getHeader(OpenShiftConstants.APPLICATION,
> getEndpoint().getApplication(), String.class);
> + if (name == null) {
> + throw new CamelExchangeException("Application not specified",
> exchange);
> + }
> +
> + IApplication app = domain.getApplicationByName(name);
> + if (app == null) {
> + throw new CamelExchangeException("Application with id " +
> name + " not found.", exchange);
> + } else {
> + app.stop();
> + }
> + }
> +
> + protected void doRestart(Exchange exchange, IDomain domain) throws
> CamelExchangeException {
> + String name =
> exchange.getIn().getHeader(OpenShiftConstants.APPLICATION,
> getEndpoint().getApplication(), String.class);
> + if (name == null) {
> + throw new CamelExchangeException("Application not specified",
> exchange);
> + }
> +
> + IApplication app = domain.getApplicationByName(name);
> + if (app == null) {
> + throw new CamelExchangeException("Application with id " +
> name + " not found.", exchange);
> + } else {
> + app.restart();
> + }
> + }
> +
> + protected void doState(Exchange exchange, IDomain domain) throws
> CamelExchangeException {
> + String name =
> exchange.getIn().getHeader(OpenShiftConstants.APPLICATION,
> getEndpoint().getApplication(), String.class);
> + if (name == null) {
> + throw new CamelExchangeException("Application not specified",
> exchange);
> + }
> +
> + IApplication app = domain.getApplicationByName(name);
> + if (app == null) {
> + throw new CamelExchangeException("Application with id " +
> name + " not found.", exchange);
> + } else {
> + for (IGearGroup group : app.getGearGroups()) {
> + for (IGear gear : group.getGears()) {
> + String state =
> gear.getState().name().toLowerCase(Locale.ENGLISH);
> + exchange.getIn().setBody(state);
> + break;
> + }
> + }
> + }
> + }
> +
> +}
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/resources/META-INF/LICENSE.txt
> ----------------------------------------------------------------------
> diff --git
> a/components/camel-openshift/src/main/resources/META-INF/LICENSE.txt
> b/components/camel-openshift/src/main/resources/META-INF/LICENSE.txt
> new file mode 100644
> index 0000000..6b0b127
> --- /dev/null
> +++ b/components/camel-openshift/src/main/resources/META-INF/LICENSE.txt
> @@ -0,0 +1,203 @@
> +
> + Apache License
> + Version 2.0, January 2004
> + http://www.apache.org/licenses/
> +
> + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
> +
> + 1. Definitions.
> +
> + "License" shall mean the terms and conditions for use, reproduction,
> + and distribution as defined by Sections 1 through 9 of this
> document.
> +
> + "Licensor" shall mean the copyright owner or entity authorized by
> + the copyright owner that is granting the License.
> +
> + "Legal Entity" shall mean the union of the acting entity and all
> + other entities that control, are controlled by, or are under common
> + control with that entity. For the purposes of this definition,
> + "control" means (i) the power, direct or indirect, to cause the
> + direction or management of such entity, whether by contract or
> + otherwise, or (ii) ownership of fifty percent (50%) or more of the
> + outstanding shares, or (iii) beneficial ownership of such entity.
> +
> + "You" (or "Your") shall mean an individual or Legal Entity
> + exercising permissions granted by this License.
> +
> + "Source" form shall mean the preferred form for making
> modifications,
> + including but not limited to software source code, documentation
> + source, and configuration files.
> +
> + "Object" form shall mean any form resulting from mechanical
> + transformation or translation of a Source form, including but
> + not limited to compiled object code, generated documentation,
> + and conversions to other media types.
> +
> + "Work" shall mean the work of authorship, whether in Source or
> + Object form, made available under the License, as indicated by a
> + copyright notice that is included in or attached to the work
> + (an example is provided in the Appendix below).
> +
> + "Derivative Works" shall mean any work, whether in Source or Object
> + form, that is based on (or derived from) the Work and for which the
> + editorial revisions, annotations, elaborations, or other
> modifications
> + represent, as a whole, an original work of authorship. For the
> purposes
> + of this License, Derivative Works shall not include works that
> remain
> + separable from, or merely link (or bind by name) to the interfaces
> of,
> + the Work and Derivative Works thereof.
> +
> + "Contribution" shall mean any work of authorship, including
> + the original version of the Work and any modifications or additions
> + to that Work or Derivative Works thereof, that is intentionally
> + submitted to Licensor for inclusion in the Work by the copyright
> owner
> + or by an individual or Legal Entity authorized to submit on behalf
> of
> + the copyright owner. For the purposes of this definition,
> "submitted"
> + means any form of electronic, verbal, or written communication sent
> + to the Licensor or its representatives, including but not limited to
> + communication on electronic mailing lists, source code control
> systems,
> + and issue tracking systems that are managed by, or on behalf of, the
> + Licensor for the purpose of discussing and improving the Work, but
> + excluding communication that is conspicuously marked or otherwise
> + designated in writing by the copyright owner as "Not a
> Contribution."
> +
> + "Contributor" shall mean Licensor and any individual or Legal Entity
> + on behalf of whom a Contribution has been received by Licensor and
> + subsequently incorporated within the Work.
> +
> + 2. Grant of Copyright License. Subject to the terms and conditions of
> + this License, each Contributor hereby grants to You a perpetual,
> + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
> + copyright license to reproduce, prepare Derivative Works of,
> + publicly display, publicly perform, sublicense, and distribute the
> + Work and such Derivative Works in Source or Object form.
> +
> + 3. Grant of Patent License. Subject to the terms and conditions of
> + this License, each Contributor hereby grants to You a perpetual,
> + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
> + (except as stated in this section) patent license to make, have
> made,
> + use, offer to sell, sell, import, and otherwise transfer the Work,
> + where such license applies only to those patent claims licensable
> + by such Contributor that are necessarily infringed by their
> + Contribution(s) alone or by combination of their Contribution(s)
> + with the Work to which such Contribution(s) was submitted. If You
> + institute patent litigation against any entity (including a
> + cross-claim or counterclaim in a lawsuit) alleging that the Work
> + or a Contribution incorporated within the Work constitutes direct
> + or contributory patent infringement, then any patent licenses
> + granted to You under this License for that Work shall terminate
> + as of the date such litigation is filed.
> +
> + 4. Redistribution. You may reproduce and distribute copies of the
> + Work or Derivative Works thereof in any medium, with or without
> + modifications, and in Source or Object form, provided that You
> + meet the following conditions:
> +
> + (a) You must give any other recipients of the Work or
> + Derivative Works a copy of this License; and
> +
> + (b) You must cause any modified files to carry prominent notices
> + stating that You changed the files; and
> +
> + (c) You must retain, in the Source form of any Derivative Works
> + that You distribute, all copyright, patent, trademark, and
> + attribution notices from the Source form of the Work,
> + excluding those notices that do not pertain to any part of
> + the Derivative Works; and
> +
> + (d) If the Work includes a "NOTICE" text file as part of its
> + distribution, then any Derivative Works that You distribute must
> + include a readable copy of the attribution notices contained
> + within such NOTICE file, excluding those notices that do not
> + pertain to any part of the Derivative Works, in at least one
> + of the following places: within a NOTICE text file distributed
> + as part of the Derivative Works; within the Source form or
> + documentation, if provided along with the Derivative Works; or,
> + within a display generated by the Derivative Works, if and
> + wherever such third-party notices normally appear. The contents
> + of the NOTICE file are for informational purposes only and
> + do not modify the License. You may add Your own attribution
> + notices within Derivative Works that You distribute, alongside
> + or as an addendum to the NOTICE text from the Work, provided
> + that such additional attribution notices cannot be construed
> + as modifying the License.
> +
> + You may add Your own copyright statement to Your modifications and
> + may provide additional or different license terms and conditions
> + for use, reproduction, or distribution of Your modifications, or
> + for any such Derivative Works as a whole, provided Your use,
> + reproduction, and distribution of the Work otherwise complies with
> + the conditions stated in this License.
> +
> + 5. Submission of Contributions. Unless You explicitly state otherwise,
> + any Contribution intentionally submitted for inclusion in the Work
> + by You to the Licensor shall be under the terms and conditions of
> + this License, without any additional terms or conditions.
> + Notwithstanding the above, nothing herein shall supersede or modify
> + the terms of any separate license agreement you may have executed
> + with Licensor regarding such Contributions.
> +
> + 6. Trademarks. This License does not grant permission to use the trade
> + names, trademarks, service marks, or product names of the Licensor,
> + except as required for reasonable and customary use in describing
> the
> + origin of the Work and reproducing the content of the NOTICE file.
> +
> + 7. Disclaimer of Warranty. Unless required by applicable law or
> + agreed to in writing, Licensor provides the Work (and each
> + Contributor provides its Contributions) on an "AS IS" BASIS,
> + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> + implied, including, without limitation, any warranties or conditions
> + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
> + PARTICULAR PURPOSE. You are solely responsible for determining the
> + appropriateness of using or redistributing the Work and assume any
> + risks associated with Your exercise of permissions under this
> License.
> +
> + 8. Limitation of Liability. In no event and under no legal theory,
> + whether in tort (including negligence), contract, or otherwise,
> + unless required by applicable law (such as deliberate and grossly
> + negligent acts) or agreed to in writing, shall any Contributor be
> + liable to You for damages, including any direct, indirect, special,
> + incidental, or consequential damages of any character arising as a
> + result of this License or out of the use or inability to use the
> + Work (including but not limited to damages for loss of goodwill,
> + work stoppage, computer failure or malfunction, or any and all
> + other commercial damages or losses), even if such Contributor
> + has been advised of the possibility of such damages.
> +
> + 9. Accepting Warranty or Additional Liability. While redistributing
> + the Work or Derivative Works thereof, You may choose to offer,
> + and charge a fee for, acceptance of support, warranty, indemnity,
> + or other liability obligations and/or rights consistent with this
> + License. However, in accepting such obligations, You may act only
> + on Your own behalf and on Your sole responsibility, not on behalf
> + of any other Contributor, and only if You agree to indemnify,
> + defend, and hold each Contributor harmless for any liability
> + incurred by, or claims asserted against, such Contributor by reason
> + of your accepting any such warranty or additional liability.
> +
> + END OF TERMS AND CONDITIONS
> +
> + APPENDIX: How to apply the Apache License to your work.
> +
> + To apply the Apache License to your work, attach the following
> + boilerplate notice, with the fields enclosed by brackets "[]"
> + replaced with your own identifying information. (Don't include
> + the brackets!) The text should be enclosed in the appropriate
> + comment syntax for the file format. We also recommend that a
> + file or class name and description of purpose be included on the
> + same "printed page" as the copyright notice for easier
> + identification within third-party archives.
> +
> + Copyright [yyyy] [name of copyright owner]
> +
> + Licensed 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.
> +
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/resources/META-INF/NOTICE.txt
> ----------------------------------------------------------------------
> diff --git
> a/components/camel-openshift/src/main/resources/META-INF/NOTICE.txt
> b/components/camel-openshift/src/main/resources/META-INF/NOTICE.txt
> new file mode 100644
> index 0000000..2e215bf
> --- /dev/null
> +++ b/components/camel-openshift/src/main/resources/META-INF/NOTICE.txt
> @@ -0,0 +1,11 @@
> +
> =========================================================================
> + == NOTICE file corresponding to the section 4 d of
> ==
> + == the Apache License, Version 2.0,
> ==
> + == in this case for the Apache Camel distribution.
> ==
> +
> =========================================================================
> +
> + This product includes software developed by
> + The Apache Software Foundation (http://www.apache.org/).
> +
> + Please read the different LICENSE files present in the licenses
> directory of
> + this distribution.
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/main/resources/META-INF/services/org/apache/camel/component/openshift
> ----------------------------------------------------------------------
> diff --git
> a/components/camel-openshift/src/main/resources/META-INF/services/org/apache/camel/component/openshift
> b/components/camel-openshift/src/main/resources/META-INF/services/org/apache/camel/component/openshift
> new file mode 100644
> index 0000000..9051897
> --- /dev/null
> +++
> b/components/camel-openshift/src/main/resources/META-INF/services/org/apache/camel/component/openshift
> @@ -0,0 +1,18 @@
> +#
> +# 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.
> +#
> +
> +class=org.apache.camel.component.openshift.OpenShiftComponent
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftListApplicationsTest.java
> ----------------------------------------------------------------------
> diff --git
> a/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftListApplicationsTest.java
> b/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftListApplicationsTest.java
> new file mode 100644
> index 0000000..a8b4e2c
> --- /dev/null
> +++
> b/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftListApplicationsTest.java
> @@ -0,0 +1,60 @@
> +/**
> + * 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.camel.component.openshift;
> +
> +import org.apache.camel.builder.RouteBuilder;
> +import org.apache.camel.test.junit4.CamelTestSupport;
> +import org.junit.Test;
> +
> +public class OpenShiftListApplicationsTest extends CamelTestSupport {
> +
> + private String username;
> + private String password;
> +
> + @Override
> + public void setUp() throws Exception {
> + // INSERT credentials here
> + username = null;
> + password = null;
> + super.setUp();
> + }
> +
> + @Test
> + public void testListApplications() throws Exception {
> + if (username == null) {
> + return;
> + }
> +
> + getMockEndpoint("mock:result").expectedMessageCount(1);
> +
> + template.sendBody("direct:start", "Hello World");
> +
> + assertMockEndpointsSatisfied();
> + }
> +
> + @Override
> + protected RouteBuilder createRouteBuilder() throws Exception {
> + return new RouteBuilder() {
> + @Override
> + public void configure() throws Exception {
> + from("direct:start")
> +
> .toF("openshift:myApp?operation=list&username=%s&password=%s", username,
> password)
> + .to("mock:result");
> + }
> + };
> + }
> +}
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftStateTest.java
> ----------------------------------------------------------------------
> diff --git
> a/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftStateTest.java
> b/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftStateTest.java
> new file mode 100644
> index 0000000..c57992e
> --- /dev/null
> +++
> b/components/camel-openshift/src/test/java/org/apache/camel/component/openshift/OpenShiftStateTest.java
> @@ -0,0 +1,62 @@
> +/**
> + * 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.camel.component.openshift;
> +
> +import org.apache.camel.builder.RouteBuilder;
> +import org.apache.camel.test.junit4.CamelTestSupport;
> +import org.junit.Test;
> +
> +public class OpenShiftStateTest extends CamelTestSupport {
> +
> + private String username;
> + private String password;
> + private String application;
> +
> + @Override
> + public void setUp() throws Exception {
> + // INSERT credentials here
> + username = null;
> + password = null;
> + application = "myapp";
> + super.setUp();
> + }
> +
> + @Test
> + public void testState() throws Exception {
> + if (username == null) {
> + return;
> + }
> +
> + getMockEndpoint("mock:result").expectedBodiesReceived("started");
> +
> + template.sendBody("direct:start", "Hello World");
> +
> + assertMockEndpointsSatisfied();
> + }
> +
> + @Override
> + protected RouteBuilder createRouteBuilder() throws Exception {
> + return new RouteBuilder() {
> + @Override
> + public void configure() throws Exception {
> + from("direct:start")
> +
> .toF("openshift:myApp?operation=state&application=%s&username=%s&password=%s",
> application, username, password)
> + .to("mock:result");
> + }
> + };
> + }
> +}
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/camel-openshift/src/test/resources/log4j.properties
> ----------------------------------------------------------------------
> diff --git
> a/components/camel-openshift/src/test/resources/log4j.properties
> b/components/camel-openshift/src/test/resources/log4j.properties
> new file mode 100644
> index 0000000..7127791
> --- /dev/null
> +++ b/components/camel-openshift/src/test/resources/log4j.properties
> @@ -0,0 +1,41 @@
> +##
> ------------------------------------------------------------------------
> +## 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.
> +##
> ------------------------------------------------------------------------
> +
> +#
> +# The logging properties used for testing.
> +#
> +log4j.rootLogger=INFO, file
> +
> +# uncomment the following to enable camel debugging
> +#log4j.logger.org.apache.camel.component.openshift=TRACE
> +
> +# CONSOLE appender not used by default
> +log4j.appender.out=org.apache.log4j.ConsoleAppender
> +log4j.appender.out.layout=org.apache.log4j.PatternLayout
> +log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p
> %-30.30c{1} - %m%n
> +# MDC
> +#log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p
> %-30.30c{1} - %-10.10X{camel.breadcrumbId} - %-10.10X{camelexchangeId} -
> %-10.10X{camel.correlationId} - %-10.10X{camel.routeId} - %m%n
> +
> +# File appender
> +log4j.appender.file=org.apache.log4j.FileAppender
> +log4j.appender.file.layout=org.apache.log4j.PatternLayout
> +log4j.appender.file.file=target/camel-openshift-test.log
> +log4j.appender.file.append=true
> +log4j.appender.file.layout.ConversionPattern=%d [%-15.15t] %-5p
> %-30.30c{1} - %m%n
> +# MDC
> +#log4j.appender.file.layout.ConversionPattern=%d [%-15.15t] %-5p
> %-30.30c{1} - %-10.10X{camel.breadcrumbId} - %-10.10X{camel.exchangeId} -
> %-10.10X{camel.correlationId} - %-10.10X{camel.routeId} - %m%n
> +
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/components/pom.xml
> ----------------------------------------------------------------------
> diff --git a/components/pom.xml b/components/pom.xml
> index 9e5292f..942218f 100644
> --- a/components/pom.xml
> +++ b/components/pom.xml
> @@ -141,6 +141,7 @@
> <module>camel-netty</module>
> <module>camel-netty-http</module>
> <module>camel-ognl</module>
> + <module>camel-openshift</module>
> <module>camel-optaplanner</module>
> <module>camel-paxlogging</module>
> <module>camel-printer</module>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/parent/pom.xml
> ----------------------------------------------------------------------
> diff --git a/parent/pom.xml b/parent/pom.xml
> index 8ff5f30..01c3689 100644
> --- a/parent/pom.xml
> +++ b/parent/pom.xml
> @@ -313,6 +313,7 @@
> <openejb-version>4.5.2</openejb-version>
> <openjpa-version>2.3.0</openjpa-version>
> <opensaml-version>2.5.1_2</opensaml-version>
> +
> <openshift-java-client-version>2.5.0.Final</openshift-java-client-version>
> <optaplanner-version>6.0.1.Final</optaplanner-version>
> <oro-bundle-version>2.0.8_6</oro-bundle-version>
> <oscache-bundle-version>2.4_5</oscache-bundle-version>
> @@ -998,6 +999,11 @@
> </dependency>
> <dependency>
> <groupId>org.apache.camel</groupId>
> + <artifactId>camel-openshift</artifactId>
> + <version>${project.version}</version>
> + </dependency>
> + <dependency>
> + <groupId>org.apache.camel</groupId>
> <artifactId>camel-optaplanner</artifactId>
> <version>${project.version}</version>
> </dependency>
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/platforms/karaf/features/src/main/resources/features.xml
> ----------------------------------------------------------------------
> diff --git a/platforms/karaf/features/src/main/resources/features.xml
> b/platforms/karaf/features/src/main/resources/features.xml
> index 415943d..727f1dc 100644
> --- a/platforms/karaf/features/src/main/resources/features.xml
> +++ b/platforms/karaf/features/src/main/resources/features.xml
> @@ -829,6 +829,11 @@
> <bundle
> dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.javassist/${javassist-bundle-version}</bundle>
> <bundle>mvn:org.apache.camel/camel-ognl/${project.version}</bundle>
> </feature>
> + <feature name='camel-openshift' version='${project.version}'
> resolver='(obr)' start-level='50'>
> + <feature version='${project.version}'>camel-core</feature>
> + <bundle
> dependency='true'>wrap:mvn:com.openshift/openshift-java-client/${openshift-java-client-version}</bundle>
> +
> <bundle>mvn:org.apache.camel/camel-openshift/${project.version}</bundle>
> + </feature>
> <feature name='camel-optaplanner' version='${project.version}'
> resolver='(obr)' start-level='50'>
> <details>The camel-optaplanner feature can only run on a SUN JVM. You
> need to add the package com.sun.tools.xjc to the java platform packages in
> the etc/jre.properties file.</details>
> <feature version='${project.version}'>camel-core</feature>
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/18998069/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelOpenshiftTest.java
> ----------------------------------------------------------------------
> diff --git
> a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelOpenshiftTest.java
> b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelOpenshiftTest.java
> new file mode 100644
> index 0000000..e9f73eb
> --- /dev/null
> +++
> b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelOpenshiftTest.java
> @@ -0,0 +1,40 @@
> +/**
> + * 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.camel.itest.karaf;
> +
> +import org.junit.Test;
> +import org.junit.runner.RunWith;
> +import org.ops4j.pax.exam.Option;
> +import org.ops4j.pax.exam.junit.Configuration;
> +import org.ops4j.pax.exam.junit.JUnit4TestRunner;
> +
> +@RunWith(JUnit4TestRunner.class)
> +public class CamelOpenshiftTest extends AbstractFeatureTest {
> +
> + public static final String COMPONENT =
> extractName(CamelOpenshiftTest.class);
> +
> + @Test
> + public void test() throws Exception {
> + testComponent(COMPONENT);
> + }
> +
> + @Configuration
> + public static Option[] configure() {
> + return configure(COMPONENT);
> + }
> +
> +}
> \ No newline at end of file
>
>