Backend extensibility 33/101533/3
authorMichaelMorris <michael.morris@est.tech>
Sat, 8 Feb 2020 22:55:49 +0000 (22:55 +0000)
committerOfir Sonsino <ofir.sonsino@intl.att.com>
Tue, 18 Feb 2020 16:06:37 +0000 (16:06 +0000)
Issue-ID: SDC-2761
Change-Id: I9287e0255fdda8da61cafc4b761190c8992b9aff
Signed-off-by: MichaelMorris <michael.morris@est.tech>
.gitignore
catalog-be/pom.xml
catalog-be/sdc-backend/Dockerfile
catalog-be/sdc-backend/context.xml.template [new file with mode: 0644]
catalog-be/src/main/java/org/openecomp/sdc/be/plugins/CsarEntryGenerator.java [new file with mode: 0644]
catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CsarUtils.java
catalog-be/src/main/java/org/openecomp/sdc/config/CatalogBESpringConfig.java

index 2d5041f..33ad652 100644 (file)
@@ -186,6 +186,7 @@ sdc-os-chef/.idea/*
 catalog-be/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/files/default/ecomp-error-configuration.yaml
 catalog-be/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/files/default/error-configuration.yaml
 catalog-be/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/files/default/logback.xml
+catalog-be/sdc-backend/context.xml
 
 test-apis-ci/sdc-api-tests/chef-repo/cookbooks/sdc-api-tests/files/default/testSuites/*
  
index fe52c62..cbfe98b 100644 (file)
             </activation>
             <build>
                 <plugins>
+                    <plugin>
+                        <artifactId>maven-antrun-plugin</artifactId>
+                        <version>1.8</version>
+                        <executions>
+                            <execution>
+                                <id>copy-context-file</id>
+                                <phase>validate</phase>
+                                <configuration>
+                                    <target>
+                                        <copy file="sdc-backend/context.xml.template" tofile="sdc-backend/context.xml"/>
+                                    </target>
+                                </configuration>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                            </execution>
+                            <execution>
+                                <id>set-version-in-context-file</id>
+                                <phase>generate-resources</phase>
+                                <configuration>
+                                    <target>
+                                        <replace file="sdc-backend/context.xml">
+                                            <replacetoken>projectversion</replacetoken>
+                                            <replacevalue>${project.version}</replacevalue>
+                                        </replace>
+                                    </target>
+                                </configuration>
+                                <goals>
+                                    <goal>run</goal>
+                               </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-resources-plugin</artifactId>
             </build>
         </profile>
     </profiles>
-</project>
\ No newline at end of file
+</project>
index fc0c9cf..2e23d41 100644 (file)
@@ -4,7 +4,8 @@ COPY chef-solo /root/chef-solo/
 
 COPY chef-repo/cookbooks/. /root/chef-solo/cookbooks/
 
-ADD --chown=jetty:jetty catalog-be-*.war       ${JETTY_BASE}/webapps/
+ADD --chown=jetty:jetty catalog-be-*.war       ${JETTY_BASE}/webappwar/
+ADD --chown=jetty:jetty context.xml       ${JETTY_BASE}/webapps/
 
 USER root
 
diff --git a/catalog-be/sdc-backend/context.xml.template b/catalog-be/sdc-backend/context.xml.template
new file mode 100644 (file)
index 0000000..1f1741f
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0"  encoding="UTF-8"?>
+<!DOCTYPE Configure PUBLIC
+    "-//Mort Bay Consulting//DTD Configure//EN"
+    "http://www.eclipse.org/jetty/configure_9_0.dtd">
+
+<Configure class="org.eclipse.jetty.webapp.WebAppContext">
+     <Set name="contextPath">/</Set>
+     <Set name="war">
+         <SystemProperty name="jetty.base"/>/webappwar/catalog-be-projectversion.war
+     </Set>
+     <Set name="extraClasspath">
+         <SystemProperty name="jetty.base"/>/plugins/*
+     </Set>
+</Configure>
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/plugins/CsarEntryGenerator.java b/catalog-be/src/main/java/org/openecomp/sdc/be/plugins/CsarEntryGenerator.java
new file mode 100644 (file)
index 0000000..856d53f
--- /dev/null
@@ -0,0 +1,39 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 Nordix Foundation. 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.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+package org.openecomp.sdc.be.plugins;
+
+import java.util.Map;
+
+import org.openecomp.sdc.be.model.Component;
+
+/**
+ * Implementations of this interface shall generate entries to be included in a csar.
+ */
+public interface CsarEntryGenerator {
+       
+       /**
+        * Generate entries to be included in a csar.
+        * 
+        * @param component the component the csar is based on
+        * @return Map of name to contents for entries to be included in the csar
+        */
+       Map<String, byte[]> generateCsarEntries(final Component component);
+
+}
index 80bee80..2721fda 100644 (file)
@@ -51,6 +51,7 @@ import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade
 import org.openecomp.sdc.be.model.jsonjanusgraph.utils.ModelConverter;
 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
 import org.openecomp.sdc.be.model.operations.impl.DaoStatusConverter;
+import org.openecomp.sdc.be.plugins.CsarEntryGenerator;
 import org.openecomp.sdc.be.resources.data.DAOArtifactData;
 import org.openecomp.sdc.be.resources.data.SdcSchemaFilesData;
 import org.openecomp.sdc.be.tosca.model.ToscaTemplate;
@@ -108,6 +109,9 @@ public class CsarUtils {
     private ToscaExportHandler toscaExportUtils;
     @Autowired
     protected ToscaOperationFacade toscaOperationFacade;
+  
+    @Autowired(required = false)
+    private List<CsarEntryGenerator> generators;
 
     private static final String CONFORMANCE_LEVEL = ConfigurationManager.getConfigurationManager().getConfiguration().getToscaConformanceLevel();
     private static final String SDC_VERSION = ExternalConfiguration.getAppVersion();
@@ -303,6 +307,16 @@ public class CsarUtils {
             return Either.right(collectedComponentCsarDefinition.right().value());
         }
 
+        if (generators != null) {
+               for (CsarEntryGenerator generator: generators) {
+                   log.debug("Invoking CsarEntryGenerator: {}", generator.getClass().getName());
+                       for (Entry<String, byte[]> pluginGeneratedFile : generator.generateCsarEntries(component).entrySet()) {
+                               zip.putNextEntry(new ZipEntry(pluginGeneratedFile.getKey()));
+                           zip.write(pluginGeneratedFile.getValue());
+                       }
+               }
+        }
+
         return writeAllFilesToCsar(component, collectedComponentCsarDefinition.left().value(), zip, isInCertificationRequest);
     }
 
index 7e5535d..2f72b77 100644 (file)
@@ -60,6 +60,7 @@ import org.springframework.core.annotation.Order;
         "org.openecomp.sdc.be.externalapi.servlet",
         "org.openecomp.sdc.be.servlets",
         "org.openecomp.sdc.be.filters",
+        "org.openecomp.sdc.be.plugins",
         "org.openecomp.sdc.be.togglz"
 })
 public class CatalogBESpringConfig {