Added policy model with local policies 61/83661/1
authorJerry Flood <jflood@att.com>
Thu, 28 Mar 2019 20:44:34 +0000 (16:44 -0400)
committerJerry Flood <jflood@att.com>
Thu, 28 Mar 2019 20:44:57 +0000 (16:44 -0400)
Issue-ID: OPTFRA-458
Change-Id: If8fedf34a0f41ae7936500f08a05259a27af6270
Signed-off-by: Jerry Flood <jflood@att.com>
cmso-optimizer/data/policies/Weekday_00_06.json [new file with mode: 0644]
cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/PolicyManager.java [new file with mode: 0644]
cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/model/AllowedPeriodicTime.java [new file with mode: 0644]
cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/model/Policy.java [new file with mode: 0644]
cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/model/PolicyScope.java [new file with mode: 0644]
cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/model/TimeLimitAndVerticalTopology.java [new file with mode: 0644]
cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/model/TimeRange.java [new file with mode: 0644]
cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/model/TimeSchedule.java [new file with mode: 0644]
cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/timewindows/RecurringWindows.java [new file with mode: 0644]
cmso-optimizer/src/test/java/org/onap/optf/cmso/optimizer/availability/policies/PolicyManagerTest.java [new file with mode: 0644]

diff --git a/cmso-optimizer/data/policies/Weekday_00_06.json b/cmso-optimizer/data/policies/Weekday_00_06.json
new file mode 100644 (file)
index 0000000..4a14581
--- /dev/null
@@ -0,0 +1,38 @@
+{
+    "service": "TimeLimitAndVerticalTopology",
+    "policyName": "CMSO.Weekday_00_06",
+    "description": "dev instance",
+    "templateVersion": "Dublin",
+    "version": "0001",
+    "priority": "4",
+    "riskType": "test",
+    "riskLevel": "3",
+    "guard": "False",
+    "content": {
+        "serviceType": "networkOnDemand",
+        "identity": "vnf_upgrade_policy",
+        "policyScope": {
+            "serviceType": ["networkOnDemand"],
+            "aicZone": [
+                " "
+            ],
+            "entityType": ["vnf"]
+        },
+        "timeSchedule": {
+            "allowedPeriodicTime": [
+                {
+                    "day": "weekday",
+                    "timeRange": [
+                        {
+                            "start_time": "00:00:00+00:00",
+                            "end_time": "06:00:00+00:00"
+                        }
+                    ]
+                }
+            ]
+        },
+        "nodeType": ["vnf"],
+        "type": "timeLimitAndVerticalTopology",
+        "conflictScope": "vnf_pserver"
+    }
+}
\ No newline at end of file
diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/PolicyManager.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/PolicyManager.java
new file mode 100644 (file)
index 0000000..d6ae196
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * ============LICENSE_START==============================================
+ * Copyright (c) 2019 AT&T Intellectual Property.
+ * =======================================================================
+ * 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.optf.cmso.optimizer.availability.policies;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import org.onap.observations.Observation;
+import org.onap.optf.cmso.optimizer.availability.policies.model.Policy;
+import org.onap.optf.cmso.optimizer.availability.policies.model.TimeLimitAndVerticalTopology;
+import org.onap.optf.cmso.optimizer.common.LogMessages;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Component;
+
+@Component
+public class PolicyManager {
+
+    @Autowired
+    Environment env;
+
+    public TimeLimitAndVerticalTopology getTimeLimitAndVerticalTopologyByName(String name) {
+        Policy policy = getPolicyForName(name);
+        TimeLimitAndVerticalTopology returnPolicy = null;
+        if (policy != null) {
+            ObjectMapper om = new ObjectMapper();
+            try
+            {
+                returnPolicy = om.convertValue(policy.getContent(), TimeLimitAndVerticalTopology.class);
+            }
+            catch (Exception e)
+            {
+                Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
+            }
+        }
+        return returnPolicy;
+    }
+
+
+    public Policy getPolicyForName(String name) {
+        Policy policy = null;
+        try {
+            return getLocalPolicyForName(name);
+        } catch (Exception e) {
+            Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
+        }
+        return policy;
+    }
+
+    public Policy getLocalPolicyForName(String name) {
+        String policyFolder = env.getProperty("cmso.local.policy.folder", "data/policies");
+        Policy policy = null;
+        try {
+            if (!name.endsWith(".json")) {
+                name += ".json";
+            }
+            Path path = Paths.get(policyFolder, name);
+            ObjectMapper om = new ObjectMapper();
+            policy = om.readValue(path.toFile(), Policy.class);
+        } catch (Exception e) {
+            Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
+        }
+        return policy;
+    }
+
+    public List<Policy> getSupportedPolicies() {
+        List<Policy> policies = new ArrayList<>();
+        try {
+            return getLocalSupportedPolicies();
+        } catch (Exception e) {
+            Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
+        }
+        return policies;
+    }
+
+    public List<Policy> getLocalSupportedPolicies() {
+        String policyFolder = env.getProperty("cmso.local.policy.folder", "data/policies");
+        List<Policy> policies = new ArrayList<>();
+        try {
+            Path path = Paths.get(policyFolder);
+            for (File file : path.toFile().listFiles()) {
+                if (file.isFile()) {
+                    Policy policy = getLocalPolicyForName(file.getName());
+                    if (policy != null) {
+                        policies.add(policy);
+                    }
+                }
+
+            }
+        } catch (Exception e) {
+            Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
+        }
+        return policies;
+    }
+
+}
diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/model/AllowedPeriodicTime.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/model/AllowedPeriodicTime.java
new file mode 100644 (file)
index 0000000..4bc0f71
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * ============LICENSE_START==============================================
+ * Copyright (c) 2019 AT&T Intellectual Property.
+ * =======================================================================
+ * 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.optf.cmso.optimizer.availability.policies.model;
+
+import java.util.List;
+
+/*
+
+{
+    "day": "weekday",
+    "timeRange": [
+        {
+            "start_time": "00:00:00+00:00",
+            "end_time": "06:00:00+00:00"
+        }
+    ]
+}
+
+ */
+public class AllowedPeriodicTime {
+
+    public enum Day
+    {
+        weekday("RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR"),
+        weekend("RRULE:FREQ=WEEKLY;BYDAY=SA,SU"),
+        ;
+        private String rrule;
+        private Day(String rrule) {this.rrule = rrule;}
+        public String getRrule() {return rrule;}
+
+    }
+
+    private Day day;
+    private List<TimeRange> timeRange;
+    public Day getDay() {
+        return day;
+    }
+    public void setDay(Day day) {
+        this.day = day;
+    }
+    public List<TimeRange> getTimeRange() {
+        return timeRange;
+    }
+    public void setTimeRange(List<TimeRange> timeRange) {
+        this.timeRange = timeRange;
+    }
+
+}
diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/model/Policy.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/model/Policy.java
new file mode 100644 (file)
index 0000000..50acd9b
--- /dev/null
@@ -0,0 +1,135 @@
+/*
+ * ============LICENSE_START==============================================
+ * Copyright (c) 2019 AT&T Intellectual Property.
+ * =======================================================================
+ * 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.optf.cmso.optimizer.availability.policies.model;
+
+/*
+{
+    "service": "TimeLimitAndVerticalTopology",
+    "policyName": "CMSO.Weekday_00_06",
+    "description": "dev instance",
+    "templateVersion": "Dublin",
+    "version": "0001",
+    "priority": "4",
+    "riskType": "test",
+    "riskLevel": "3",
+    "guard": "False",
+    "content": {
+        "serviceType": "networkOnDemand",
+        "identity": "vnf_upgrade_policy",
+        "policyScope": {
+            "serviceType": ["networkOnDemand"],
+            "aicZone": [
+                " "
+            ],
+            "entityType": ["vnf"]
+        },
+        "timeSchedule": {
+            "allowedPeriodicTime": [
+                {
+                    "day": "weekday",
+                    "timeRange": [
+                        {
+                            "start_time": "00:00:00+00:00",
+                            "end_time": "06:00:00+00:00"
+                        }
+                    ]
+                }
+            ]
+        },
+        "nodeType": ["vnf"],
+        "type": "timeLimitAndVerticalTopology",
+        "conflictScope": "vnf_pserver"
+    }
+}
+ */
+public class Policy {
+
+    private String service;
+    private String policyName;
+    private String description;
+    private String templateVersion;
+    private String version;
+    private String priority;
+    private String riskType;
+    private String riskLevel;
+    private String guard;
+    private Object content;
+    public String getService() {
+        return service;
+    }
+    public void setService(String service) {
+        this.service = service;
+    }
+    public String getPolicyName() {
+        return policyName;
+    }
+    public void setPolicyName(String policyName) {
+        this.policyName = policyName;
+    }
+    public String getDescription() {
+        return description;
+    }
+    public void setDescription(String description) {
+        this.description = description;
+    }
+    public String getTemplateVersion() {
+        return templateVersion;
+    }
+    public void setTemplateVersion(String templateVersion) {
+        this.templateVersion = templateVersion;
+    }
+    public String getVersion() {
+        return version;
+    }
+    public void setVersion(String version) {
+        this.version = version;
+    }
+    public String getPriority() {
+        return priority;
+    }
+    public void setPriority(String priority) {
+        this.priority = priority;
+    }
+    public String getRiskType() {
+        return riskType;
+    }
+    public void setRiskType(String riskType) {
+        this.riskType = riskType;
+    }
+    public String getRiskLevel() {
+        return riskLevel;
+    }
+    public void setRiskLevel(String riskLevel) {
+        this.riskLevel = riskLevel;
+    }
+    public String getGuard() {
+        return guard;
+    }
+    public void setGuard(String guard) {
+        this.guard = guard;
+    }
+    public Object getContent() {
+        return content;
+    }
+    public void setContent(Object content) {
+        this.content = content;
+    }
+
+}
diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/model/PolicyScope.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/model/PolicyScope.java
new file mode 100644 (file)
index 0000000..d569274
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * ============LICENSE_START==============================================
+ * Copyright (c) 2019 AT&T Intellectual Property.
+ * =======================================================================
+ * 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.optf.cmso.optimizer.availability.policies.model;
+
+import java.util.List;
+
+/*
+{
+    "serviceType": ["networkOnDemand"],
+    "aicZone": [
+        " "
+    ],
+    "entityType": ["vnf"]
+ */
+public class PolicyScope {
+
+    public enum ServiceType {
+        networkOnDemand
+    }
+    public enum EntityType {
+        vnf
+    }
+
+    private List<String> serviceType;
+    private List<String> aicZone;
+    private List<String> entityType;
+
+    public List<String> getServiceType() {
+        return serviceType;
+    }
+
+    public void setServiceType(List<String> serviceType) {
+        this.serviceType = serviceType;
+    }
+
+    public List<String> getAicZone() {
+        return aicZone;
+    }
+
+    public void setAicZone(List<String> aicZone) {
+        this.aicZone = aicZone;
+    }
+
+    public List<String> getEntityType() {
+        return entityType;
+    }
+
+    public void setEntityType(List<String> entityType) {
+        this.entityType = entityType;
+    }
+
+}
diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/model/TimeLimitAndVerticalTopology.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/model/TimeLimitAndVerticalTopology.java
new file mode 100644 (file)
index 0000000..58846f4
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ * ============LICENSE_START==============================================
+ * Copyright (c) 2019 AT&T Intellectual Property.
+ * =======================================================================
+ * 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.optf.cmso.optimizer.availability.policies.model;
+
+import java.util.List;
+
+/*
+{
+    "serviceType": "networkOnDemand",
+    "identity": "vnf_upgrade_policy",
+    "policyScope": {
+        "serviceType": ["networkOnDemand"],
+        "aicZone": [
+            " "
+        ],
+        "entityType": ["vnf"]
+    },
+    "timeSchedule": {
+        "allowedPeriodicTime": [
+            {
+                "day": "weekday",
+                "timeRange": [
+                    {
+                        "start_time": "00:00:00+00:00",
+                        "end_time": "06:00:00+00:00"
+                    }
+                ]
+            }
+        ]
+    },
+    "nodeType": ["vnf"],
+    "type": "timeLimitAndVerticalTopology",
+    "conflictScope": "vnf_pserver"
+}
+ */
+
+public class TimeLimitAndVerticalTopology
+{
+
+    public enum ConflictScope {
+        timeLimitAndVerticalTopology,
+    }
+    public enum Type {
+        vnf_pserver,
+    }
+
+    private String serviceType;
+    private String identity;
+    private PolicyScope policyScope;
+    private TimeSchedule timeSchedule;
+    private List<String> nodeType;
+    private String type;
+    private String conflictScope;
+
+    public String getServiceType() {
+        return serviceType;
+    }
+    public void setServiceType(String serviceType) {
+        this.serviceType = serviceType;
+    }
+    public String getIdentity() {
+        return identity;
+    }
+    public void setIdentity(String identity) {
+        this.identity = identity;
+    }
+    public PolicyScope getPolicyScope() {
+        return policyScope;
+    }
+    public void setPolicyScope(PolicyScope policyScope) {
+        this.policyScope = policyScope;
+    }
+    public TimeSchedule getTimeSchedule() {
+        return timeSchedule;
+    }
+    public void setTimeSchedule(TimeSchedule timeSchedule) {
+        this.timeSchedule = timeSchedule;
+    }
+    public List<String> getNodeType() {
+        return nodeType;
+    }
+    public void setNodeType(List<String> nodeType) {
+        this.nodeType = nodeType;
+    }
+    public String getType() {
+        return type;
+    }
+    public void setType(String type) {
+        this.type = type;
+    }
+    public String getConflictScope() {
+        return conflictScope;
+    }
+    public void setConflictScope(String conflictScope) {
+        this.conflictScope = conflictScope;
+    }
+
+}
diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/model/TimeRange.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/model/TimeRange.java
new file mode 100644 (file)
index 0000000..6b6ba0b
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * ============LICENSE_START==============================================
+ * Copyright (c) 2019 AT&T Intellectual Property.
+ * =======================================================================
+ * 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.optf.cmso.optimizer.availability.policies.model;
+
+/*
+
+{
+    "start_time": "00:00:00+00:00",
+    "end_time": "06:00:00+00:00"
+}
+
+ */
+public class TimeRange
+{
+    private String start_time;
+    private String end_time;
+
+    public String getStart_time() {
+        return start_time;
+    }
+    public void setStart_time(String start_time) {
+        this.start_time = start_time;
+    }
+    public String getEnd_time() {
+        return end_time;
+    }
+    public void setEnd_time(String end_time) {
+        this.end_time = end_time;
+    }
+
+}
diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/model/TimeSchedule.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/model/TimeSchedule.java
new file mode 100644 (file)
index 0000000..4d3db2d
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * ============LICENSE_START==============================================
+ * Copyright (c) 2019 AT&T Intellectual Property.
+ * =======================================================================
+ * 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.optf.cmso.optimizer.availability.policies.model;
+
+import java.util.List;
+
+/*
+{
+    "allowedPeriodicTime": [
+        {
+            "day": "weekday",
+            "timeRange": [
+                {
+                    "start_time": "00:00:00+00:00",
+                    "end_time": "06:00:00+00:00"
+                }
+            ]
+        }
+    ]
+}
+ */
+public class TimeSchedule {
+
+    private List<AllowedPeriodicTime> allowedPeriodicTime;
+
+    public List<AllowedPeriodicTime> getAllowedPeriodicTime() {
+        return allowedPeriodicTime;
+    }
+
+    public void setAllowedPeriodicTime(List<AllowedPeriodicTime> allowedPeriodicTime) {
+        this.allowedPeriodicTime = allowedPeriodicTime;
+    }
+
+}
diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/timewindows/RecurringWindows.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/timewindows/RecurringWindows.java
new file mode 100644 (file)
index 0000000..f9704ff
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * ============LICENSE_START==============================================
+ * Copyright (c) 2019 AT&T Intellectual Property.
+ * =======================================================================
+ * 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.optf.cmso.optimizer.availability.timewindows;
+
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import org.onap.observations.Observation;
+import org.onap.optf.cmso.optimizer.availability.policies.model.AllowedPeriodicTime;
+import org.onap.optf.cmso.optimizer.availability.policies.model.TimeLimitAndVerticalTopology;
+import org.onap.optf.cmso.optimizer.availability.policies.model.TimeRange;
+import org.onap.optf.cmso.optimizer.common.LogMessages;
+import org.onap.optf.cmso.optimizer.service.rs.models.ChangeWindow;
+
+public class RecurringWindows {
+
+    public static List<ChangeWindow> getAvailabilityWindowsForPolicies(List<TimeLimitAndVerticalTopology> policies,
+                    ChangeWindow changeWindow) {
+        List<ChangeWindow> availableList = new ArrayList<>();
+        for (TimeLimitAndVerticalTopology policy : policies) {
+            if (policy.getTimeSchedule() != null && policy.getTimeSchedule().getAllowedPeriodicTime() != null) {
+                for (AllowedPeriodicTime available : policy.getTimeSchedule().getAllowedPeriodicTime()) {
+                    getAvailableWindowsForApt(available, changeWindow, availableList);
+                }
+            }
+        }
+        return availableList;
+
+    }
+
+
+    // "RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR",
+    private static void getAvailableWindowsForApt(AllowedPeriodicTime available, ChangeWindow changeWindow,
+                    List<ChangeWindow> availableList) {
+
+        if (available.getDay() != null)
+        {
+            switch (available.getDay())
+            {
+                case weekday:
+                case weekend:
+                    getAvailableWindowsForAptDay(available, changeWindow, availableList);
+                    return;
+                default:
+
+            }
+        }
+        Observation.report(LogMessages.UNSUPPORTED_PERIODIC_TIME, available.toString());
+
+    }
+    // "RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR",
+    private static void getAvailableWindowsForAptDay(AllowedPeriodicTime available, ChangeWindow changeWindow,
+                    List<ChangeWindow> availableList) {
+        try
+        {
+            List<TimeRange> ranges = available.getTimeRange();
+            if (ranges.size() == 0)
+            {
+                TimeRange range = new TimeRange();
+                range.setStart_time("00:00:00+00:00");
+                range.setStart_time("23:59:59+00:00");
+                ranges.add(range);
+            }
+            String rrule = available.getDay().getRrule();
+            for (TimeRange range : ranges)
+            {
+
+                Date cwStartDate =changeWindow.getStartTime();
+                Date cwEndDate =changeWindow.getEndTime();
+
+                Instant cwStartInstant = Instant.ofEpochMilli(cwStartDate.getTime());
+                Instant cwEndInstant = Instant.ofEpochMilli(cwEndDate.getTime());
+                Instant startInstant = Instant.parse(range.getStart_time());
+                Instant endInstant = Instant.parse(range.getEnd_time());
+                if (cwStartInstant.isAfter(startInstant))
+                {
+                    // We expect this since startInstant has no  date (1/1/1970)
+                    //
+                }
+
+
+            }
+        }
+        catch (Exception e)
+        {
+            Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
+        }
+    }
+
+}
diff --git a/cmso-optimizer/src/test/java/org/onap/optf/cmso/optimizer/availability/policies/PolicyManagerTest.java b/cmso-optimizer/src/test/java/org/onap/optf/cmso/optimizer/availability/policies/PolicyManagerTest.java
new file mode 100644 (file)
index 0000000..7874501
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * ============LICENSE_START==============================================
+ * Copyright (c) 2019 AT&T Intellectual Property.
+ * =======================================================================
+ * 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.optf.cmso.optimizer.availability.policies;
+import java.util.List;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.onap.optf.cmso.optimizer.availability.policies.model.Policy;
+import org.onap.optf.cmso.optimizer.availability.policies.model.TimeLimitAndVerticalTopology;
+import org.springframework.core.env.Environment;
+
+@RunWith(MockitoJUnitRunner.class)
+public class PolicyManagerTest
+{
+
+    @InjectMocks
+    private PolicyManager policyManager;
+
+    @Mock
+    public Environment env;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        Mockito.when(env.getProperty("cmso.local.policy.folder", "data/policies")).thenReturn("data/policies");
+    }
+
+    @Test
+    public void getPolicyByName() {
+        String policyName = "Weekday_00_06";
+
+        String result = "CMSO.Weekday_00_06,";
+        List<Policy> policies = policyManager.getSupportedPolicies();
+        StringBuilder sb = new StringBuilder();
+        for (Policy pol : policies)
+        {
+            sb.append(pol.getPolicyName()).append("," );
+        }
+        System.out.println("        String result = \"" + sb.toString() + "\";");
+        Assert.assertTrue(result.equals(sb.toString()));
+        Policy policy = policyManager.getPolicyForName(policyName);
+        Assert.assertTrue(policy != null);
+        TimeLimitAndVerticalTopology top = policyManager.getTimeLimitAndVerticalTopologyByName(policyName);
+        Assert.assertTrue(top != null);
+
+    }
+}
\ No newline at end of file