import com.google.common.base.Strings;
 import java.util.Arrays;
 import java.util.Collection;
+
 import javax.persistence.NoResultException;
 import org.onap.policy.pdp.xacml.application.common.ToscaDictionary;
 import org.onap.policy.pdp.xacml.application.common.std.StdOnapPip;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 public class GetOperationOutcomePip extends StdOnapPip {
     public static final String ISSUER_NAME = "get-operation-outcome";
     private static Logger logger = LoggerFactory.getLogger(GetOperationOutcomePip.class);
      * @return PIPResponse
      */
     @Override
-    public PIPResponse getAttributes(PIPRequest pipRequest, PIPFinder pipFinder) throws PIPException {
+    public PIPResponse getAttributes(PIPRequest pipRequest, PIPFinder pipFinder)
+        throws PIPException {
         if (this.shutdown) {
             throw new PIPException("Engine is shutdown");
         }
         logger.debug("getAttributes requesting attribute {} of type {} for issuer {}",
-                pipRequest.getAttributeId(), pipRequest.getDataTypeId(), pipRequest.getIssuer());
+            pipRequest.getAttributeId(), pipRequest.getDataTypeId(), pipRequest.getIssuer());
         //
         // Determine if the issuer is correct
         //
             //
             return StdPIPResponse.PIP_RESPONSE_EMPTY;
         }
-        if (! pipRequest.getIssuer().startsWith(ToscaDictionary.GUARD_ISSUER_PREFIX)) {
+        if (!pipRequest.getIssuer().startsWith(ToscaDictionary.GUARD_ISSUER_PREFIX)) {
             logger.error("Issuer does not start with guard");
             //
             // We only respond to ourself as the issuer
 
         logger.debug("Going to query DB about: clname={}, target={}", clname, target);
         String outcome = doDatabaseQuery(clname);
-        logger.debug("Query result is: {}", outcome);
+        logger.info("Query result is: {}", outcome);
 
         StdMutablePIPResponse pipResponse = new StdMutablePIPResponse();
-        this.addStringAttribute(pipResponse,
-                XACML3.ID_ATTRIBUTE_CATEGORY_RESOURCE,
-                ToscaDictionary.ID_RESOURCE_GUARD_OPERATIONOUTCOME,
-                outcome,
-                pipRequest);
+        this.addStringAttribute(pipResponse, XACML3.ID_ATTRIBUTE_CATEGORY_RESOURCE,
+            ToscaDictionary.ID_RESOURCE_GUARD_OPERATIONOUTCOME, outcome, pipRequest);
         return new StdPIPResponse(pipResponse);
     }
 
             //
             // We are expecting a single result
             //
-            return em.createQuery("select e.outcome from Dbao e"
-                                  + " where e.closedLoopName= ?1"
-                                  + " order by e.endtime desc",
-                                  String.class)
-                .setParameter(1, clname)
-                .setMaxResults(1)
-                .getSingleResult();
+            String result = em
+                .createQuery("select e.outcome from Dbao e" + " where e.closedLoopName= ?1"
+                    + " order by e.starttime desc", String.class)
+                .setParameter(1, clname).setMaxResults(1).getSingleResult();
+
+            // Check the value of result
+            if (result.equalsIgnoreCase("Started")) {
+                return ("In_Progress");
+            } else {
+                return ("Complete");
+            }
         } catch (NoResultException e) {
             logger.trace("No results", e);
         } catch (Exception e) {
 
+++ /dev/null
-/*-
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * Copyright (C) 2019-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.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.xacml.pdp.application.guard;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
-
-import com.att.research.xacml.api.Response;
-import java.io.File;
-import java.io.IOException;
-import java.sql.Date;
-import java.time.Instant;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.ServiceLoader;
-import java.util.UUID;
-import javax.persistence.EntityManager;
-import javax.persistence.Persistence;
-import org.apache.commons.lang3.tuple.Pair;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.ClassRule;
-import org.junit.FixMethodOrder;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.junit.runners.MethodSorters;
-import org.onap.policy.common.endpoints.parameters.RestServerParameters;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.common.utils.coder.StandardCoder;
-import org.onap.policy.common.utils.resources.TextFileUtils;
-import org.onap.policy.models.decisions.concepts.DecisionRequest;
-import org.onap.policy.models.decisions.concepts.DecisionResponse;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
-import org.onap.policy.pdp.xacml.application.common.ToscaPolicyConversionException;
-import org.onap.policy.pdp.xacml.application.common.XacmlApplicationException;
-import org.onap.policy.pdp.xacml.application.common.XacmlApplicationServiceProvider;
-import org.onap.policy.pdp.xacml.application.common.XacmlPolicyUtils;
-import org.onap.policy.pdp.xacml.application.common.operationshistory.CountRecentOperationsPip;
-import org.onap.policy.pdp.xacml.application.common.operationshistory.Dbao;
-import org.onap.policy.pdp.xacml.xacmltest.TestUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class CoordinationTest {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(CoordinationTest.class);
-    private static Properties properties = new Properties();
-    private static File propertiesFile;
-    private static RestServerParameters clientParams = new RestServerParameters();
-    private static XacmlApplicationServiceProvider service;
-    private static DecisionRequest requestCl1Node1;
-    @SuppressWarnings("unused")
-    private static DecisionRequest requestCl1Node2;
-    private static DecisionRequest requestCl2Node1;
-    private static DecisionRequest requestCl2Node2;
-    private static StandardCoder gson = new StandardCoder();
-    private static EntityManager em;
-    private static final String DENY = "Deny";
-    private static final String PERMIT = "Permit";
-    private static final String OPEN = "Success";
-    private static final String CLOSE = "Closed";
-
-
-    @ClassRule
-    public static final TemporaryFolder policyFolder = new TemporaryFolder();
-
-    /**
-     * Copies the xacml.properties and policies files into
-     * temporary folder and loads the service provider saving
-     * instance of provider off for other tests to use.
-     */
-    @BeforeClass
-    public static void setup() throws Exception {
-        LOGGER.info("Setting up class");
-        //
-        // Setup our temporary folder
-        //
-        XacmlPolicyUtils.FileCreator myCreator = (String filename) -> policyFolder.newFile(filename);
-        propertiesFile = XacmlPolicyUtils.copyXacmlPropertiesContents("src/test/resources/xacml.properties",
-                properties, myCreator);
-        //
-        // Load service
-        //
-        ServiceLoader<XacmlApplicationServiceProvider> applicationLoader =
-                ServiceLoader.load(XacmlApplicationServiceProvider.class);
-        //
-        // Find the guard service application and save for use in all the tests
-        //
-        StringBuilder strDump = new StringBuilder("Loaded applications:" + XacmlPolicyUtils.LINE_SEPARATOR);
-        Iterator<XacmlApplicationServiceProvider> iterator = applicationLoader.iterator();
-        while (iterator.hasNext()) {
-            XacmlApplicationServiceProvider application = iterator.next();
-            //
-            // Is it our service?
-            //
-            if (application instanceof GuardPdpApplication) {
-                //
-                // Should be the first and only one
-                //
-                assertThat(service).isNull();
-                service = application;
-            }
-            strDump.append(application.applicationName());
-            strDump.append(" supports ");
-            strDump.append(application.supportedPolicyTypes());
-            strDump.append(XacmlPolicyUtils.LINE_SEPARATOR);
-        }
-        LOGGER.info("{}", strDump);
-        //
-        // Tell it to initialize based on the properties file
-        // we just built for it.
-        //
-        service.initialize(propertiesFile.toPath().getParent(), clientParams);
-        //
-        // Load Decision Requests
-        //
-        requestCl1Node1 = gson.decode(
-                TextFileUtils.getTextFileAsString(
-                    "src/test/resources/requests/coordination.cl.1.node.1.json"),
-                    DecisionRequest.class);
-        requestCl2Node1 = gson.decode(
-                TextFileUtils.getTextFileAsString(
-                    "src/test/resources/requests/coordination.cl.2.node.1.json"),
-                    DecisionRequest.class);
-        requestCl1Node2 = gson.decode(
-                TextFileUtils.getTextFileAsString(
-                    "src/test/resources/requests/coordination.cl.1.node.2.json"),
-                    DecisionRequest.class);
-        requestCl2Node2 = gson.decode(
-                TextFileUtils.getTextFileAsString(
-                    "src/test/resources/requests/coordination.cl.2.node.2.json"),
-                    DecisionRequest.class);
-        //
-        // Create EntityManager for manipulating DB
-        //
-        String persistenceUnit = CountRecentOperationsPip.ISSUER_NAME + ".persistenceunit";
-        em = Persistence.createEntityManagerFactory(
-                CoordinationTest.properties.getProperty(persistenceUnit), properties)
-                .createEntityManager();
-    }
-
-    /**
-     * Close the entity manager.
-     */
-    @AfterClass
-    public static void cleanup() throws Exception {
-        if (em != null) {
-            em.close();
-        }
-    }
-
-    /**
-     * Clears the database before each test.
-     *
-     */
-    @Before
-    public void startClean() throws Exception {
-        em.getTransaction().begin();
-        em.createQuery("DELETE FROM Dbao").executeUpdate();
-        em.getTransaction().commit();
-    }
-
-    @Test
-    public void test0Basics() throws ToscaPolicyConversionException {
-        LOGGER.info("**************** Running test0Basics ****************");
-        //
-        // Check the methods in coordination translator that don't get tested by
-        // the application.
-        //
-        CoordinationGuardTranslator translator = new CoordinationGuardTranslator();
-        assertThatExceptionOfType(ToscaPolicyConversionException.class).isThrownBy(() ->
-            translator.convertRequest(null)).withMessage("this convertRequest shouldn't be used");
-        assertThat(translator.convertResponse(null)).isNull();
-        assertThat(CoordinationGuardTranslator.loadCoordinationDirectiveFromFile(
-                policyFolder.getRoot().getAbsolutePath() + "/nonexist.yaml")).isNull();
-        CoordinationDirective directive = CoordinationGuardTranslator.loadCoordinationDirectiveFromFile(
-                "src/test/resources/test-directive.yaml");
-        assertThat(directive).isNotNull();
-    }
-
-    @Test
-    public void test1Coordination() throws CoderException, IOException, XacmlApplicationException {
-        LOGGER.info("**************** Running test1Coordination ****************");
-        //
-        // Now load the test coordination policy - make sure
-        // the pdp can support it and have it load
-        // into the PDP.
-        //
-        List<ToscaPolicy> loadedPolicies = TestUtils.loadPolicies(
-                "src/test/resources/test.policy.guard.coordination.firstBlocksSecond.tosca.yaml", service);
-        assertThat(loadedPolicies).isNotNull();
-        assertThat(loadedPolicies.get(0).getName()).isEqualTo("guard.coordination.firstBlocksSecond.test");
-        //
-        // cl1 doesn't have open action: cl2 should get permit
-        //
-        requestAndCheckDecision(requestCl2Node1, PERMIT);
-        //
-        // Open cl2 on node1
-        //
-        insertOperationEvent(requestCl2Node1, OPEN);
-        //
-        // Under current coordination policy cl1 always can go
-        //
-        requestAndCheckDecision(requestCl1Node1, PERMIT);
-        //
-        // Open cl1 on node1
-        //
-        insertOperationEvent(requestCl1Node1, OPEN);
-        //
-        // Close cl2 on node1
-        //
-        insertOperationEvent(requestCl2Node1, CLOSE);
-        //
-        // Try cl2 again, cl1 has open action on node1: should get deny
-        //
-        requestAndCheckDecision(requestCl2Node1, DENY);
-        //
-        // Close cl1 on node1
-        //
-        insertOperationEvent(requestCl1Node1, CLOSE);
-        //
-        // Under current coordination policy cl1 always can go
-        //
-        requestAndCheckDecision(requestCl1Node1, PERMIT);
-        //
-        // Open cl1 on node1
-        //
-        insertOperationEvent(requestCl1Node1, OPEN);
-        //
-        // Open cl2 on node2
-        //
-        insertOperationEvent(requestCl2Node2, OPEN);
-        //
-        // Try cl2 on node1, cl1 open on node1: should get DENY
-        //
-        requestAndCheckDecision(requestCl2Node1, DENY);
-    }
-
-    /**
-     * Check that decision matches expectation.
-     *
-     * @param expected from the response
-     * @param response received
-     *
-     **/
-    public void checkDecision(String expected, DecisionResponse response) throws CoderException {
-        LOGGER.info("Looking for {} Decision", expected);
-        assertThat(response).isNotNull();
-        assertThat(response.getStatus()).isNotNull();
-        assertThat(response.getStatus()).isEqualTo(expected);
-        //
-        // Dump it out as Json
-        //
-        LOGGER.info(gson.encode(response));
-    }
-
-    /**
-     * Request a decision and check that it matches expectation.
-     *
-     * @param request to send to Xacml PDP
-     * @param expected from the response
-     *
-     **/
-    public void requestAndCheckDecision(DecisionRequest request, String expected) throws CoderException {
-        //
-        // Ask for a decision
-        //
-        Pair<DecisionResponse, Response> decision = service.makeDecision(request, null);
-        //
-        // Check decision
-        //
-        checkDecision(expected, decision.getKey());
-    }
-
-    @SuppressWarnings("unchecked")
-    private void insertOperationEvent(DecisionRequest request, String outcome) {
-        //
-        // Get the properties
-        //
-        Map<String, Object> properties = (Map<String, Object>) request.getResource().get("guard");
-        //
-        // Add an entry
-        //
-        Dbao newEntry = new Dbao();
-        newEntry.setActor(properties.get("actor").toString());
-        newEntry.setOperation(properties.get("recipe").toString());
-        newEntry.setClosedLoopName(properties.get("clname").toString());
-        newEntry.setOutcome(outcome);
-        newEntry.setStarttime(Date.from(Instant.now().minusMillis(20000)));
-        newEntry.setEndtime(Date.from(Instant.now()));
-        newEntry.setRequestId(UUID.randomUUID().toString());
-        newEntry.setTarget(properties.get("target").toString());
-        em.getTransaction().begin();
-        em.persist(newEntry);
-        em.getTransaction().commit();
-    }
-}
 
 import com.att.research.xacml.api.Response;
 import java.io.File;
 import java.io.IOException;
-import java.sql.Date;
 import java.time.Instant;
+import java.util.Date;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Properties;
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
 public class SonCoordinationTest {
 
-    private static final Logger LOGGER = LoggerFactory.getLogger(CoordinationTest.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(SonCoordinationTest.class);
     private static Properties properties = new Properties();
     private static File propertiesFile;
     private static RestServerParameters clientParams = new RestServerParameters();
     private static EntityManager em;
     private static final String DENY = "Deny";
     private static final String PERMIT = "Permit";
-    private static final String OPEN = "Success";
-    private static final String CLOSE = "Closed";
 
     @ClassRule
     public static final TemporaryFolder policyFolder = new TemporaryFolder();
         //
         // Open vSonh on node1
         //
-        insertOperationEvent(requestVsonhNode1, OPEN);
+        long vsonhId = insertOperationEvent(requestVsonhNode1, "Started");
         //
         // Under current coordination policy vPci should get a deny
         //
         requestAndCheckDecision(requestVpciNode1, DENY);
         //
-        // Open vPci on node1
+        // Close vSonh on node1
         //
-        insertOperationEvent(requestVpciNode1, OPEN);
+        updateOperationEvent(vsonhId, "Success");
         //
-        // Under current coordination policy vSonh should get a deny
+        // With vSonh closed on node 1, vPci now should get a permit
         //
-        requestAndCheckDecision(requestVsonhNode1, DENY);
+        requestAndCheckDecision(requestVpciNode1, PERMIT);
         //
-        // Close vSonh on node1
+        // Open vPci on node1
         //
-        insertOperationEvent(requestVsonhNode1, CLOSE);
+        long vpciId = insertOperationEvent(requestVpciNode1, "Started");
         //
-        // With vSonh closed on node 1, vPci now should get a permit
+        // Under current coordination policy vSonh should get a deny
         //
-        requestAndCheckDecision(requestVpciNode1, PERMIT);
+        requestAndCheckDecision(requestVsonhNode1, DENY);
         //
         // Close cl1 on node1
         //
-        insertOperationEvent(requestVpciNode1, CLOSE);
+        updateOperationEvent(vpciId, "Failed");
         //
         // With vPci closed on node 1, vSonh now should get a permit
         //
     }
 
     @SuppressWarnings("unchecked")
-    private void insertOperationEvent(DecisionRequest request, String outcome) {
+    private long insertOperationEvent(DecisionRequest request, String outcome) {
         //
         // Get the properties
         //
         em.getTransaction().begin();
         em.persist(newEntry);
         em.getTransaction().commit();
+        return newEntry.getId();
+    }
+
+    private void updateOperationEvent(long id, String outcome) {
+
+        Dbao updateEntry = em.find(Dbao.class, id);
+        updateEntry.setOutcome(outcome);
+        updateEntry.setEndtime(Date.from(Instant.now()));
+        em.getTransaction().begin();
+        em.persist(updateEntry);
+        em.getTransaction().commit();
     }
 
 }