diff options
Diffstat (limited to 'sdnr/wt/odlux/core/provider')
9 files changed, 522 insertions, 0 deletions
diff --git a/sdnr/wt/odlux/core/provider/pom.xml b/sdnr/wt/odlux/core/provider/pom.xml new file mode 100644 index 000000000..3ba52803e --- /dev/null +++ b/sdnr/wt/odlux/core/provider/pom.xml @@ -0,0 +1,104 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>org.onap.ccsdk.features.sdnr.wt</groupId> + <artifactId>sdnr-wt-odlux-core-provider</artifactId> + <version>0.4.1-SNAPSHOT</version> + <name>ccsdk-features-sdnr-wt :: ${project.artifactId}</name> + <packaging>bundle</packaging> + + <parent> + <groupId>org.onap.ccsdk.parent</groupId> + <artifactId>binding-parent</artifactId> + <version>1.2.1-SNAPSHOT</version> + <relativePath /> + </parent> + <licenses> + <license> + <name>Apache License, Version 2.0</name> + <url>http://www.apache.org/licenses/LICENSE-2.0</url> + </license> + </licenses> + <dependencies> + <dependency> + <groupId>org.onap.ccsdk.features.sdnr.wt</groupId> + <artifactId>sdnr-wt-odlux-core-model</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>sdnr-wt-odlux-framework</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-server</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.osgi</groupId> + <artifactId>org.osgi.core</artifactId> + </dependency> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>org.osgi.compendium</artifactId> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </dependency> + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + </dependency> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>javax.servlet-api</artifactId> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-simple</artifactId> + <scope>test</scope> + </dependency> + </dependencies> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <source>1.8</source> + <target>1.8</target> + </configuration> + </plugin> + <plugin> + <artifactId>maven-checkstyle-plugin</artifactId> + <configuration> + <skip>true</skip> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <extensions>true</extensions> + <configuration> + <instructions> + <Import-Package>org.onap.ccsdk.features.sdnr.wt.odlux.*;resolution:=optional,*; + </Import-Package> + <Embed-Dependency>sdnr-wt-odlux-framework;inline=true</Embed-Dependency> + <Embed-Transitive>true</Embed-Transitive> + <Export-Package>${project.groupId}.*</Export-Package> + </instructions> + </configuration> + </plugin> + </plugins> + </build> +</project>
\ No newline at end of file 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..ae0d0496b --- /dev/null +++ b/sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/IndexOdluxBundle.java @@ -0,0 +1,132 @@ +/******************************************************************************* + * ============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.ArrayList; +import java.util.Comparator; +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.OdluxBundleList; +import org.onap.ccsdk.features.sdnr.wt.odlux.model.bundles.OdluxBundleLoaderImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class IndexOdluxBundle extends OdluxBundle { + + private static final String LR = "\n"; + private static Logger LOG = LoggerFactory.getLogger(IndexOdluxBundle.class); + 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 this.loadFileContent(url, null); + } + + protected String loadFileContent(URL url, List<String> bundles) { + if (url == null) + return null; + LOG.debug("try to load res " + url.toString()); + StringBuilder sb = new StringBuilder(); + Matcher matcher; + BufferedReader in; + try { + in = new BufferedReader(new InputStreamReader(url.openStream())); + + String inputLine; + if (bundles == null) { + bundles = this.getLoadedBundles(); + } + 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("\",\"", bundles) + + "\"" + inputLine.substring(matcher.end(1)); + } + matcher = patternFunction.matcher(inputLine); + if (matcher.find()) { + inputLine = inputLine.substring(0, matcher.start(1)) + String.join(",", bundles) + + inputLine.substring(matcher.end(1)); + } + matcher = patternFunctionBody.matcher(inputLine); + if (matcher.find()) { + String hlp = ""; + for (String bundle : bundles) { + 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); + } + in.close(); + } catch (IOException e) { + LOG.warn("could not load resfile " + url.toString() + ": " + e.getMessage()); + return null; + } + + return sb.toString(); + } + + private List<String> getLoadedBundles() { + List<OdluxBundle> bundles = OdluxBundleLoaderImpl.getInstance().getBundles(); + List<String> list = new ArrayList<String>(); + bundles.sort(sortorderbundlecomparator); + for (OdluxBundle b : bundles) { + list.add(b.getBundleName()); + } + list.add(this.getBundleName()); + return list; + } + + private final Comparator<OdluxBundle> sortorderbundlecomparator = new Comparator<OdluxBundle>() { + + @Override + public int compare(OdluxBundle arg0, OdluxBundle arg1) { + + int diff = arg0.getIndex() - arg1.getIndex(); + return diff > 0 ? 1 : diff < 0 ? -1 : 0; + } + }; + + public String getResourceFileContent(String fn, List<String> bundleNames) { + return this.loadFileContent(this.getResource(fn),bundleNames); + } + public Comparator<OdluxBundle> getBundleSorter() { + return this.sortorderbundlecomparator; + } +} 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..8b92774f9 --- /dev/null +++ b/sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/IndexServlet.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * ============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 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 { + LOG.debug("redirect to odlux/index.html"); + resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); + resp.setHeader("Location", "odlux/index.html"); + } + +} 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..31544c2eb --- /dev/null +++ b/sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/ResFilesServlet.java @@ -0,0 +1,101 @@ +/******************************************************************************* + * ============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.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +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.IndexOdluxBundle; +import org.onap.ccsdk.features.sdnr.wt.odlux.model.bundles.OdluxBundle; +import org.onap.ccsdk.features.sdnr.wt.odlux.model.bundles.OdluxBundleList; +import org.onap.ccsdk.features.sdnr.wt.odlux.model.bundles.OdluxBundleLoaderImpl; +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(); + OdluxBundleLoaderImpl.getInstance(); + } + + private List<String> getBundleNames(final List<OdluxBundle> bundles) { + final List<String> names = new ArrayList<String>(); + for (OdluxBundle b : bundles) + names.add(b.getBundleName()); + names.add(this.indexBundle.getBundleName()); + return names; + } + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + + LOG.debug("get req: " + req.getRequestURI().toString()); + final String fn = req.getRequestURI().toString(); + String fileContent = null; + final List<OdluxBundle> bundles = OdluxBundleLoaderImpl.getInstance().getBundles(); + if (indexBundle.hasResource(fn)) { + bundles.sort(this.indexBundle.getBundleSorter()); + fileContent = indexBundle.getResourceFileContent(fn, this.getBundleNames(bundles)); + } else { + LOG.debug("not found in framework res. try to find in applications"); + synchronized (bundles) { + final Iterator<OdluxBundle> it = bundles.iterator(); + while (it.hasNext()) { + OdluxBundle b = it.next(); + if (b.hasResource(fn)) { + LOG.debug("found res in " + b.getBundleName()); + fileContent = b.getResourceFileContent(fn); + break; + } + } + } + } + if (fileContent != null) { + LOG.debug("found " + fn + " in res. write to output stream"); + resp.setStatus(200); + OutputStream os = resp.getOutputStream(); + os.write(fileContent.getBytes(java.nio.charset.StandardCharsets.UTF_8)); + os.flush(); + } else { + LOG.debug("file " + fn + " not found in res."); + resp.setStatus(404); + + } + } + + public String loadFileContent(String filename) { + return this.indexBundle.getResourceFileContent(filename); + } + +} diff --git a/sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/RootServlet.java b/sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/RootServlet.java new file mode 100644 index 000000000..fa49536ca --- /dev/null +++ b/sdnr/wt/odlux/core/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/odlux/RootServlet.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * ============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 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 RootServlet extends HttpServlet { + + + /** + * + */ + private static final long serialVersionUID = -2622614831559561459L; + private static Logger LOG = LoggerFactory.getLogger(RootServlet.class); + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + + LOG.debug("redirect to index2.html"); + resp.sendRedirect("index2.html"); + } +} 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..bf726ac93 --- /dev/null +++ b/sdnr/wt/odlux/core/provider/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -0,0 +1,40 @@ +<?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="rootServlet" --> +<!-- class="com.highstreet.technologies.odlux.RootServlet"> --> +<!-- </bean> --> + +<!-- <service interface="javax.servlet.http.HttpServlet" ref="rootServlet"> --> +<!-- <service-properties> --> +<!-- <entry key="alias" value="/" /> --> +<!-- </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.model.bundles.OdluxBundleLoaderImpl"/> + <service id="serviceRegistration" interface="org.onap.ccsdk.features.sdnr.wt.odlux.model.bundles.OdluxBundleLoader" ref="loadersvc"/> + +</blueprint> diff --git a/sdnr/wt/odlux/core/provider/src/test/java/LoadResourcesTest.java b/sdnr/wt/odlux/core/provider/src/test/java/LoadResourcesTest.java new file mode 100644 index 000000000..b8a68f166 --- /dev/null +++ b/sdnr/wt/odlux/core/provider/src/test/java/LoadResourcesTest.java @@ -0,0 +1,26 @@ +import static org.junit.Assert.*; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.odlux.ResFilesServlet; + +import com.opensymphony.xwork2.util.ClassLoaderUtil; + +public class LoadResourcesTest { + + @Test + public void test() { + ResFilesServlet servlet = new ResFilesServlet(); + String indexhtml=null; + indexhtml=servlet.loadFileContent("odlux/index.html"); + assertNotNull(indexhtml); + final String regex = "require\\(\\[\"run\".*\\]"; + final Pattern pattern = Pattern.compile(regex,Pattern.MULTILINE); + final Matcher matcher = pattern.matcher(indexhtml); + System.out.println(indexhtml); + assertTrue(matcher.find()); + } + +} diff --git a/sdnr/wt/odlux/core/provider/src/test/resources/log4j.properties b/sdnr/wt/odlux/core/provider/src/test/resources/log4j.properties new file mode 100644 index 000000000..142663bd2 --- /dev/null +++ b/sdnr/wt/odlux/core/provider/src/test/resources/log4j.properties @@ -0,0 +1,12 @@ +log4j.rootLogger=INFO, out + +log4j.logger.org.apache.camel.impl.converter=WARN +log4j.logger.org.apache.camel.management=WARN +log4j.logger.org.apache.camel.impl.DefaultPackageScanClassResolver=WARN +log4j.logger.org.springframework=ERROR + +# CONSOLE appender not used by default +log4j.appender.out=org.apache.log4j.ConsoleAppender +log4j.appender.out.layout=org.apache.log4j.PatternLayout +log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n + diff --git a/sdnr/wt/odlux/core/provider/src/test/resources/odlux/index.html b/sdnr/wt/odlux/core/provider/src/test/resources/odlux/index.html new file mode 100644 index 000000000..4f4584dd9 --- /dev/null +++ b/sdnr/wt/odlux/core/provider/src/test/resources/odlux/index.html @@ -0,0 +1,24 @@ +<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <!-- <link rel="stylesheet" href="./vendor.css" > -->
+ <title>O D L UX</title>
+</head>
+
+<body>
+ <div id="app"></div>
+ <script type="text/javascript" src="./require.js"></script>
+ <script type="text/javascript" src="./config.js"></script>
+ <script>
+ // run the application
+ require(["run"], function (run) {
+ run.runApplication();
+ });
+ </script>
+</body>
+
+</html>
\ No newline at end of file |