diff options
Diffstat (limited to 'integrity-monitor/src')
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(); |