summaryrefslogtreecommitdiffstats
path: root/integrity-monitor
diff options
context:
space:
mode:
Diffstat (limited to 'integrity-monitor')
-rw-r--r--integrity-monitor/src/main/java/org/onap/policy/common/im/StateChangeNotifier.java43
-rw-r--r--integrity-monitor/src/main/java/org/onap/policy/common/im/StateManagement.java27
-rw-r--r--integrity-monitor/src/test/java/org/onap/policy/common/im/StateManagementTest.java6
3 files changed, 48 insertions, 28 deletions
diff --git a/integrity-monitor/src/main/java/org/onap/policy/common/im/StateChangeNotifier.java b/integrity-monitor/src/main/java/org/onap/policy/common/im/StateChangeNotifier.java
index a678319f..eee3a9ef 100644
--- a/integrity-monitor/src/main/java/org/onap/policy/common/im/StateChangeNotifier.java
+++ b/integrity-monitor/src/main/java/org/onap/policy/common/im/StateChangeNotifier.java
@@ -2,14 +2,14 @@
* ============LICENSE_START=======================================================
* Integrity Monitor
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017, 2020 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.
@@ -20,22 +20,19 @@
package org.onap.policy.common.im;
-import java.util.Observable;
-import java.util.Observer;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/*
+/*
* This is implementing the Observer interface to make it specific for
* state management.
- *
- * It saves the StateManagement object and a String message that is
- * passed in when notifyObservers is called by the Observable
- * host class.
- *
- * It provides an abstract method for handling the state change
- * so this class must be overwritten and made concrete for the
- * Observer who is monitoring the state changes.
+ *
+ * It saves the StateManagement object and a String message that is
+ * passed in when notifyObservers is called by the Observable
+ * host class.
+ *
+ * It provides an abstract method for handling the state change
+ * so this class must be overwritten and made concrete for the
+ * Observer who is monitoring the state changes.
*/
@@ -46,19 +43,23 @@ import org.slf4j.LoggerFactory;
* StateManagement class.
*
*/
-public class StateChangeNotifier implements Observer {
+public class StateChangeNotifier {
private static final Logger logger = LoggerFactory.getLogger(StateChangeNotifier.class);
// The observable class
StateManagement stateManagement;
// A string argument passed by the observable class when
- // Observable:notifyObservers(Object arg) is called
+ // StateManagement:notifyObservers(String changed) is called
String message;
- @Override
- public void update(Observable observable, Object arg) {
- this.stateManagement = (StateManagement) observable;
- this.message = (String) arg;
+ /**
+ * Invoked to indicate that something observed by this notifier has changed.
+ * @param observable item that has changed
+ * @param changed message indicating what change was made
+ */
+ public void update(StateManagement observable, String changed) {
+ this.stateManagement = observable;
+ this.message = changed;
handleStateChange();
}
diff --git a/integrity-monitor/src/main/java/org/onap/policy/common/im/StateManagement.java b/integrity-monitor/src/main/java/org/onap/policy/common/im/StateManagement.java
index 68ad3bc6..7a018ef9 100644
--- a/integrity-monitor/src/main/java/org/onap/policy/common/im/StateManagement.java
+++ b/integrity-monitor/src/main/java/org/onap/policy/common/im/StateManagement.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* Integrity Monitor
* ================================================================================
- * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2020 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.
@@ -20,8 +20,9 @@
package org.onap.policy.common.im;
+import java.util.Collection;
import java.util.List;
-import java.util.Observable;
+import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import javax.persistence.EntityManager;
@@ -43,7 +44,7 @@ import org.slf4j.LoggerFactory;
* notified.
*
*/
-public class StateManagement extends Observable {
+public class StateManagement {
private static final String RESOURCE_NAME = "resource";
private static final String GET_STATE_MANAGEMENT_ENTITY_QUERY =
"Select p from StateManagementEntity p where p.resourceName=:" + RESOURCE_NAME;
@@ -97,6 +98,11 @@ public class StateManagement extends Observable {
private static final Object FLUSHLOCK = new Object();
/**
+ * Observers to be notified when this object changes state.
+ */
+ private final Collection<StateChangeNotifier> observers = new ConcurrentLinkedQueue<>();
+
+ /**
* StateManagement constructor.
*
* @param entityManagerFactory the entity manager factory
@@ -162,7 +168,6 @@ public class StateManagement extends Observable {
et.commit();
if (changed != null) {
- setChanged();
notifyObservers(changed);
}
@@ -175,6 +180,20 @@ public class StateManagement extends Observable {
}
}
+ /**
+ * Adds an observer to list of those to be notified when this changes.
+ * @param observer observer to be added
+ */
+ public void addObserver(StateChangeNotifier observer) {
+ observers.add(observer);
+ }
+
+ private void notifyObservers(String changed) {
+ for (StateChangeNotifier obs : observers) {
+ obs.update(this, changed);
+ }
+ }
+
private void setStateUsingTable(String actionName, String resourceName, String changeName)
throws StateManagementException {
diff --git a/integrity-monitor/src/test/java/org/onap/policy/common/im/StateManagementTest.java b/integrity-monitor/src/test/java/org/onap/policy/common/im/StateManagementTest.java
index a335b2c2..76642443 100644
--- a/integrity-monitor/src/test/java/org/onap/policy/common/im/StateManagementTest.java
+++ b/integrity-monitor/src/test/java/org/onap/policy/common/im/StateManagementTest.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* Integrity Monitor
* ================================================================================
- * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2020 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.
@@ -251,8 +251,8 @@ public class StateManagementTest extends IntegrityMonitorTestBase {
final EntityManagerFactory mockedEmf = getMockedEntityManagerFactory(mockedEm);
final TypedQuery<StateManagementEntity> mockedQuery = mock(TypedQuery.class);
- when(mockedQuery.setFlushMode(Mockito.anyObject())).thenReturn(mockedQuery);
- when(mockedQuery.setLockMode(Mockito.anyObject())).thenReturn(mockedQuery);
+ when(mockedQuery.setFlushMode(Mockito.any())).thenReturn(mockedQuery);
+ when(mockedQuery.setLockMode(Mockito.any())).thenReturn(mockedQuery);
when(mockedEm.createQuery(anyString(), any(StateManagementEntity.class.getClass()))).thenReturn(mockedQuery);
doThrow(QueryTimeoutException.class).when(mockedQuery).getResultList();