aboutsummaryrefslogtreecommitdiffstats
path: root/controlloop/common/database/src/main/java
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2020-05-29 11:59:53 -0400
committerJim Hahn <jrh3@att.com>2020-06-01 11:08:16 -0400
commit1e39c988604c9ffb8efc38ef3cf4d635b202c7b9 (patch)
tree390dc73ef150bb99dcf00577a2838a686baf8c59 /controlloop/common/database/src/main/java
parentd00b8ebd5b28a64ae988e7424d8feb2314a8d475 (diff)
Use OperationsHistory from models
Deleted Dbao and replaced it with the shared class in policy-models. Also had to update the queries and the persistence.xml accordingly. Note: with this change, the "database" project is no longer needed, so it was deleted. Issue-ID: POLICY-2581 Change-Id: Idfde68b28b3a27f2ee794fa477d15e0f12717373 Signed-off-by: Jim Hahn <jrh3@att.com>
Diffstat (limited to 'controlloop/common/database/src/main/java')
-rw-r--r--controlloop/common/database/src/main/java/org/onap/policy/database/ToscaDictionary.java140
-rw-r--r--controlloop/common/database/src/main/java/org/onap/policy/database/operationshistory/CountRecentOperationsPip.java200
-rw-r--r--controlloop/common/database/src/main/java/org/onap/policy/database/operationshistory/Dbao.java79
-rw-r--r--controlloop/common/database/src/main/java/org/onap/policy/database/operationshistory/GetOperationOutcomePip.java133
-rw-r--r--controlloop/common/database/src/main/java/org/onap/policy/database/std/StdOnapPip.java249
5 files changed, 0 insertions, 801 deletions
diff --git a/controlloop/common/database/src/main/java/org/onap/policy/database/ToscaDictionary.java b/controlloop/common/database/src/main/java/org/onap/policy/database/ToscaDictionary.java
deleted file mode 100644
index b04a5b4d2..000000000
--- a/controlloop/common/database/src/main/java/org/onap/policy/database/ToscaDictionary.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * Copyright (C) 2019 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.database;
-
-import com.att.research.xacml.api.Identifier;
-import com.att.research.xacml.api.XACML3;
-import com.att.research.xacml.std.IdentifierImpl;
-
-public final class ToscaDictionary {
-
- /*
- * These are the ID's for various TOSCA Policy Types we are supporting in the Applications.
- */
- public static final String URN_ONAP = "urn:org:onap";
- public static final Identifier ID_URN_ONAP =
- new IdentifierImpl(URN_ONAP);
-
- public static final Identifier ID_RESOURCE_POLICY_ID =
- XACML3.ID_RESOURCE_RESOURCE_ID;
-
- public static final Identifier ID_RESOURCE_POLICY_TYPE =
- new IdentifierImpl(ID_URN_ONAP, "policy-type");
-
- public static final Identifier ID_RESOURCE_POLICY_TYPE_VERSION =
- new IdentifierImpl(ID_URN_ONAP, "policy-type-version");
-
- /*
- * These ID's are for identifying Subjects
- */
-
- public static final Identifier ID_SUBJECT_ONAP_NAME =
- XACML3.ID_SUBJECT_SUBJECT_ID;
-
- public static final Identifier ID_SUBJECT_ONAP_COMPONENT =
- new IdentifierImpl(ID_URN_ONAP, "onap-component");
-
- public static final Identifier ID_SUBJECT_ONAP_INSTANCE =
- new IdentifierImpl(ID_URN_ONAP, "onap-instance");
-
- /*
- * These 2 ID's are for Optimization policies
- */
-
- public static final Identifier ID_RESOURCE_POLICY_SCOPE_PROPERTY =
- new IdentifierImpl(ID_URN_ONAP, "policy-scope-property");
-
- public static final Identifier ID_RESOURCE_POLICY_TYPE_PROPERTY =
- new IdentifierImpl(ID_URN_ONAP, "policy-type-property");
-
- /*
- * These ID's are for Legacy Guard Policies
- */
- public static final Identifier ID_RESOURCE_GUARD_ACTOR =
- new IdentifierImpl(ID_URN_ONAP, "guard:actor:actor-id");
- public static final Identifier ID_RESOURCE_GUARD_RECIPE =
- new IdentifierImpl(ID_URN_ONAP, "guard:operation:operation-id");
- public static final Identifier ID_RESOURCE_GUARD_CLNAME =
- new IdentifierImpl(ID_URN_ONAP, "guard:clname:clname-id");
- public static final Identifier ID_RESOURCE_GUARD_TARGETID =
- new IdentifierImpl(ID_URN_ONAP, "guard:target:target-id");
- public static final Identifier ID_SUBJECT_GUARD_REQUESTID =
- new IdentifierImpl(ID_URN_ONAP, "guard:request:request-id");
- public static final Identifier ID_RESOURCE_GUARD_VFCOUNT =
- new IdentifierImpl(ID_URN_ONAP, "guard:target:vf-count");
- public static final Identifier ID_RESOURCE_GUARD_MIN =
- new IdentifierImpl(ID_URN_ONAP, "guard:target:min");
- public static final Identifier ID_RESOURCE_GUARD_MAX =
- new IdentifierImpl(ID_URN_ONAP, "guard:target:max");
-
- /*
- * This id specifically for guard is provided by the
- * operational history database PIP.
- */
- public static final String GUARD_OPERATIONCOUNT = "guard:operation:operation-count";
- public static final Identifier ID_RESOURCE_GUARD_OPERATIONCOUNT =
- new IdentifierImpl(ID_URN_ONAP, GUARD_OPERATIONCOUNT);
-
- public static final String GUARD_OPERATIONOUTCOME = "guard:operation:operation-outcome";
- public static final Identifier ID_RESOURCE_GUARD_OPERATIONOUTCOME =
- new IdentifierImpl(ID_URN_ONAP, GUARD_OPERATIONOUTCOME);
-
- public static final String GUARD_ISSUER_PREFIX = URN_ONAP + ":xacml:guard:";
-
- /*
- * This id is specifically for advice returned from guard
- */
- public static final Identifier ID_ADVICE_GUARD =
- new IdentifierImpl(ID_URN_ONAP, "guard:advice");
- public static final Identifier ID_ADVICE_GUARD_REQUESTID =
- new IdentifierImpl(ID_URN_ONAP, "guard:advice:request-id");
-
- /*
- * Obligation specific ID's
- */
-
- public static final Identifier ID_OBLIGATION_REST_BODY =
- new IdentifierImpl(ID_URN_ONAP, "rest:body");
-
- public static final Identifier ID_OBLIGATION_POLICY_MONITORING =
- new IdentifierImpl(ID_URN_ONAP, ":obligation:monitoring");
-
- public static final Identifier ID_OBLIGATION_POLICY_MONITORING_CONTENTS =
- new IdentifierImpl(ID_URN_ONAP, ":obligation:monitoring:contents");
-
- public static final Identifier ID_OBLIGATION_POLICY_MONITORING_CATEGORY =
- XACML3.ID_ATTRIBUTE_CATEGORY_RESOURCE;
-
- public static final Identifier ID_OBLIGATION_POLICY_MONITORING_DATATYPE =
- XACML3.ID_DATATYPE_STRING;
-
- public static final Identifier ID_OBLIGATION_MONITORING_ISSUER =
- new IdentifierImpl(ID_URN_ONAP, "issuer:monitoring");
-
-
-
- private ToscaDictionary() {
- super();
- }
-
-}
diff --git a/controlloop/common/database/src/main/java/org/onap/policy/database/operationshistory/CountRecentOperationsPip.java b/controlloop/common/database/src/main/java/org/onap/policy/database/operationshistory/CountRecentOperationsPip.java
deleted file mode 100644
index 7b6f13611..000000000
--- a/controlloop/common/database/src/main/java/org/onap/policy/database/operationshistory/CountRecentOperationsPip.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2019 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.database.operationshistory;
-
-import com.att.research.xacml.api.XACML3;
-import com.att.research.xacml.api.pip.PIPException;
-import com.att.research.xacml.api.pip.PIPFinder;
-import com.att.research.xacml.api.pip.PIPRequest;
-import com.att.research.xacml.api.pip.PIPResponse;
-import com.att.research.xacml.std.pip.StdMutablePIPResponse;
-import com.att.research.xacml.std.pip.StdPIPResponse;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Properties;
-import java.util.Set;
-import org.onap.policy.database.ToscaDictionary;
-import org.onap.policy.database.std.StdOnapPip;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-public class CountRecentOperationsPip extends StdOnapPip {
- public static final String ISSUER_NAME = "count-recent-operations";
- private static Logger logger = LoggerFactory.getLogger(CountRecentOperationsPip.class);
-
- private static final Set<String> TIME_WINDOW_SCALES = Collections
- .unmodifiableSet(new HashSet<>(Arrays.asList("minute", "hour", "day", "week", "month", "year")));
-
- public CountRecentOperationsPip() {
- super();
- }
-
- @Override
- public Collection<PIPRequest> attributesRequired() {
- return Arrays.asList(PIP_REQUEST_ACTOR, PIP_REQUEST_RECIPE, PIP_REQUEST_TARGET);
- }
-
- @Override
- public void configure(String id, Properties properties) throws PIPException {
- super.configure(id, properties, ISSUER_NAME);
- }
-
- /**
- * getAttributes.
- *
- * @param pipRequest the request
- * @param pipFinder the pip finder
- * @return PIPResponse
- */
- @Override
- public PIPResponse getAttributes(PIPRequest pipRequest, PIPFinder pipFinder) throws PIPException {
- logger.debug("getAttributes requesting attribute {} of type {} for issuer {}",
- pipRequest.getAttributeId(), pipRequest.getDataTypeId(), pipRequest.getIssuer());
-
- if (isRequestInvalid(pipRequest)) {
- return StdPIPResponse.PIP_RESPONSE_EMPTY;
- }
-
- //
- // Parse out the issuer which denotes the time window
- // Eg: any-prefix:tw:10:minute
- //
- String[] s1 = pipRequest.getIssuer().split("tw:");
- String[] s2 = s1[1].split(":");
- int timeWindowVal = Integer.parseInt(s2[0]);
- String timeWindowScale = s2[1];
- //
- // Grab other attribute values
- //
- String actor = getActor(pipFinder);
- String operation = getRecipe(pipFinder);
- String target = getTarget(pipFinder);
- String timeWindow = timeWindowVal + " " + timeWindowScale;
- logger.info("Going to query DB about: actor {} operation {} target {} time window {}",
- actor, operation, target, timeWindow);
- //
- // Sanity check
- //
- if (actor == null || operation == null || target == null) {
- //
- // See if we have all the values
- //
- logger.error("missing attributes return empty");
- return StdPIPResponse.PIP_RESPONSE_EMPTY;
- }
- //
- // Ok do the database query
- //
- int operationCount = doDatabaseQuery(actor, operation, target, timeWindowVal, timeWindowScale);
- //
- // Create and return PipResponse
- //
- StdMutablePIPResponse pipResponse = new StdMutablePIPResponse();
- this.addIntegerAttribute(pipResponse,
- XACML3.ID_ATTRIBUTE_CATEGORY_RESOURCE,
- ToscaDictionary.ID_RESOURCE_GUARD_OPERATIONCOUNT,
- operationCount,
- pipRequest);
- return new StdPIPResponse(pipResponse);
- }
-
- private int doDatabaseQuery(String actor, String operation, String target, int timeWindowVal,
- String timeWindowScale) {
- logger.info("Querying operations history for {} {} {} {} {}",
- actor, operation, target, timeWindowVal, timeWindowScale);
- if (em == null) {
- logger.error("No EntityManager available");
- return -1;
- }
- //
- // Compute the time window
- //
- if (! TIME_WINDOW_SCALES.contains(timeWindowScale.toLowerCase())) {
- //
- // Unsupported
- //
- logger.error("Unsupported time window scale value {}", timeWindowScale);
- //
- // Throw an exception instead?
- //
- return -1;
- }
- //
- // Do the query
- //
- Object result = null;
- try {
- //
- // Set up query --- operationshistory is magic, should fix sometime
- //
- String strQuery = "select count(*) as numops from operationshistory"
- + " where outcome<>'Failure_Guard'"
- + " and actor=?"
- + " and operation=?"
- + " and target=?"
- + " and endtime between"
- + " TIMESTAMPADD(?, ?, CURRENT_TIMESTAMP)"
- + " and CURRENT_TIMESTAMP";
- //
- // We are expecting a single result
- //
- result = em.createNativeQuery(strQuery)
- .setParameter(1, actor)
- .setParameter(2, operation)
- .setParameter(3, target)
- .setParameter(4, timeWindowScale)
- .setParameter(5, timeWindowVal * -1)
- .getSingleResult();
- } catch (RuntimeException e) {
- logger.error("Named query failed ", e);
- }
- //
- // Check our query results
- //
- if (result != null) {
- //
- // Success let's see what JPA returned to us
- //
- logger.info("operations query returned {}", result);
- //
- // Should get back a number
- //
- if (result instanceof Number) {
- return ((Number) result).intValue();
- }
- //
- // We shouldn't really get this result, but just
- // in case we'll do the dirty work of parsing the
- // string representation of the object.
- //
- return Integer.parseInt(result.toString());
- }
- //
- // We get here if we didn't get a result. Should
- // we propagate back an exception?
- //
- return -1;
- }
-
-}
diff --git a/controlloop/common/database/src/main/java/org/onap/policy/database/operationshistory/Dbao.java b/controlloop/common/database/src/main/java/org/onap/policy/database/operationshistory/Dbao.java
deleted file mode 100644
index ce0adb0c7..000000000
--- a/controlloop/common/database/src/main/java/org/onap/policy/database/operationshistory/Dbao.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*-
- * ============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.database.operationshistory;
-
-import java.io.Serializable;
-import java.util.Date;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Index;
-import javax.persistence.Table;
-import lombok.Data;
-
-@Entity
-@Table(name = "operationshistory",
- indexes = {@Index(name = "operationshistory_clreqid_index", columnList = "closedLoopName,requestId"),
- @Index(name = "operationshistory_target_index", columnList = "target,operation,actor")})
-@Data
-public class Dbao implements Serializable {
-
- private static final long serialVersionUID = -551420180714993577L;
-
- @Id
- @GeneratedValue
- @Column(name = "id")
- private Long id;
-
- @Column(name = "closedLoopName", length = 255)
- private String closedLoopName;
-
- @Column(name = "requestId", length = 50)
- private String requestId;
-
- @Column(name = "subrequestId", length = 50)
- private String subrequestId;
-
- @Column(name = "actor", length = 50)
- private String actor;
-
- @Column(name = "operation", length = 50)
- private String operation;
-
- @Column(name = "target", length = 50)
- private String target;
-
- @Column(name = "starttime")
- private Date starttime;
-
- @Column(name = "outcome", length = 50)
- private String outcome;
-
- @Column(name = "message", length = 255)
- private String message;
-
- @Column(name = "endtime")
- private Date endtime;
-
-}
diff --git a/controlloop/common/database/src/main/java/org/onap/policy/database/operationshistory/GetOperationOutcomePip.java b/controlloop/common/database/src/main/java/org/onap/policy/database/operationshistory/GetOperationOutcomePip.java
deleted file mode 100644
index 5a0db0501..000000000
--- a/controlloop/common/database/src/main/java/org/onap/policy/database/operationshistory/GetOperationOutcomePip.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2018-2019 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.database.operationshistory;
-
-import com.att.research.xacml.api.XACML3;
-import com.att.research.xacml.api.pip.PIPException;
-import com.att.research.xacml.api.pip.PIPFinder;
-import com.att.research.xacml.api.pip.PIPRequest;
-import com.att.research.xacml.api.pip.PIPResponse;
-import com.att.research.xacml.std.pip.StdMutablePIPResponse;
-import com.att.research.xacml.std.pip.StdPIPResponse;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Properties;
-import javax.persistence.NoResultException;
-import org.onap.policy.database.ToscaDictionary;
-import org.onap.policy.database.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);
-
- public GetOperationOutcomePip() {
- super();
- }
-
- @Override
- public Collection<PIPRequest> attributesRequired() {
- return Arrays.asList(PIP_REQUEST_TARGET);
- }
-
- @Override
- public void configure(String id, Properties properties) throws PIPException {
- super.configure(id, properties, ISSUER_NAME);
- }
-
- /**
- * getAttributes.
- *
- * @param pipRequest the request
- * @param pipFinder the pip finder
- * @return PIPResponse
- */
- @Override
- public PIPResponse getAttributes(PIPRequest pipRequest, PIPFinder pipFinder) throws PIPException {
- logger.debug("getAttributes requesting attribute {} of type {} for issuer {}",
- pipRequest.getAttributeId(), pipRequest.getDataTypeId(), pipRequest.getIssuer());
-
- if (isRequestInvalid(pipRequest)) {
- return StdPIPResponse.PIP_RESPONSE_EMPTY;
- }
-
- //
- // Parse out the issuer which denotes the time window
- // Eg: any-prefix:clname:some-controlloop-name
- //
- String[] s1 = pipRequest.getIssuer().split("clname:");
- String clname = s1[1];
- String target = getTarget(pipFinder);
- //
- // Sanity check
- //
- if (target == null) {
- //
- // See if we have all the values
- //
- logger.error("missing attributes return empty");
- return StdPIPResponse.PIP_RESPONSE_EMPTY;
- }
-
- logger.debug("Going to query DB about: clname={}, target={}", clname, target);
- String outcome = doDatabaseQuery(clname, target);
- logger.debug("Query result is: {}", outcome);
-
- StdMutablePIPResponse pipResponse = new StdMutablePIPResponse();
- this.addStringAttribute(pipResponse,
- XACML3.ID_ATTRIBUTE_CATEGORY_RESOURCE,
- ToscaDictionary.ID_RESOURCE_GUARD_OPERATIONOUTCOME,
- outcome,
- pipRequest);
- return new StdPIPResponse(pipResponse);
- }
-
- private String doDatabaseQuery(String clname, String target) {
- logger.info("Querying operations history for {} {}",
- clname, target);
- //
- // Do the query
- //
- Object result = null;
- try {
- //
- // We are expecting a single result
- //
- result = em.createQuery("select e.outcome from Dbao e"
- + " where e.closedLoopName= ?1"
- + " and e.target= ?2"
- + " order by e.endtime desc")
- .setParameter(1, clname)
- .setParameter(2, target)
- .setMaxResults(1)
- .getSingleResult();
- } catch (NoResultException ex) {
- logger.debug("NoResultException for getSingleResult()", ex);
- } catch (Exception ex) {
- logger.error("doDatabaseQuery threw an exception", ex);
- }
- //
- // Check our query results
- //
- logger.info("operations query returned {}", result);
- return (String) result;
- }
-}
diff --git a/controlloop/common/database/src/main/java/org/onap/policy/database/std/StdOnapPip.java b/controlloop/common/database/src/main/java/org/onap/policy/database/std/StdOnapPip.java
deleted file mode 100644
index ab5fc4ec7..000000000
--- a/controlloop/common/database/src/main/java/org/onap/policy/database/std/StdOnapPip.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*-
- * ============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.database.std;
-
-import com.att.research.xacml.api.Attribute;
-import com.att.research.xacml.api.AttributeValue;
-import com.att.research.xacml.api.Identifier;
-import com.att.research.xacml.api.XACML3;
-import com.att.research.xacml.api.pip.PIPException;
-import com.att.research.xacml.api.pip.PIPFinder;
-import com.att.research.xacml.api.pip.PIPRequest;
-import com.att.research.xacml.api.pip.PIPResponse;
-import com.att.research.xacml.std.StdMutableAttribute;
-import com.att.research.xacml.std.datatypes.DataTypes;
-import com.att.research.xacml.std.pip.StdMutablePIPResponse;
-import com.att.research.xacml.std.pip.StdPIPRequest;
-import com.att.research.xacml.std.pip.engines.StdConfigurableEngine;
-import java.math.BigInteger;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.Properties;
-import javax.persistence.EntityManager;
-import javax.persistence.Persistence;
-import org.apache.commons.lang3.StringUtils;
-import org.onap.policy.database.ToscaDictionary;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-public abstract class StdOnapPip extends StdConfigurableEngine {
- protected static Logger logger = LoggerFactory.getLogger(StdOnapPip.class);
-
- protected static final PIPRequest PIP_REQUEST_ACTOR = new StdPIPRequest(
- XACML3.ID_ATTRIBUTE_CATEGORY_RESOURCE,
- ToscaDictionary.ID_RESOURCE_GUARD_ACTOR,
- XACML3.ID_DATATYPE_STRING);
-
- protected static final PIPRequest PIP_REQUEST_RECIPE = new StdPIPRequest(
- XACML3.ID_ATTRIBUTE_CATEGORY_RESOURCE,
- ToscaDictionary.ID_RESOURCE_GUARD_RECIPE,
- XACML3.ID_DATATYPE_STRING);
-
- protected static final PIPRequest PIP_REQUEST_TARGET = new StdPIPRequest(
- XACML3.ID_ATTRIBUTE_CATEGORY_RESOURCE,
- ToscaDictionary.ID_RESOURCE_GUARD_TARGETID,
- XACML3.ID_DATATYPE_STRING);
-
- protected Properties properties;
- protected EntityManager em;
-
- public StdOnapPip() {
- super();
- }
-
- @Override
- public Collection<PIPRequest> attributesProvided() {
- return Collections.emptyList();
- }
-
- /**
- * Configures this object and initializes {@link #em}.
- *
- * @param id name of this engine
- * @param properties configuration properties
- * @param issuerName name of this issuer, used to identify the persistence unit
- * @throws PIPException if an error occurs
- */
- protected void configure(String id, Properties properties, String issuerName) throws PIPException {
- super.configure(id, properties);
- logger.debug("Configuring historyDb PIP {}", properties);
- this.properties = properties;
-
- //
- // Create our entity manager
- //
- em = null;
- try {
- //
- // In case there are any overloaded properties for the JPA
- //
- Properties emProperties = new Properties(properties);
- //
- // Create the entity manager factory
- //
- em = Persistence.createEntityManagerFactory(
- properties.getProperty(issuerName + ".persistenceunit"),
- emProperties).createEntityManager();
- } catch (Exception e) {
- logger.error("Persistence failed operations history db", e);
- }
- }
-
- /**
- * Determines if a request is valid.
- *
- * @param pipRequest request to validate
- * @return {@code true} if the request is <i>NOT</i> valid, {@code false} if it is
- */
- protected boolean isRequestInvalid(PIPRequest pipRequest) {
- //
- // Determine if the issuer is correct
- //
- if (StringUtils.isBlank(pipRequest.getIssuer())) {
- logger.debug("issuer is null - returning empty response");
- //
- // We only respond to ourself as the issuer
- //
- return true;
- }
- if (! pipRequest.getIssuer().startsWith(ToscaDictionary.GUARD_ISSUER_PREFIX)) {
- logger.debug("Issuer does not start with guard");
- //
- // We only respond to ourself as the issuer
- //
- return true;
- }
-
- return false;
- }
-
- protected String getActor(PIPFinder pipFinder) {
- //
- // Get the actor value
- //
- PIPResponse pipResponse = this.getAttribute(PIP_REQUEST_ACTOR, pipFinder);
- if (pipResponse == null) {
- logger.error("Need actor attribute which is not found");
- return null;
- }
- //
- // Find the actor
- //
- return findFirstAttributeValue(pipResponse);
- }
-
- protected String getRecipe(PIPFinder pipFinder) {
- //
- // Get the actor value
- //
- PIPResponse pipResponse = this.getAttribute(PIP_REQUEST_RECIPE, pipFinder);
- if (pipResponse == null) {
- logger.error("Need recipe attribute which is not found");
- return null;
- }
- //
- // Find the actor
- //
- return findFirstAttributeValue(pipResponse);
- }
-
- protected String getTarget(PIPFinder pipFinder) {
- //
- // Get the actor value
- //
- PIPResponse pipResponse = this.getAttribute(PIP_REQUEST_TARGET, pipFinder);
- if (pipResponse == null) {
- logger.error("Need target attribute which is not found");
- return null;
- }
- //
- // Find the actor
- //
- return findFirstAttributeValue(pipResponse);
- }
-
- protected PIPResponse getAttribute(PIPRequest pipRequest, PIPFinder pipFinder) {
- PIPResponse pipResponse = null;
- try {
- pipResponse = pipFinder.getMatchingAttributes(pipRequest, this);
- if (pipResponse.getStatus() != null && !pipResponse.getStatus().isOk()) {
- if (logger.isInfoEnabled()) {
- logger.info("get attribute error retrieving {}: {}", pipRequest.getAttributeId().stringValue(),
- pipResponse.getStatus());
- }
- pipResponse = null;
- }
- if (pipResponse != null && pipResponse.getAttributes().isEmpty()) {
- if (logger.isInfoEnabled()) {
- logger.info("No value for {}", pipRequest.getAttributeId().stringValue());
- }
- pipResponse = null;
- }
- } catch (PIPException ex) {
- logger.error("PIPException getting subject-id attribute", ex);
- }
- return pipResponse;
- }
-
- protected String findFirstAttributeValue(PIPResponse pipResponse) {
- for (Attribute attribute : pipResponse.getAttributes()) {
- Iterator<AttributeValue<String>> iterAttributeValues = attribute.findValues(DataTypes.DT_STRING);
- if (iterAttributeValues == null) {
- continue;
- }
-
- while (iterAttributeValues.hasNext()) {
- String value = iterAttributeValues.next().getValue();
- if (value != null) {
- return value;
- }
- }
- }
- return null;
- }
-
- protected void addIntegerAttribute(StdMutablePIPResponse stdPipResponse, Identifier category,
- Identifier attributeId, int value, PIPRequest pipRequest) {
- try {
- AttributeValue<BigInteger> attributeValue = DataTypes.DT_INTEGER.createAttributeValue(value);
- stdPipResponse.addAttribute(new StdMutableAttribute(category, attributeId, attributeValue,
- pipRequest.getIssuer(), false));
- } catch (Exception e) {
- logger.error("Failed to convert {} to integer", value, e);
- }
- }
-
- protected void addStringAttribute(StdMutablePIPResponse stdPipResponse, Identifier category, Identifier attributeId,
- String value, PIPRequest pipRequest) {
- try {
- AttributeValue<String> attributeValue = DataTypes.DT_STRING.createAttributeValue(value);
- stdPipResponse.addAttribute(new StdMutableAttribute(category, attributeId, attributeValue,
- pipRequest.getIssuer(), false));
- } catch (Exception ex) {
- logger.error("Failed to convert {} to an AttributeValue<String>", value, ex);
- }
- }
-
-}