From 073cc188efe9abb4c010cf674e34e2cf46ef1c52 Mon Sep 17 00:00:00 2001 From: Guo Ruijing Date: Mon, 31 Jul 2017 08:47:35 +0000 Subject: [POLICY-73] replace openecomp for policy-engine Change-Id: I54072f6bcd388c0e05562614ee89b4ae7ad67004 Signed-off-by: Guo Ruijing Signed-off-by: Pamela Dragosh --- .../java/org/onap/policy/api/LoadedPolicy.java | 57 +++ .../org/onap/policy/api/NotificationHandler.java | 34 ++ .../java/org/onap/policy/api/NotificationType.java | 58 +++ .../java/org/onap/policy/api/PDPNotification.java | 52 +++ .../java/org/onap/policy/api/PEDependency.java | 90 +++++ .../java/org/onap/policy/api/RemovedPolicy.java | 41 ++ .../main/java/org/onap/policy/api/UpdateType.java | 54 +++ .../org/onap/policy/jpa/BackUpMonitorEntity.java | 117 ++++++ .../org/onap/policy/std/NotificationStore.java | 264 +++++++++++++ .../java/org/onap/policy/std/StdLoadedPolicy.java | 72 ++++ .../org/onap/policy/std/StdPDPNotification.java | 80 ++++ .../java/org/onap/policy/std/StdRemovedPolicy.java | 49 +++ .../java/org/onap/policy/utils/AAFEnvironment.java | 29 ++ .../org/onap/policy/utils/AAFPolicyClient.java | 40 ++ .../org/onap/policy/utils/AAFPolicyClientImpl.java | 214 +++++++++++ .../org/onap/policy/utils/AAFPolicyException.java | 48 +++ .../java/org/onap/policy/utils/BackUpHandler.java | 41 ++ .../java/org/onap/policy/utils/BackUpMonitor.java | 422 +++++++++++++++++++++ .../java/org/onap/policy/utils/BusConsumer.java | 99 +++++ .../java/org/onap/policy/utils/BusPublisher.java | 119 ++++++ .../java/org/onap/policy/utils/PolicyAccess.java | 106 ++++++ .../java/org/onap/policy/utils/PolicyUtils.java | 201 ++++++++++ .../org/openecomp/policy/api/LoadedPolicy.java | 57 --- .../openecomp/policy/api/NotificationHandler.java | 34 -- .../org/openecomp/policy/api/NotificationType.java | 58 --- .../org/openecomp/policy/api/PDPNotification.java | 52 --- .../org/openecomp/policy/api/PEDependency.java | 90 ----- .../org/openecomp/policy/api/RemovedPolicy.java | 41 -- .../java/org/openecomp/policy/api/UpdateType.java | 54 --- .../openecomp/policy/jpa/BackUpMonitorEntity.java | 117 ------ .../openecomp/policy/std/NotificationStore.java | 264 ------------- .../org/openecomp/policy/std/StdLoadedPolicy.java | 72 ---- .../openecomp/policy/std/StdPDPNotification.java | 80 ---- .../org/openecomp/policy/std/StdRemovedPolicy.java | 49 --- .../org/openecomp/policy/utils/AAFEnvironment.java | 29 -- .../openecomp/policy/utils/AAFPolicyClient.java | 40 -- .../policy/utils/AAFPolicyClientImpl.java | 214 ----------- .../openecomp/policy/utils/AAFPolicyException.java | 48 --- .../org/openecomp/policy/utils/BackUpHandler.java | 41 -- .../org/openecomp/policy/utils/BackUpMonitor.java | 422 --------------------- .../org/openecomp/policy/utils/BusConsumer.java | 99 ----- .../org/openecomp/policy/utils/BusPublisher.java | 119 ------ .../org/openecomp/policy/utils/PolicyAccess.java | 106 ------ .../org/openecomp/policy/utils/PolicyUtils.java | 201 ---------- 44 files changed, 2287 insertions(+), 2287 deletions(-) create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/api/LoadedPolicy.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/api/NotificationHandler.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/api/NotificationType.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/api/PDPNotification.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/api/PEDependency.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/api/RemovedPolicy.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/api/UpdateType.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/jpa/BackUpMonitorEntity.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/std/NotificationStore.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/std/StdLoadedPolicy.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/std/StdPDPNotification.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/std/StdRemovedPolicy.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFEnvironment.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFPolicyClient.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFPolicyClientImpl.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFPolicyException.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpHandler.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitor.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusConsumer.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusPublisher.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyAccess.java create mode 100644 PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyUtils.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/api/LoadedPolicy.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/api/NotificationHandler.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/api/NotificationType.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/api/PDPNotification.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/api/PEDependency.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/api/RemovedPolicy.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/api/UpdateType.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/jpa/BackUpMonitorEntity.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/std/NotificationStore.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/std/StdLoadedPolicy.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/std/StdPDPNotification.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/std/StdRemovedPolicy.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/AAFEnvironment.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/AAFPolicyClient.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/AAFPolicyClientImpl.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/AAFPolicyException.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/BackUpHandler.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/BackUpMonitor.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/BusConsumer.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/BusPublisher.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/PolicyAccess.java delete mode 100644 PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/PolicyUtils.java (limited to 'PolicyEngineUtils/src/main/java') diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/api/LoadedPolicy.java b/PolicyEngineUtils/src/main/java/org/onap/policy/api/LoadedPolicy.java new file mode 100644 index 000000000..25636fb45 --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/api/LoadedPolicy.java @@ -0,0 +1,57 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.api; + +import java.util.Map; +/** + * LoadedPolicy defines the Policy that has been Loaded into the PDP. + * + * @version 0.2 + */ +public interface LoadedPolicy { + /** + * Gets the String format of the Policy Name that has been Loaded into the PDP. + * + * @return String format of Policy Name + */ + public String getPolicyName(); + + /** + * Gets the String format of the Policy Version that has been Loaded into the PDP. + * + * @return String format of the Policy Version. + */ + public String getVersionNo(); + + /** + * Gets the Map of String,String format of the Matches if the policy Loaded is of Config Type. + * + * @return the Map of String,String format of the matches in the policy. + */ + public Map getMatches(); + + /** + * Gets the UpdateType of {@link org.onap.policy.api.UpdateType} received. + * + * @return UpdateType associated with this PDPNotification + */ + public UpdateType getUpdateType(); +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/api/NotificationHandler.java b/PolicyEngineUtils/src/main/java/org/onap/policy/api/NotificationHandler.java new file mode 100644 index 000000000..6484a9d7e --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/api/NotificationHandler.java @@ -0,0 +1,34 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.api; +/** + * Defines the methods which need to run when an Event or Notification is received. + * + * @version 0.1 + */ +public interface NotificationHandler { + /** + * notificationReceived method will be triggered automatically whenever a Notification is received by the PEP. + * + * @param notification PDPNotification of {@link org.onap.policy.api.PDPNotification} is the object that has information of the notification. + */ + public void notificationReceived(PDPNotification notification); +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/api/NotificationType.java b/PolicyEngineUtils/src/main/java/org/onap/policy/api/NotificationType.java new file mode 100644 index 000000000..730ad022d --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/api/NotificationType.java @@ -0,0 +1,58 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.api; + +/** + * Enumeration of the Update Type that has occurred in the PDPNotification of + * {@link org.onap.policy.api.PDPNotification} + * + * @version 0.1 + */ +public enum NotificationType { + /** + * Indicates that a policy has been updated + */ + UPDATE("update"), + /** + * Indicates that a policy has been removed + */ + REMOVE("remove"), + /** + * Indicates that both update and removal of policy events has occurred. + */ + BOTH("both") + ; + + private String name; + + private NotificationType(String name){ + this.name = name; + } + + /** + * Returns the String format of the Type for this UpdateType + * @return the String Type of UpdateType + */ + @Override + public String toString(){ + return this.name; + } +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/api/PDPNotification.java b/PolicyEngineUtils/src/main/java/org/onap/policy/api/PDPNotification.java new file mode 100644 index 000000000..a88ec06cb --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/api/PDPNotification.java @@ -0,0 +1,52 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.api; + +import java.util.Collection; + +/** + * Defines the Notification event sent from PDP to Client PEP. + * + * @version 0.2 + */ +public interface PDPNotification { + /** + * Gets the Collection of {@link org.onap.policy.api.RemovedPolicy} objects received. + * + * @return the Collection which consists of RemovedPolicy objects. + */ + public Collection getRemovedPolicies(); + + /** + * Gets the Collection of {@link org.onap.policy.api.LoadedPolicy} objects receieved. + * + * @return the Collection which consists of UpdatedPolicy objects. + */ + public Collection getLoadedPolicies(); + + /** + * Gets the NotificationType of {@link org.onap.policy.api.NotificationType} received. + * + * @return NotificationType associated with this PDPNotification + */ + public NotificationType getNotificationType(); + +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/api/PEDependency.java b/PolicyEngineUtils/src/main/java/org/onap/policy/api/PEDependency.java new file mode 100644 index 000000000..d722f1696 --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/api/PEDependency.java @@ -0,0 +1,90 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.api; + +import org.apache.maven.model.Dependency; +import org.apache.maven.model.Exclusion; + +public class PEDependency{ + + private String groupId; + private String artifactId; + private String version; + private String classifier; + private String type; + private String scope; + private java.util.List exclusions; + + public String getGroupId() { + return groupId; + } + public void setGroupId(String groupId) { + this.groupId = groupId; + } + public String getArtifactId() { + return artifactId; + } + public void setArtifactId(String artifactId) { + this.artifactId = artifactId; + } + public String getVersion() { + return version; + } + public void setVersion(String version) { + this.version = version; + } + public java.util.List getExclusions() { + return exclusions; + } + public void setExclusions(java.util.List exclusions) { + this.exclusions = exclusions; + } + public String getClassifier() { + return classifier; + } + public void setClassifier(String classifier) { + this.classifier = classifier; + } + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + public String getScope() { + return scope; + } + public void setScope(String scope) { + this.scope = scope; + } + + public Dependency getDependency(){ + Dependency dependency = new Dependency(); + dependency.setArtifactId(artifactId); + dependency.setGroupId(groupId); + dependency.setVersion(version); + dependency.setExclusions(exclusions); + dependency.setClassifier(classifier); + dependency.setScope(scope); + dependency.setType(type); + return dependency; + } +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/api/RemovedPolicy.java b/PolicyEngineUtils/src/main/java/org/onap/policy/api/RemovedPolicy.java new file mode 100644 index 000000000..f26c1499a --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/api/RemovedPolicy.java @@ -0,0 +1,41 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.api; +/** + * RemovedPolicy defines the Policy that has been removed + * + * @version 0.1 + */ +public interface RemovedPolicy { + /** + * Gets the String format of the Policy Name that has been removed. + * + * @return String format of Policy Name + */ + public String getPolicyName(); + + /** + * Gets the String format of the Policy Version that has been removed. + * + * @return String format of Policy Version + */ + public String getVersionNo(); +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/api/UpdateType.java b/PolicyEngineUtils/src/main/java/org/onap/policy/api/UpdateType.java new file mode 100644 index 000000000..deeecddd0 --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/api/UpdateType.java @@ -0,0 +1,54 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.api; + +/** + * Enumeration of the Update Type that has occurred in the UpdatedPolicy of + * {@link org.onap.policy.api.LoadedPolicy} + * + * @version 0.1 + */ +public enum UpdateType { + /** + * Indicates that a policy has been updated + */ + UPDATE("update"), + /** + * Indicates that a policy is new + */ + NEW("new") + ; + + private String name; + + private UpdateType(String name){ + this.name = name; + } + + /** + * Returns the String format of the Type for this UpdateType + * @return the String Type of UpdateType + */ + @Override + public String toString(){ + return this.name; + } +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/jpa/BackUpMonitorEntity.java b/PolicyEngineUtils/src/main/java/org/onap/policy/jpa/BackUpMonitorEntity.java new file mode 100644 index 000000000..f2e7f3ff8 --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/jpa/BackUpMonitorEntity.java @@ -0,0 +1,117 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.jpa; + +import java.io.Serializable; +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Lob; +import javax.persistence.NamedQuery; +import javax.persistence.PrePersist; +import javax.persistence.PreUpdate; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + + +@Entity +@Table(name="BackUpMonitorEntity") +@NamedQuery(name="BackUpMonitorEntity.findAll", query= "SELECT b FROM BackUpMonitorEntity b ") +public class BackUpMonitorEntity implements Serializable{ + private static final long serialVersionUID = -9190606334322230630L; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name="id") + private int id; + + @Column(name="node_name", nullable=false) + private String resourceNodeName; + + @Column(name="resource_name", nullable=false, unique=true) + private String resourceName; + + @Column(name="flag", nullable=false) + private String flag; + + @Lob + @Column(name="notification_record") + private String notificationRecord; + + @Temporal(TemporalType.TIMESTAMP) + @Column(name="last_seen") + private Date timeStamp; + + @PrePersist + public void prePersist(){ + this.timeStamp = new Date(); + } + + @PreUpdate + public void preUpdate(){ + this.timeStamp = new Date(); + } + + public String getResourceName(){ + return this.resourceName; + } + + public String getResourceNodeName(){ + return this.resourceNodeName; + } + + public String getFlag(){ + return this.flag; + } + + public String getNotificationRecord(){ + return this.notificationRecord; + } + + public Date getTimeStamp(){ + return this.timeStamp; + } + + public void setResourceName(String resourceName){ + this.resourceName = resourceName; + } + + public void setResoruceNodeName(String resourceNodeName){ + this.resourceNodeName = resourceNodeName; + } + + public void setFlag(String flag){ + this.flag = flag; + } + + public void setNotificationRecord(String notificationRecord){ + this.notificationRecord = notificationRecord; + } + + public void setTimeStamp(Date timeStamp){ + this.timeStamp = timeStamp; + } +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/std/NotificationStore.java b/PolicyEngineUtils/src/main/java/org/onap/policy/std/NotificationStore.java new file mode 100644 index 000000000..8a401c4cc --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/std/NotificationStore.java @@ -0,0 +1,264 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.std; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; + +import org.onap.policy.api.LoadedPolicy; +import org.onap.policy.api.NotificationType; +import org.onap.policy.api.PDPNotification; +import org.onap.policy.api.RemovedPolicy; + + +/* + * This Should Compare and save the Notifications from the beginning of Time. + * If there is something new (missed) We notify the client. + * Works for PDP failures. + * + */ +public class NotificationStore { + private static StdPDPNotification notificationRecord = new StdPDPNotification(); + + public static StdPDPNotification getDeltaNotification(StdPDPNotification newNotification){ + StdPDPNotification notificationDelta = new StdPDPNotification(); + ArrayList removedDelta = new ArrayList<>(); + ArrayList updatedDelta = new ArrayList<>(); + Collection newUpdatedPolicies = new ArrayList<>(); + Collection newRemovedPolicies = new ArrayList<>(); + Collection oldUpdatedLostPolicies = notificationRecord.getLoadedPolicies(); + Collection oldRemovedPolicies = notificationRecord.getRemovedPolicies(); + Collection oldUpdatedPolicies = notificationRecord.getLoadedPolicies(); + Boolean update = false; + Boolean remove = false; + // if the NotificationRecord is empty + if(notificationRecord.getRemovedPolicies()==null || notificationRecord.getLoadedPolicies()==null){ + if(newNotification!=null){ + notificationRecord = newNotification; + } + return notificationDelta; + } + // do the Delta operation. + if(newNotification!=null){ + // check for old removed policies. + if(!newNotification.getRemovedPolicies().isEmpty()){ + for(RemovedPolicy newRemovedPolicy: newNotification.getRemovedPolicies()){ + //Look for policy Not in Remove + Boolean removed = true; + for(RemovedPolicy oldRemovedPolicy: notificationRecord.getRemovedPolicies()){ + if(newRemovedPolicy.getPolicyName().equals(oldRemovedPolicy.getPolicyName())){ + if(newRemovedPolicy.getVersionNo().equals(oldRemovedPolicy.getVersionNo())){ + removed = false; + // Don't want a duplicate. + oldRemovedPolicies.remove(oldRemovedPolicy); + } + } + } + //We need to change our record we have an Update record of this remove. + for(LoadedPolicy oldUpdatedPolicy: notificationRecord.getLoadedPolicies()){ + if(newRemovedPolicy.getPolicyName().equals(oldUpdatedPolicy.getPolicyName())){ + if(newRemovedPolicy.getVersionNo().equals(oldUpdatedPolicy.getVersionNo())){ + oldUpdatedPolicies.remove(oldUpdatedPolicy); + oldUpdatedLostPolicies.remove(oldUpdatedPolicy); + } + } + } + if(removed){ + remove = true; + notificationRecord.getRemovedPolicies().add(newRemovedPolicy); + removedDelta.add((StdRemovedPolicy)newRemovedPolicy); + } + // This will be converted to New Later. + oldRemovedPolicies.add(newRemovedPolicy); + } + } + // Check for old Updated Policies. + if(!newNotification.getLoadedPolicies().isEmpty()){ + for(LoadedPolicy newUpdatedPolicy: newNotification.getLoadedPolicies()){ + // Look for policies which are not in Update + Boolean updated = true; + for(LoadedPolicy oldUpdatedPolicy: notificationRecord.getLoadedPolicies()){ + if(newUpdatedPolicy.getPolicyName().equals(oldUpdatedPolicy.getPolicyName())){ + if(newUpdatedPolicy.getVersionNo().equals(oldUpdatedPolicy.getVersionNo())){ + updated = false; + // Remove the policy from copy. + oldUpdatedLostPolicies.remove(oldUpdatedPolicy); + // Eliminating Duplicate. + oldUpdatedPolicies.remove(oldUpdatedPolicy); + } + } + } + // Change the record if the policy has been Removed earlier. + for(RemovedPolicy oldRemovedPolicy: notificationRecord.getRemovedPolicies()){ + if(oldRemovedPolicy.getPolicyName().equals(newUpdatedPolicy.getPolicyName())){ + if(oldRemovedPolicy.getVersionNo().equals(newUpdatedPolicy.getVersionNo())){ + oldRemovedPolicies.remove(oldRemovedPolicy); + } + } + } + if(updated){ + update = true; + updatedDelta.add((StdLoadedPolicy)newUpdatedPolicy); + } + // This will be converted to new Later + oldUpdatedPolicies.add(newUpdatedPolicy); + } + // Conversion of Update to Remove if that occurred. + if(!oldUpdatedLostPolicies.isEmpty()){ + for(LoadedPolicy updatedPolicy: oldUpdatedLostPolicies){ + StdRemovedPolicy removedPolicy = new StdRemovedPolicy(); + removedPolicy.setPolicyName(updatedPolicy.getPolicyName()); + removedPolicy.setVersionNo(updatedPolicy.getVersionNo()); + removedDelta.add(removedPolicy); + remove = true; + } + } + } + // Update our Record. + if(!oldUpdatedPolicies.isEmpty()){ + for(LoadedPolicy updatedPolicy: oldUpdatedPolicies){ + newUpdatedPolicies.add((StdLoadedPolicy)updatedPolicy); + } + } + if(!oldRemovedPolicies.isEmpty()){ + for(RemovedPolicy removedPolicy: oldRemovedPolicies){ + newRemovedPolicies.add((StdRemovedPolicy)removedPolicy); + } + } + notificationRecord.setRemovedPolicies(newRemovedPolicies); + notificationRecord.setLoadedPolicies(newUpdatedPolicies); + // Update the notification Result. + notificationDelta.setRemovedPolicies(removedDelta); + notificationDelta.setLoadedPolicies(updatedDelta); + if(remove&&update){ + notificationDelta.setNotificationType(NotificationType.BOTH); + }else if(remove){ + notificationDelta.setNotificationType(NotificationType.REMOVE); + }else if(update){ + notificationDelta.setNotificationType(NotificationType.UPDATE); + } + } + return notificationDelta; + } + + public static void recordNotification(StdPDPNotification notification){ + if(notification!=null){ + if(notificationRecord.getRemovedPolicies()==null || notificationRecord.getLoadedPolicies()==null){ + notificationRecord = notification; + }else{ + // Check if there is anything new and update the record. + if(notificationRecord.getLoadedPolicies()!=null || notificationRecord.getRemovedPolicies()!=null){ + HashSet removedPolicies = new HashSet<>(); + for(RemovedPolicy rPolicy: notificationRecord.getRemovedPolicies()){ + StdRemovedPolicy sRPolicy = new StdRemovedPolicy(); + sRPolicy.setPolicyName(rPolicy.getPolicyName()); + sRPolicy.setVersionNo(rPolicy.getVersionNo()); + removedPolicies.add(sRPolicy); + } + HashSet updatedPolicies = new HashSet<>(); + for(LoadedPolicy uPolicy: notificationRecord.getLoadedPolicies()){ + StdLoadedPolicy sUPolicy = new StdLoadedPolicy(); + sUPolicy.setMatches(uPolicy.getMatches()); + sUPolicy.setPolicyName(uPolicy.getPolicyName()); + sUPolicy.setVersionNo(uPolicy.getVersionNo()); + updatedPolicies.add(sUPolicy); + } + + // Checking with the new updated policies. + if(notification.getLoadedPolicies()!=null && !notification.getLoadedPolicies().isEmpty()){ + for(LoadedPolicy newUpdatedPolicy: notification.getLoadedPolicies()){ + // If it was removed earlier then we need to remove from our record + Iterator oldRemovedPolicy = removedPolicies.iterator(); + while(oldRemovedPolicy.hasNext()){ + RemovedPolicy policy = oldRemovedPolicy.next(); + if(newUpdatedPolicy.getPolicyName().equals(policy.getPolicyName())) { + if(newUpdatedPolicy.getVersionNo().equals(policy.getVersionNo())) { + oldRemovedPolicy.remove(); + } + } + } + // If it was previously updated need to Overwrite it to the record. + Iterator oldUpdatedPolicy = updatedPolicies.iterator(); + while(oldUpdatedPolicy.hasNext()){ + LoadedPolicy policy = oldUpdatedPolicy.next(); + if(newUpdatedPolicy.getPolicyName().equals(policy.getPolicyName())) { + if(newUpdatedPolicy.getVersionNo().equals(policy.getVersionNo())) { + oldUpdatedPolicy.remove(); + } + } + } + StdLoadedPolicy sUPolicy = new StdLoadedPolicy(); + sUPolicy.setMatches(newUpdatedPolicy.getMatches()); + sUPolicy.setPolicyName(newUpdatedPolicy.getPolicyName()); + sUPolicy.setVersionNo(newUpdatedPolicy.getVersionNo()); + updatedPolicies.add(sUPolicy); + } + } + // Checking with New Removed Policies. + if(notification.getRemovedPolicies()!=null && !notification.getRemovedPolicies().isEmpty()){ + for(RemovedPolicy newRemovedPolicy : notification.getRemovedPolicies()){ + // If it was previously removed Overwrite it to the record. + Iterator oldRemovedPolicy = removedPolicies.iterator(); + while(oldRemovedPolicy.hasNext()){ + RemovedPolicy policy = oldRemovedPolicy.next(); + if(newRemovedPolicy.getPolicyName().equals(policy.getPolicyName())) { + if(newRemovedPolicy.getVersionNo().equals(policy.getVersionNo())) { + oldRemovedPolicy.remove(); + } + } + } + // If it was added earlier then we need to remove from our record. + Iterator oldUpdatedPolicy = updatedPolicies.iterator(); + while(oldUpdatedPolicy.hasNext()){ + LoadedPolicy policy = oldUpdatedPolicy.next(); + if(newRemovedPolicy.getPolicyName().equals(policy.getPolicyName())) { + if(newRemovedPolicy.getVersionNo().equals(policy.getVersionNo())) { + oldUpdatedPolicy.remove(); + } + } + } + StdRemovedPolicy sRPolicy = new StdRemovedPolicy(); + sRPolicy.setPolicyName(newRemovedPolicy.getPolicyName()); + sRPolicy.setVersionNo(newRemovedPolicy.getVersionNo()); + removedPolicies.add(sRPolicy); + } + } + notificationRecord.setRemovedPolicies(removedPolicies); + notificationRecord.setLoadedPolicies(updatedPolicies); + } + if(!notificationRecord.getLoadedPolicies().isEmpty() && !notificationRecord.getRemovedPolicies().isEmpty()){ + notificationRecord.setNotificationType(NotificationType.BOTH); + }else if(!notificationRecord.getLoadedPolicies().isEmpty()){ + notificationRecord.setNotificationType(NotificationType.UPDATE); + }else if(!notificationRecord.getRemovedPolicies().isEmpty()){ + notificationRecord.setNotificationType(NotificationType.REMOVE); + } + } + } + } + + // This should return the current Notification Record. + public static PDPNotification getNotificationRecord(){ + return notificationRecord; + } +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/std/StdLoadedPolicy.java b/PolicyEngineUtils/src/main/java/org/onap/policy/std/StdLoadedPolicy.java new file mode 100644 index 000000000..c1f4fed7f --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/std/StdLoadedPolicy.java @@ -0,0 +1,72 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.std; + +import java.util.Map; + +import org.onap.policy.api.LoadedPolicy; +import org.onap.policy.api.UpdateType; + +public class StdLoadedPolicy implements LoadedPolicy{ + private String policyName = null; + private String versionNo = null; + private Map matches = null; + private UpdateType updateType = null; + + @Override + public String getPolicyName() { + if(policyName!=null && policyName.contains(".xml")){ + return (policyName.substring(0, policyName.substring(0, policyName.lastIndexOf(".")).lastIndexOf("."))); + } + return this.policyName; + } + + public void setPolicyName(String policyName) { + this.policyName = policyName; + } + + @Override + public String getVersionNo() { + return this.versionNo; + } + + public void setVersionNo(String versionNo) { + this.versionNo = versionNo; + } + + @Override + public Map getMatches() { + return this.matches; + } + + public void setMatches(Map matches) { + this.matches = matches; + } + + @Override + public UpdateType getUpdateType() { + return this.updateType; + } + + public void setUpdateType(UpdateType updateType){ + this.updateType = updateType; + } +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/std/StdPDPNotification.java b/PolicyEngineUtils/src/main/java/org/onap/policy/std/StdPDPNotification.java new file mode 100644 index 000000000..fe7807185 --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/std/StdPDPNotification.java @@ -0,0 +1,80 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.std; + +import java.util.Collection; +import java.util.HashSet; + +import org.onap.policy.api.LoadedPolicy; +import org.onap.policy.api.NotificationType; +import org.onap.policy.api.PDPNotification; +import org.onap.policy.api.RemovedPolicy; + +public class StdPDPNotification implements PDPNotification{ + private Collection removedPolicies = null; + private Collection loadedPolicies = null; + private Collection removed = null; + private Collection updated = null; + private NotificationType notificationType= null; + + @Override + public Collection getRemovedPolicies() { + removed = new HashSet(); + if(removedPolicies!=null){ + for(RemovedPolicy removedPolicy: removedPolicies){ + removed.add(removedPolicy); + } + return this.removed; + }else{ + return null; + } + } + + @Override + public Collection getLoadedPolicies() { + updated = new HashSet(); + if(loadedPolicies!=null){ + for(LoadedPolicy updatedPolicy: loadedPolicies){ + updated.add(updatedPolicy); + } + return updated; + }else{ + return null; + } + } + + @Override + public NotificationType getNotificationType() { + return notificationType; + } + + public void setNotificationType(NotificationType notificationType){ + this.notificationType= notificationType; + } + + public void setLoadedPolicies(Collection loadedPolicies) { + this.loadedPolicies = loadedPolicies; + } + + public void setRemovedPolicies(Collection removedPolicies) { + this.removedPolicies = removedPolicies; + } +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/std/StdRemovedPolicy.java b/PolicyEngineUtils/src/main/java/org/onap/policy/std/StdRemovedPolicy.java new file mode 100644 index 000000000..bdce33a3b --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/std/StdRemovedPolicy.java @@ -0,0 +1,49 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.std; + +import org.onap.policy.api.RemovedPolicy; + +public class StdRemovedPolicy implements RemovedPolicy{ + private String policyName = null; + private String versionNo = null; + + @Override + public String getVersionNo() { + return this.versionNo; + } + + public void setVersionNo(String versionNo) { + this.versionNo = versionNo; + } + + @Override + public String getPolicyName() { + if(policyName!=null && policyName.contains(".xml")){ + return (policyName.substring(0, policyName.substring(0, policyName.lastIndexOf(".")).lastIndexOf("."))); + } + return this.policyName; + } + + public void setPolicyName(String policyName) { + this.policyName = policyName; + } +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFEnvironment.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFEnvironment.java new file mode 100644 index 000000000..1fccabcbd --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFEnvironment.java @@ -0,0 +1,29 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.utils; + +public enum AAFEnvironment { + /* + * Enumeration for the Resource Node Naming. Add here if required. + */ + DEVL, + TEST, + PROD +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFPolicyClient.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFPolicyClient.java new file mode 100644 index 000000000..e560d0ecc --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFPolicyClient.java @@ -0,0 +1,40 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.utils; + +import java.lang.reflect.Method; +import java.util.Properties; + +public interface AAFPolicyClient { + + public boolean checkAuth(String userName, String pass); + public void updateProperties(Properties properties) throws AAFPolicyException; + public boolean checkAuthPerm(String mechID, String pass, String type, String instance, String action); + public boolean checkPerm(String userName, String pass, String type, String instance, String action); + public static AAFPolicyClient getInstance(Properties properties) throws AAFPolicyException{ + try { + Class aafPolicyClient = Class.forName(properties.getProperty("aafClient.impl.className", AAFPolicyClientImpl.class.getName())); + Method method = aafPolicyClient.getMethod("getInstance", Properties.class); + return (AAFPolicyClient) method.invoke(null, properties); + } catch (Exception e) { + throw new AAFPolicyException(e); + } + } +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFPolicyClientImpl.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFPolicyClientImpl.java new file mode 100644 index 000000000..0f4876051 --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFPolicyClientImpl.java @@ -0,0 +1,214 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.utils; + +import java.util.Properties; + +import org.apache.log4j.Logger; + +import com.att.cadi.Access; +import com.att.cadi.Access.Level; +import com.att.cadi.CadiException; +import com.att.cadi.aaf.AAFPermission; +import com.att.cadi.aaf.v2_0.AAFAuthn; +import com.att.cadi.aaf.v2_0.AAFCon; +import com.att.cadi.aaf.v2_0.AAFConDME2; +import com.att.cadi.aaf.v2_0.AAFLurPerm; +import com.att.cadi.config.Config; + + +/** + * AAF Client: Generic AAF Client implementation to connect to AAF Resources to validate permissions and authorization. + * + */ +public class AAFPolicyClientImpl implements AAFPolicyClient{ + private static Logger logger = Logger.getLogger(AAFPolicyClientImpl.class.getName()); + + private static final String ENVIRONMENT = "ENVIRONMENT"; + + // Warning Please don't Change these Values. Confirm with AAF team. + private static final String DEVL_AAF_URL = ""; + private static final String TEST_AAF_URL = ""; + private static final String PROD_AAF_URL = ""; + private static final String DEFAULT_AFT_LATITUDE = "32.780140"; + private static final String DEFAULT_AFT_LONGITUDE = "-96.800451"; + private static final String TEST_AFT_ENVIRONMENT = "AFTUAT"; + private static final String PROD_AFT_ENVIRONMENT = "AFTPRD"; + private static final String DEFAULT_AAF_USER_EXPIRES = Integer.toString(5*60000); // 5 minutes for found items to live in cache + private static final String DEFAULT_AAF_HIGH_COUNT = Integer.toString(400); // Maximum number of items in Cache + + private static AAFPolicyClientImpl instance = null; + + private static Properties props = new Properties(); + private static AAFCon aafCon = null; + private static AAFLurPerm aafLurPerm = null; + private static AAFAuthn aafAuthn = null; + private static Access access = null; + + private AAFPolicyClientImpl(Properties properties) throws AAFPolicyException{ + if(instance == null){ + instance = this; + } + setup(properties); + } + + /** + * Gets the instance of the AAFClient instance. Needs Proper properties with CLIENT_ID, CLIENT_KEY and ENVIRONMENT + * + * @param properties Properties with CLIENT_ID, CLIENT_KEY and ENVIRONMENT + * @return AAFClient instance. + * @throws AAFPolicyException Exceptions. + */ + public static synchronized AAFPolicyClientImpl getInstance(Properties properties) throws AAFPolicyException{ + if(instance == null) { + logger.info("Creating AAFClient Instance "); + instance = new AAFPolicyClientImpl(properties); + } + return instance; + } + + // To set Property values && Connections. + private static void setup(Properties properties) throws AAFPolicyException { + if(properties!=null && !properties.isEmpty()){ + props = System.getProperties(); + props.setProperty("AFT_LATITUDE", properties.getProperty("AFT_LATITUDE", DEFAULT_AFT_LATITUDE)); + props.setProperty("AFT_LONGITUDE", properties.getProperty("AFT_LONGITUDE", DEFAULT_AFT_LONGITUDE)); + String aftEnv = TEST_AFT_ENVIRONMENT; + //props.setProperty(Config.CADI_KEYFILE,"keyfile"); + props.setProperty("aaf_id",properties.getProperty("aaf_id", "aafID")); + props.setProperty("aaf_password", properties.getProperty("aaf_password", "aafPass")); + if(properties.containsKey(Config.AAF_URL)){ + // if given a value in properties file. + props.setProperty(Config.AAF_URL, properties.getProperty(Config.AAF_URL)); + }else{ + // Set Default values. + if(properties.getProperty(ENVIRONMENT, "DEVL").equalsIgnoreCase(AAFEnvironment.TEST.toString())){ + props.setProperty(Config.AAF_URL, TEST_AAF_URL); + }else if(properties.getProperty(ENVIRONMENT, "DEVL").equalsIgnoreCase(AAFEnvironment.PROD.toString())){ + props.setProperty(Config.AAF_URL, PROD_AAF_URL); + aftEnv = PROD_AFT_ENVIRONMENT; + }else{ + props.setProperty(Config.AAF_URL, DEVL_AAF_URL); + } + } + props.setProperty("AFT_ENVIRONMENT", properties.getProperty("AFT_ENVIRONMENT", aftEnv)); + props.setProperty(Config.AAF_USER_EXPIRES, properties.getProperty(Config.AAF_USER_EXPIRES, DEFAULT_AAF_USER_EXPIRES)); + props.setProperty(Config.AAF_HIGH_COUNT, properties.getProperty(Config.AAF_HIGH_COUNT, DEFAULT_AAF_HIGH_COUNT)); + }else{ + logger.error("Required Property value is missing : " + ENVIRONMENT); + throw new AAFPolicyException("Required Property value is missing : " + ENVIRONMENT); + } + access = new PolicyAccess(props, Level.valueOf(properties.getProperty("AAF_LOG_LEVEL", Level.ERROR.toString()))); + setUpAAF(); + } + + /** + * Updates the Properties file in case if required. + * + * @param properties Properties with CLIENT_ID, CLIENT_KEY and ENVIRONMENT + * @throws AAFPolicyException exceptions if any. + */ + public void updateProperties(Properties properties) throws AAFPolicyException{ + setup(properties); + } + + /** + * Checks the Authentication and Permissions for the given values. + * + * @param mechID MechID or ATT ID must be registered under the Name space. + * @param pass Password pertaining to the MechID or ATTID. + * @param type Permissions Type. + * @param instance Permissions Instance. + * @param action Permissions Action. + * @return + */ + public boolean checkAuthPerm(String mechID, String pass, String type, String instance, String action){ + return checkAuth(mechID, pass) && checkPerm(mechID, pass, type, instance, action); + } + + /** + * Checks the Authentication of the UserName and Password Given. + * + * @param userName UserName or MechID + * @param pass Password. + * @return True or False. + */ + public boolean checkAuth(String userName, String pass){ + if(aafAuthn!=null){ + try { + int i=0; + do{ + if(aafAuthn.validate(userName, pass)==null){ + return true; + } + i++; + }while(i<2); + } catch (Exception e) { + logger.error(e.getMessage() + e); + } + } + logger.info("Authentication failed for : " + userName + " in " + props.getProperty(Config.AAF_URL)); + return false; + } + + /** + * Checks Permissions for the given UserName, Password and Type, Instance Action. + * + * @param userName UserName or MechID + * @param pass Password. + * @param type Permissions Type. + * @param instance Permissions Instance. + * @param action Permissions Action. + * @return True or False. + */ + public boolean checkPerm(String userName, String pass, String type, String instance, String action){ + int i =0; + Boolean result= false; + do{ + if(aafCon!=null && aafLurPerm !=null){ + try { + aafCon.basicAuth(userName, pass); + AAFPermission perm = new AAFPermission(type, instance, action); + result = aafLurPerm.fish(userName, perm); + } catch (CadiException e) { + logger.error(e.getMessage() + e); + aafLurPerm.destroy(); + } + } + logger.info("Permissions for : " + userName + " in " + props.getProperty(Config.AAF_URL) + " for " + type + "," + instance + "," + action + "\n Result is: " + result); + i++; + }while(i<2 && !result); // Try once more to check if this can be passed. AAF has some issues. + return result; + } + + private static boolean setUpAAF(){ + try { + aafCon = new AAFConDME2(access); + aafLurPerm = aafCon.newLur();//new AAFLurPerm(aafCon); + aafAuthn = aafCon.newAuthn(aafLurPerm);//new AAFAuthn(aafCon, aafLurPerm); + return true; + } catch (Exception e) { + logger.error("Error while setting up AAF Connection " + e.getMessage() + e); + return false; + } + } +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFPolicyException.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFPolicyException.java new file mode 100644 index 000000000..d476d2c95 --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/AAFPolicyException.java @@ -0,0 +1,48 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.utils; + +/** + * AAFPolicyException to show exception messages. + * + */ +public class AAFPolicyException extends Exception { + private static final long serialVersionUID = 1910606668038621L; + + public AAFPolicyException() { + } + + public AAFPolicyException(String message) { + super(message); + } + + public AAFPolicyException(Throwable cause){ + super(cause); + } + + public AAFPolicyException(String message, Throwable cause) { + super(message, cause); + } + + public AAFPolicyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpHandler.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpHandler.java new file mode 100644 index 000000000..f45ba56da --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpHandler.java @@ -0,0 +1,41 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.utils; + +import org.onap.policy.api.NotificationHandler; +import org.onap.policy.api.PDPNotification; + +public interface BackUpHandler extends NotificationHandler{ + + /** + * notificationReceived method will be triggered automatically whenever a Notification is received by the PEP. + * + * @param notification PDPNotification of {@link org.onap.policy.api.PDPNotification} is the object that has information of the notification. + */ + public void notificationReceived(PDPNotification notification); + + /** + * runOnNotification method will be triggered automatically whenever a Notification is received by the PEP This needs to be the main implementation. + * + * @param notification PDPNotification of {@link org.onap.policy.api.PDPNotification} is the object that has information of the notification. + */ + public void runOnNotification(PDPNotification notification); +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitor.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitor.java new file mode 100644 index 000000000..6fff797a6 --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitor.java @@ -0,0 +1,422 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.utils; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Properties; +import java.util.concurrent.TimeUnit; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.EntityTransaction; +import javax.persistence.Persistence; +import javax.persistence.Query; + +import org.apache.log4j.Logger; +import org.eclipse.persistence.config.PersistenceUnitProperties; +import org.onap.policy.api.PDPNotification; +import org.onap.policy.jpa.BackUpMonitorEntity; +import org.onap.policy.std.NotificationStore; +import org.onap.policy.std.StdPDPNotification; + +import com.fasterxml.jackson.databind.JsonNode; +import com.github.fge.jackson.JsonLoader; +import com.github.fge.jsonpatch.JsonPatch; +import com.github.fge.jsonpatch.JsonPatchException; +import com.github.fge.jsonpatch.diff.JsonDiff; + +/** + * BackUp Monitor checks Backup Status with the Database and maintains Redundancy for Gateway Applications. + * + */ +public class BackUpMonitor { + private static final Logger LOGGER = Logger.getLogger(BackUpMonitor.class.getName()); + private static final int DEFAULT_PING = 15000; // Value is in milliseconds. + + private static BackUpMonitor instance = null; + private static String resourceName = null; + private static String resourceNodeName = null; + private static String notificationRecord = null; + private static String lastMasterNotification= null; + private static int pingInterval = DEFAULT_PING; + private static Boolean masterFlag = false; + private static Object lock = new Object(); + private static Object notificationLock = new Object(); + private static BackUpHandler handler= null; + private EntityManager em; + private EntityManagerFactory emf; + + /* + * Enumeration for the Resource Node Naming. Add here if required. + */ + public enum ResourceNode{ + BRMS, + ASTRA + } + + private BackUpMonitor(String resourceNodeName, String resourceName, Properties properties, BackUpHandler handler) throws Exception{ + if(instance == null){ + instance = this; + } + BackUpMonitor.resourceNodeName = resourceNodeName; + BackUpMonitor.resourceName = resourceName; + BackUpMonitor.handler = handler; + // Create Persistence Entity + properties.setProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, "META-INF/persistencePU.xml"); + emf = Persistence.createEntityManagerFactory("PolicyEngineUtils", properties); + if(emf==null){ + LOGGER.error("Unable to create Entity Manger Factory "); + throw new Exception("Unable to create Entity Manger Factory"); + } + em = emf.createEntityManager(); + + // Check Database if this is Master or Slave. + checkDataBase(); + + // Start thread. + Thread t = new Thread(new BMonitor()); + t.start(); + } + + /** + * Gets the BackUpMonitor Instance if given proper resourceName and properties. Else returns null. + * + * @param resourceNodeName String format of the Resource Node to which the resource Belongs to. + * @param resourceName String format of the ResourceName. This needs to be Unique. + * @param properties Properties format of the properties file. + * @return BackUpMonitor instance. + */ + public static synchronized BackUpMonitor getInstance(String resourceNodeName, String resourceName, Properties properties, BackUpHandler handler) throws Exception { + if(resourceNodeName==null || resourceNodeName.trim().equals("") ||resourceName==null|| resourceName.trim().equals("") || properties == null || handler==null){ + LOGGER.error("Error while getting Instance. Please check resourceName and/or properties file"); + return null; + }else if((resourceNodeName.equals(ResourceNode.ASTRA.toString()) || resourceNodeName.equals(ResourceNode.BRMS.toString())) && validate(properties) && instance==null){ + LOGGER.info("Creating Instance of BackUpMonitor"); + instance = new BackUpMonitor(resourceNodeName, resourceName, properties, handler); + } + return instance; + } + + // This is to validate given Properties with required values. + private static Boolean validate(Properties properties){ + if(properties.getProperty("javax.persistence.jdbc.driver")==null ||properties.getProperty("javax.persistence.jdbc.driver").trim().equals("")){ + LOGGER.error("javax.persistence.jdbc.driver property is empty"); + return false; + } + if(properties.getProperty("javax.persistence.jdbc.url")==null || properties.getProperty("javax.persistence.jdbc.url").trim().equals("")){ + LOGGER.error("javax.persistence.jdbc.url property is empty"); + return false; + } + if(properties.getProperty("javax.persistence.jdbc.user")==null || properties.getProperty("javax.persistence.jdbc.user").trim().equals("")){ + LOGGER.error("javax.persistence.jdbc.user property is empty"); + return false; + } + if(properties.getProperty("javax.persistence.jdbc.password")==null || properties.getProperty("javax.persistence.jdbc.password").trim().equals("")){ + LOGGER.error("javax.persistence.jdbc.password property is empty"); + return false; + } + if(properties.getProperty("ping_interval")==null || properties.getProperty("ping_interval").trim().equals("")){ + LOGGER.info("ping_interval property not specified. Taking default value"); + }else{ + try{ + pingInterval = Integer.parseInt(properties.getProperty("ping_interval").trim()); + }catch(NumberFormatException e){ + LOGGER.warn("Ignored invalid proeprty ping_interval. Taking default value: " + pingInterval); + pingInterval = DEFAULT_PING; + } + } + return true; + } + + // Sets the Flag for masterFlag to either True or False. + private static void setFlag(Boolean flag){ + synchronized (lock) { + masterFlag = flag; + } + } + + /** + * Gets the Boolean value of Master(True) or Slave mode (False) + * + * @return Boolean flag which if True means that the operation needs to be performed(Master mode) or if false the operation is in slave mode. + */ + public Boolean getFlag(){ + synchronized (lock) { + return masterFlag; + } + } + + // BackUpMonitor Thread + private class BMonitor implements Runnable{ + @Override + public void run() { + LOGGER.info("Starting BackUpMonitor Thread.. "); + while(true){ + try { + TimeUnit.MILLISECONDS.sleep(pingInterval); + checkDataBase(); + } catch (Exception e) { + LOGGER.error("Error during Thread execution " + e.getMessage()); + } + } + } + } + + // Set Master + private static BackUpMonitorEntity setMaster(BackUpMonitorEntity bMEntity){ + bMEntity.setFlag("MASTER"); + setFlag(true); + return bMEntity; + } + + // Set Slave + private static BackUpMonitorEntity setSlave(BackUpMonitorEntity bMEntity){ + bMEntity.setFlag("SLAVE"); + setFlag(false); + return bMEntity; + } + + // Check Database and set the Flag. + private void checkDataBase() throws Exception { + EntityTransaction et = em.getTransaction(); + notificationRecord = PolicyUtils.objectToJsonString(NotificationStore.getNotificationRecord()); + // Clear Cache. + LOGGER.info("Clearing Cache"); + em.getEntityManagerFactory().getCache().evictAll(); + try{ + LOGGER.info("Checking Datatbase for BackUpMonitor.. "); + et.begin(); + Query query = em.createQuery("select b from BackUpMonitorEntity b where b.resourceNodeName = :nn"); + if(resourceNodeName.equals(ResourceNode.ASTRA.toString())){ + query.setParameter("nn", ResourceNode.ASTRA.toString()); + }else if(resourceNodeName.equals(ResourceNode.BRMS.toString())){ + query.setParameter("nn", ResourceNode.BRMS.toString()); + } + List bMList = query.getResultList(); + if(bMList.isEmpty()){ + // This is New. create an entry as Master. + LOGGER.info("Adding resource " + resourceName + " to Database"); + BackUpMonitorEntity bMEntity = new BackUpMonitorEntity(); + bMEntity.setResoruceNodeName(resourceNodeName); + bMEntity.setResourceName(resourceName); + bMEntity = setMaster(bMEntity); + bMEntity.setTimeStamp(new Date()); + em.persist(bMEntity); + em.flush(); + }else{ + // Check for other Master(s) + ArrayList masterEntities = new ArrayList<>(); + // Check for self. + BackUpMonitorEntity selfEntity = null; + // Check backup monitor entities. + for(int i=0; i< bMList.size(); i++){ + BackUpMonitorEntity bMEntity = (BackUpMonitorEntity) bMList.get(i); + LOGGER.info("Refreshing Entity. "); + em.refresh(bMEntity); + if(bMEntity.getFlag().equalsIgnoreCase("MASTER")){ + masterEntities.add(bMEntity); + } + if(bMEntity.getResourceName().equals(resourceName)){ + selfEntity = bMEntity; + } + } + if(selfEntity!=null){ + LOGGER.info("Resource Name already Exists: " + resourceName); + if(selfEntity.getFlag().equalsIgnoreCase("MASTER")){ + // Already Master Mode. + setFlag(true); + LOGGER.info(resourceName + " is on Master Mode"); + selfEntity.setTimeStamp(new Date()); + selfEntity.setNotificationRecord(notificationRecord); + em.persist(selfEntity); + em.flush(); + setLastNotification(null); + if(!masterEntities.contains(selfEntity)){ + masterEntities.add(selfEntity); + } + }else{ + // Already Slave Mode. + setFlag(false); + selfEntity.setTimeStamp(new Date()); + selfEntity.setNotificationRecord(notificationRecord); + em.persist(selfEntity); + em.flush(); + LOGGER.info(resourceName + " is on Slave Mode"); + } + }else{ + // Resource name is null -> No resource with same name. + selfEntity = new BackUpMonitorEntity(); + selfEntity.setResoruceNodeName(resourceNodeName); + selfEntity.setResourceName(resourceName); + selfEntity.setTimeStamp(new Date()); + selfEntity = setSlave(selfEntity); + setLastNotification(null); + LOGGER.info("Creating: " + resourceName + " on Slave Mode"); + em.persist(selfEntity); + em.flush(); + } + // Correct the database if any errors and perform monitor checks. + if(masterEntities.size()!=1 || !getFlag()){ + // We are either not master or there are more masters or no masters. + if(masterEntities.size()==0){ + // No Masters is a problem Convert ourselves to Master. + selfEntity = setMaster(selfEntity); + selfEntity.setTimeStamp(new Date()); + selfEntity.setNotificationRecord(notificationRecord); + LOGGER.info(resourceName + " changed to Master Mode - No Masters available."); + em.persist(selfEntity); + em.flush(); + }else { + if(masterEntities.size()>1){ + // More Masters is a problem, Fix the issue by looking for the latest one and make others Slave. + BackUpMonitorEntity masterEntity = null; + for(BackUpMonitorEntity currentEntity: masterEntities){ + if(currentEntity.getFlag().equalsIgnoreCase("MASTER")){ + if(masterEntity==null){ + masterEntity = currentEntity; + }else if(currentEntity.getTimeStamp().getTime() > masterEntity.getTimeStamp().getTime()){ + // False Master, Update master to slave and take currentMaster as Master. + masterEntity.setFlag("SLAVE"); + masterEntity.setTimeStamp(new Date()); + em.persist(masterEntity); + em.flush(); + masterEntity = currentEntity; + }else{ + currentEntity.setFlag("SLAVE"); + currentEntity.setTimeStamp(new Date()); + em.persist(currentEntity); + em.flush(); + } + } + } + masterEntities = new ArrayList<>(); + masterEntities.add(masterEntity); + } + if(masterEntities.size()==1){ + // Correct Size, Check if Master is Latest, if not Change Master to Slave and Slave to Master. + BackUpMonitorEntity masterEntity = masterEntities.get(0); + if(!masterEntity.getResourceName().equals(selfEntity.getResourceName())){ + Date currentTime = new Date(); + long timeDiff = 0; + timeDiff = currentTime.getTime()-masterEntity.getTimeStamp().getTime(); + if(timeDiff > (pingInterval+1500)){ + // This is down or has an issue and we need to become Master while turning the Master to slave. + masterEntity.setFlag("SLAVE"); + String lastNotification = null; + if(masterEntity.getNotificationRecord()!=null){ + lastNotification = calculatePatch(masterEntity.getNotificationRecord()); + } + setLastNotification(lastNotification); + em.persist(masterEntity); + em.flush(); + // Lets Become Master. + selfEntity = setMaster(selfEntity); + LOGGER.info("Changing "+ resourceName + " from slave to Master Mode"); + selfEntity.setTimeStamp(new Date()); + selfEntity.setNotificationRecord(notificationRecord); + em.persist(selfEntity); + em.flush(); + } + } + }else{ + LOGGER.error("Backup Monitor Issue, Masters out of sync, This will be fixed in next interval."); + } + } + } + } + et.commit(); + }catch(Exception e){ + LOGGER.error("failed Database Operation " + e.getMessage()); + if(et.isActive()){ + et.rollback(); + } + throw new Exception(e); + } + } + + // Calculate Patch and return String JsonPatch of the notification Delta. + private synchronized String calculatePatch(String oldNotificationRecord) { + try{ + JsonNode notification = JsonLoader.fromString(notificationRecord); + JsonNode oldNotification = JsonLoader.fromString(oldNotificationRecord); + JsonNode patchNode = JsonDiff.asJson(oldNotification, notification); + LOGGER.info("Generated JSON Patch is " + patchNode.toString()); + JsonPatch patch = JsonPatch.fromJson(patchNode); + try { + JsonNode patched = patch.apply(oldNotification); + LOGGER.info("Generated New Notification is : " + patched.toString()); + return patched.toString(); + } catch (JsonPatchException e) { + LOGGER.error("Error generating Patched " +e.getMessage()); + return null; + } + }catch(IOException e){ + LOGGER.error("Error generating Patched " +e.getMessage()); + return null; + } + } + + /** + * Updates Notification in the Database while Performing the health check. + * + * @param notification String format of notification record to store in the Database. + * @throws Exception + */ + public synchronized void updateNotification() throws Exception{ + checkDataBase(); + } + + // Take in string notification and send the record delta to Handler. + private static void callHandler(String notification){ + if(handler!=null){ + try { + PDPNotification notificationObject = PolicyUtils.jsonStringToObject(notification, StdPDPNotification.class); + if(notificationObject.getNotificationType()!=null){ + LOGGER.info("Performing Patched notification "); + try{ + handler.runOnNotification(notificationObject); + notificationRecord = lastMasterNotification; + }catch (Exception e){ + LOGGER.error("Error in Clients Handler Object : " + e.getMessage()); + } + } + } catch (IOException e) { + LOGGER.info("Error while notification Conversion " + e.getMessage()); + } + } + } + + // Used to set LastMasterNotification Record. + private static void setLastNotification(String notification){ + synchronized(notificationLock){ + lastMasterNotification = notification; + if(lastMasterNotification!=null && !lastMasterNotification.equals("\"notificationType\":null")){ + if(lastMasterNotification.equals(notificationRecord)){ + return; + } + callHandler(notification); + } + } + } +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusConsumer.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusConsumer.java new file mode 100644 index 000000000..bf92835c6 --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusConsumer.java @@ -0,0 +1,99 @@ +package org.onap.policy.utils; + +import java.util.List; +import java.util.Properties; + +import com.att.nsa.mr.client.impl.MRConsumerImpl; +import com.att.nsa.mr.test.clients.ProtocolTypeConstants; + +public interface BusConsumer { + + /** + * fetch messages + * + * @return list of messages + * @throws Exception when error encountered by underlying libraries + */ + public Iterable fetch() throws Exception; + + /** + * close underlying library consumer + */ + public void close(); + + /** + * MR based consumer + */ + public static class DmaapConsumerWrapper implements BusConsumer { + + /** + * MR Consumer + */ + protected MRConsumerImpl consumer; + + /** + * MR Consumer Wrapper + * + * @param servers messaging bus hosts + * @param topic topic + * @param apiKey API Key + * @param apiSecret API Secret + * @param aafLogin AAF Login + * @param aafPassword AAF Password + * @param consumerGroup Consumer Group + * @param consumerInstance Consumer Instance + * @param fetchTimeout Fetch Timeout + * @param fetchLimit Fetch Limit + */ + public DmaapConsumerWrapper(List servers, String topic, + String aafLogin, String aafPassword, + String consumerGroup, String consumerInstance, + int fetchTimeout, int fetchLimit) + throws Exception { + + this.consumer = new MRConsumerImpl(servers, topic, + consumerGroup, consumerInstance, + fetchTimeout, fetchLimit, + null, aafLogin, aafPassword); + + this.consumer.setUsername(aafLogin); + this.consumer.setPassword(aafPassword); + + this.consumer.setProtocolFlag(ProtocolTypeConstants.AAF_AUTH.getValue()); + + Properties props = new Properties(); + props.setProperty("Protocol", "http"); + this.consumer.setProps(props); + this.consumer.setHost(servers.get(0) + ":3904"); + } + + /** + * {@inheritDoc} + */ + public Iterable fetch() throws Exception { + return this.consumer.fetch(); + } + + /** + * {@inheritDoc} + */ + public void close() { + this.consumer.close(); + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder. + append("DmaapConsumerWrapper ["). + append("consumer.getAuthDate()=").append(consumer.getAuthDate()). + append(", consumer.getAuthKey()=").append(consumer.getAuthKey()). + append(", consumer.getHost()=").append(consumer.getHost()). + append(", consumer.getProtocolFlag()=").append(consumer.getProtocolFlag()). + append(", consumer.getUsername()=").append(consumer.getUsername()). + append("]"); + return builder.toString(); + } + } + +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusPublisher.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusPublisher.java new file mode 100644 index 000000000..792c389ab --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusPublisher.java @@ -0,0 +1,119 @@ +package org.onap.policy.utils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; +import java.util.concurrent.TimeUnit; + +import org.onap.policy.common.logging.eelf.PolicyLogger; + +import com.att.nsa.mr.client.impl.MRSimplerBatchPublisher; +import com.att.nsa.mr.test.clients.ProtocolTypeConstants; + +public interface BusPublisher { + + /** + * sends a message + * + * @param partition id + * @param message the message + * @return true if success, false otherwise + * @throws IllegalArgumentException if no message provided + */ + public boolean send(String partitionId, String message) throws IllegalArgumentException; + + /** + * closes the publisher + */ + public void close(); + + /** + * DmaapClient library wrapper + */ + public static class DmaapPublisherWrapper implements BusPublisher { + /** + * MR based Publisher + */ + protected MRSimplerBatchPublisher publisher; + + public DmaapPublisherWrapper(List servers, String topic, + String aafLogin, + String aafPassword) { + + ArrayList dmaapServers = new ArrayList<>(); + for (String server: servers) { + dmaapServers.add(server + ":3904"); + } + + this.publisher = + new MRSimplerBatchPublisher.Builder(). + againstUrls(dmaapServers). + onTopic(topic). + build(); + + this.publisher.setProtocolFlag(ProtocolTypeConstants.AAF_AUTH.getValue()); + + this.publisher.setUsername(aafLogin); + this.publisher.setPassword(aafPassword); + + Properties props = new Properties(); + props.setProperty("Protocol", "http"); + props.setProperty("contenttype", "application/json"); + + this.publisher.setProps(props); + + this.publisher.setHost(servers.get(0)); + + if (PolicyLogger.isInfoEnabled()) + PolicyLogger.info(DmaapPublisherWrapper.class.getName(), + "CREATION: " + this); + } + + /** + * {@inheritDoc} + */ + @Override + public void close() { + if (PolicyLogger.isInfoEnabled()) + PolicyLogger.info(DmaapPublisherWrapper.class.getName(), + "CREATION: " + this); + + try { + this.publisher.close(1, TimeUnit.SECONDS); + } catch (Exception e) { + PolicyLogger.warn(DmaapPublisherWrapper.class.getName(), + "CLOSE: " + this + " because of " + + e.getMessage()); + } + } + + /** + * {@inheritDoc} + */ + @Override + public boolean send(String partitionId, String message) + throws IllegalArgumentException { + if (message == null) + throw new IllegalArgumentException("No message provided"); + + this.publisher.send(partitionId, message); + return true; + + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("DmaapPublisherWrapper ["). + append("publisher.getAuthDate()=").append(publisher.getAuthDate()). + append(", publisher.getAuthKey()=").append(publisher.getAuthKey()). + append(", publisher.getHost()=").append(publisher.getHost()). + append(", publisher.getProtocolFlag()=").append(publisher.getProtocolFlag()). + append(", publisher.getUsername()=").append(publisher.getUsername()). + append(", publisher.getPendingMessageCount()=").append(publisher.getPendingMessageCount()). + append("]"); + return builder.toString(); + } + } + +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyAccess.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyAccess.java new file mode 100644 index 000000000..ea1514a0f --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyAccess.java @@ -0,0 +1,106 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.utils; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Date; +import java.util.Properties; + +import org.apache.log4j.Logger; + +import com.att.cadi.Access; + +/** + * PolicyAccess used by AAF for logging purposes. + * + */ +public class PolicyAccess implements Access { + private static final Logger logger = Logger.getLogger(PolicyAccess.class.getName()); + + private Properties properties = new Properties(); + private Access.Level logLevel = Access.Level.INFO; + + public PolicyAccess(Properties properties, Level level) { + this.properties = properties; + if(level!=null){ + logLevel = level; + } + } + + @Override + public ClassLoader classLoader() { + return getClass().getClassLoader(); + } + + @Override + public String decrypt(String enc, boolean arg1) throws IOException { + return enc; + } + + @Override + public String getProperty(String prop, String def) { + return properties.getProperty(prop, def); + } + + @Override + public void load(InputStream in) throws IOException { + properties.load(in); + } + + @Override + public void log(Level level, Object... args) { + if (logLevel.compareTo(level) > 0) { + return; + } + StringBuffer sb = new StringBuffer(); + sb.append(new Date()).append(' ').append(level); + logtail(sb, args); + } + + @Override + public void log(Exception e, Object... args) { + StringBuffer sb = new StringBuffer(); + sb.append(new Date()).append(" EXCEPTION ").append(e.getMessage()); + logtail(sb, args); + logger.error(e.getMessage() + e); + } + + @Override + public void setLogLevel(Level level) { + logLevel = level; + } + + private void logtail(StringBuffer sb, Object[] args) { + for (Object o: args) { + String s = o.toString(); + if (s.length() > 0) { + sb.append(' ').append(s); + } + } + logger.info(sb.toString()); + } + + @Override + public boolean willLog(Level arg0) { + return false; + } +} diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyUtils.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyUtils.java new file mode 100644 index 000000000..82340c13c --- /dev/null +++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyUtils.java @@ -0,0 +1,201 @@ +/*- + * ============LICENSE_START======================================================= + * PolicyEngineUtils + * ================================================================================ + * Copyright (C) 2017 AT&T 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.policy.utils; + +import java.io.IOException; +import java.io.StringReader; +import java.io.UnsupportedEncodingException; +import java.util.Arrays; +import java.util.Base64; +import java.util.List; +import java.util.StringTokenizer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.drools.core.io.impl.ReaderResource; +import org.drools.verifier.Verifier; +import org.drools.verifier.VerifierError; +import org.drools.verifier.builder.VerifierBuilder; +import org.drools.verifier.builder.VerifierBuilderFactory; +import org.kie.api.io.ResourceType; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.base.CharMatcher; + +public class PolicyUtils { + + public static final String EMAIL_PATTERN = + "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" + + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; + private static final String PACKAGE_ERROR = "mismatched input '{' expecting one of the following tokens: '[package"; + private static final String SUCCESS = "success"; + + private PolicyUtils(){ + // Private Constructor + } + public static String objectToJsonString(Object o) throws JsonProcessingException{ + ObjectMapper mapper = new ObjectMapper(); + return mapper.writeValueAsString(o); + } + + public static T jsonStringToObject(String jsonString, Class className) throws IOException{ + ObjectMapper mapper = new ObjectMapper(); + return mapper.readValue(jsonString, className); + } + + public static String decode(String encodedString) throws UnsupportedEncodingException { + if(encodedString!=null && !encodedString.isEmpty()){ + return new String(Base64.getDecoder().decode(encodedString) ,"UTF-8"); + }else{ + return null; + } + } + + public static String[] decodeBasicEncoding(String encodedValue) throws Exception{ + if(encodedValue!=null && encodedValue.contains("Basic ")){ + String encodedUserPassword = encodedValue.replaceFirst("Basic" + " ", ""); + String usernameAndPassword = null; + byte[] decodedBytes = Base64.getDecoder().decode(encodedUserPassword); + usernameAndPassword = new String(decodedBytes, "UTF-8"); + StringTokenizer tokenizer = new StringTokenizer(usernameAndPassword, ":"); + String username = tokenizer.nextToken(); + String password = tokenizer.nextToken(); + return new String[]{username, password}; + }else{ + return new String[]{}; + } + } + + public static String emptyPolicyValidator(String field){ + String error; + if ("".equals(field) || field.contains(" ") || !field.matches("^[a-zA-Z0-9_]*$")) { + error = "The Value in Required Field will allow only '{0-9}, {a-z}, {A-Z}, _' following set of Combinations"; + return error; + } else { + if(CharMatcher.ASCII.matchesAllOf((CharSequence) field)){ + error = SUCCESS; + }else{ + error = "The Value Contains Non ASCII Characters"; + return error; + } + } + return error; + } + + public static String emptyPolicyValidatorWithSpaceAllowed(String field){ + String error; + if ("".equals(field) || !field.matches("^[a-zA-Z0-9_ ]*$")) { + error = "The Value in Required Field will allow only '{0-9}, {a-z}, {A-Z}, _' following set of Combinations"; + return error; + } else { + if(CharMatcher.ASCII.matchesAllOf((CharSequence) field)){ + error = SUCCESS; + }else{ + error = "The Value Contains Non ASCII Characters"; + return error; + } + } + return error; + } + public static String descriptionValidator(String field) { + String error; + if (field.contains("@CreatedBy:") || field.contains("@ModifiedBy:")) { + error = "The value in the description shouldn't contain @CreatedBy: or @ModifiedBy:"; + return error; + } else { + error = SUCCESS; + } + return error; + } + + public static Boolean isInteger(String number){ + try{ + Integer.parseInt(number); + }catch(NumberFormatException e){ + return false; + } + return true; + } + + public static String validateEmailAddress(String emailAddressValue) { + String error = SUCCESS; + List emailList = Arrays.asList(emailAddressValue.split(",")); + for(int i =0 ; i < emailList.size() ; i++){ + Pattern pattern = Pattern.compile(EMAIL_PATTERN); + Matcher matcher = pattern.matcher(emailList.get(i).trim()); + if(!matcher.matches()){ + error = "Please check the Following Email Address is not Valid .... " +emailList.get(i); + return error; + }else{ + error = SUCCESS; + } + } + return error; + } + + /* + * Check for "[ERR" to see if there are any errors. + */ + public static String brmsRawValidate(String rule){ + VerifierBuilder vBuilder = VerifierBuilderFactory.newVerifierBuilder(); + Verifier verifier = vBuilder.newVerifier(); + verifier.addResourcesToVerify(new ReaderResource(new StringReader(rule)), ResourceType.DRL); + // Check if there are any Errors in Verification. + if(!verifier.getErrors().isEmpty()){ + boolean ignore = false; + StringBuilder message = new StringBuilder("Not a Valid DRL rule"); + for(VerifierError error: verifier.getErrors()){ + // Ignore annotations Error Messages + if(!error.getMessage().contains("'@'") && !error.getMessage().contains(PACKAGE_ERROR)){ + ignore= true; + message.append("\n" + error.getMessage()); + } + } + // Ignore new package names with { + // More checks for message to check if its a package error. + if(ignore && !message.toString().contains("Parser returned a null Package")){ + message.append("[ERR 107]"); + } + return message.toString(); + } + return ""; + } + + /** + * Given a version string consisting of integers with dots between them, convert it into an array of ints. + * + * @param version + * @return + * @throws NumberFormatException + */ + public static int[] versionStringToArray(String version) throws NumberFormatException { + if (version == null || version.length() == 0) { + return new int[0]; + } + String[] stringArray = version.split("\\."); + int[] resultArray = new int[stringArray.length]; + for (int i = 0; i < stringArray.length; i++) { + resultArray[i] = Integer.parseInt(stringArray[i]); + } + return resultArray; + } +} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/LoadedPolicy.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/LoadedPolicy.java deleted file mode 100644 index 574580bac..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/LoadedPolicy.java +++ /dev/null @@ -1,57 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.api; - -import java.util.Map; -/** - * LoadedPolicy defines the Policy that has been Loaded into the PDP. - * - * @version 0.2 - */ -public interface LoadedPolicy { - /** - * Gets the String format of the Policy Name that has been Loaded into the PDP. - * - * @return String format of Policy Name - */ - public String getPolicyName(); - - /** - * Gets the String format of the Policy Version that has been Loaded into the PDP. - * - * @return String format of the Policy Version. - */ - public String getVersionNo(); - - /** - * Gets the Map of String,String format of the Matches if the policy Loaded is of Config Type. - * - * @return the Map of String,String format of the matches in the policy. - */ - public Map getMatches(); - - /** - * Gets the UpdateType of {@link org.openecomp.policy.api.UpdateType} received. - * - * @return UpdateType associated with this PDPNotification - */ - public UpdateType getUpdateType(); -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/NotificationHandler.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/NotificationHandler.java deleted file mode 100644 index 9661b72f1..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/NotificationHandler.java +++ /dev/null @@ -1,34 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.api; -/** - * Defines the methods which need to run when an Event or Notification is received. - * - * @version 0.1 - */ -public interface NotificationHandler { - /** - * notificationReceived method will be triggered automatically whenever a Notification is received by the PEP. - * - * @param notification PDPNotification of {@link org.openecomp.policy.api.PDPNotification} is the object that has information of the notification. - */ - public void notificationReceived(PDPNotification notification); -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/NotificationType.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/NotificationType.java deleted file mode 100644 index 8bd5bc8db..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/NotificationType.java +++ /dev/null @@ -1,58 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.api; - -/** - * Enumeration of the Update Type that has occurred in the PDPNotification of - * {@link org.openecomp.policy.api.PDPNotification} - * - * @version 0.1 - */ -public enum NotificationType { - /** - * Indicates that a policy has been updated - */ - UPDATE("update"), - /** - * Indicates that a policy has been removed - */ - REMOVE("remove"), - /** - * Indicates that both update and removal of policy events has occurred. - */ - BOTH("both") - ; - - private String name; - - private NotificationType(String name){ - this.name = name; - } - - /** - * Returns the String format of the Type for this UpdateType - * @return the String Type of UpdateType - */ - @Override - public String toString(){ - return this.name; - } -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/PDPNotification.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/PDPNotification.java deleted file mode 100644 index 18da617cf..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/PDPNotification.java +++ /dev/null @@ -1,52 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.api; - -import java.util.Collection; - -/** - * Defines the Notification event sent from PDP to Client PEP. - * - * @version 0.2 - */ -public interface PDPNotification { - /** - * Gets the Collection of {@link org.openecomp.policy.api.RemovedPolicy} objects received. - * - * @return the Collection which consists of RemovedPolicy objects. - */ - public Collection getRemovedPolicies(); - - /** - * Gets the Collection of {@link org.openecomp.policy.api.LoadedPolicy} objects receieved. - * - * @return the Collection which consists of UpdatedPolicy objects. - */ - public Collection getLoadedPolicies(); - - /** - * Gets the NotificationType of {@link org.openecomp.policy.api.NotificationType} received. - * - * @return NotificationType associated with this PDPNotification - */ - public NotificationType getNotificationType(); - -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/PEDependency.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/PEDependency.java deleted file mode 100644 index 214174197..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/PEDependency.java +++ /dev/null @@ -1,90 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.api; - -import org.apache.maven.model.Dependency; -import org.apache.maven.model.Exclusion; - -public class PEDependency{ - - private String groupId; - private String artifactId; - private String version; - private String classifier; - private String type; - private String scope; - private java.util.List exclusions; - - public String getGroupId() { - return groupId; - } - public void setGroupId(String groupId) { - this.groupId = groupId; - } - public String getArtifactId() { - return artifactId; - } - public void setArtifactId(String artifactId) { - this.artifactId = artifactId; - } - public String getVersion() { - return version; - } - public void setVersion(String version) { - this.version = version; - } - public java.util.List getExclusions() { - return exclusions; - } - public void setExclusions(java.util.List exclusions) { - this.exclusions = exclusions; - } - public String getClassifier() { - return classifier; - } - public void setClassifier(String classifier) { - this.classifier = classifier; - } - public String getType() { - return type; - } - public void setType(String type) { - this.type = type; - } - public String getScope() { - return scope; - } - public void setScope(String scope) { - this.scope = scope; - } - - public Dependency getDependency(){ - Dependency dependency = new Dependency(); - dependency.setArtifactId(artifactId); - dependency.setGroupId(groupId); - dependency.setVersion(version); - dependency.setExclusions(exclusions); - dependency.setClassifier(classifier); - dependency.setScope(scope); - dependency.setType(type); - return dependency; - } -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/RemovedPolicy.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/RemovedPolicy.java deleted file mode 100644 index b94fdce42..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/RemovedPolicy.java +++ /dev/null @@ -1,41 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.api; -/** - * RemovedPolicy defines the Policy that has been removed - * - * @version 0.1 - */ -public interface RemovedPolicy { - /** - * Gets the String format of the Policy Name that has been removed. - * - * @return String format of Policy Name - */ - public String getPolicyName(); - - /** - * Gets the String format of the Policy Version that has been removed. - * - * @return String format of Policy Version - */ - public String getVersionNo(); -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/UpdateType.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/UpdateType.java deleted file mode 100644 index d48121b69..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/api/UpdateType.java +++ /dev/null @@ -1,54 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.api; - -/** - * Enumeration of the Update Type that has occurred in the UpdatedPolicy of - * {@link org.openecomp.policy.api.LoadedPolicy} - * - * @version 0.1 - */ -public enum UpdateType { - /** - * Indicates that a policy has been updated - */ - UPDATE("update"), - /** - * Indicates that a policy is new - */ - NEW("new") - ; - - private String name; - - private UpdateType(String name){ - this.name = name; - } - - /** - * Returns the String format of the Type for this UpdateType - * @return the String Type of UpdateType - */ - @Override - public String toString(){ - return this.name; - } -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/jpa/BackUpMonitorEntity.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/jpa/BackUpMonitorEntity.java deleted file mode 100644 index 731cfc7f7..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/jpa/BackUpMonitorEntity.java +++ /dev/null @@ -1,117 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.jpa; - -import java.io.Serializable; -import java.util.Date; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Lob; -import javax.persistence.NamedQuery; -import javax.persistence.PrePersist; -import javax.persistence.PreUpdate; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; - - -@Entity -@Table(name="BackUpMonitorEntity") -@NamedQuery(name="BackUpMonitorEntity.findAll", query= "SELECT b FROM BackUpMonitorEntity b ") -public class BackUpMonitorEntity implements Serializable{ - private static final long serialVersionUID = -9190606334322230630L; - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - @Column(name="id") - private int id; - - @Column(name="node_name", nullable=false) - private String resourceNodeName; - - @Column(name="resource_name", nullable=false, unique=true) - private String resourceName; - - @Column(name="flag", nullable=false) - private String flag; - - @Lob - @Column(name="notification_record") - private String notificationRecord; - - @Temporal(TemporalType.TIMESTAMP) - @Column(name="last_seen") - private Date timeStamp; - - @PrePersist - public void prePersist(){ - this.timeStamp = new Date(); - } - - @PreUpdate - public void preUpdate(){ - this.timeStamp = new Date(); - } - - public String getResourceName(){ - return this.resourceName; - } - - public String getResourceNodeName(){ - return this.resourceNodeName; - } - - public String getFlag(){ - return this.flag; - } - - public String getNotificationRecord(){ - return this.notificationRecord; - } - - public Date getTimeStamp(){ - return this.timeStamp; - } - - public void setResourceName(String resourceName){ - this.resourceName = resourceName; - } - - public void setResoruceNodeName(String resourceNodeName){ - this.resourceNodeName = resourceNodeName; - } - - public void setFlag(String flag){ - this.flag = flag; - } - - public void setNotificationRecord(String notificationRecord){ - this.notificationRecord = notificationRecord; - } - - public void setTimeStamp(Date timeStamp){ - this.timeStamp = timeStamp; - } -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/std/NotificationStore.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/std/NotificationStore.java deleted file mode 100644 index 2f3a72946..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/std/NotificationStore.java +++ /dev/null @@ -1,264 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.std; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; - -import org.openecomp.policy.api.LoadedPolicy; -import org.openecomp.policy.api.NotificationType; -import org.openecomp.policy.api.PDPNotification; -import org.openecomp.policy.api.RemovedPolicy; - - -/* - * This Should Compare and save the Notifications from the beginning of Time. - * If there is something new (missed) We notify the client. - * Works for PDP failures. - * - */ -public class NotificationStore { - private static StdPDPNotification notificationRecord = new StdPDPNotification(); - - public static StdPDPNotification getDeltaNotification(StdPDPNotification newNotification){ - StdPDPNotification notificationDelta = new StdPDPNotification(); - ArrayList removedDelta = new ArrayList<>(); - ArrayList updatedDelta = new ArrayList<>(); - Collection newUpdatedPolicies = new ArrayList<>(); - Collection newRemovedPolicies = new ArrayList<>(); - Collection oldUpdatedLostPolicies = notificationRecord.getLoadedPolicies(); - Collection oldRemovedPolicies = notificationRecord.getRemovedPolicies(); - Collection oldUpdatedPolicies = notificationRecord.getLoadedPolicies(); - Boolean update = false; - Boolean remove = false; - // if the NotificationRecord is empty - if(notificationRecord.getRemovedPolicies()==null || notificationRecord.getLoadedPolicies()==null){ - if(newNotification!=null){ - notificationRecord = newNotification; - } - return notificationDelta; - } - // do the Delta operation. - if(newNotification!=null){ - // check for old removed policies. - if(!newNotification.getRemovedPolicies().isEmpty()){ - for(RemovedPolicy newRemovedPolicy: newNotification.getRemovedPolicies()){ - //Look for policy Not in Remove - Boolean removed = true; - for(RemovedPolicy oldRemovedPolicy: notificationRecord.getRemovedPolicies()){ - if(newRemovedPolicy.getPolicyName().equals(oldRemovedPolicy.getPolicyName())){ - if(newRemovedPolicy.getVersionNo().equals(oldRemovedPolicy.getVersionNo())){ - removed = false; - // Don't want a duplicate. - oldRemovedPolicies.remove(oldRemovedPolicy); - } - } - } - //We need to change our record we have an Update record of this remove. - for(LoadedPolicy oldUpdatedPolicy: notificationRecord.getLoadedPolicies()){ - if(newRemovedPolicy.getPolicyName().equals(oldUpdatedPolicy.getPolicyName())){ - if(newRemovedPolicy.getVersionNo().equals(oldUpdatedPolicy.getVersionNo())){ - oldUpdatedPolicies.remove(oldUpdatedPolicy); - oldUpdatedLostPolicies.remove(oldUpdatedPolicy); - } - } - } - if(removed){ - remove = true; - notificationRecord.getRemovedPolicies().add(newRemovedPolicy); - removedDelta.add((StdRemovedPolicy)newRemovedPolicy); - } - // This will be converted to New Later. - oldRemovedPolicies.add(newRemovedPolicy); - } - } - // Check for old Updated Policies. - if(!newNotification.getLoadedPolicies().isEmpty()){ - for(LoadedPolicy newUpdatedPolicy: newNotification.getLoadedPolicies()){ - // Look for policies which are not in Update - Boolean updated = true; - for(LoadedPolicy oldUpdatedPolicy: notificationRecord.getLoadedPolicies()){ - if(newUpdatedPolicy.getPolicyName().equals(oldUpdatedPolicy.getPolicyName())){ - if(newUpdatedPolicy.getVersionNo().equals(oldUpdatedPolicy.getVersionNo())){ - updated = false; - // Remove the policy from copy. - oldUpdatedLostPolicies.remove(oldUpdatedPolicy); - // Eliminating Duplicate. - oldUpdatedPolicies.remove(oldUpdatedPolicy); - } - } - } - // Change the record if the policy has been Removed earlier. - for(RemovedPolicy oldRemovedPolicy: notificationRecord.getRemovedPolicies()){ - if(oldRemovedPolicy.getPolicyName().equals(newUpdatedPolicy.getPolicyName())){ - if(oldRemovedPolicy.getVersionNo().equals(newUpdatedPolicy.getVersionNo())){ - oldRemovedPolicies.remove(oldRemovedPolicy); - } - } - } - if(updated){ - update = true; - updatedDelta.add((StdLoadedPolicy)newUpdatedPolicy); - } - // This will be converted to new Later - oldUpdatedPolicies.add(newUpdatedPolicy); - } - // Conversion of Update to Remove if that occurred. - if(!oldUpdatedLostPolicies.isEmpty()){ - for(LoadedPolicy updatedPolicy: oldUpdatedLostPolicies){ - StdRemovedPolicy removedPolicy = new StdRemovedPolicy(); - removedPolicy.setPolicyName(updatedPolicy.getPolicyName()); - removedPolicy.setVersionNo(updatedPolicy.getVersionNo()); - removedDelta.add(removedPolicy); - remove = true; - } - } - } - // Update our Record. - if(!oldUpdatedPolicies.isEmpty()){ - for(LoadedPolicy updatedPolicy: oldUpdatedPolicies){ - newUpdatedPolicies.add((StdLoadedPolicy)updatedPolicy); - } - } - if(!oldRemovedPolicies.isEmpty()){ - for(RemovedPolicy removedPolicy: oldRemovedPolicies){ - newRemovedPolicies.add((StdRemovedPolicy)removedPolicy); - } - } - notificationRecord.setRemovedPolicies(newRemovedPolicies); - notificationRecord.setLoadedPolicies(newUpdatedPolicies); - // Update the notification Result. - notificationDelta.setRemovedPolicies(removedDelta); - notificationDelta.setLoadedPolicies(updatedDelta); - if(remove&&update){ - notificationDelta.setNotificationType(NotificationType.BOTH); - }else if(remove){ - notificationDelta.setNotificationType(NotificationType.REMOVE); - }else if(update){ - notificationDelta.setNotificationType(NotificationType.UPDATE); - } - } - return notificationDelta; - } - - public static void recordNotification(StdPDPNotification notification){ - if(notification!=null){ - if(notificationRecord.getRemovedPolicies()==null || notificationRecord.getLoadedPolicies()==null){ - notificationRecord = notification; - }else{ - // Check if there is anything new and update the record. - if(notificationRecord.getLoadedPolicies()!=null || notificationRecord.getRemovedPolicies()!=null){ - HashSet removedPolicies = new HashSet<>(); - for(RemovedPolicy rPolicy: notificationRecord.getRemovedPolicies()){ - StdRemovedPolicy sRPolicy = new StdRemovedPolicy(); - sRPolicy.setPolicyName(rPolicy.getPolicyName()); - sRPolicy.setVersionNo(rPolicy.getVersionNo()); - removedPolicies.add(sRPolicy); - } - HashSet updatedPolicies = new HashSet<>(); - for(LoadedPolicy uPolicy: notificationRecord.getLoadedPolicies()){ - StdLoadedPolicy sUPolicy = new StdLoadedPolicy(); - sUPolicy.setMatches(uPolicy.getMatches()); - sUPolicy.setPolicyName(uPolicy.getPolicyName()); - sUPolicy.setVersionNo(uPolicy.getVersionNo()); - updatedPolicies.add(sUPolicy); - } - - // Checking with the new updated policies. - if(notification.getLoadedPolicies()!=null && !notification.getLoadedPolicies().isEmpty()){ - for(LoadedPolicy newUpdatedPolicy: notification.getLoadedPolicies()){ - // If it was removed earlier then we need to remove from our record - Iterator oldRemovedPolicy = removedPolicies.iterator(); - while(oldRemovedPolicy.hasNext()){ - RemovedPolicy policy = oldRemovedPolicy.next(); - if(newUpdatedPolicy.getPolicyName().equals(policy.getPolicyName())) { - if(newUpdatedPolicy.getVersionNo().equals(policy.getVersionNo())) { - oldRemovedPolicy.remove(); - } - } - } - // If it was previously updated need to Overwrite it to the record. - Iterator oldUpdatedPolicy = updatedPolicies.iterator(); - while(oldUpdatedPolicy.hasNext()){ - LoadedPolicy policy = oldUpdatedPolicy.next(); - if(newUpdatedPolicy.getPolicyName().equals(policy.getPolicyName())) { - if(newUpdatedPolicy.getVersionNo().equals(policy.getVersionNo())) { - oldUpdatedPolicy.remove(); - } - } - } - StdLoadedPolicy sUPolicy = new StdLoadedPolicy(); - sUPolicy.setMatches(newUpdatedPolicy.getMatches()); - sUPolicy.setPolicyName(newUpdatedPolicy.getPolicyName()); - sUPolicy.setVersionNo(newUpdatedPolicy.getVersionNo()); - updatedPolicies.add(sUPolicy); - } - } - // Checking with New Removed Policies. - if(notification.getRemovedPolicies()!=null && !notification.getRemovedPolicies().isEmpty()){ - for(RemovedPolicy newRemovedPolicy : notification.getRemovedPolicies()){ - // If it was previously removed Overwrite it to the record. - Iterator oldRemovedPolicy = removedPolicies.iterator(); - while(oldRemovedPolicy.hasNext()){ - RemovedPolicy policy = oldRemovedPolicy.next(); - if(newRemovedPolicy.getPolicyName().equals(policy.getPolicyName())) { - if(newRemovedPolicy.getVersionNo().equals(policy.getVersionNo())) { - oldRemovedPolicy.remove(); - } - } - } - // If it was added earlier then we need to remove from our record. - Iterator oldUpdatedPolicy = updatedPolicies.iterator(); - while(oldUpdatedPolicy.hasNext()){ - LoadedPolicy policy = oldUpdatedPolicy.next(); - if(newRemovedPolicy.getPolicyName().equals(policy.getPolicyName())) { - if(newRemovedPolicy.getVersionNo().equals(policy.getVersionNo())) { - oldUpdatedPolicy.remove(); - } - } - } - StdRemovedPolicy sRPolicy = new StdRemovedPolicy(); - sRPolicy.setPolicyName(newRemovedPolicy.getPolicyName()); - sRPolicy.setVersionNo(newRemovedPolicy.getVersionNo()); - removedPolicies.add(sRPolicy); - } - } - notificationRecord.setRemovedPolicies(removedPolicies); - notificationRecord.setLoadedPolicies(updatedPolicies); - } - if(!notificationRecord.getLoadedPolicies().isEmpty() && !notificationRecord.getRemovedPolicies().isEmpty()){ - notificationRecord.setNotificationType(NotificationType.BOTH); - }else if(!notificationRecord.getLoadedPolicies().isEmpty()){ - notificationRecord.setNotificationType(NotificationType.UPDATE); - }else if(!notificationRecord.getRemovedPolicies().isEmpty()){ - notificationRecord.setNotificationType(NotificationType.REMOVE); - } - } - } - } - - // This should return the current Notification Record. - public static PDPNotification getNotificationRecord(){ - return notificationRecord; - } -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/std/StdLoadedPolicy.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/std/StdLoadedPolicy.java deleted file mode 100644 index e11ec8ce7..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/std/StdLoadedPolicy.java +++ /dev/null @@ -1,72 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.std; - -import java.util.Map; - -import org.openecomp.policy.api.LoadedPolicy; -import org.openecomp.policy.api.UpdateType; - -public class StdLoadedPolicy implements LoadedPolicy{ - private String policyName = null; - private String versionNo = null; - private Map matches = null; - private UpdateType updateType = null; - - @Override - public String getPolicyName() { - if(policyName!=null && policyName.contains(".xml")){ - return (policyName.substring(0, policyName.substring(0, policyName.lastIndexOf(".")).lastIndexOf("."))); - } - return this.policyName; - } - - public void setPolicyName(String policyName) { - this.policyName = policyName; - } - - @Override - public String getVersionNo() { - return this.versionNo; - } - - public void setVersionNo(String versionNo) { - this.versionNo = versionNo; - } - - @Override - public Map getMatches() { - return this.matches; - } - - public void setMatches(Map matches) { - this.matches = matches; - } - - @Override - public UpdateType getUpdateType() { - return this.updateType; - } - - public void setUpdateType(UpdateType updateType){ - this.updateType = updateType; - } -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/std/StdPDPNotification.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/std/StdPDPNotification.java deleted file mode 100644 index 6a6bf23e5..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/std/StdPDPNotification.java +++ /dev/null @@ -1,80 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.std; - -import java.util.Collection; -import java.util.HashSet; - -import org.openecomp.policy.api.LoadedPolicy; -import org.openecomp.policy.api.NotificationType; -import org.openecomp.policy.api.PDPNotification; -import org.openecomp.policy.api.RemovedPolicy; - -public class StdPDPNotification implements PDPNotification{ - private Collection removedPolicies = null; - private Collection loadedPolicies = null; - private Collection removed = null; - private Collection updated = null; - private NotificationType notificationType= null; - - @Override - public Collection getRemovedPolicies() { - removed = new HashSet(); - if(removedPolicies!=null){ - for(RemovedPolicy removedPolicy: removedPolicies){ - removed.add(removedPolicy); - } - return this.removed; - }else{ - return null; - } - } - - @Override - public Collection getLoadedPolicies() { - updated = new HashSet(); - if(loadedPolicies!=null){ - for(LoadedPolicy updatedPolicy: loadedPolicies){ - updated.add(updatedPolicy); - } - return updated; - }else{ - return null; - } - } - - @Override - public NotificationType getNotificationType() { - return notificationType; - } - - public void setNotificationType(NotificationType notificationType){ - this.notificationType= notificationType; - } - - public void setLoadedPolicies(Collection loadedPolicies) { - this.loadedPolicies = loadedPolicies; - } - - public void setRemovedPolicies(Collection removedPolicies) { - this.removedPolicies = removedPolicies; - } -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/std/StdRemovedPolicy.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/std/StdRemovedPolicy.java deleted file mode 100644 index 665f3c584..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/std/StdRemovedPolicy.java +++ /dev/null @@ -1,49 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.std; - -import org.openecomp.policy.api.RemovedPolicy; - -public class StdRemovedPolicy implements RemovedPolicy{ - private String policyName = null; - private String versionNo = null; - - @Override - public String getVersionNo() { - return this.versionNo; - } - - public void setVersionNo(String versionNo) { - this.versionNo = versionNo; - } - - @Override - public String getPolicyName() { - if(policyName!=null && policyName.contains(".xml")){ - return (policyName.substring(0, policyName.substring(0, policyName.lastIndexOf(".")).lastIndexOf("."))); - } - return this.policyName; - } - - public void setPolicyName(String policyName) { - this.policyName = policyName; - } -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/AAFEnvironment.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/AAFEnvironment.java deleted file mode 100644 index dd599cb85..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/AAFEnvironment.java +++ /dev/null @@ -1,29 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.utils; - -public enum AAFEnvironment { - /* - * Enumeration for the Resource Node Naming. Add here if required. - */ - DEVL, - TEST, - PROD -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/AAFPolicyClient.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/AAFPolicyClient.java deleted file mode 100644 index 3955e944a..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/AAFPolicyClient.java +++ /dev/null @@ -1,40 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.utils; - -import java.lang.reflect.Method; -import java.util.Properties; - -public interface AAFPolicyClient { - - public boolean checkAuth(String userName, String pass); - public void updateProperties(Properties properties) throws AAFPolicyException; - public boolean checkAuthPerm(String mechID, String pass, String type, String instance, String action); - public boolean checkPerm(String userName, String pass, String type, String instance, String action); - public static AAFPolicyClient getInstance(Properties properties) throws AAFPolicyException{ - try { - Class aafPolicyClient = Class.forName(properties.getProperty("aafClient.impl.className", AAFPolicyClientImpl.class.getName())); - Method method = aafPolicyClient.getMethod("getInstance", Properties.class); - return (AAFPolicyClient) method.invoke(null, properties); - } catch (Exception e) { - throw new AAFPolicyException(e); - } - } -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/AAFPolicyClientImpl.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/AAFPolicyClientImpl.java deleted file mode 100644 index a1c489922..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/AAFPolicyClientImpl.java +++ /dev/null @@ -1,214 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.utils; - -import java.util.Properties; - -import org.apache.log4j.Logger; - -import com.att.cadi.Access; -import com.att.cadi.Access.Level; -import com.att.cadi.CadiException; -import com.att.cadi.aaf.AAFPermission; -import com.att.cadi.aaf.v2_0.AAFAuthn; -import com.att.cadi.aaf.v2_0.AAFCon; -import com.att.cadi.aaf.v2_0.AAFConDME2; -import com.att.cadi.aaf.v2_0.AAFLurPerm; -import com.att.cadi.config.Config; - - -/** - * AAF Client: Generic AAF Client implementation to connect to AAF Resources to validate permissions and authorization. - * - */ -public class AAFPolicyClientImpl implements AAFPolicyClient{ - private static Logger logger = Logger.getLogger(AAFPolicyClientImpl.class.getName()); - - private static final String ENVIRONMENT = "ENVIRONMENT"; - - // Warning Please don't Change these Values. Confirm with AAF team. - private static final String DEVL_AAF_URL = ""; - private static final String TEST_AAF_URL = ""; - private static final String PROD_AAF_URL = ""; - private static final String DEFAULT_AFT_LATITUDE = "32.780140"; - private static final String DEFAULT_AFT_LONGITUDE = "-96.800451"; - private static final String TEST_AFT_ENVIRONMENT = "AFTUAT"; - private static final String PROD_AFT_ENVIRONMENT = "AFTPRD"; - private static final String DEFAULT_AAF_USER_EXPIRES = Integer.toString(5*60000); // 5 minutes for found items to live in cache - private static final String DEFAULT_AAF_HIGH_COUNT = Integer.toString(400); // Maximum number of items in Cache - - private static AAFPolicyClientImpl instance = null; - - private static Properties props = new Properties(); - private static AAFCon aafCon = null; - private static AAFLurPerm aafLurPerm = null; - private static AAFAuthn aafAuthn = null; - private static Access access = null; - - private AAFPolicyClientImpl(Properties properties) throws AAFPolicyException{ - if(instance == null){ - instance = this; - } - setup(properties); - } - - /** - * Gets the instance of the AAFClient instance. Needs Proper properties with CLIENT_ID, CLIENT_KEY and ENVIRONMENT - * - * @param properties Properties with CLIENT_ID, CLIENT_KEY and ENVIRONMENT - * @return AAFClient instance. - * @throws AAFPolicyException Exceptions. - */ - public static synchronized AAFPolicyClientImpl getInstance(Properties properties) throws AAFPolicyException{ - if(instance == null) { - logger.info("Creating AAFClient Instance "); - instance = new AAFPolicyClientImpl(properties); - } - return instance; - } - - // To set Property values && Connections. - private static void setup(Properties properties) throws AAFPolicyException { - if(properties!=null && !properties.isEmpty()){ - props = System.getProperties(); - props.setProperty("AFT_LATITUDE", properties.getProperty("AFT_LATITUDE", DEFAULT_AFT_LATITUDE)); - props.setProperty("AFT_LONGITUDE", properties.getProperty("AFT_LONGITUDE", DEFAULT_AFT_LONGITUDE)); - String aftEnv = TEST_AFT_ENVIRONMENT; - //props.setProperty(Config.CADI_KEYFILE,"keyfile"); - props.setProperty("aaf_id",properties.getProperty("aaf_id", "aafID")); - props.setProperty("aaf_password", properties.getProperty("aaf_password", "aafPass")); - if(properties.containsKey(Config.AAF_URL)){ - // if given a value in properties file. - props.setProperty(Config.AAF_URL, properties.getProperty(Config.AAF_URL)); - }else{ - // Set Default values. - if(properties.getProperty(ENVIRONMENT, "DEVL").equalsIgnoreCase(AAFEnvironment.TEST.toString())){ - props.setProperty(Config.AAF_URL, TEST_AAF_URL); - }else if(properties.getProperty(ENVIRONMENT, "DEVL").equalsIgnoreCase(AAFEnvironment.PROD.toString())){ - props.setProperty(Config.AAF_URL, PROD_AAF_URL); - aftEnv = PROD_AFT_ENVIRONMENT; - }else{ - props.setProperty(Config.AAF_URL, DEVL_AAF_URL); - } - } - props.setProperty("AFT_ENVIRONMENT", properties.getProperty("AFT_ENVIRONMENT", aftEnv)); - props.setProperty(Config.AAF_USER_EXPIRES, properties.getProperty(Config.AAF_USER_EXPIRES, DEFAULT_AAF_USER_EXPIRES)); - props.setProperty(Config.AAF_HIGH_COUNT, properties.getProperty(Config.AAF_HIGH_COUNT, DEFAULT_AAF_HIGH_COUNT)); - }else{ - logger.error("Required Property value is missing : " + ENVIRONMENT); - throw new AAFPolicyException("Required Property value is missing : " + ENVIRONMENT); - } - access = new PolicyAccess(props, Level.valueOf(properties.getProperty("AAF_LOG_LEVEL", Level.ERROR.toString()))); - setUpAAF(); - } - - /** - * Updates the Properties file in case if required. - * - * @param properties Properties with CLIENT_ID, CLIENT_KEY and ENVIRONMENT - * @throws AAFPolicyException exceptions if any. - */ - public void updateProperties(Properties properties) throws AAFPolicyException{ - setup(properties); - } - - /** - * Checks the Authentication and Permissions for the given values. - * - * @param mechID MechID or ATT ID must be registered under the Name space. - * @param pass Password pertaining to the MechID or ATTID. - * @param type Permissions Type. - * @param instance Permissions Instance. - * @param action Permissions Action. - * @return - */ - public boolean checkAuthPerm(String mechID, String pass, String type, String instance, String action){ - return checkAuth(mechID, pass) && checkPerm(mechID, pass, type, instance, action); - } - - /** - * Checks the Authentication of the UserName and Password Given. - * - * @param userName UserName or MechID - * @param pass Password. - * @return True or False. - */ - public boolean checkAuth(String userName, String pass){ - if(aafAuthn!=null){ - try { - int i=0; - do{ - if(aafAuthn.validate(userName, pass)==null){ - return true; - } - i++; - }while(i<2); - } catch (Exception e) { - logger.error(e.getMessage() + e); - } - } - logger.info("Authentication failed for : " + userName + " in " + props.getProperty(Config.AAF_URL)); - return false; - } - - /** - * Checks Permissions for the given UserName, Password and Type, Instance Action. - * - * @param userName UserName or MechID - * @param pass Password. - * @param type Permissions Type. - * @param instance Permissions Instance. - * @param action Permissions Action. - * @return True or False. - */ - public boolean checkPerm(String userName, String pass, String type, String instance, String action){ - int i =0; - Boolean result= false; - do{ - if(aafCon!=null && aafLurPerm !=null){ - try { - aafCon.basicAuth(userName, pass); - AAFPermission perm = new AAFPermission(type, instance, action); - result = aafLurPerm.fish(userName, perm); - } catch (CadiException e) { - logger.error(e.getMessage() + e); - aafLurPerm.destroy(); - } - } - logger.info("Permissions for : " + userName + " in " + props.getProperty(Config.AAF_URL) + " for " + type + "," + instance + "," + action + "\n Result is: " + result); - i++; - }while(i<2 && !result); // Try once more to check if this can be passed. AAF has some issues. - return result; - } - - private static boolean setUpAAF(){ - try { - aafCon = new AAFConDME2(access); - aafLurPerm = aafCon.newLur();//new AAFLurPerm(aafCon); - aafAuthn = aafCon.newAuthn(aafLurPerm);//new AAFAuthn(aafCon, aafLurPerm); - return true; - } catch (Exception e) { - logger.error("Error while setting up AAF Connection " + e.getMessage() + e); - return false; - } - } -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/AAFPolicyException.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/AAFPolicyException.java deleted file mode 100644 index a798b6e53..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/AAFPolicyException.java +++ /dev/null @@ -1,48 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.utils; - -/** - * AAFPolicyException to show exception messages. - * - */ -public class AAFPolicyException extends Exception { - private static final long serialVersionUID = 1910606668038621L; - - public AAFPolicyException() { - } - - public AAFPolicyException(String message) { - super(message); - } - - public AAFPolicyException(Throwable cause){ - super(cause); - } - - public AAFPolicyException(String message, Throwable cause) { - super(message, cause); - } - - public AAFPolicyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { - super(message, cause, enableSuppression, writableStackTrace); - } -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/BackUpHandler.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/BackUpHandler.java deleted file mode 100644 index 227d0ceff..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/BackUpHandler.java +++ /dev/null @@ -1,41 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.utils; - -import org.openecomp.policy.api.NotificationHandler; -import org.openecomp.policy.api.PDPNotification; - -public interface BackUpHandler extends NotificationHandler{ - - /** - * notificationReceived method will be triggered automatically whenever a Notification is received by the PEP. - * - * @param notification PDPNotification of {@link org.openecomp.policy.api.PDPNotification} is the object that has information of the notification. - */ - public void notificationReceived(PDPNotification notification); - - /** - * runOnNotification method will be triggered automatically whenever a Notification is received by the PEP This needs to be the main implementation. - * - * @param notification PDPNotification of {@link org.openecomp.policy.api.PDPNotification} is the object that has information of the notification. - */ - public void runOnNotification(PDPNotification notification); -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/BackUpMonitor.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/BackUpMonitor.java deleted file mode 100644 index 6f9082bc9..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/BackUpMonitor.java +++ /dev/null @@ -1,422 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.utils; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Properties; -import java.util.concurrent.TimeUnit; - -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.EntityTransaction; -import javax.persistence.Persistence; -import javax.persistence.Query; - -import org.apache.log4j.Logger; -import org.eclipse.persistence.config.PersistenceUnitProperties; -import org.openecomp.policy.api.PDPNotification; -import org.openecomp.policy.jpa.BackUpMonitorEntity; -import org.openecomp.policy.std.NotificationStore; -import org.openecomp.policy.std.StdPDPNotification; - -import com.fasterxml.jackson.databind.JsonNode; -import com.github.fge.jackson.JsonLoader; -import com.github.fge.jsonpatch.JsonPatch; -import com.github.fge.jsonpatch.JsonPatchException; -import com.github.fge.jsonpatch.diff.JsonDiff; - -/** - * BackUp Monitor checks Backup Status with the Database and maintains Redundancy for Gateway Applications. - * - */ -public class BackUpMonitor { - private static final Logger LOGGER = Logger.getLogger(BackUpMonitor.class.getName()); - private static final int DEFAULT_PING = 15000; // Value is in milliseconds. - - private static BackUpMonitor instance = null; - private static String resourceName = null; - private static String resourceNodeName = null; - private static String notificationRecord = null; - private static String lastMasterNotification= null; - private static int pingInterval = DEFAULT_PING; - private static Boolean masterFlag = false; - private static Object lock = new Object(); - private static Object notificationLock = new Object(); - private static BackUpHandler handler= null; - private EntityManager em; - private EntityManagerFactory emf; - - /* - * Enumeration for the Resource Node Naming. Add here if required. - */ - public enum ResourceNode{ - BRMS, - ASTRA - } - - private BackUpMonitor(String resourceNodeName, String resourceName, Properties properties, BackUpHandler handler) throws Exception{ - if(instance == null){ - instance = this; - } - BackUpMonitor.resourceNodeName = resourceNodeName; - BackUpMonitor.resourceName = resourceName; - BackUpMonitor.handler = handler; - // Create Persistence Entity - properties.setProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, "META-INF/persistencePU.xml"); - emf = Persistence.createEntityManagerFactory("PolicyEngineUtils", properties); - if(emf==null){ - LOGGER.error("Unable to create Entity Manger Factory "); - throw new Exception("Unable to create Entity Manger Factory"); - } - em = emf.createEntityManager(); - - // Check Database if this is Master or Slave. - checkDataBase(); - - // Start thread. - Thread t = new Thread(new BMonitor()); - t.start(); - } - - /** - * Gets the BackUpMonitor Instance if given proper resourceName and properties. Else returns null. - * - * @param resourceNodeName String format of the Resource Node to which the resource Belongs to. - * @param resourceName String format of the ResourceName. This needs to be Unique. - * @param properties Properties format of the properties file. - * @return BackUpMonitor instance. - */ - public static synchronized BackUpMonitor getInstance(String resourceNodeName, String resourceName, Properties properties, BackUpHandler handler) throws Exception { - if(resourceNodeName==null || resourceNodeName.trim().equals("") ||resourceName==null|| resourceName.trim().equals("") || properties == null || handler==null){ - LOGGER.error("Error while getting Instance. Please check resourceName and/or properties file"); - return null; - }else if((resourceNodeName.equals(ResourceNode.ASTRA.toString()) || resourceNodeName.equals(ResourceNode.BRMS.toString())) && validate(properties) && instance==null){ - LOGGER.info("Creating Instance of BackUpMonitor"); - instance = new BackUpMonitor(resourceNodeName, resourceName, properties, handler); - } - return instance; - } - - // This is to validate given Properties with required values. - private static Boolean validate(Properties properties){ - if(properties.getProperty("javax.persistence.jdbc.driver")==null ||properties.getProperty("javax.persistence.jdbc.driver").trim().equals("")){ - LOGGER.error("javax.persistence.jdbc.driver property is empty"); - return false; - } - if(properties.getProperty("javax.persistence.jdbc.url")==null || properties.getProperty("javax.persistence.jdbc.url").trim().equals("")){ - LOGGER.error("javax.persistence.jdbc.url property is empty"); - return false; - } - if(properties.getProperty("javax.persistence.jdbc.user")==null || properties.getProperty("javax.persistence.jdbc.user").trim().equals("")){ - LOGGER.error("javax.persistence.jdbc.user property is empty"); - return false; - } - if(properties.getProperty("javax.persistence.jdbc.password")==null || properties.getProperty("javax.persistence.jdbc.password").trim().equals("")){ - LOGGER.error("javax.persistence.jdbc.password property is empty"); - return false; - } - if(properties.getProperty("ping_interval")==null || properties.getProperty("ping_interval").trim().equals("")){ - LOGGER.info("ping_interval property not specified. Taking default value"); - }else{ - try{ - pingInterval = Integer.parseInt(properties.getProperty("ping_interval").trim()); - }catch(NumberFormatException e){ - LOGGER.warn("Ignored invalid proeprty ping_interval. Taking default value: " + pingInterval); - pingInterval = DEFAULT_PING; - } - } - return true; - } - - // Sets the Flag for masterFlag to either True or False. - private static void setFlag(Boolean flag){ - synchronized (lock) { - masterFlag = flag; - } - } - - /** - * Gets the Boolean value of Master(True) or Slave mode (False) - * - * @return Boolean flag which if True means that the operation needs to be performed(Master mode) or if false the operation is in slave mode. - */ - public Boolean getFlag(){ - synchronized (lock) { - return masterFlag; - } - } - - // BackUpMonitor Thread - private class BMonitor implements Runnable{ - @Override - public void run() { - LOGGER.info("Starting BackUpMonitor Thread.. "); - while(true){ - try { - TimeUnit.MILLISECONDS.sleep(pingInterval); - checkDataBase(); - } catch (Exception e) { - LOGGER.error("Error during Thread execution " + e.getMessage()); - } - } - } - } - - // Set Master - private static BackUpMonitorEntity setMaster(BackUpMonitorEntity bMEntity){ - bMEntity.setFlag("MASTER"); - setFlag(true); - return bMEntity; - } - - // Set Slave - private static BackUpMonitorEntity setSlave(BackUpMonitorEntity bMEntity){ - bMEntity.setFlag("SLAVE"); - setFlag(false); - return bMEntity; - } - - // Check Database and set the Flag. - private void checkDataBase() throws Exception { - EntityTransaction et = em.getTransaction(); - notificationRecord = PolicyUtils.objectToJsonString(NotificationStore.getNotificationRecord()); - // Clear Cache. - LOGGER.info("Clearing Cache"); - em.getEntityManagerFactory().getCache().evictAll(); - try{ - LOGGER.info("Checking Datatbase for BackUpMonitor.. "); - et.begin(); - Query query = em.createQuery("select b from BackUpMonitorEntity b where b.resourceNodeName = :nn"); - if(resourceNodeName.equals(ResourceNode.ASTRA.toString())){ - query.setParameter("nn", ResourceNode.ASTRA.toString()); - }else if(resourceNodeName.equals(ResourceNode.BRMS.toString())){ - query.setParameter("nn", ResourceNode.BRMS.toString()); - } - List bMList = query.getResultList(); - if(bMList.isEmpty()){ - // This is New. create an entry as Master. - LOGGER.info("Adding resource " + resourceName + " to Database"); - BackUpMonitorEntity bMEntity = new BackUpMonitorEntity(); - bMEntity.setResoruceNodeName(resourceNodeName); - bMEntity.setResourceName(resourceName); - bMEntity = setMaster(bMEntity); - bMEntity.setTimeStamp(new Date()); - em.persist(bMEntity); - em.flush(); - }else{ - // Check for other Master(s) - ArrayList masterEntities = new ArrayList<>(); - // Check for self. - BackUpMonitorEntity selfEntity = null; - // Check backup monitor entities. - for(int i=0; i< bMList.size(); i++){ - BackUpMonitorEntity bMEntity = (BackUpMonitorEntity) bMList.get(i); - LOGGER.info("Refreshing Entity. "); - em.refresh(bMEntity); - if(bMEntity.getFlag().equalsIgnoreCase("MASTER")){ - masterEntities.add(bMEntity); - } - if(bMEntity.getResourceName().equals(resourceName)){ - selfEntity = bMEntity; - } - } - if(selfEntity!=null){ - LOGGER.info("Resource Name already Exists: " + resourceName); - if(selfEntity.getFlag().equalsIgnoreCase("MASTER")){ - // Already Master Mode. - setFlag(true); - LOGGER.info(resourceName + " is on Master Mode"); - selfEntity.setTimeStamp(new Date()); - selfEntity.setNotificationRecord(notificationRecord); - em.persist(selfEntity); - em.flush(); - setLastNotification(null); - if(!masterEntities.contains(selfEntity)){ - masterEntities.add(selfEntity); - } - }else{ - // Already Slave Mode. - setFlag(false); - selfEntity.setTimeStamp(new Date()); - selfEntity.setNotificationRecord(notificationRecord); - em.persist(selfEntity); - em.flush(); - LOGGER.info(resourceName + " is on Slave Mode"); - } - }else{ - // Resource name is null -> No resource with same name. - selfEntity = new BackUpMonitorEntity(); - selfEntity.setResoruceNodeName(resourceNodeName); - selfEntity.setResourceName(resourceName); - selfEntity.setTimeStamp(new Date()); - selfEntity = setSlave(selfEntity); - setLastNotification(null); - LOGGER.info("Creating: " + resourceName + " on Slave Mode"); - em.persist(selfEntity); - em.flush(); - } - // Correct the database if any errors and perform monitor checks. - if(masterEntities.size()!=1 || !getFlag()){ - // We are either not master or there are more masters or no masters. - if(masterEntities.size()==0){ - // No Masters is a problem Convert ourselves to Master. - selfEntity = setMaster(selfEntity); - selfEntity.setTimeStamp(new Date()); - selfEntity.setNotificationRecord(notificationRecord); - LOGGER.info(resourceName + " changed to Master Mode - No Masters available."); - em.persist(selfEntity); - em.flush(); - }else { - if(masterEntities.size()>1){ - // More Masters is a problem, Fix the issue by looking for the latest one and make others Slave. - BackUpMonitorEntity masterEntity = null; - for(BackUpMonitorEntity currentEntity: masterEntities){ - if(currentEntity.getFlag().equalsIgnoreCase("MASTER")){ - if(masterEntity==null){ - masterEntity = currentEntity; - }else if(currentEntity.getTimeStamp().getTime() > masterEntity.getTimeStamp().getTime()){ - // False Master, Update master to slave and take currentMaster as Master. - masterEntity.setFlag("SLAVE"); - masterEntity.setTimeStamp(new Date()); - em.persist(masterEntity); - em.flush(); - masterEntity = currentEntity; - }else{ - currentEntity.setFlag("SLAVE"); - currentEntity.setTimeStamp(new Date()); - em.persist(currentEntity); - em.flush(); - } - } - } - masterEntities = new ArrayList<>(); - masterEntities.add(masterEntity); - } - if(masterEntities.size()==1){ - // Correct Size, Check if Master is Latest, if not Change Master to Slave and Slave to Master. - BackUpMonitorEntity masterEntity = masterEntities.get(0); - if(!masterEntity.getResourceName().equals(selfEntity.getResourceName())){ - Date currentTime = new Date(); - long timeDiff = 0; - timeDiff = currentTime.getTime()-masterEntity.getTimeStamp().getTime(); - if(timeDiff > (pingInterval+1500)){ - // This is down or has an issue and we need to become Master while turning the Master to slave. - masterEntity.setFlag("SLAVE"); - String lastNotification = null; - if(masterEntity.getNotificationRecord()!=null){ - lastNotification = calculatePatch(masterEntity.getNotificationRecord()); - } - setLastNotification(lastNotification); - em.persist(masterEntity); - em.flush(); - // Lets Become Master. - selfEntity = setMaster(selfEntity); - LOGGER.info("Changing "+ resourceName + " from slave to Master Mode"); - selfEntity.setTimeStamp(new Date()); - selfEntity.setNotificationRecord(notificationRecord); - em.persist(selfEntity); - em.flush(); - } - } - }else{ - LOGGER.error("Backup Monitor Issue, Masters out of sync, This will be fixed in next interval."); - } - } - } - } - et.commit(); - }catch(Exception e){ - LOGGER.error("failed Database Operation " + e.getMessage()); - if(et.isActive()){ - et.rollback(); - } - throw new Exception(e); - } - } - - // Calculate Patch and return String JsonPatch of the notification Delta. - private synchronized String calculatePatch(String oldNotificationRecord) { - try{ - JsonNode notification = JsonLoader.fromString(notificationRecord); - JsonNode oldNotification = JsonLoader.fromString(oldNotificationRecord); - JsonNode patchNode = JsonDiff.asJson(oldNotification, notification); - LOGGER.info("Generated JSON Patch is " + patchNode.toString()); - JsonPatch patch = JsonPatch.fromJson(patchNode); - try { - JsonNode patched = patch.apply(oldNotification); - LOGGER.info("Generated New Notification is : " + patched.toString()); - return patched.toString(); - } catch (JsonPatchException e) { - LOGGER.error("Error generating Patched " +e.getMessage()); - return null; - } - }catch(IOException e){ - LOGGER.error("Error generating Patched " +e.getMessage()); - return null; - } - } - - /** - * Updates Notification in the Database while Performing the health check. - * - * @param notification String format of notification record to store in the Database. - * @throws Exception - */ - public synchronized void updateNotification() throws Exception{ - checkDataBase(); - } - - // Take in string notification and send the record delta to Handler. - private static void callHandler(String notification){ - if(handler!=null){ - try { - PDPNotification notificationObject = PolicyUtils.jsonStringToObject(notification, StdPDPNotification.class); - if(notificationObject.getNotificationType()!=null){ - LOGGER.info("Performing Patched notification "); - try{ - handler.runOnNotification(notificationObject); - notificationRecord = lastMasterNotification; - }catch (Exception e){ - LOGGER.error("Error in Clients Handler Object : " + e.getMessage()); - } - } - } catch (IOException e) { - LOGGER.info("Error while notification Conversion " + e.getMessage()); - } - } - } - - // Used to set LastMasterNotification Record. - private static void setLastNotification(String notification){ - synchronized(notificationLock){ - lastMasterNotification = notification; - if(lastMasterNotification!=null && !lastMasterNotification.equals("\"notificationType\":null")){ - if(lastMasterNotification.equals(notificationRecord)){ - return; - } - callHandler(notification); - } - } - } -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/BusConsumer.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/BusConsumer.java deleted file mode 100644 index 9fcae39d7..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/BusConsumer.java +++ /dev/null @@ -1,99 +0,0 @@ -package org.openecomp.policy.utils; - -import java.util.List; -import java.util.Properties; - -import com.att.nsa.mr.client.impl.MRConsumerImpl; -import com.att.nsa.mr.test.clients.ProtocolTypeConstants; - -public interface BusConsumer { - - /** - * fetch messages - * - * @return list of messages - * @throws Exception when error encountered by underlying libraries - */ - public Iterable fetch() throws Exception; - - /** - * close underlying library consumer - */ - public void close(); - - /** - * MR based consumer - */ - public static class DmaapConsumerWrapper implements BusConsumer { - - /** - * MR Consumer - */ - protected MRConsumerImpl consumer; - - /** - * MR Consumer Wrapper - * - * @param servers messaging bus hosts - * @param topic topic - * @param apiKey API Key - * @param apiSecret API Secret - * @param aafLogin AAF Login - * @param aafPassword AAF Password - * @param consumerGroup Consumer Group - * @param consumerInstance Consumer Instance - * @param fetchTimeout Fetch Timeout - * @param fetchLimit Fetch Limit - */ - public DmaapConsumerWrapper(List servers, String topic, - String aafLogin, String aafPassword, - String consumerGroup, String consumerInstance, - int fetchTimeout, int fetchLimit) - throws Exception { - - this.consumer = new MRConsumerImpl(servers, topic, - consumerGroup, consumerInstance, - fetchTimeout, fetchLimit, - null, aafLogin, aafPassword); - - this.consumer.setUsername(aafLogin); - this.consumer.setPassword(aafPassword); - - this.consumer.setProtocolFlag(ProtocolTypeConstants.AAF_AUTH.getValue()); - - Properties props = new Properties(); - props.setProperty("Protocol", "http"); - this.consumer.setProps(props); - this.consumer.setHost(servers.get(0) + ":3904"); - } - - /** - * {@inheritDoc} - */ - public Iterable fetch() throws Exception { - return this.consumer.fetch(); - } - - /** - * {@inheritDoc} - */ - public void close() { - this.consumer.close(); - } - - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - builder. - append("DmaapConsumerWrapper ["). - append("consumer.getAuthDate()=").append(consumer.getAuthDate()). - append(", consumer.getAuthKey()=").append(consumer.getAuthKey()). - append(", consumer.getHost()=").append(consumer.getHost()). - append(", consumer.getProtocolFlag()=").append(consumer.getProtocolFlag()). - append(", consumer.getUsername()=").append(consumer.getUsername()). - append("]"); - return builder.toString(); - } - } - -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/BusPublisher.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/BusPublisher.java deleted file mode 100644 index fe3e4f6eb..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/BusPublisher.java +++ /dev/null @@ -1,119 +0,0 @@ -package org.openecomp.policy.utils; - -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; -import java.util.concurrent.TimeUnit; - -import org.openecomp.policy.common.logging.eelf.PolicyLogger; - -import com.att.nsa.mr.client.impl.MRSimplerBatchPublisher; -import com.att.nsa.mr.test.clients.ProtocolTypeConstants; - -public interface BusPublisher { - - /** - * sends a message - * - * @param partition id - * @param message the message - * @return true if success, false otherwise - * @throws IllegalArgumentException if no message provided - */ - public boolean send(String partitionId, String message) throws IllegalArgumentException; - - /** - * closes the publisher - */ - public void close(); - - /** - * DmaapClient library wrapper - */ - public static class DmaapPublisherWrapper implements BusPublisher { - /** - * MR based Publisher - */ - protected MRSimplerBatchPublisher publisher; - - public DmaapPublisherWrapper(List servers, String topic, - String aafLogin, - String aafPassword) { - - ArrayList dmaapServers = new ArrayList<>(); - for (String server: servers) { - dmaapServers.add(server + ":3904"); - } - - this.publisher = - new MRSimplerBatchPublisher.Builder(). - againstUrls(dmaapServers). - onTopic(topic). - build(); - - this.publisher.setProtocolFlag(ProtocolTypeConstants.AAF_AUTH.getValue()); - - this.publisher.setUsername(aafLogin); - this.publisher.setPassword(aafPassword); - - Properties props = new Properties(); - props.setProperty("Protocol", "http"); - props.setProperty("contenttype", "application/json"); - - this.publisher.setProps(props); - - this.publisher.setHost(servers.get(0)); - - if (PolicyLogger.isInfoEnabled()) - PolicyLogger.info(DmaapPublisherWrapper.class.getName(), - "CREATION: " + this); - } - - /** - * {@inheritDoc} - */ - @Override - public void close() { - if (PolicyLogger.isInfoEnabled()) - PolicyLogger.info(DmaapPublisherWrapper.class.getName(), - "CREATION: " + this); - - try { - this.publisher.close(1, TimeUnit.SECONDS); - } catch (Exception e) { - PolicyLogger.warn(DmaapPublisherWrapper.class.getName(), - "CLOSE: " + this + " because of " + - e.getMessage()); - } - } - - /** - * {@inheritDoc} - */ - @Override - public boolean send(String partitionId, String message) - throws IllegalArgumentException { - if (message == null) - throw new IllegalArgumentException("No message provided"); - - this.publisher.send(partitionId, message); - return true; - - } - - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append("DmaapPublisherWrapper ["). - append("publisher.getAuthDate()=").append(publisher.getAuthDate()). - append(", publisher.getAuthKey()=").append(publisher.getAuthKey()). - append(", publisher.getHost()=").append(publisher.getHost()). - append(", publisher.getProtocolFlag()=").append(publisher.getProtocolFlag()). - append(", publisher.getUsername()=").append(publisher.getUsername()). - append(", publisher.getPendingMessageCount()=").append(publisher.getPendingMessageCount()). - append("]"); - return builder.toString(); - } - } - -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/PolicyAccess.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/PolicyAccess.java deleted file mode 100644 index bbbffec0a..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/PolicyAccess.java +++ /dev/null @@ -1,106 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.utils; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Date; -import java.util.Properties; - -import org.apache.log4j.Logger; - -import com.att.cadi.Access; - -/** - * PolicyAccess used by AAF for logging purposes. - * - */ -public class PolicyAccess implements Access { - private static final Logger logger = Logger.getLogger(PolicyAccess.class.getName()); - - private Properties properties = new Properties(); - private Access.Level logLevel = Access.Level.INFO; - - public PolicyAccess(Properties properties, Level level) { - this.properties = properties; - if(level!=null){ - logLevel = level; - } - } - - @Override - public ClassLoader classLoader() { - return getClass().getClassLoader(); - } - - @Override - public String decrypt(String enc, boolean arg1) throws IOException { - return enc; - } - - @Override - public String getProperty(String prop, String def) { - return properties.getProperty(prop, def); - } - - @Override - public void load(InputStream in) throws IOException { - properties.load(in); - } - - @Override - public void log(Level level, Object... args) { - if (logLevel.compareTo(level) > 0) { - return; - } - StringBuffer sb = new StringBuffer(); - sb.append(new Date()).append(' ').append(level); - logtail(sb, args); - } - - @Override - public void log(Exception e, Object... args) { - StringBuffer sb = new StringBuffer(); - sb.append(new Date()).append(" EXCEPTION ").append(e.getMessage()); - logtail(sb, args); - logger.error(e.getMessage() + e); - } - - @Override - public void setLogLevel(Level level) { - logLevel = level; - } - - private void logtail(StringBuffer sb, Object[] args) { - for (Object o: args) { - String s = o.toString(); - if (s.length() > 0) { - sb.append(' ').append(s); - } - } - logger.info(sb.toString()); - } - - @Override - public boolean willLog(Level arg0) { - return false; - } -} diff --git a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/PolicyUtils.java b/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/PolicyUtils.java deleted file mode 100644 index e7639356a..000000000 --- a/PolicyEngineUtils/src/main/java/org/openecomp/policy/utils/PolicyUtils.java +++ /dev/null @@ -1,201 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PolicyEngineUtils - * ================================================================================ - * Copyright (C) 2017 AT&T 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.openecomp.policy.utils; - -import java.io.IOException; -import java.io.StringReader; -import java.io.UnsupportedEncodingException; -import java.util.Arrays; -import java.util.Base64; -import java.util.List; -import java.util.StringTokenizer; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.drools.core.io.impl.ReaderResource; -import org.drools.verifier.Verifier; -import org.drools.verifier.VerifierError; -import org.drools.verifier.builder.VerifierBuilder; -import org.drools.verifier.builder.VerifierBuilderFactory; -import org.kie.api.io.ResourceType; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.base.CharMatcher; - -public class PolicyUtils { - - public static final String EMAIL_PATTERN = - "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" - + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; - private static final String PACKAGE_ERROR = "mismatched input '{' expecting one of the following tokens: '[package"; - private static final String SUCCESS = "success"; - - private PolicyUtils(){ - // Private Constructor - } - public static String objectToJsonString(Object o) throws JsonProcessingException{ - ObjectMapper mapper = new ObjectMapper(); - return mapper.writeValueAsString(o); - } - - public static T jsonStringToObject(String jsonString, Class className) throws IOException{ - ObjectMapper mapper = new ObjectMapper(); - return mapper.readValue(jsonString, className); - } - - public static String decode(String encodedString) throws UnsupportedEncodingException { - if(encodedString!=null && !encodedString.isEmpty()){ - return new String(Base64.getDecoder().decode(encodedString) ,"UTF-8"); - }else{ - return null; - } - } - - public static String[] decodeBasicEncoding(String encodedValue) throws Exception{ - if(encodedValue!=null && encodedValue.contains("Basic ")){ - String encodedUserPassword = encodedValue.replaceFirst("Basic" + " ", ""); - String usernameAndPassword = null; - byte[] decodedBytes = Base64.getDecoder().decode(encodedUserPassword); - usernameAndPassword = new String(decodedBytes, "UTF-8"); - StringTokenizer tokenizer = new StringTokenizer(usernameAndPassword, ":"); - String username = tokenizer.nextToken(); - String password = tokenizer.nextToken(); - return new String[]{username, password}; - }else{ - return new String[]{}; - } - } - - public static String emptyPolicyValidator(String field){ - String error; - if ("".equals(field) || field.contains(" ") || !field.matches("^[a-zA-Z0-9_]*$")) { - error = "The Value in Required Field will allow only '{0-9}, {a-z}, {A-Z}, _' following set of Combinations"; - return error; - } else { - if(CharMatcher.ASCII.matchesAllOf((CharSequence) field)){ - error = SUCCESS; - }else{ - error = "The Value Contains Non ASCII Characters"; - return error; - } - } - return error; - } - - public static String emptyPolicyValidatorWithSpaceAllowed(String field){ - String error; - if ("".equals(field) || !field.matches("^[a-zA-Z0-9_ ]*$")) { - error = "The Value in Required Field will allow only '{0-9}, {a-z}, {A-Z}, _' following set of Combinations"; - return error; - } else { - if(CharMatcher.ASCII.matchesAllOf((CharSequence) field)){ - error = SUCCESS; - }else{ - error = "The Value Contains Non ASCII Characters"; - return error; - } - } - return error; - } - public static String descriptionValidator(String field) { - String error; - if (field.contains("@CreatedBy:") || field.contains("@ModifiedBy:")) { - error = "The value in the description shouldn't contain @CreatedBy: or @ModifiedBy:"; - return error; - } else { - error = SUCCESS; - } - return error; - } - - public static Boolean isInteger(String number){ - try{ - Integer.parseInt(number); - }catch(NumberFormatException e){ - return false; - } - return true; - } - - public static String validateEmailAddress(String emailAddressValue) { - String error = SUCCESS; - List emailList = Arrays.asList(emailAddressValue.split(",")); - for(int i =0 ; i < emailList.size() ; i++){ - Pattern pattern = Pattern.compile(EMAIL_PATTERN); - Matcher matcher = pattern.matcher(emailList.get(i).trim()); - if(!matcher.matches()){ - error = "Please check the Following Email Address is not Valid .... " +emailList.get(i); - return error; - }else{ - error = SUCCESS; - } - } - return error; - } - - /* - * Check for "[ERR" to see if there are any errors. - */ - public static String brmsRawValidate(String rule){ - VerifierBuilder vBuilder = VerifierBuilderFactory.newVerifierBuilder(); - Verifier verifier = vBuilder.newVerifier(); - verifier.addResourcesToVerify(new ReaderResource(new StringReader(rule)), ResourceType.DRL); - // Check if there are any Errors in Verification. - if(!verifier.getErrors().isEmpty()){ - boolean ignore = false; - StringBuilder message = new StringBuilder("Not a Valid DRL rule"); - for(VerifierError error: verifier.getErrors()){ - // Ignore annotations Error Messages - if(!error.getMessage().contains("'@'") && !error.getMessage().contains(PACKAGE_ERROR)){ - ignore= true; - message.append("\n" + error.getMessage()); - } - } - // Ignore new package names with { - // More checks for message to check if its a package error. - if(ignore && !message.toString().contains("Parser returned a null Package")){ - message.append("[ERR 107]"); - } - return message.toString(); - } - return ""; - } - - /** - * Given a version string consisting of integers with dots between them, convert it into an array of ints. - * - * @param version - * @return - * @throws NumberFormatException - */ - public static int[] versionStringToArray(String version) throws NumberFormatException { - if (version == null || version.length() == 0) { - return new int[0]; - } - String[] stringArray = version.split("\\."); - int[] resultArray = new int[stringArray.length]; - for (int i = 0; i < stringArray.length; i++) { - resultArray[i] = Integer.parseInt(stringArray[i]); - } - return resultArray; - } -} -- cgit 1.2.3-korg