From aebbbe3fa762f8934a7593b2dcbb88675f451914 Mon Sep 17 00:00:00 2001 From: "Arul.Nambi" Date: Thu, 14 Sep 2017 14:53:04 -0400 Subject: Renaming openecomp to onap Issue-ID: AAI-208 Change-Id: I1c5e6e938993272bdf9e71f5b4935d45f091481b Signed-off-by: Arul.Nambi --- .../java/org/onap/aai/event/EventBusComponent.java | 50 ++++ .../java/org/onap/aai/event/EventBusConsumer.java | 179 +++++++++++++++ .../java/org/onap/aai/event/EventBusEndpoint.java | 163 +++++++++++++ .../java/org/onap/aai/event/EventBusProducer.java | 43 ++++ .../java/org/onap/aai/logging/RouterCoreMsgs.java | 53 +++++ .../org/onap/aai/rest/RestClientComponent.java | 53 +++++ .../java/org/onap/aai/rest/RestClientConsumer.java | 39 ++++ .../java/org/onap/aai/rest/RestClientEndpoint.java | 125 ++++++++++ .../java/org/onap/aai/rest/RestClientProducer.java | 253 ++++++++++++++++++++ .../org/openecomp/event/EventBusComponent.java | 50 ---- .../java/org/openecomp/event/EventBusConsumer.java | 179 --------------- .../java/org/openecomp/event/EventBusEndpoint.java | 163 ------------- .../java/org/openecomp/event/EventBusProducer.java | 43 ---- .../java/org/openecomp/logging/RouterCoreMsgs.java | 53 ----- .../org/openecomp/rest/RestClientComponent.java | 53 ----- .../org/openecomp/rest/RestClientConsumer.java | 39 ---- .../org/openecomp/rest/RestClientEndpoint.java | 125 ---------- .../org/openecomp/rest/RestClientProducer.java | 254 --------------------- 18 files changed, 958 insertions(+), 959 deletions(-) create mode 100644 src/main/java/org/onap/aai/event/EventBusComponent.java create mode 100644 src/main/java/org/onap/aai/event/EventBusConsumer.java create mode 100644 src/main/java/org/onap/aai/event/EventBusEndpoint.java create mode 100644 src/main/java/org/onap/aai/event/EventBusProducer.java create mode 100644 src/main/java/org/onap/aai/logging/RouterCoreMsgs.java create mode 100644 src/main/java/org/onap/aai/rest/RestClientComponent.java create mode 100644 src/main/java/org/onap/aai/rest/RestClientConsumer.java create mode 100644 src/main/java/org/onap/aai/rest/RestClientEndpoint.java create mode 100644 src/main/java/org/onap/aai/rest/RestClientProducer.java delete mode 100644 src/main/java/org/openecomp/event/EventBusComponent.java delete mode 100644 src/main/java/org/openecomp/event/EventBusConsumer.java delete mode 100644 src/main/java/org/openecomp/event/EventBusEndpoint.java delete mode 100644 src/main/java/org/openecomp/event/EventBusProducer.java delete mode 100644 src/main/java/org/openecomp/logging/RouterCoreMsgs.java delete mode 100644 src/main/java/org/openecomp/rest/RestClientComponent.java delete mode 100644 src/main/java/org/openecomp/rest/RestClientConsumer.java delete mode 100644 src/main/java/org/openecomp/rest/RestClientEndpoint.java delete mode 100644 src/main/java/org/openecomp/rest/RestClientProducer.java (limited to 'src/main/java/org') diff --git a/src/main/java/org/onap/aai/event/EventBusComponent.java b/src/main/java/org/onap/aai/event/EventBusComponent.java new file mode 100644 index 0000000..f6e373a --- /dev/null +++ b/src/main/java/org/onap/aai/event/EventBusComponent.java @@ -0,0 +1,50 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 Amdocs + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.event; + +import org.apache.camel.CamelContext; +import org.apache.camel.Endpoint; +import org.apache.camel.impl.UriEndpointComponent; + +import java.util.Map; + +/** + * Represents the component that manages {@link EventBusEndpoint}. + */ +public class EventBusComponent extends UriEndpointComponent { + + public EventBusComponent() { + super(EventBusEndpoint.class); + } + + public EventBusComponent(CamelContext context) { + super(context, EventBusEndpoint.class); + } + + protected Endpoint createEndpoint(String uri, String remaining, Map parameters) + throws Exception { + Endpoint endpoint = new EventBusEndpoint(uri, this); + setProperties(endpoint, parameters); + return endpoint; + } +} diff --git a/src/main/java/org/onap/aai/event/EventBusConsumer.java b/src/main/java/org/onap/aai/event/EventBusConsumer.java new file mode 100644 index 0000000..472d0ff --- /dev/null +++ b/src/main/java/org/onap/aai/event/EventBusConsumer.java @@ -0,0 +1,179 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 Amdocs + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.event; + +import com.att.nsa.cambria.client.CambriaClientBuilders; +import com.att.nsa.cambria.client.CambriaClientBuilders.ConsumerBuilder; +import com.att.nsa.cambria.client.CambriaConsumer; + +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.Processor; +import org.apache.camel.impl.ScheduledPollConsumer; +import org.onap.aai.logging.RouterCoreMsgs; +import org.openecomp.cl.api.Logger; +import org.openecomp.cl.eelf.LoggerFactory; +import org.openecomp.cl.mdc.MdcContext; + +import java.net.MalformedURLException; +import java.security.GeneralSecurityException; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; +import java.util.concurrent.ScheduledThreadPoolExecutor; + +/** + * The consumer component which is used to pull messages off of the event bus and send them to the + * next processor in the route chain. This type of consumer is based off of a scheduled poller so + * that events are pulled on a regular basis. + */ +public class EventBusConsumer extends ScheduledPollConsumer { + + private Logger logger = LoggerFactory.getInstance().getLogger(EventBusConsumer.class); + private Logger auditLogger = LoggerFactory.getInstance().getAuditLogger(EventBusConsumer.class); + private final EventBusEndpoint endpoint; + + private CambriaConsumer consumer; + + /** + * EventBusConsumer Constructor. + */ + public EventBusConsumer(EventBusEndpoint endpoint, Processor processor) { + super(endpoint, processor); + super.setDelay(endpoint.getPollingDelay()); + this.endpoint = endpoint; + + setScheduledExecutorService(new ScheduledThreadPoolExecutor(endpoint.getPoolSize())); + + String[] urls = endpoint.getUrl().split(","); + + List urlList = null; + + if (urls != null) { + urlList = Arrays.asList(urls); + } + + try { + + ConsumerBuilder consumerBuilder = new CambriaClientBuilders.ConsumerBuilder() + .usingHosts(urlList).onTopic(endpoint.getEventTopic()) + .knownAs(endpoint.getGroupName(), endpoint.getGroupId()); + + String apiKey = endpoint.getApiKey(); + String apiSecret = endpoint.getApiSecret(); + + if (apiKey != null && apiSecret != null) { + consumerBuilder.authenticatedBy(endpoint.getApiKey(), endpoint.getApiSecret()); + } + + consumer = consumerBuilder.build(); + + } catch (MalformedURLException | GeneralSecurityException e) { + logger.error(RouterCoreMsgs.EVENT_CONSUMER_CREATION_EXCEPTION, e.getLocalizedMessage()); + } + } + + /** + * Method which is called by the Camel process on a scheduled basis. This specific implementation + * reads messages off of the configured topic and schedules tasks to process them . + * + * @return the number of messages that were processed off the event queue + */ + @Override + protected int poll() throws Exception { + + logger.debug("Checking for event on topic: " + endpoint.getEventTopic()); + + int processCount = 0; + + Iterable messages = null; + + messages = consumer.fetch(); + + String topic = endpoint.getEventTopic(); + + for (String message : messages) { + Exchange exchange = endpoint.createExchange(); + exchange.getIn().setBody(message); + getScheduledExecutorService().submit(new EventProcessor(exchange, topic)); + ++processCount; + } + return processCount; + } + + protected void doStop() throws Exception { + super.doStop(); + if (consumer != null) { + consumer.close(); + } + } + + protected void doShutdown() throws Exception { + super.doShutdown(); + if (consumer != null) { + consumer.close(); + } + } + + /** + * Class responsible for processing messages pulled off of the event bus. + */ + private class EventProcessor implements Runnable { + + private Exchange message; + + private String topic; + + EventProcessor(Exchange message, String topic) { + this.message = message; + this.topic = topic; + } + + public void run() { + try { + + MdcContext.initialize(UUID.randomUUID().toString(), "DataRouter", "", "Event-Bus", ""); + + // Sends the message to the next processor in the defined Camel route + getProcessor().process(message); + + Message response = message.getOut(); + if (response != null) { + logger.debug("Routing response: " + response.getBody()); + } + + } catch (Exception e) { + logger.error(RouterCoreMsgs.EVENT_PROCESSING_EXCEPTION, e.getLocalizedMessage()); + } finally { + // log exception if an exception occurred and was not handled + if (message.getException() != null) { + logger.info(RouterCoreMsgs.PROCESS_EVENT, topic, "FAILURE"); + auditLogger.info(RouterCoreMsgs.PROCESS_EVENT, topic, "FAILURE"); + } else { + logger.info(RouterCoreMsgs.PROCESS_EVENT, topic, "SUCCESS"); + auditLogger.info(RouterCoreMsgs.PROCESS_EVENT, topic, "SUCCESS"); + } + } + } + } +} diff --git a/src/main/java/org/onap/aai/event/EventBusEndpoint.java b/src/main/java/org/onap/aai/event/EventBusEndpoint.java new file mode 100644 index 0000000..965dc72 --- /dev/null +++ b/src/main/java/org/onap/aai/event/EventBusEndpoint.java @@ -0,0 +1,163 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 Amdocs + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.event; + + +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.Metadata; +import org.apache.camel.spi.UriEndpoint; +import org.apache.camel.spi.UriParam; +import org.apache.camel.spi.UriPath; +import org.eclipse.jetty.util.security.Password; + +/** + * Represents a EventBus endpoint. + */ +@UriEndpoint(scheme = "event-bus", syntax = "event-bus:name", + consumerClass = EventBusConsumer.class, title = "event-bus") +public class EventBusEndpoint extends DefaultEndpoint { + @UriPath + @Metadata(required = "true") + private String name; + + @UriParam(label = "eventTopic") + @Metadata(required = "true") + private String eventTopic; + @UriParam(label = "groupName") + @Metadata(required = "true") + private String groupName; + @UriParam(label = "groupId") + @Metadata(required = "true") + private String groupId; + @UriParam(label = "apiKey") + private String apiKey; + @UriParam(label = "apiSecret") + private String apiSecret; + @UriParam(label = "url") + @Metadata(required = "true") + private String url; + @UriParam(label = "poolSize") + @Metadata(required = "true", defaultValue="20") + private int poolSize = 20; + @UriParam(label = "pollingDelay") + @Metadata(required = "true", defaultValue="30000") + private int pollingDelay = 30000; + + public EventBusEndpoint() {} + + public EventBusEndpoint(String uri, EventBusComponent component) { + super(uri, component); + } + + public EventBusEndpoint(String endpointUri) { + super(endpointUri); + } + + public Producer createProducer() throws Exception { + return new EventBusProducer(this); + } + + public Consumer createConsumer(Processor processor) throws Exception { + return new EventBusConsumer(this, processor); + } + + public boolean isSingleton() { + return false; + } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public String getEventTopic() { + return eventTopic; + } + + public void setEventTopic(String eventTopic) { + this.eventTopic = eventTopic; + } + + public String getGroupName() { + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getApiKey() { + return apiKey == null ? null : Password.deobfuscate(apiKey); + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } + + public String getApiSecret() { + return apiSecret == null ? null : Password.deobfuscate(apiSecret); + } + + public void setApiSecret(String apiSecret) { + this.apiSecret = apiSecret; + } + + public int getPoolSize() { + return poolSize; + } + + public void setPoolSize(int poolsize) { + this.poolSize = poolsize; + } + + public int getPollingDelay() { + return pollingDelay; + } + + public void setPollingDelay(int pollingDelay) { + this.pollingDelay = pollingDelay; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } +} + diff --git a/src/main/java/org/onap/aai/event/EventBusProducer.java b/src/main/java/org/onap/aai/event/EventBusProducer.java new file mode 100644 index 0000000..a0578fc --- /dev/null +++ b/src/main/java/org/onap/aai/event/EventBusProducer.java @@ -0,0 +1,43 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 Amdocs + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.event; + +import org.apache.camel.Exchange; +import org.apache.camel.impl.DefaultProducer; + +/** + * The EventBus producer. + */ +public class EventBusProducer extends DefaultProducer { + private EventBusEndpoint endpoint; + + public EventBusProducer(EventBusEndpoint endpoint) { + super(endpoint); + this.endpoint = endpoint; + } + + public void process(Exchange exchange) throws Exception { + // Publishing to event bus is currently not supported + } + +} diff --git a/src/main/java/org/onap/aai/logging/RouterCoreMsgs.java b/src/main/java/org/onap/aai/logging/RouterCoreMsgs.java new file mode 100644 index 0000000..6b2fcae --- /dev/null +++ b/src/main/java/org/onap/aai/logging/RouterCoreMsgs.java @@ -0,0 +1,53 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 Amdocs + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.logging; + +import com.att.eelf.i18n.EELFResourceManager; +import org.openecomp.cl.eelf.LogMessageEnum; + +public enum RouterCoreMsgs implements LogMessageEnum { + + /** + * Processed event {0}. Result: {1}. + * + * Arguments: {0} = event topic {1} = result + */ + PROCESS_EVENT, + /** + * Arguments: {0} = Processing exception + */ + EVENT_PROCESSING_EXCEPTION, + + /** + * Arguments: {0} = Creation exception + */ + EVENT_CONSUMER_CREATION_EXCEPTION; + + + /** + * Static initializer to ensure the resource bundles for this class are loaded... + */ + static { + EELFResourceManager.loadMessageBundle("logging/RouterCoreMsgs"); + } +} diff --git a/src/main/java/org/onap/aai/rest/RestClientComponent.java b/src/main/java/org/onap/aai/rest/RestClientComponent.java new file mode 100644 index 0000000..877e25f --- /dev/null +++ b/src/main/java/org/onap/aai/rest/RestClientComponent.java @@ -0,0 +1,53 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 Amdocs + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.rest; + +import org.apache.camel.CamelContext; +import org.apache.camel.Endpoint; +import org.apache.camel.impl.UriEndpointComponent; + +import java.util.Map; + + +/** + * Represents the component that manages {@link RestClientEndpoint}. + */ +public class RestClientComponent extends UriEndpointComponent { + + public RestClientComponent() { + super(RestClientEndpoint.class); + } + + public RestClientComponent(CamelContext context) { + super(context, RestClientEndpoint.class); + } + + @Override + protected Endpoint createEndpoint(String uri, String remaining, Map parameters) + throws Exception { + + Endpoint endpoint = new RestClientEndpoint(uri, this); + setProperties(endpoint, parameters); + return endpoint; + } +} diff --git a/src/main/java/org/onap/aai/rest/RestClientConsumer.java b/src/main/java/org/onap/aai/rest/RestClientConsumer.java new file mode 100644 index 0000000..be17159 --- /dev/null +++ b/src/main/java/org/onap/aai/rest/RestClientConsumer.java @@ -0,0 +1,39 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 Amdocs + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.rest; + +import org.apache.camel.Processor; +import org.apache.camel.impl.DefaultConsumer; + + +/** + * The RestClient consumer. + */ +public class RestClientConsumer extends DefaultConsumer { + private final RestClientEndpoint endpoint; + + public RestClientConsumer(RestClientEndpoint endpoint, Processor processor) { + super(endpoint, processor); + this.endpoint = endpoint; + } +} diff --git a/src/main/java/org/onap/aai/rest/RestClientEndpoint.java b/src/main/java/org/onap/aai/rest/RestClientEndpoint.java new file mode 100644 index 0000000..41d8db5 --- /dev/null +++ b/src/main/java/org/onap/aai/rest/RestClientEndpoint.java @@ -0,0 +1,125 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 Amdocs + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.rest; + +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.Metadata; +import org.apache.camel.spi.UriEndpoint; +import org.apache.camel.spi.UriParam; +import org.apache.camel.spi.UriPath; + +import java.util.Map; + + +/** + * Represents a RestClient endpoint. + */ +@UriEndpoint(scheme = "ecomp-rest", syntax = "ecomp-rest:op", + consumerClass = RestClientConsumer.class, label = "RestClient2", title = "") +public class RestClientEndpoint extends DefaultEndpoint { + + public static final String CONTEXT_PARAM_CLIENT_CERT = "ecomp-client-cert"; + public static final String CONTEXT_PARAM_KEYSTORE = "ecomp-keystore"; + public static final String CONTEXT_PARAM_KEYSTORE_PWD = "ecomp-keystore-password"; + + public static final String IN_HEADER_URL = "ecomp-url"; + + public static final String OUT_HEADER_RESPONSE_CODE = "ecomp-response-code"; + public static final String OUT_HEADER_RESPONSE_MSG = "ecomp-response-message"; + + @UriPath + @Metadata(required = "true") + private String op; + + @UriParam + private String ecompClientCert; + + @UriParam + private String ecompKeystore; + + @UriParam + private String ecompKeystorePassword; + + + public RestClientEndpoint() {} + + public RestClientEndpoint(String uri, RestClientComponent component) { + super(uri, component); + } + + public RestClientEndpoint(String endpointUri) { + super(endpointUri); + } + + @Override + protected void setProperties(Object bean, Map parameters) throws Exception { + super.setProperties(bean, parameters); + } + + public Producer createProducer() throws Exception { + return new RestClientProducer(this); + } + + public Consumer createConsumer(Processor processor) throws Exception { + return new RestClientConsumer(this, processor); + } + + public boolean isSingleton() { + return true; + } + + public String getOp() { + return op; + } + + public void setOp(String op) { + this.op = op; + } + + public String getEcompClientCert() { + return ecompClientCert; + } + + public void setEcompClientCert(String ecompClientCert) { + this.ecompClientCert = ecompClientCert; + } + + public String getEcompKeystore() { + return ecompKeystore; + } + + public void setEcompKeystore(String ecompKeystore) { + this.ecompKeystore = ecompKeystore; + } + + public String getEcompKeystorePassword() { + return ecompKeystorePassword; + } + + public void setEcompKeystorePassword(String ecompKeystorePassword) { + this.ecompKeystorePassword = ecompKeystorePassword; + } +} diff --git a/src/main/java/org/onap/aai/rest/RestClientProducer.java b/src/main/java/org/onap/aai/rest/RestClientProducer.java new file mode 100644 index 0000000..542cf1d --- /dev/null +++ b/src/main/java/org/onap/aai/rest/RestClientProducer.java @@ -0,0 +1,253 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 Amdocs + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.rest; + +import org.apache.camel.Exchange; +import org.apache.camel.impl.DefaultProducer; +import org.eclipse.jetty.util.security.Password; +import org.onap.aai.event.EventBusConsumer; +import org.onap.aai.restclient.client.Headers; +import org.onap.aai.restclient.client.OperationResult; +import org.onap.aai.restclient.client.RestClient; +import org.onap.aai.restclient.rest.HttpUtil; +import org.openecomp.cl.api.Logger; +import org.openecomp.cl.eelf.LoggerFactory; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + + +/** + * The EcompRest producer. + */ +public class RestClientProducer extends DefaultProducer { + + private static enum Operation { + GET, PUT, POST, DELETE + } + + private RestClientEndpoint endpoint; + + /** REST client used for sending HTTP requests. */ + private RestClient restClient; + + private Logger logger = LoggerFactory.getInstance().getLogger(RestClientProducer.class); + + + public RestClientProducer(RestClientEndpoint endpoint) { + super(endpoint); + this.endpoint = endpoint; + } + + @Override + public void process(Exchange exchange) { + + // Extract the URL for our REST request from the IN message header. + String url = exchange.getIn().getHeader(RestClientEndpoint.IN_HEADER_URL).toString(); + + // Populate the HTTP Request header values from any values passed in via the + // IN message headers. + Map> headers = populateRestHeaders(exchange); + + if (logger.isDebugEnabled()) { + StringBuilder sb = new StringBuilder(); + sb.append("Process REST request - operation=").append(getOperation(exchange)); + sb.append(" headers=["); + for (String key : headers.keySet()) { + sb.append("{").append(key).append("->").append(headers.get(key)).append("} "); + } + sb.append("]"); + sb.append(" content: ").append(exchange.getIn().getBody()); + logger.debug(sb.toString()); + } + + // Now, invoke the REST client to perform the operation. + OperationResult result = null; + switch (getOperation(exchange)) { + + case GET: + result = getRestClient().get(url, headers, MediaType.APPLICATION_JSON_TYPE); + break; + + case PUT: + result = getRestClient().put(url, exchange.getIn().getBody().toString(), headers, + MediaType.APPLICATION_JSON_TYPE, null); + break; + + case POST: + result = getRestClient().post(url, exchange.getIn().getBody().toString(), headers, + MediaType.APPLICATION_JSON_TYPE, MediaType.APPLICATION_JSON_TYPE); + break; + + case DELETE: + result = getRestClient().delete(url, headers, MediaType.APPLICATION_JSON_TYPE); + break; + + default: + // The supplied operation is not supported. + result = new OperationResult(); + result.setResultCode(Response.Status.BAD_REQUEST.getStatusCode()); + result.setFailureCause("Unsupported HTTP Operation: " + getOperation(exchange)); + + break; + } + + // Populate the OUT message with our result. + exchange.getOut().setHeader(RestClientEndpoint.OUT_HEADER_RESPONSE_CODE, + result.getResultCode()); + if (HttpUtil.isHttpResponseClassSuccess(result.getResultCode())) { + exchange.getOut().setHeader(RestClientEndpoint.OUT_HEADER_RESPONSE_MSG, + responseStatusStringFromResult(result)); + exchange.getOut().setBody(result.getResult()); + } else { + exchange.getOut().setHeader(RestClientEndpoint.OUT_HEADER_RESPONSE_MSG, + result.getFailureCause()); + } + + } + + + /** + * Extracts the requested REST operation from the exchange message. + * + * @param exchange - The Camel exchange to pull the operation from. + * + * @return - The REST operation being requested. + */ + private Operation getOperation(Exchange exchange) { + + String toEndpoint = ((String) exchange.getProperty(Exchange.TO_ENDPOINT)); + + String operation = toEndpoint.substring((toEndpoint.lastIndexOf("://") + 3)); + + int position = operation.indexOf('?'); + if (position >= 0) { + operation = operation.substring(0, position); + } + + return Operation.valueOf(operation.toUpperCase()); + } + + + + /** + * This method extracts values from the IN message which are intended to be used to populate the + * HTTP Header entries for our REST request. + * + * @param exchange - The Camel exchange to extract the HTTP header parameters from. + * + * @return - A map of HTTP header names and values. + */ + private Map> populateRestHeaders(Exchange exchange) { + + Map> headers = new HashMap<>(); + + if (exchange.getIn().getHeader(Headers.FROM_APP_ID) != null) { + headers.put(Headers.FROM_APP_ID, + Arrays.asList(exchange.getIn().getHeader(Headers.FROM_APP_ID).toString())); + } + if (exchange.getIn().getHeader(Headers.TRANSACTION_ID) != null) { + headers.put(Headers.TRANSACTION_ID, + Arrays.asList(exchange.getIn().getHeader(Headers.TRANSACTION_ID).toString())); + } + if (exchange.getIn().getHeader(Headers.RESOURCE_VERSION) != null) { + headers.put(Headers.RESOURCE_VERSION, + Arrays.asList(exchange.getIn().getHeader(Headers.RESOURCE_VERSION).toString())); + } + if (exchange.getIn().getHeader(Headers.ETAG) != null) { + headers.put(Headers.ETAG, Arrays.asList(exchange.getIn().getHeader(Headers.ETAG).toString())); + } + if (exchange.getIn().getHeader(Headers.IF_MATCH) != null) { + headers.put(Headers.IF_MATCH, + Arrays.asList(exchange.getIn().getHeader(Headers.IF_MATCH).toString())); + } + if (exchange.getIn().getHeader(Headers.IF_NONE_MATCH) != null) { + headers.put(Headers.IF_NONE_MATCH, + Arrays.asList(exchange.getIn().getHeader(Headers.IF_NONE_MATCH).toString())); + } + if (exchange.getIn().getHeader(Headers.ACCEPT) != null) { + headers.put(Headers.ACCEPT, + Arrays.asList(exchange.getIn().getHeader(Headers.ACCEPT).toString())); + } + if (exchange.getIn().getHeader("Content-Type") != null) { + headers.put("Content-Type", + Arrays.asList(exchange.getIn().getHeader("Content-Type").toString())); + } + + return headers; + } + + + /** + * This helper method converts an HTTP response code into the associated string. + * + * @param result - A result object to get the response code from. + * + * @return - The string message associated with the supplied response code. + */ + private String responseStatusStringFromResult(OperationResult result) { + + // Not every valid response code is actually represented by the Response.Status + // object, so we need to guard against missing codes, otherwise we throw null + // pointer exceptions when we try to generate our metrics logs... + Response.Status responseStatus = Response.Status.fromStatusCode(result.getResultCode()); + String responseStatusCodeString = ""; + if (responseStatus != null) { + responseStatusCodeString = responseStatus.toString(); + } + + return responseStatusCodeString; + } + + /** + * Instantiate the REST client that will be used for sending our HTTP requests. + * + * @return - An instance of the REST client. + */ + private RestClient getRestClient() { + + if (restClient == null) { + + String keystoreFilename = endpoint.getEcompKeystore(); + String keystorePassword = endpoint.getEcompKeystorePassword(); + String clientCertFilename = endpoint.getEcompClientCert(); + + if (logger.isDebugEnabled()) { + logger.debug("Instantiating REST Client with client_cert=" + clientCertFilename + + " keystore=" + keystoreFilename + " keystorePassword=" + keystorePassword); + } + + // Create REST client for search service + restClient = new RestClient().validateServerHostname(false).validateServerCertChain(true) + .clientCertFile(clientCertFilename) + .clientCertPassword(Password.deobfuscate(keystorePassword)).trustStore(keystoreFilename); + } + + return restClient; + } +} diff --git a/src/main/java/org/openecomp/event/EventBusComponent.java b/src/main/java/org/openecomp/event/EventBusComponent.java deleted file mode 100644 index 9a02a77..0000000 --- a/src/main/java/org/openecomp/event/EventBusComponent.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * Copyright © 2017 Amdocs - * ================================================================================ - * 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. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - */ -package org.openecomp.event; - -import org.apache.camel.CamelContext; -import org.apache.camel.Endpoint; -import org.apache.camel.impl.UriEndpointComponent; - -import java.util.Map; - -/** - * Represents the component that manages {@link EventBusEndpoint}. - */ -public class EventBusComponent extends UriEndpointComponent { - - public EventBusComponent() { - super(EventBusEndpoint.class); - } - - public EventBusComponent(CamelContext context) { - super(context, EventBusEndpoint.class); - } - - protected Endpoint createEndpoint(String uri, String remaining, Map parameters) - throws Exception { - Endpoint endpoint = new EventBusEndpoint(uri, this); - setProperties(endpoint, parameters); - return endpoint; - } -} diff --git a/src/main/java/org/openecomp/event/EventBusConsumer.java b/src/main/java/org/openecomp/event/EventBusConsumer.java deleted file mode 100644 index 982b402..0000000 --- a/src/main/java/org/openecomp/event/EventBusConsumer.java +++ /dev/null @@ -1,179 +0,0 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * Copyright © 2017 Amdocs - * ================================================================================ - * 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. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - */ -package org.openecomp.event; - -import com.att.nsa.cambria.client.CambriaClientBuilders; -import com.att.nsa.cambria.client.CambriaClientBuilders.ConsumerBuilder; -import com.att.nsa.cambria.client.CambriaConsumer; - -import org.apache.camel.Exchange; -import org.apache.camel.Message; -import org.apache.camel.Processor; -import org.apache.camel.impl.ScheduledPollConsumer; -import org.openecomp.cl.api.Logger; -import org.openecomp.cl.eelf.LoggerFactory; -import org.openecomp.cl.mdc.MdcContext; -import org.openecomp.logging.RouterCoreMsgs; - -import java.net.MalformedURLException; -import java.security.GeneralSecurityException; -import java.util.Arrays; -import java.util.List; -import java.util.UUID; -import java.util.concurrent.ScheduledThreadPoolExecutor; - -/** - * The consumer component which is used to pull messages off of the event bus and send them to the - * next processor in the route chain. This type of consumer is based off of a scheduled poller so - * that events are pulled on a regular basis. - */ -public class EventBusConsumer extends ScheduledPollConsumer { - - private Logger logger = LoggerFactory.getInstance().getLogger(EventBusConsumer.class); - private Logger auditLogger = LoggerFactory.getInstance().getAuditLogger(EventBusConsumer.class); - private final EventBusEndpoint endpoint; - - private CambriaConsumer consumer; - - /** - * EventBusConsumer Constructor. - */ - public EventBusConsumer(EventBusEndpoint endpoint, Processor processor) { - super(endpoint, processor); - super.setDelay(endpoint.getPollingDelay()); - this.endpoint = endpoint; - - setScheduledExecutorService(new ScheduledThreadPoolExecutor(endpoint.getPoolSize())); - - String[] urls = endpoint.getUrl().split(","); - - List urlList = null; - - if (urls != null) { - urlList = Arrays.asList(urls); - } - - try { - - ConsumerBuilder consumerBuilder = new CambriaClientBuilders.ConsumerBuilder() - .usingHosts(urlList).onTopic(endpoint.getEventTopic()) - .knownAs(endpoint.getGroupName(), endpoint.getGroupId()); - - String apiKey = endpoint.getApiKey(); - String apiSecret = endpoint.getApiSecret(); - - if (apiKey != null && apiSecret != null) { - consumerBuilder.authenticatedBy(endpoint.getApiKey(), endpoint.getApiSecret()); - } - - consumer = consumerBuilder.build(); - - } catch (MalformedURLException | GeneralSecurityException e) { - logger.error(RouterCoreMsgs.EVENT_CONSUMER_CREATION_EXCEPTION, e.getLocalizedMessage()); - } - } - - /** - * Method which is called by the Camel process on a scheduled basis. This specific implementation - * reads messages off of the configured topic and schedules tasks to process them . - * - * @return the number of messages that were processed off the event queue - */ - @Override - protected int poll() throws Exception { - - logger.debug("Checking for event on topic: " + endpoint.getEventTopic()); - - int processCount = 0; - - Iterable messages = null; - - messages = consumer.fetch(); - - String topic = endpoint.getEventTopic(); - - for (String message : messages) { - Exchange exchange = endpoint.createExchange(); - exchange.getIn().setBody(message); - getScheduledExecutorService().submit(new EventProcessor(exchange, topic)); - ++processCount; - } - return processCount; - } - - protected void doStop() throws Exception { - super.doStop(); - if (consumer != null) { - consumer.close(); - } - } - - protected void doShutdown() throws Exception { - super.doShutdown(); - if (consumer != null) { - consumer.close(); - } - } - - /** - * Class responsible for processing messages pulled off of the event bus. - */ - private class EventProcessor implements Runnable { - - private Exchange message; - - private String topic; - - EventProcessor(Exchange message, String topic) { - this.message = message; - this.topic = topic; - } - - public void run() { - try { - - MdcContext.initialize(UUID.randomUUID().toString(), "DataRouter", "", "Event-Bus", ""); - - // Sends the message to the next processor in the defined Camel route - getProcessor().process(message); - - Message response = message.getOut(); - if (response != null) { - logger.debug("Routing response: " + response.getBody()); - } - - } catch (Exception e) { - logger.error(RouterCoreMsgs.EVENT_PROCESSING_EXCEPTION, e.getLocalizedMessage()); - } finally { - // log exception if an exception occurred and was not handled - if (message.getException() != null) { - logger.info(RouterCoreMsgs.PROCESS_EVENT, topic, "FAILURE"); - auditLogger.info(RouterCoreMsgs.PROCESS_EVENT, topic, "FAILURE"); - } else { - logger.info(RouterCoreMsgs.PROCESS_EVENT, topic, "SUCCESS"); - auditLogger.info(RouterCoreMsgs.PROCESS_EVENT, topic, "SUCCESS"); - } - } - } - } -} diff --git a/src/main/java/org/openecomp/event/EventBusEndpoint.java b/src/main/java/org/openecomp/event/EventBusEndpoint.java deleted file mode 100644 index 986c897..0000000 --- a/src/main/java/org/openecomp/event/EventBusEndpoint.java +++ /dev/null @@ -1,163 +0,0 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * Copyright © 2017 Amdocs - * ================================================================================ - * 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. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - */ -package org.openecomp.event; - - -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.Metadata; -import org.apache.camel.spi.UriEndpoint; -import org.apache.camel.spi.UriParam; -import org.apache.camel.spi.UriPath; -import org.eclipse.jetty.util.security.Password; - -/** - * Represents a EventBus endpoint. - */ -@UriEndpoint(scheme = "event-bus", syntax = "event-bus:name", - consumerClass = EventBusConsumer.class, title = "event-bus") -public class EventBusEndpoint extends DefaultEndpoint { - @UriPath - @Metadata(required = "true") - private String name; - - @UriParam(label = "eventTopic") - @Metadata(required = "true") - private String eventTopic; - @UriParam(label = "groupName") - @Metadata(required = "true") - private String groupName; - @UriParam(label = "groupId") - @Metadata(required = "true") - private String groupId; - @UriParam(label = "apiKey") - private String apiKey; - @UriParam(label = "apiSecret") - private String apiSecret; - @UriParam(label = "url") - @Metadata(required = "true") - private String url; - @UriParam(label = "poolSize") - @Metadata(required = "true", defaultValue="20") - private int poolSize = 20; - @UriParam(label = "pollingDelay") - @Metadata(required = "true", defaultValue="30000") - private int pollingDelay = 30000; - - public EventBusEndpoint() {} - - public EventBusEndpoint(String uri, EventBusComponent component) { - super(uri, component); - } - - public EventBusEndpoint(String endpointUri) { - super(endpointUri); - } - - public Producer createProducer() throws Exception { - return new EventBusProducer(this); - } - - public Consumer createConsumer(Processor processor) throws Exception { - return new EventBusConsumer(this, processor); - } - - public boolean isSingleton() { - return false; - } - - public void setName(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public String getEventTopic() { - return eventTopic; - } - - public void setEventTopic(String eventTopic) { - this.eventTopic = eventTopic; - } - - public String getGroupName() { - return groupName; - } - - public void setGroupName(String groupName) { - this.groupName = groupName; - } - - public String getGroupId() { - return groupId; - } - - public void setGroupId(String groupId) { - this.groupId = groupId; - } - - public String getApiKey() { - return apiKey == null ? null : Password.deobfuscate(apiKey); - } - - public void setApiKey(String apiKey) { - this.apiKey = apiKey; - } - - public String getApiSecret() { - return apiSecret == null ? null : Password.deobfuscate(apiSecret); - } - - public void setApiSecret(String apiSecret) { - this.apiSecret = apiSecret; - } - - public int getPoolSize() { - return poolSize; - } - - public void setPoolSize(int poolsize) { - this.poolSize = poolsize; - } - - public int getPollingDelay() { - return pollingDelay; - } - - public void setPollingDelay(int pollingDelay) { - this.pollingDelay = pollingDelay; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } -} - diff --git a/src/main/java/org/openecomp/event/EventBusProducer.java b/src/main/java/org/openecomp/event/EventBusProducer.java deleted file mode 100644 index d8902d2..0000000 --- a/src/main/java/org/openecomp/event/EventBusProducer.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * Copyright © 2017 Amdocs - * ================================================================================ - * 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. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - */ -package org.openecomp.event; - -import org.apache.camel.Exchange; -import org.apache.camel.impl.DefaultProducer; - -/** - * The EventBus producer. - */ -public class EventBusProducer extends DefaultProducer { - private EventBusEndpoint endpoint; - - public EventBusProducer(EventBusEndpoint endpoint) { - super(endpoint); - this.endpoint = endpoint; - } - - public void process(Exchange exchange) throws Exception { - // Publishing to event bus is currently not supported - } - -} diff --git a/src/main/java/org/openecomp/logging/RouterCoreMsgs.java b/src/main/java/org/openecomp/logging/RouterCoreMsgs.java deleted file mode 100644 index b23c35a..0000000 --- a/src/main/java/org/openecomp/logging/RouterCoreMsgs.java +++ /dev/null @@ -1,53 +0,0 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * Copyright © 2017 Amdocs - * ================================================================================ - * 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. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - */ -package org.openecomp.logging; - -import com.att.eelf.i18n.EELFResourceManager; -import org.openecomp.cl.eelf.LogMessageEnum; - -public enum RouterCoreMsgs implements LogMessageEnum { - - /** - * Processed event {0}. Result: {1}. - * - * Arguments: {0} = event topic {1} = result - */ - PROCESS_EVENT, - /** - * Arguments: {0} = Processing exception - */ - EVENT_PROCESSING_EXCEPTION, - - /** - * Arguments: {0} = Creation exception - */ - EVENT_CONSUMER_CREATION_EXCEPTION; - - - /** - * Static initializer to ensure the resource bundles for this class are loaded... - */ - static { - EELFResourceManager.loadMessageBundle("logging/RouterCoreMsgs"); - } -} diff --git a/src/main/java/org/openecomp/rest/RestClientComponent.java b/src/main/java/org/openecomp/rest/RestClientComponent.java deleted file mode 100644 index 60d5724..0000000 --- a/src/main/java/org/openecomp/rest/RestClientComponent.java +++ /dev/null @@ -1,53 +0,0 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * Copyright © 2017 Amdocs - * ================================================================================ - * 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. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - */ -package org.openecomp.rest; - -import org.apache.camel.CamelContext; -import org.apache.camel.Endpoint; -import org.apache.camel.impl.UriEndpointComponent; - -import java.util.Map; - - -/** - * Represents the component that manages {@link RestClientEndpoint}. - */ -public class RestClientComponent extends UriEndpointComponent { - - public RestClientComponent() { - super(RestClientEndpoint.class); - } - - public RestClientComponent(CamelContext context) { - super(context, RestClientEndpoint.class); - } - - @Override - protected Endpoint createEndpoint(String uri, String remaining, Map parameters) - throws Exception { - - Endpoint endpoint = new RestClientEndpoint(uri, this); - setProperties(endpoint, parameters); - return endpoint; - } -} diff --git a/src/main/java/org/openecomp/rest/RestClientConsumer.java b/src/main/java/org/openecomp/rest/RestClientConsumer.java deleted file mode 100644 index e082b9e..0000000 --- a/src/main/java/org/openecomp/rest/RestClientConsumer.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * Copyright © 2017 Amdocs - * ================================================================================ - * 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. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - */ -package org.openecomp.rest; - -import org.apache.camel.Processor; -import org.apache.camel.impl.DefaultConsumer; - - -/** - * The RestClient consumer. - */ -public class RestClientConsumer extends DefaultConsumer { - private final RestClientEndpoint endpoint; - - public RestClientConsumer(RestClientEndpoint endpoint, Processor processor) { - super(endpoint, processor); - this.endpoint = endpoint; - } -} diff --git a/src/main/java/org/openecomp/rest/RestClientEndpoint.java b/src/main/java/org/openecomp/rest/RestClientEndpoint.java deleted file mode 100644 index 63c4e0d..0000000 --- a/src/main/java/org/openecomp/rest/RestClientEndpoint.java +++ /dev/null @@ -1,125 +0,0 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * Copyright © 2017 Amdocs - * ================================================================================ - * 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. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - */ -package org.openecomp.rest; - -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.Metadata; -import org.apache.camel.spi.UriEndpoint; -import org.apache.camel.spi.UriParam; -import org.apache.camel.spi.UriPath; - -import java.util.Map; - - -/** - * Represents a RestClient endpoint. - */ -@UriEndpoint(scheme = "ecomp-rest", syntax = "ecomp-rest:op", - consumerClass = RestClientConsumer.class, label = "RestClient2", title = "") -public class RestClientEndpoint extends DefaultEndpoint { - - public static final String CONTEXT_PARAM_CLIENT_CERT = "ecomp-client-cert"; - public static final String CONTEXT_PARAM_KEYSTORE = "ecomp-keystore"; - public static final String CONTEXT_PARAM_KEYSTORE_PWD = "ecomp-keystore-password"; - - public static final String IN_HEADER_URL = "ecomp-url"; - - public static final String OUT_HEADER_RESPONSE_CODE = "ecomp-response-code"; - public static final String OUT_HEADER_RESPONSE_MSG = "ecomp-response-message"; - - @UriPath - @Metadata(required = "true") - private String op; - - @UriParam - private String ecompClientCert; - - @UriParam - private String ecompKeystore; - - @UriParam - private String ecompKeystorePassword; - - - public RestClientEndpoint() {} - - public RestClientEndpoint(String uri, RestClientComponent component) { - super(uri, component); - } - - public RestClientEndpoint(String endpointUri) { - super(endpointUri); - } - - @Override - protected void setProperties(Object bean, Map parameters) throws Exception { - super.setProperties(bean, parameters); - } - - public Producer createProducer() throws Exception { - return new RestClientProducer(this); - } - - public Consumer createConsumer(Processor processor) throws Exception { - return new RestClientConsumer(this, processor); - } - - public boolean isSingleton() { - return true; - } - - public String getOp() { - return op; - } - - public void setOp(String op) { - this.op = op; - } - - public String getEcompClientCert() { - return ecompClientCert; - } - - public void setEcompClientCert(String ecompClientCert) { - this.ecompClientCert = ecompClientCert; - } - - public String getEcompKeystore() { - return ecompKeystore; - } - - public void setEcompKeystore(String ecompKeystore) { - this.ecompKeystore = ecompKeystore; - } - - public String getEcompKeystorePassword() { - return ecompKeystorePassword; - } - - public void setEcompKeystorePassword(String ecompKeystorePassword) { - this.ecompKeystorePassword = ecompKeystorePassword; - } -} diff --git a/src/main/java/org/openecomp/rest/RestClientProducer.java b/src/main/java/org/openecomp/rest/RestClientProducer.java deleted file mode 100644 index 6e36067..0000000 --- a/src/main/java/org/openecomp/rest/RestClientProducer.java +++ /dev/null @@ -1,254 +0,0 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * Copyright © 2017 Amdocs - * ================================================================================ - * 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. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - */ -package org.openecomp.rest; - -import org.apache.camel.Exchange; -import org.apache.camel.impl.DefaultProducer; -import org.eclipse.jetty.util.security.Password; -import org.openecomp.cl.api.Logger; -import org.openecomp.cl.eelf.LoggerFactory; -import org.openecomp.event.EventBusConsumer; - -import org.openecomp.restclient.client.Headers; -import org.openecomp.restclient.client.OperationResult; -import org.openecomp.restclient.client.RestClient; -import org.openecomp.restclient.rest.HttpUtil; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - - -/** - * The EcompRest producer. - */ -public class RestClientProducer extends DefaultProducer { - - private static enum Operation { - GET, PUT, POST, DELETE - } - - private RestClientEndpoint endpoint; - - /** REST client used for sending HTTP requests. */ - private RestClient restClient; - - private Logger logger = LoggerFactory.getInstance().getLogger(RestClientProducer.class); - - - public RestClientProducer(RestClientEndpoint endpoint) { - super(endpoint); - this.endpoint = endpoint; - } - - @Override - public void process(Exchange exchange) { - - // Extract the URL for our REST request from the IN message header. - String url = exchange.getIn().getHeader(RestClientEndpoint.IN_HEADER_URL).toString(); - - // Populate the HTTP Request header values from any values passed in via the - // IN message headers. - Map> headers = populateRestHeaders(exchange); - - if (logger.isDebugEnabled()) { - StringBuilder sb = new StringBuilder(); - sb.append("Process REST request - operation=").append(getOperation(exchange)); - sb.append(" headers=["); - for (String key : headers.keySet()) { - sb.append("{").append(key).append("->").append(headers.get(key)).append("} "); - } - sb.append("]"); - sb.append(" content: ").append(exchange.getIn().getBody()); - logger.debug(sb.toString()); - } - - // Now, invoke the REST client to perform the operation. - OperationResult result = null; - switch (getOperation(exchange)) { - - case GET: - result = getRestClient().get(url, headers, MediaType.APPLICATION_JSON_TYPE); - break; - - case PUT: - result = getRestClient().put(url, exchange.getIn().getBody().toString(), headers, - MediaType.APPLICATION_JSON_TYPE, null); - break; - - case POST: - result = getRestClient().post(url, exchange.getIn().getBody().toString(), headers, - MediaType.APPLICATION_JSON_TYPE, MediaType.APPLICATION_JSON_TYPE); - break; - - case DELETE: - result = getRestClient().delete(url, headers, MediaType.APPLICATION_JSON_TYPE); - break; - - default: - // The supplied operation is not supported. - result = new OperationResult(); - result.setResultCode(Response.Status.BAD_REQUEST.getStatusCode()); - result.setFailureCause("Unsupported HTTP Operation: " + getOperation(exchange)); - - break; - } - - // Populate the OUT message with our result. - exchange.getOut().setHeader(RestClientEndpoint.OUT_HEADER_RESPONSE_CODE, - result.getResultCode()); - if (HttpUtil.isHttpResponseClassSuccess(result.getResultCode())) { - exchange.getOut().setHeader(RestClientEndpoint.OUT_HEADER_RESPONSE_MSG, - responseStatusStringFromResult(result)); - exchange.getOut().setBody(result.getResult()); - } else { - exchange.getOut().setHeader(RestClientEndpoint.OUT_HEADER_RESPONSE_MSG, - result.getFailureCause()); - } - - } - - - /** - * Extracts the requested REST operation from the exchange message. - * - * @param exchange - The Camel exchange to pull the operation from. - * - * @return - The REST operation being requested. - */ - private Operation getOperation(Exchange exchange) { - - String toEndpoint = ((String) exchange.getProperty(Exchange.TO_ENDPOINT)); - - String operation = toEndpoint.substring((toEndpoint.lastIndexOf("://") + 3)); - - int position = operation.indexOf('?'); - if (position >= 0) { - operation = operation.substring(0, position); - } - - return Operation.valueOf(operation.toUpperCase()); - } - - - - /** - * This method extracts values from the IN message which are intended to be used to populate the - * HTTP Header entries for our REST request. - * - * @param exchange - The Camel exchange to extract the HTTP header parameters from. - * - * @return - A map of HTTP header names and values. - */ - private Map> populateRestHeaders(Exchange exchange) { - - Map> headers = new HashMap<>(); - - if (exchange.getIn().getHeader(Headers.FROM_APP_ID) != null) { - headers.put(Headers.FROM_APP_ID, - Arrays.asList(exchange.getIn().getHeader(Headers.FROM_APP_ID).toString())); - } - if (exchange.getIn().getHeader(Headers.TRANSACTION_ID) != null) { - headers.put(Headers.TRANSACTION_ID, - Arrays.asList(exchange.getIn().getHeader(Headers.TRANSACTION_ID).toString())); - } - if (exchange.getIn().getHeader(Headers.RESOURCE_VERSION) != null) { - headers.put(Headers.RESOURCE_VERSION, - Arrays.asList(exchange.getIn().getHeader(Headers.RESOURCE_VERSION).toString())); - } - if (exchange.getIn().getHeader(Headers.ETAG) != null) { - headers.put(Headers.ETAG, Arrays.asList(exchange.getIn().getHeader(Headers.ETAG).toString())); - } - if (exchange.getIn().getHeader(Headers.IF_MATCH) != null) { - headers.put(Headers.IF_MATCH, - Arrays.asList(exchange.getIn().getHeader(Headers.IF_MATCH).toString())); - } - if (exchange.getIn().getHeader(Headers.IF_NONE_MATCH) != null) { - headers.put(Headers.IF_NONE_MATCH, - Arrays.asList(exchange.getIn().getHeader(Headers.IF_NONE_MATCH).toString())); - } - if (exchange.getIn().getHeader(Headers.ACCEPT) != null) { - headers.put(Headers.ACCEPT, - Arrays.asList(exchange.getIn().getHeader(Headers.ACCEPT).toString())); - } - if (exchange.getIn().getHeader("Content-Type") != null) { - headers.put("Content-Type", - Arrays.asList(exchange.getIn().getHeader("Content-Type").toString())); - } - - return headers; - } - - - /** - * This helper method converts an HTTP response code into the associated string. - * - * @param result - A result object to get the response code from. - * - * @return - The string message associated with the supplied response code. - */ - private String responseStatusStringFromResult(OperationResult result) { - - // Not every valid response code is actually represented by the Response.Status - // object, so we need to guard against missing codes, otherwise we throw null - // pointer exceptions when we try to generate our metrics logs... - Response.Status responseStatus = Response.Status.fromStatusCode(result.getResultCode()); - String responseStatusCodeString = ""; - if (responseStatus != null) { - responseStatusCodeString = responseStatus.toString(); - } - - return responseStatusCodeString; - } - - /** - * Instantiate the REST client that will be used for sending our HTTP requests. - * - * @return - An instance of the REST client. - */ - private RestClient getRestClient() { - - if (restClient == null) { - - String keystoreFilename = endpoint.getEcompKeystore(); - String keystorePassword = endpoint.getEcompKeystorePassword(); - String clientCertFilename = endpoint.getEcompClientCert(); - - if (logger.isDebugEnabled()) { - logger.debug("Instantiating REST Client with client_cert=" + clientCertFilename - + " keystore=" + keystoreFilename + " keystorePassword=" + keystorePassword); - } - - // Create REST client for search service - restClient = new RestClient().validateServerHostname(false).validateServerCertChain(true) - .clientCertFile(clientCertFilename) - .clientCertPassword(Password.deobfuscate(keystorePassword)).trustStore(keystoreFilename); - } - - return restClient; - } -} -- cgit 1.2.3-korg