From 1b47683183e05c39e55d14c904caf073b65825ef Mon Sep 17 00:00:00 2001 From: Dan Timoney Date: Wed, 15 Feb 2017 15:09:44 -0500 Subject: Initial commit for OpenECOMP SDN-C northbound Change-Id: Iffe4d4fbcfd21ecbc1000238354094cc064298ce Signed-off-by: Dan Timoney --- vnftools/provider/pom.xml | 83 +++++++++ .../java/org/openecomp/sdnc/vnftools/VnfTools.java | 205 +++++++++++++++++++++ .../openecomp/sdnc/vnftools/VnfToolsActivator.java | 87 +++++++++ .../src/main/resources/l3ucpetools.properties | 23 +++ 4 files changed, 398 insertions(+) create mode 100644 vnftools/provider/pom.xml create mode 100644 vnftools/provider/src/main/java/org/openecomp/sdnc/vnftools/VnfTools.java create mode 100644 vnftools/provider/src/main/java/org/openecomp/sdnc/vnftools/VnfToolsActivator.java create mode 100644 vnftools/provider/src/main/resources/l3ucpetools.properties (limited to 'vnftools/provider') diff --git a/vnftools/provider/pom.xml b/vnftools/provider/pom.xml new file mode 100644 index 00000000..cce9e246 --- /dev/null +++ b/vnftools/provider/pom.xml @@ -0,0 +1,83 @@ + + + 4.0.0 + + org.openecomp.sdnc.northbound + vnftools + 1.0.0 + + vnftools-provider + bundle + VNF Tools Plugin - Provider + http://maven.apache.org + + UTF-8 + + + + junit + junit + ${junit.version} + test + + + org.openecomp.sdnc.core + sli-common + ${sdnctl.sli.version} + compile + + + org.openecomp.sdnc.core + sli-provider + ${sdnctl.sli.version} + compile + + + equinoxSDK381 + org.eclipse.osgi + ${equinox.osgi.version} + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + jcl-over-slf4j + ${slf4j.version} + + + + org.openecomp.sdnc.core + sliPluginUtils-provider + ${sdnctl.slipluginutils.version} + jar + compile + + + + + + + + + org.apache.felix + maven-bundle-plugin + ${bundle.plugin.version} + true + + + org.openecomp.sdnc.vnftools + org.openecomp.sdnc.vnftools.VnfToolsActivator + org.openecomp.sdnc.vnftools + org.openecomp.sdnc.*,org.osgi.framework.*,org.slf4j.*,java.net.*,org.apache.commons.* + *;scope=compile|runtime;artifactId=!sli-common|org.eclipse.osgi|mysql-connector-java|slf4j-api|jcl-over-slf4j|xml-apis|InetAddress|commons-lang3 + true + + + + + + + diff --git a/vnftools/provider/src/main/java/org/openecomp/sdnc/vnftools/VnfTools.java b/vnftools/provider/src/main/java/org/openecomp/sdnc/vnftools/VnfTools.java new file mode 100644 index 00000000..52864961 --- /dev/null +++ b/vnftools/provider/src/main/java/org/openecomp/sdnc/vnftools/VnfTools.java @@ -0,0 +1,205 @@ +/*- + * ============LICENSE_START======================================================= + * openECOMP : SDN-C + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * 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========================================================= + */ + +package org.openecomp.sdnc.vnftools; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import org.openecomp.sdnc.sli.SvcLogicContext; +import org.openecomp.sdnc.sli.SvcLogicException; +import org.openecomp.sdnc.sli.SvcLogicJavaPlugin; +import org.openecomp.sdnc.sli.SliPluginUtils.SliPluginUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class VnfTools implements SvcLogicJavaPlugin { + // ========== FIELDS ========== + + private static final Logger LOG = LoggerFactory.getLogger(VnfTools.class); + + // ========== CONSTRUCTORS ========== + + public VnfTools(Properties props) { + if (props != null) { + LOG.debug("props is not null."); + } + } + + + public void checkIfActivateReady( Map parameters, SvcLogicContext ctx ) throws SvcLogicException { + LOG.debug("Checking if enough data is available to send the NCS Activate request..."); + + SliPluginUtils.checkParameters(parameters, new String[]{"return-key"}, LOG); + final String returnKey = parameters.get("return-key"); + ctx.setAttribute(returnKey, "true"); + + } + + /** + * DG node performs a java String.contains(String) and writes true or false + * to a key in context memory. + * @param parameters Hashmap in context memory must contain the following: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
KeyDescription
string_to_searchString to perform java String.contains(String) on
string_to_findString to find in the string_to_search
result_ctx_stringContext memory key to write the result ("true" or "false") to
+ * @param ctx Reference to context memory + * @throws SvcLogicException + */ + public void stringContains( Map parameters, SvcLogicContext ctx ) throws SvcLogicException { + SliPluginUtils.checkParameters(parameters, new String[]{"string_to_search","string_to_find","result_ctx_string"}, LOG); + ctx.setAttribute(parameters.get("result_ctx_string"), Boolean.toString(parameters.get("string_to_search").contains(parameters.get("string_to_find")))); + } + + + public void generateName( Map parameters, SvcLogicContext ctx ) throws SvcLogicException { + LOG.debug("generateName"); + + SliPluginUtils.checkParameters(parameters, new String[]{"base","suffix","return-path"}, LOG); + + String base = parameters.get("base"); + ctx.setAttribute( parameters.get("return-path"), base.substring(0, base.length() - 4) + parameters.get("suffix") + base.substring(base.length() - 2) ); + } + + + private boolean matches(String str1, String str2) { + if (str1 == null) { + if (str2 == null) { + return true; + } else { + return false; + } + } else { + if (str2 == null) { + return false; + } else { + return str1.equals(str2); + } + } + } + + private void setIfNotNull(String property, String value, SvcLogicContext ctx) { + if (value != null) { + LOG.debug("Setting " + property + " to " + value); + ctx.setAttribute(property, value); + } + } + + /* + * Moves an array element from one index to another + */ + private void copyArrayEntry(String srcRoot, String destRoot, SvcLogicContext ctx) { + LOG.debug("copyArrayEntry called: srcRoot=" + srcRoot + ", destRoot=" + destRoot); + + // Record all of the source keys + List keysToMove = new ArrayList(); + for (String key : ctx.getAttributeKeySet()) { + if (key.startsWith(srcRoot)) { + keysToMove.add(key); + } + } + + // Now loop through and copy those keys to the destination, and then delete the source + for (String key : keysToMove) { + String suffix = key.substring(srcRoot.length()); + LOG.debug("Move " + key + " to " + destRoot + suffix); + ctx.setAttribute(destRoot + suffix, ctx.getAttribute(key)); + ctx.setAttribute(key, null); + } + + } + + public void printContext(Map parameters, SvcLogicContext ctx) throws SvcLogicException { + if (parameters == null) { + throw new SvcLogicException("no parameters passed"); + } + + String fileName = parameters.get("filename"); + + if ((fileName == null) || (fileName.length() == 0)) { + throw new SvcLogicException("printContext requires 'filename' parameter"); + } + + PrintStream pstr = null; + + try { + pstr = new PrintStream(new FileOutputStream(new File(fileName), true)); + } catch (Exception e) { + throw new SvcLogicException("Cannot open file " + fileName, e); + } + pstr.println("#######################################"); + for (String attr : ctx.getAttributeKeySet()) { + pstr.println(attr + " = " + ctx.getAttribute(attr)); + } + pstr.flush(); + pstr.close(); + } + + static int getArrayLength( SvcLogicContext ctx, String key ) { + try { + return Integer.parseInt(ctx.getAttribute(key)); + } catch( NumberFormatException e ) {} + + return 0; + } + + static int getArrayLength( SvcLogicContext ctx, String key, String debug ) { + try { + return Integer.parseInt(ctx.getAttribute(key)); + } catch( NumberFormatException e ) { + LOG.debug(debug); + } + + return 0; + } + + /** + * Returns true if string is null or empty. + * @param str + * @return + */ + private static boolean stringIsBlank( String str ) { + return str == null || str.isEmpty(); + } + +} diff --git a/vnftools/provider/src/main/java/org/openecomp/sdnc/vnftools/VnfToolsActivator.java b/vnftools/provider/src/main/java/org/openecomp/sdnc/vnftools/VnfToolsActivator.java new file mode 100644 index 00000000..7e8e615a --- /dev/null +++ b/vnftools/provider/src/main/java/org/openecomp/sdnc/vnftools/VnfToolsActivator.java @@ -0,0 +1,87 @@ +/*- + * ============LICENSE_START======================================================= + * openECOMP : SDN-C + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * 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========================================================= + */ + +package org.openecomp.sdnc.vnftools; + +import java.io.File; +import java.io.FileInputStream; +import java.util.LinkedList; +import java.util.List; +import java.util.Properties; + +import org.openecomp.sdnc.sli.ConfigurationException; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceRegistration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class VnfToolsActivator implements BundleActivator { + + private static final String VNFTOOLS_PROP_VAR = "/vnftools.properties"; + private static final String SDNC_CONFIG_DIR = "SDNC_CONFIG_DIR"; + + @SuppressWarnings("rawtypes") + private List registrations = new LinkedList(); + + private static final Logger LOG = LoggerFactory.getLogger(VnfToolsActivator.class); + + @Override + public void start(BundleContext ctx) throws Exception { + // Read properties + Properties props = new Properties(); + + String propDir = System.getenv(SDNC_CONFIG_DIR); + if (propDir == null) { + propDir = "/opt/sdnc/data/properties"; + } + + String propPath = propDir + VNFTOOLS_PROP_VAR; + + File propFile = new File(propPath); + + if (!propFile.exists()) { + props = null; + } else { + + try { + props.load(new FileInputStream(propFile)); + } catch (Exception e) { + throw new ConfigurationException("Could not load properties file " + propPath, e); + } + } + VnfTools plugin = new VnfTools(props); + + LOG.info("Registering service " + plugin.getClass().getName()); + registrations.add(ctx.registerService(plugin.getClass().getName(), plugin, null)); + } + + @Override + public void stop(BundleContext ctx) throws Exception { + + for (@SuppressWarnings("rawtypes") + ServiceRegistration registration : registrations) { + registration.unregister(); + registration = null; + } + } + +} diff --git a/vnftools/provider/src/main/resources/l3ucpetools.properties b/vnftools/provider/src/main/resources/l3ucpetools.properties new file mode 100644 index 00000000..1abb05a0 --- /dev/null +++ b/vnftools/provider/src/main/resources/l3ucpetools.properties @@ -0,0 +1,23 @@ +### +# ============LICENSE_START======================================================= +# openECOMP : SDN-C +# ================================================================================ +# Copyright (C) 2017 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# 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========================================================= +### + +changeorder.timeout=86400 +breakfix.timeout=7200 -- cgit 1.2.3-korg