aboutsummaryrefslogtreecommitdiffstats
path: root/sdnr/wt/odlux/core/provider/src/main
diff options
context:
space:
mode:
authorherbert <herbert.eiselt@highstreet-technologies.com>2019-12-14 01:05:47 +0100
committerHerbert Eiselt <herbert.eiselt@highstreet-technologies.com>2019-12-16 12:52:11 +0000
commite6d0d67fdbe3fc70c996c8df33bd65d3b151dfad (patch)
tree0d2da7d1da74c6ebca6b53039741617d35f65d96 /sdnr/wt/odlux/core/provider/src/main
parent6b98928b7b1b0ebc28d2ef286e8c932fca67c305 (diff)
update odlux and featureaggregator
v2 update odlux and featureaggregator bundles Issue-ID: SDNC-1008 Signed-off-by: herbert <herbert.eiselt@highstreet-technologies.com> Change-Id: I0018d7bfa3a0e6896c1b210b539a574af9808e22 Signed-off-by: herbert <herbert.eiselt@highstreet-technologies.com>
Diffstat (limited to 'sdnr/wt/odlux/core/provider/src/main')
-rw-r--r--sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/IndexOdluxBundle.java116
-rw-r--r--sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/IndexServlet.java71
-rw-r--r--sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/OdluxBundleLoaderImpl.java125
-rw-r--r--sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/ResFilesServlet.java88
-rw-r--r--sdnr/wt/odlux/core/provider/src/main/resources/OSGI-INF/blueprint/blueprint.xml39
5 files changed, 439 insertions, 0 deletions
diff --git a/sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/IndexOdluxBundle.java b/sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/IndexOdluxBundle.java
new file mode 100644
index 000000000..73d61a7b3
--- /dev/null
+++ b/sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/IndexOdluxBundle.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.odlux;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.onap.ccsdk.features.sdnr.wt.odlux.model.bundles.OdluxBundle;
+import org.onap.ccsdk.features.sdnr.wt.odlux.model.bundles.OdluxBundleResourceAccess;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class IndexOdluxBundle extends OdluxBundle implements OdluxBundleResourceAccess {
+
+ private static Logger LOG = LoggerFactory.getLogger(IndexOdluxBundle.class);
+
+ private static final String LR = "\n";
+ private static final String BUNDLENAME_APP = "run";
+ private static final String regexRequire = "require\\(\\[(\"" + BUNDLENAME_APP + "\")\\]";
+ private static final String regexFunction = "function[\\ ]*\\((" + BUNDLENAME_APP + ")\\)[\\ ]*\\{";
+ private static final String regexFunctionBody = "(" + BUNDLENAME_APP + "\\.runApplication\\(\\);)";
+ private static final Pattern patternRequire = Pattern.compile(regexRequire);
+ private static final Pattern patternFunction = Pattern.compile(regexFunction);
+ private static final Pattern patternFunctionBody = Pattern.compile(regexFunctionBody);
+
+ public IndexOdluxBundle() {
+ super(null, BUNDLENAME_APP);
+
+ }
+ @Override
+ protected String loadFileContent(URL url)
+ {
+ return loadFileContent(url, OdluxBundleLoaderImpl.getInstance().getLoadedBundles(this.getBundleName()));
+ }
+
+ @Override
+ public String getResourceFileContent(String fn, List<String> bundleNames) {
+ return loadFileContent(this.getResource(fn),bundleNames);
+ }
+
+ private static String loadFileContent(URL url, List<String> bundlesNamesList) {
+ if (url == null) {
+ return null;
+ }
+ LOG.debug("try to load res " + url.toString());
+ StringBuilder sb = new StringBuilder();
+ Matcher matcher;
+ BufferedReader in=null;
+ try {
+ in = new BufferedReader(new InputStreamReader(url.openStream()));
+
+ String inputLine;
+ while ((inputLine = in.readLine()) != null) {
+ if (url.getFile().endsWith("index.html")) {
+ matcher = patternRequire.matcher(inputLine);
+ if (matcher.find()) {
+ inputLine = inputLine.substring(0, matcher.start(1)) + "\"" + String.join("\",\"", bundlesNamesList)
+ + "\"" + inputLine.substring(matcher.end(1));
+ }
+ matcher = patternFunction.matcher(inputLine);
+ if (matcher.find()) {
+ inputLine = inputLine.substring(0, matcher.start(1)) + String.join(",", bundlesNamesList)
+ + inputLine.substring(matcher.end(1));
+ }
+ matcher = patternFunctionBody.matcher(inputLine);
+ if (matcher.find()) {
+ String hlp = "";
+ for (String bundle : bundlesNamesList) {
+ if (!bundle.equals(BUNDLENAME_APP)) {
+ hlp += bundle + ".register();" + LR;
+ }
+ }
+ inputLine = inputLine.substring(0, matcher.start(1)) + hlp
+ + inputLine.substring(matcher.start(1));
+ }
+ }
+ sb.append(inputLine + LR);
+ }
+
+ } catch (IOException e) {
+ LOG.warn("could not load resfile {} : {}", url, e.getMessage());
+ return null;
+ }
+ finally {
+ try {
+ if (in != null) {
+ in.close();
+ }
+ } catch (IOException e) {
+
+ }
+ }
+
+ return sb.toString();
+ }
+
+}
diff --git a/sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/IndexServlet.java b/sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/IndexServlet.java
new file mode 100644
index 000000000..d6d466ab9
--- /dev/null
+++ b/sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/IndexServlet.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.odlux;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.nio.file.Files;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class IndexServlet extends HttpServlet {
+
+ private static final long serialVersionUID = 3039669437157215355L;
+ private static Logger LOG = LoggerFactory.getLogger(IndexServlet.class);
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+ if (req.getRequestURI() != null && req.getRequestURI().contains("favicon.ico")) {
+ this.sendFile(resp, "etc/favicon.ico","image/x-icon");
+ } else {
+
+ LOG.debug("redirect to odlux/index.html");
+ resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
+ resp.setHeader("Location", "odlux/index.html");
+ }
+ }
+
+ private void sendFile(HttpServletResponse response, String filename, String mimeType) {
+ File f = new File(filename);
+ if (f.exists()) {
+ try {
+ byte[] bytes = Files.readAllBytes(f.toPath());
+ response.setContentType(mimeType);
+ response.setContentLength(bytes.length);
+ response.setStatus(HttpURLConnection.HTTP_OK);
+ OutputStream os = response.getOutputStream();
+ os.write(bytes);
+ os.flush();
+ os.close();
+ } catch (IOException e) {
+ LOG.debug("problem sending {}: {}", filename, e);
+ }
+ } else {
+ LOG.debug("file not found: {}",filename);
+ response.setStatus(HttpURLConnection.HTTP_NOT_FOUND);
+ }
+ }
+
+}
diff --git a/sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/OdluxBundleLoaderImpl.java b/sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/OdluxBundleLoaderImpl.java
new file mode 100644
index 000000000..205c96129
--- /dev/null
+++ b/sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/OdluxBundleLoaderImpl.java
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.odlux;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.concurrent.ConcurrentSkipListSet;
+import org.onap.ccsdk.features.sdnr.wt.odlux.model.bundles.OdluxBundle;
+import org.onap.ccsdk.features.sdnr.wt.odlux.model.bundles.OdluxBundleLoader;
+import org.onap.ccsdk.features.sdnr.wt.odlux.model.bundles.OdluxBundleResourceAccess;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class OdluxBundleLoaderImpl implements OdluxBundleLoader {
+
+ private final static Logger LOG = LoggerFactory.getLogger(OdluxBundleLoaderImpl.class);
+
+ private static OdluxBundleLoaderImpl singleton = null;
+
+ private Object lock;
+ // private List<OdluxBundle> bundles;
+ private ConcurrentSkipListSet<OdluxBundle> bundles2;
+ private Comparator<OdluxBundle> sortorderbundlecomparator;
+
+ public OdluxBundleLoaderImpl() {
+ if (singleton != null) {
+ LOG.error("Multiple intializations of singleton");
+ } else {
+ lock = new Object();
+ sortorderbundlecomparator = (arg0, arg1) -> {
+ int diff = arg0.getIndex() - arg1.getIndex();
+ return diff > 0 ? 1 : diff < 0 ? -1 : 0;
+ };
+ bundles2 = new ConcurrentSkipListSet<>(sortorderbundlecomparator);
+
+ singleton = this;
+ }
+ }
+
+ public static OdluxBundleLoaderImpl getInstance() {
+ if (singleton == null) {
+ LOG.warn("Test initialization order");
+ new OdluxBundleLoaderImpl();
+ }
+ return singleton;
+ }
+
+ @Override
+ public int getNumberOfBundles() {
+ synchronized (lock) {
+ return this.bundles2.size();
+ }
+ }
+
+ @Override
+ public void addBundle(OdluxBundle bundle) {
+ LOG.debug("odlux bundle " + bundle.getBundleName() + " added");
+ this.bundles2.add(bundle);
+
+
+ }
+
+ @Override
+ public void removeBundle(OdluxBundle bundle) {
+ this.bundles2.remove(bundle);
+ LOG.debug("odlux bundle " + bundle.getBundleName() + " removed");
+
+ }
+
+ public List<String> getLoadedBundles(String myBundleName) {
+ List<String> list = new ArrayList<>();
+ for (OdluxBundle b : bundles2) {
+ list.add(b.getBundleName());
+ }
+ list.add(myBundleName);
+ return list;
+ }
+
+ private List<String> getBundleNames(String myBundleName) {
+ final List<String> names = new ArrayList<>();
+ for (OdluxBundle b : bundles2) {
+ names.add(b.getBundleName());
+ }
+ names.add(myBundleName);
+ return names;
+ }
+
+ public String getResourceContent(String fn, OdluxBundleResourceAccess indexBundle) {
+ String fileContent = null;
+
+ if (indexBundle.hasResource(fn)) {
+ fileContent = indexBundle.getResourceFileContent(fn, getBundleNames(indexBundle.getBundleName()));
+ } else {
+ LOG.debug("not found in framework res. try to find in applications");
+ final Iterator<OdluxBundle> it = bundles2.iterator();
+ while (it.hasNext()) {
+ OdluxBundle b = it.next();
+ if (b.hasResource(fn)) {
+ LOG.debug("found res in " + b.getBundleName());
+ fileContent = b.getResourceFileContent(fn);
+ break;
+ }
+ }
+ }
+ return fileContent;
+ }
+
+}
diff --git a/sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/ResFilesServlet.java b/sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/ResFilesServlet.java
new file mode 100644
index 000000000..fe00662aa
--- /dev/null
+++ b/sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/ResFilesServlet.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.odlux;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.ccsdk.features.sdnr.wt.odlux.model.bundles.OdluxBundleLoader;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ResFilesServlet extends HttpServlet {
+
+ private static final long serialVersionUID = -6807215213921798293L;
+ private static Logger LOG = LoggerFactory.getLogger(ResFilesServlet.class);
+
+
+ private final IndexOdluxBundle indexBundle;
+
+ public ResFilesServlet() {
+ super();
+ indexBundle = new IndexOdluxBundle();
+ }
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+
+ final String fn = req.getRequestURI();
+ LOG.debug("Get request with for URI: {}", fn);
+
+ OdluxBundleLoader odluxBundleLoader = OdluxBundleLoaderImpl.getInstance();
+ if (odluxBundleLoader != null) {
+ String fileContent = odluxBundleLoader.getResourceContent(fn, indexBundle);
+ if (fileContent != null) {
+ //Store header info
+ String mimeType = getMimeType(fn);
+ byte[] byteContent = fileContent.getBytes(java.nio.charset.StandardCharsets.UTF_8);
+ int length = byteContent.length;
+
+ LOG.debug("Found file in resources. Name {} mimetype {} length {} and write to output stream", fn, mimeType, length);
+ resp.setContentType(mimeType);
+ resp.setContentLength(length);
+ resp.setStatus(HttpURLConnection.HTTP_OK);
+ OutputStream os = resp.getOutputStream();
+ os.write(byteContent);
+ os.flush();
+ os.close();
+ } else {
+ LOG.debug("File {} not found in res.", fn);
+ resp.setStatus(HttpURLConnection.HTTP_NOT_FOUND);
+ }
+ } else {
+ LOG.debug("BundleLoaderInstance to found.", fn);
+ resp.setStatus(HttpURLConnection.HTTP_NOT_FOUND);
+ }
+ }
+
+ public String loadFileContent(String filename) {
+ return this.indexBundle.getResourceFileContent(filename);
+ }
+
+ //Provide own function that can be overloaded for test
+ public String getMimeType(String fileName) {
+ return getServletContext().getMimeType(fileName);
+ }
+
+}
diff --git a/sdnr/wt/odlux/core/provider/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/sdnr/wt/odlux/core/provider/src/main/resources/OSGI-INF/blueprint/blueprint.xml
new file mode 100644
index 000000000..5dab578de
--- /dev/null
+++ b/sdnr/wt/odlux/core/provider/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns:jaxrs="http://cxf.apache.org/blueprint/jaxrs">
+
+ <bean id="indexServlet"
+ class="org.onap.ccsdk.features.sdnr.wt.odlux.IndexServlet">
+ </bean>
+
+ <service interface="javax.servlet.http.HttpServlet" ref="indexServlet">
+ <service-properties>
+ <entry key="alias" value="/index2.html" />
+ </service-properties>
+ </service>
+
+ <bean id="indexServlet2"
+ class="org.onap.ccsdk.features.sdnr.wt.odlux.IndexServlet">
+ </bean>
+
+ <service interface="javax.servlet.http.HttpServlet" ref="indexServlet2">
+ <service-properties>
+ <entry key="alias" value="/favicon.ico" />
+ </service-properties>
+ </service>
+
+ <bean id="resFilesServlet"
+ class="org.onap.ccsdk.features.sdnr.wt.odlux.ResFilesServlet">
+ </bean>
+
+ <service interface="javax.servlet.http.HttpServlet" ref="resFilesServlet">
+ <service-properties>
+ <entry key="alias" value="/odlux" />
+ </service-properties>
+ </service>
+ <bean id="loadersvc" class="org.onap.ccsdk.features.sdnr.wt.odlux.OdluxBundleLoaderImpl"/>
+ <service id="serviceRegistration" interface="org.onap.ccsdk.features.sdnr.wt.odlux.model.bundles.OdluxBundleLoader" ref="loadersvc"/>
+
+</blueprint>