From 3bd15a55aeb69c1caad1a1f32175cb3b7797733a Mon Sep 17 00:00:00 2001
From: Lianhao Lu <lianhao.lu@intel.com>
Date: Wed, 7 Nov 2018 11:46:28 +0800
Subject: S3P: added FileSystemReceptionHandler plugin

For S3P test, we need to add a new FileSystemRecpetionHandler plugin
which monitors a local directory for newly come csar files.

This patch added the plugin code as well as the configuration file for
s3p to use.

Change-Id: I8f1e65489abde15ae32c54d819bbc6e7cbdf36d0
Issue-ID: POLICY-837
Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
---
 .../handling/sdc/FileSystemReceptionHandler.java   | 105 +++++++++++++++++++++
 ...eptionHandlerConfigurationParameterBuilder.java |  54 +++++++++++
 ...eceptionHandlerConfigurationParameterGroup.java |  78 +++++++++++++++
 3 files changed, 237 insertions(+)
 create mode 100644 plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandler.java
 create mode 100644 plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterBuilder.java
 create mode 100644 plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterGroup.java

(limited to 'plugins/reception-plugins')

diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandler.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandler.java
new file mode 100644
index 00000000..3434f816
--- /dev/null
+++ b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandler.java
@@ -0,0 +1,105 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2018 Intel Corp. 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.onap.policy.distribution.reception.handling.sdc;
+
+import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
+
+import java.io.IOException;
+import java.io.File;
+import java.nio.file.FileSystems;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.WatchEvent;
+import java.nio.file.WatchKey;
+import java.nio.file.WatchService;
+
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+
+import org.onap.policy.common.parameters.ParameterService;
+import org.onap.policy.distribution.model.Csar;
+import org.onap.policy.distribution.reception.decoding.PolicyDecodingException;
+import org.onap.policy.distribution.reception.handling.AbstractReceptionHandler;
+
+/**
+ * Handles reception of inputs from File System which can be used to decode policies.
+ */
+public class FileSystemReceptionHandler extends AbstractReceptionHandler {
+    private boolean running = true;
+    private static final Logger LOGGER = FlexLogger.getLogger(FileSystemReceptionHandler.class);
+
+    @Override
+    protected void initializeReception(final String parameterGroupName) {
+        LOGGER.debug("FileSystemReceptionHandler init...");
+        try {
+            final FileSystemReceptionHandlerConfigurationParameterGroup handlerParameters =
+                                    ParameterService.get(parameterGroupName);
+            main(handlerParameters.getWatchPath());
+        } catch (final PolicyDecodingException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    @Override
+    public void destroy() {
+        // Tear down subscription etc
+        running = false;
+    }
+
+    @SuppressWarnings("unchecked")
+    public void main(String watchPath) throws PolicyDecodingException {
+        try {
+            final WatchService watcher = FileSystems.getDefault().newWatchService();
+            final Path dir = Paths.get(watchPath);
+
+            dir.register(watcher, ENTRY_CREATE);
+            LOGGER.debug("Watch Service registered for dir: " + dir.getFileName());
+            while (running) {
+                WatchKey key;
+                try {
+                    key = watcher.take();
+                } catch (final InterruptedException ex) {
+                    ex.printStackTrace();
+                    return;
+                }
+                for (final WatchEvent<?> event : key.pollEvents()) {
+                    final WatchEvent.Kind<?> kind = event.kind();
+                    final WatchEvent<Path> ev = (WatchEvent<Path>) event;
+                    final Path fileName = ev.context();
+                    LOGGER.debug("new CSAR found: " + kind.name() + ": " + fileName);
+                    createPolicyInputAndCallHandler(dir.toString() + File.separator + fileName.toString());
+                    LOGGER.debug("CSAR complete: " + kind.name() + ": " + fileName);
+                }
+                final boolean valid = key.reset();
+                if (!valid) {
+                    break;
+                }
+            }
+        } catch (final Exception ex) {
+            LOGGER.error(ex);
+        }
+    }
+
+    private void createPolicyInputAndCallHandler(final String fileName) throws PolicyDecodingException {
+        final Csar csarObject = new Csar(fileName);
+        inputReceived(csarObject);
+    }
+}
diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterBuilder.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterBuilder.java
new file mode 100644
index 00000000..b017cae6
--- /dev/null
+++ b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterBuilder.java
@@ -0,0 +1,54 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2018 Intel Corp. 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.onap.policy.distribution.reception.handling.sdc;
+
+import java.util.List;
+
+/**
+ * This class builds an instance of {@link FileSystemReceptionHandlerConfigurationParameterGroup} class.
+ *
+ */
+public class FileSystemReceptionHandlerConfigurationParameterBuilder {
+
+    private String watchPath;
+
+    /**
+     * Set watchPath to this {@link FileSystemReceptionHandlerConfigurationParameterBuilder} instance.
+     *
+     * @param watchPath the watchPath
+     */
+    public FileSystemReceptionHandlerConfigurationParameterBuilder setWatchPath(final String watchPath) {
+        this.watchPath = watchPath;
+        return this;
+    }
+
+
+    /**
+     * Returns the watchPath of this {@link FileSystemReceptionHandlerConfigurationParameterBuilder} instance.
+     *
+     * @return the watchPath
+     */
+    public String getWatchPath() {
+        return watchPath;
+    }
+}
+
+
diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterGroup.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterGroup.java
new file mode 100644
index 00000000..79f6c208
--- /dev/null
+++ b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterGroup.java
@@ -0,0 +1,78 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2018 Intel. 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.onap.policy.distribution.reception.handling.sdc;
+
+import java.io.File;
+
+import org.onap.policy.common.parameters.GroupValidationResult;
+import org.onap.policy.common.parameters.ValidationStatus;
+import org.onap.policy.distribution.reception.parameters.ReceptionHandlerConfigurationParameterGroup;
+
+/**
+ * This class handles reading, parsing and validating of the Policy SDC Service Distribution parameters from Json
+ * format, which strictly adheres to the interface:IConfiguration, defined by SDC SDK.
+ */
+public class FileSystemReceptionHandlerConfigurationParameterGroup extends ReceptionHandlerConfigurationParameterGroup {
+
+    private String watchPath;
+
+    /**
+     * The constructor for instantiating {@link FileSystemReceptionHandlerConfigurationParameterGroup} class.
+     *
+     * @param builder the SDC configuration builder
+     */
+    public FileSystemReceptionHandlerConfigurationParameterGroup(
+            final FileSystemReceptionHandlerConfigurationParameterBuilder builder) {
+        watchPath = builder.getWatchPath();
+    }
+
+    public String getWatchPath() {
+        return watchPath;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public GroupValidationResult validate() {
+        final GroupValidationResult validationResult = new GroupValidationResult(this);
+        validatePathElement(validationResult, watchPath, "watchPath");
+        return validationResult;
+    }
+
+
+    /**
+     * Validate the string element.
+     *
+     * @param validationResult the result object
+     * @param element the element to validate
+     * @param elementName the element name for error message
+     */
+    private void validatePathElement(final GroupValidationResult validationResult, final String element,
+            final String elementName) {
+        File f = new File(element);
+        if (!(f.exists() && f.isDirectory())) {
+            validationResult.setResult(elementName, ValidationStatus.INVALID,
+                    elementName + " must be a valid directory");
+        }
+    }
+}
+
-- 
cgit 1.2.3-korg