2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.pap.xacml.rest.components;
23 import com.att.research.xacml.api.pap.PAPException;
24 import com.att.research.xacml.api.pap.PDPPolicy;
25 import com.att.research.xacml.util.XACMLProperties;
26 import java.io.ByteArrayInputStream;
28 import java.io.FileWriter;
29 import java.io.IOException;
30 import java.io.InputStream;
31 import java.nio.file.Files;
32 import java.nio.file.Path;
33 import java.nio.file.Paths;
34 import java.util.HashMap;
35 import java.util.HashSet;
36 import java.util.List;
37 import javax.persistence.PersistenceException;
38 import org.apache.commons.io.FilenameUtils;
39 import org.hibernate.Query;
40 import org.hibernate.Session;
41 import org.hibernate.SessionFactory;
42 import org.onap.policy.common.logging.eelf.MessageCodes;
43 import org.onap.policy.common.logging.eelf.PolicyLogger;
44 import org.onap.policy.common.logging.flexlogger.FlexLogger;
45 import org.onap.policy.common.logging.flexlogger.Logger;
46 import org.onap.policy.pap.xacml.rest.XACMLPapServlet;
47 import org.onap.policy.rest.XACMLRestProperties;
48 import org.onap.policy.rest.dao.PolicyDBException;
49 import org.onap.policy.rest.jpa.GroupEntity;
50 import org.onap.policy.rest.jpa.PdpEntity;
51 import org.onap.policy.rest.jpa.PolicyEntity;
52 import org.onap.policy.xacml.api.pap.OnapPDP;
53 import org.onap.policy.xacml.api.pap.OnapPDPGroup;
54 import org.onap.policy.xacml.std.pap.StdPDPGroup;
55 import org.onap.policy.xacml.std.pap.StdPDPPolicy;
56 import org.springframework.beans.factory.annotation.Autowired;
57 import org.springframework.stereotype.Component;
60 public class HandleIncomingNotifications {
62 private static final Logger logger = FlexLogger.getLogger(HandleIncomingNotifications.class);
64 private static final String POLICY_NOTIFICATION = "policy";
65 private static final String PDP_NOTIFICATION = "pdp";
66 private static final String GROUP_NOTIFICATION = "group";
67 public static final String JSON_CONFIG = "JSON";
68 public static final String XML_CONFIG = "XML";
69 public static final String PROPERTIES_CONFIG = "PROPERTIES";
70 public static final String OTHER_CONFIG = "OTHER";
71 public static final String AUDIT_USER = "audit";
74 private static SessionFactory sessionfactory;
77 public HandleIncomingNotifications(SessionFactory sessionfactory) {
78 HandleIncomingNotifications.sessionfactory = sessionfactory;
81 public HandleIncomingNotifications() {
82 // Default Constructor
85 public void handleIncomingHttpNotification(String url, String entityId, String entityType, String extraData,
86 XACMLPapServlet xacmlPapServlet) {
87 logger.info("DBDao url: " + url + " has reported an update on " + entityType + " entity " + entityId);
88 PolicyDBDaoTransaction transaction = PolicyDBDao.getPolicyDBDaoInstance().getNewTransaction();
89 // although its named retries, this is the total number of tries
93 .parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_INCOMINGNOTIFICATION_TRIES));
94 } catch (Exception e) {
95 logger.error("xacml.rest.pap.incomingnotification.tries property not set, using a default of 3." + e);
98 // if someone sets it to some dumb value, we need to make sure it will
103 int pauseBetweenRetries = 1000;
104 switch (entityType) {
106 case POLICY_NOTIFICATION:
107 for (int i = 0; i < retries; i++) {
109 handleIncomingPolicyChange(entityId);
111 } catch (Exception e) {
113 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, PolicyDBDao.POLICYDBDAO_VAR,
114 "Caught exception on handleIncomingPolicyChange(" + url + ", " + entityId + ", "
118 Thread.sleep(pauseBetweenRetries);
119 } catch (InterruptedException ie) {
120 Thread.currentThread().interrupt();
125 case PDP_NOTIFICATION:
126 for (int i = 0; i < retries; i++) {
128 handleIncomingPdpChange(entityId, transaction);
130 } catch (Exception e) {
132 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, PolicyDBDao.POLICYDBDAO_VAR,
133 "Caught exception on handleIncomingPdpChange(" + url + ", " + entityId + ", "
134 + transaction + ")");
137 Thread.sleep(pauseBetweenRetries);
138 } catch (InterruptedException ie) {
139 Thread.currentThread().interrupt();
144 case GROUP_NOTIFICATION:
145 for (int i = 0; i < retries; i++) {
147 handleIncomingGroupChange(entityId, extraData, transaction);
149 } catch (Exception e) {
151 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, PolicyDBDao.POLICYDBDAO_VAR,
152 "Caught exception on handleIncomingGroupChange(" + url + ", " + entityId + ", "
153 + extraData + ", " + transaction + ", " + xacmlPapServlet + ")");
156 Thread.sleep(pauseBetweenRetries);
157 } catch (InterruptedException ie) {
158 Thread.currentThread().interrupt();
164 // no changes should be being made in this function, we still need to
166 transaction.rollbackTransaction();
169 private void handleIncomingGroupChange(String groupId, String extraData, PolicyDBDaoTransaction transaction)
170 throws PAPException, PolicyDBException {
171 GroupEntity groupRecord = null;
172 long groupIdLong = -1;
174 groupIdLong = Long.parseLong(groupId);
175 } catch (NumberFormatException e) {
176 throw new IllegalArgumentException("groupId " + groupId + " cannot be parsed into a long");
179 groupRecord = transaction.getGroup(groupIdLong);
180 } catch (Exception e) {
181 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, PolicyDBDao.POLICYDBDAO_VAR,
182 "Caught Exception trying to get pdp group record with transaction.getGroup(" + groupIdLong + ");");
183 throw new PAPException("Could not get local group " + groupIdLong);
185 if (groupRecord == null) {
186 throw new PersistenceException("The group record returned is null");
188 // compare to local fs
189 // does group folder exist
190 OnapPDPGroup localGroup = null;
192 localGroup = PolicyDBDao.getPolicyDBDaoInstance().getPapEngine().getGroup(groupRecord.getGroupId());
193 } catch (Exception e) {
194 logger.warn("Caught PAPException trying to get local pdp group with papEngine.getGroup(" + groupId + ");",
197 if (localGroup == null && extraData != null) {
198 // here we can try to load an old group id from the extraData
200 localGroup = PolicyDBDao.getPolicyDBDaoInstance().getPapEngine().getGroup(extraData);
201 } catch (Exception e) {
203 "Caught PAPException trying to get local pdp group with papEngine.getGroup(" + extraData + ");",
207 if (localGroup != null && groupRecord.isDeleted()) {
208 OnapPDPGroup newLocalGroup = null;
209 if (extraData != null) {
211 newLocalGroup = PolicyDBDao.getPolicyDBDaoInstance().getPapEngine().getGroup(extraData);
212 } catch (PAPException e) {
213 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, PolicyDBDao.POLICYDBDAO_VAR,
214 "Caught PAPException trying to get new pdp group with papEngine.getGroup(" + extraData
219 PolicyDBDao.getPolicyDBDaoInstance().getPapEngine().removeGroup(localGroup, newLocalGroup);
220 } catch (NullPointerException | PAPException e) {
221 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, PolicyDBDao.POLICYDBDAO_VAR,
222 "Caught PAPException trying to get remove pdp group with papEngine.removeGroup(" + localGroup
223 + ", " + newLocalGroup + ");");
224 throw new PAPException("Could not remove group " + groupId);
226 } else if (localGroup == null) {
227 // creating a new group
229 PolicyDBDao.getPolicyDBDaoInstance().getPapEngine().newGroup(groupRecord.getgroupName(),
230 groupRecord.getDescription());
231 } catch (NullPointerException | PAPException e) {
232 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, PolicyDBDao.POLICYDBDAO_VAR,
233 "Caught PAPException trying to create pdp group with papEngine.newGroup(groupRecord.getgroupName(), groupRecord.getDescription());");
234 throw new PAPException("Could not create group " + groupRecord);
237 localGroup = PolicyDBDao.getPolicyDBDaoInstance().getPapEngine().getGroup(groupRecord.getGroupId());
238 } catch (PAPException e1) {
239 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, PolicyDBDao.POLICYDBDAO_VAR,
240 "Caught PAPException trying to get pdp group we just created with papEngine.getGroup(groupRecord.getGroupId());\nAny PDPs or policies in the new group may not have been added");
243 // add possible pdps to group
244 List<?> pdpsInGroup = transaction.getPdpsInGroup(Long.parseLong(groupRecord.getGroupId()));
245 for (Object pdpO : pdpsInGroup) {
246 PdpEntity pdp = (PdpEntity) pdpO;
248 PolicyDBDao.getPolicyDBDaoInstance().getPapEngine().newPDP(pdp.getPdpId(), localGroup,
249 pdp.getPdpName(), pdp.getDescription(), pdp.getJmxPort());
250 } catch (NullPointerException | PAPException e) {
251 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, PolicyDBDao.POLICYDBDAO_VAR,
252 "Caught PAPException trying to get create pdp with papEngine.newPDP(pdp.getPdpId(), localGroup, pdp.getPdpName(), pdp.getDescription(), pdp.getJmxPort());");
253 throw new PAPException("Could not create pdp " + pdp);
256 // add possible policies to group (file system only, apparently)
258 if (!(localGroup instanceof StdPDPGroup)) {
259 throw new PAPException("group is not a StdPDPGroup");
262 // because it will be comparing the new group to its own version
263 StdPDPGroup localGroupClone = new StdPDPGroup(localGroup.getId(), localGroup.isDefaultGroup(),
264 localGroup.getName(), localGroup.getDescription(), ((StdPDPGroup) localGroup).getDirectory());
265 localGroupClone.setOnapPdps(localGroup.getOnapPdps());
266 localGroupClone.setPipConfigs(localGroup.getPipConfigs());
267 localGroupClone.setStatus(localGroup.getStatus());
268 // we are updating a group or adding a policy or changing default
269 // set default if it should be
270 if (!localGroupClone.isDefaultGroup() && groupRecord.isDefaultGroup()) {
272 PolicyDBDao.getPolicyDBDaoInstance().getPapEngine().setDefaultGroup(localGroup);
274 } catch (PAPException e) {
275 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, PolicyDBDao.POLICYDBDAO_VAR,
276 "Caught PAPException trying to set default group with papEngine.SetDefaultGroup("
277 + localGroupClone + ");");
278 throw new PAPException("Could not set default group to " + localGroupClone);
281 boolean needToUpdate = false;
282 if (updateGroupPoliciesInFileSystem(localGroupClone, localGroup, groupRecord, transaction)) {
285 if (!PolicyDBDao.stringEquals(localGroupClone.getId(), groupRecord.getGroupId())
286 || !PolicyDBDao.stringEquals(localGroupClone.getName(), groupRecord.getgroupName())) {
288 // we do not want to change the id, the papEngine will do this
289 // for us, it needs to know the old id
290 localGroupClone.setName(groupRecord.getgroupName());
293 if (!PolicyDBDao.stringEquals(localGroupClone.getDescription(), groupRecord.getDescription())) {
294 localGroupClone.setDescription(groupRecord.getDescription());
299 PolicyDBDao.getPolicyDBDaoInstance().getPapEngine().updateGroup(localGroupClone);
300 } catch (PAPException e) {
301 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, PolicyDBDao.POLICYDBDAO_VAR,
302 "Caught PAPException trying to update group with papEngine.updateGroup(" + localGroupClone
304 throw new PAPException("Could not update group " + localGroupClone);
310 // this will also handle removes, since incoming pdpGroup has no policies
311 // internally, we are just going to add them all in from the db
312 private boolean updateGroupPoliciesInFileSystem(OnapPDPGroup pdpGroup, OnapPDPGroup oldPdpGroup,
313 GroupEntity groupRecord, PolicyDBDaoTransaction transaction) throws PAPException, PolicyDBException {
314 if (!(pdpGroup instanceof StdPDPGroup)) {
315 throw new PAPException("group is not a StdPDPGroup");
317 StdPDPGroup group = (StdPDPGroup) pdpGroup;
318 // this must always be true since we don't explicitly know when a delete
320 boolean didUpdate = true;
321 HashMap<String, PDPPolicy> currentPolicySet = new HashMap<>(oldPdpGroup.getPolicies().size());
322 HashSet<PDPPolicy> newPolicySet = new HashSet<>();
323 for (PDPPolicy pdpPolicy : oldPdpGroup.getPolicies()) {
324 currentPolicySet.put(pdpPolicy.getId(), pdpPolicy);
326 for (PolicyEntity policy : groupRecord.getPolicies()) {
327 String pdpPolicyName =
328 PolicyDBDao.getPolicyDBDaoInstance().getPdpPolicyName(policy.getPolicyName(), policy.getScope());
329 if (group.getPolicy(pdpPolicyName) == null) {
331 if (currentPolicySet.containsKey(pdpPolicyName)) {
332 newPolicySet.add(currentPolicySet.get(pdpPolicyName));
335 "PolicyDBDao: Adding the new policy to the PDP group after notification: " + pdpPolicyName);
336 InputStream policyStream = new ByteArrayInputStream(policy.getPolicyData().getBytes());
337 group.copyPolicyToFile(pdpPolicyName, policyStream);
338 ((StdPDPPolicy) (group.getPolicy(pdpPolicyName))).setName(PolicyDBDao.getPolicyDBDaoInstance()
339 .removeExtensionAndVersionFromPolicyName(pdpPolicyName));
341 policyStream.close();
342 } catch (IOException e) {
344 PolicyLogger.error(e.getMessage() + e);
349 logger.info("PolicyDBDao: Adding updated policies to group after notification.");
351 newPolicySet.addAll(group.getPolicies());
352 group.setPolicies(newPolicySet);
357 private void handleIncomingPdpChange(String pdpId, PolicyDBDaoTransaction transaction) throws PAPException {
361 pdpIdLong = Long.parseLong(pdpId);
362 } catch (NumberFormatException e) {
363 throw new IllegalArgumentException("pdpId " + pdpId + " cannot be parsed into a long");
365 PdpEntity pdpRecord = null;
367 pdpRecord = transaction.getPdp(pdpIdLong);
368 } catch (Exception e) {
369 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, PolicyDBDao.POLICYDBDAO_VAR,
370 "Caught Exception trying to get pdp record with transaction.getPdp(" + pdpIdLong + ");");
371 throw new PAPException("Could not get local pdp " + pdpIdLong);
373 if (pdpRecord == null) {
374 throw new PersistenceException("The pdpRecord returned is null");
376 OnapPDP localPdp = null;
378 localPdp = PolicyDBDao.getPolicyDBDaoInstance().getPapEngine().getPDP(pdpRecord.getPdpId());
379 } catch (PAPException e) {
380 logger.warn("Caught PAPException trying to get local pdp with papEngine.getPDP(" + pdpId + ");", e);
382 if (localPdp != null && pdpRecord.isDeleted()) {
384 PolicyDBDao.getPolicyDBDaoInstance().getPapEngine().removePDP(localPdp);
385 } catch (PAPException e) {
386 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, PolicyDBDao.POLICYDBDAO_VAR,
387 "Caught PAPException trying to get remove pdp with papEngine.removePDP(" + localPdp + ");");
388 throw new PAPException("Could not remove pdp " + pdpId);
390 } else if (localPdp == null) {
393 OnapPDPGroup localGroup = null;
396 PolicyDBDao.getPolicyDBDaoInstance().getPapEngine().getGroup(pdpRecord.getGroup().getGroupId());
397 } catch (PAPException e1) {
398 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, PolicyDBDao.POLICYDBDAO_VAR,
399 "Caught PAPException trying to get local group to add pdp to with papEngine.getGroup(pdpRecord.getGroup().getGroupId());");
400 throw new PAPException("Could not get local group");
403 PolicyDBDao.getPolicyDBDaoInstance().getPapEngine().newPDP(pdpRecord.getPdpId(), localGroup,
404 pdpRecord.getPdpName(), pdpRecord.getDescription(), pdpRecord.getJmxPort());
405 } catch (NullPointerException | PAPException e) {
406 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, PolicyDBDao.POLICYDBDAO_VAR,
407 "Caught PAPException trying to create pdp with papEngine.newPDP(" + pdpRecord.getPdpId() + ", "
408 + localGroup + ", " + pdpRecord.getPdpName() + ", " + pdpRecord.getDescription() + ", "
409 + pdpRecord.getJmxPort() + ");");
410 throw new PAPException("Could not create pdp " + pdpRecord);
413 boolean needToUpdate = false;
414 if (!PolicyDBDao.stringEquals(localPdp.getId(), pdpRecord.getPdpId())
415 || !PolicyDBDao.stringEquals(localPdp.getName(), pdpRecord.getPdpName())) {
416 // again, we don't want to change the id, the papEngine will do
418 localPdp.setName(pdpRecord.getPdpName());
421 if (!PolicyDBDao.stringEquals(localPdp.getDescription(), pdpRecord.getDescription())) {
422 localPdp.setDescription(pdpRecord.getDescription());
425 String localPdpGroupId = null;
427 localPdpGroupId = PolicyDBDao.getPolicyDBDaoInstance().getPapEngine().getPDPGroup(localPdp).getId();
428 } catch (PAPException e) {
429 // could be null or something, just warn at this point
431 "Caught PAPException trying to get id of local group that pdp is in with localPdpGroupId = papEngine.getPDPGroup(localPdp).getId();",
434 if (!PolicyDBDao.stringEquals(localPdpGroupId, pdpRecord.getGroup().getGroupId())) {
435 OnapPDPGroup newPdpGroup = null;
437 newPdpGroup = PolicyDBDao.getPolicyDBDaoInstance().getPapEngine()
438 .getGroup(pdpRecord.getGroup().getGroupId());
439 } catch (PAPException e) {
440 // ok, now we have an issue. Time to stop things
441 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, PolicyDBDao.POLICYDBDAO_VAR,
442 "Caught PAPException trying to get id of local group to move pdp to with papEngine.getGroup(pdpRecord.getGroup().getGroupId());");
443 throw new PAPException("Could not get local group");
446 PolicyDBDao.getPolicyDBDaoInstance().getPapEngine().movePDP(localPdp, newPdpGroup);
447 } catch (PAPException e) {
448 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, PolicyDBDao.POLICYDBDAO_VAR,
449 "Caught PAPException trying to move pdp with papEngine.movePDP(localPdp, newPdpGroup);");
450 throw new PAPException("Could not move pdp " + localPdp);
453 if (localPdp.getJmxPort() != pdpRecord.getJmxPort()) {
454 localPdp.setJmxPort(pdpRecord.getJmxPort());
459 PolicyDBDao.getPolicyDBDaoInstance().getPapEngine().updatePDP(localPdp);
460 } catch (PAPException e) {
461 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, PolicyDBDao.POLICYDBDAO_VAR,
462 "Caught PAPException trying to update pdp with papEngine.updatePdp(" + localPdp + ");");
463 throw new PAPException("Could not update pdp " + localPdp);
467 // compare to local situation
468 // call command to update
471 private void handleIncomingPolicyChange(String policyId) {
472 String policyName = null;
473 Session session = sessionfactory.openSession();
474 Query getPolicyEntityQuery = session.getNamedQuery("PolicyEntity.FindById");
475 getPolicyEntityQuery.setParameter("id", Long.valueOf(policyId));
477 @SuppressWarnings("unchecked")
478 List<PolicyEntity> policies = getPolicyEntityQuery.list();
479 PolicyEntity policy = null;
480 if (!policies.isEmpty()) {
481 policy = policies.get(0);
483 String action = "unknown action";
485 if (policy != null) {
486 policyName = policy.getPolicyName();
487 logger.info("Deleting old Policy Config File for " + policy.getPolicyName());
491 if (policy.getConfigurationData() != null) {
493 getPolicySubFile(policy.getConfigurationData().getConfigurationName(), PolicyDBDao.CONFIG);
494 } else if (policy.getActionBodyEntity() != null) {
495 subFile = getPolicySubFile(policy.getActionBodyEntity().getActionBodyName(), PolicyDBDao.ACTION);
498 if (subFile != null) {
499 Files.deleteIfExists(subFile);
501 if (policy.getConfigurationData() != null) {
502 writePolicySubFile(policy, PolicyDBDao.CONFIG);
503 } else if (policy.getActionBodyEntity() != null) {
504 writePolicySubFile(policy, action);
507 } catch (IOException e1) {
508 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, PolicyDBDao.POLICYDBDAO_VAR,
509 "Error occurred while performing [" + action + "] of Policy File: " + policyName);
515 private boolean writePolicySubFile(PolicyEntity policy, String policyType) {
516 logger.info("writePolicySubFile with policyName[" + policy.getPolicyName() + "] and policyType[" + policyType
519 String subTypeName = null;
520 String subTypeBody = null;
521 if (PolicyDBDao.CONFIG.equalsIgnoreCase(policyType)) {
522 type = PolicyDBDao.CONFIG;
523 subTypeName = FilenameUtils.removeExtension(policy.getConfigurationData().getConfigurationName());
524 subTypeBody = policy.getConfigurationData().getConfigBody();
526 String configType = policy.getConfigurationData().getConfigType();
528 if (configType != null) {
529 if (configType.equals(JSON_CONFIG)) {
530 subTypeName = subTypeName + ".json";
532 if (configType.equals(XML_CONFIG)) {
533 subTypeName = subTypeName + ".xml";
535 if (configType.equals(PROPERTIES_CONFIG)) {
536 subTypeName = subTypeName + ".properties";
538 if (configType.equals(OTHER_CONFIG)) {
539 subTypeName = subTypeName + ".txt";
542 } else if (PolicyDBDao.ACTION.equalsIgnoreCase(policyType)) {
543 type = PolicyDBDao.ACTION;
544 subTypeName = policy.getActionBodyEntity().getActionBodyName();
545 subTypeBody = policy.getActionBodyEntity().getActionBody();
547 Path filePath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WEBAPPS).toString(), type);
549 if (subTypeBody == null) {
552 boolean success = false;
554 Files.deleteIfExists(Paths.get(filePath.toString(), subTypeName));
555 File file = Paths.get(filePath.toString(), subTypeName).toFile();
556 boolean value = file.createNewFile();
557 logger.debug("New file created successfully" + value);
558 try (FileWriter fileWriter = new FileWriter(file, false)) {
559 // false to overwrite
560 fileWriter.write(subTypeBody);
564 } catch (Exception e) {
565 PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, PolicyDBDao.POLICYDBDAO_VAR,
566 "Exception occured while creating Configuration File for Policy : " + policy.getPolicyName());
571 Path getPolicySubFile(String inputFileName, String subFileType) {
572 String filename = inputFileName;
573 logger.info("getPolicySubFile(" + filename + ", " + subFileType + ")");
574 Path filePath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WEBAPPS), subFileType);
577 filename = FilenameUtils.removeExtension(filename);
579 for (File tmpFile : filePath.toFile().listFiles()) {
580 if (FilenameUtils.removeExtension(tmpFile.getName()).equals(filename)) {
585 Path finalPath = null;
587 finalPath = Paths.get(file.getAbsolutePath());
590 logger.info("end of getPolicySubFile: " + finalPath);