package com.feisystems.polrep.util;
import static com.feisystems.polrep.service.xacml.XACMLXPath.XPATH_POLICY_ID;
import static com.feisystems.polrep.service.xacml.XACMLXPath.XPATH_POLICY_SET_ID;
import static com.feisystems.polrep.util.DOMUtils.bytesToDocument;
import java.util.Optional;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import com.feisystems.polrep.service.dto.PolicyContentDto;
import com.feisystems.polrep.service.dto.PolicyDto;
import com.feisystems.polrep.service.exception.PolicyIdNotFoundException;
public class MappingUtils {
public static PolicyDto toPolicyDto(byte[] policy) {
String id = null;
final Document policyDoc = bytesToDocument(policy);
final Optional<Node> policySetId = DOMUtils.getNode(policyDoc,
XPATH_POLICY_SET_ID);
if (policySetId.isPresent()) {
id = policySetId.get().getNodeValue();
} else {
final Optional<Node> policyId = DOMUtils.getNode(policyDoc,
XPATH_POLICY_ID);
if (policyId.isPresent()) {
id = policyId.get().getNodeValue();
}
}
if (id == null) {
throw new PolicyIdNotFoundException(
"Cannot find the PolicyId/PolicySetId in one or more of the submitted policies!");
} else {
final PolicyDto dto = new PolicyDto();
dto.setId(id);
dto.setPolicy(policy);
return dto;
}
}
public static PolicyDto toPolicyDto(PolicyContentDto policyContentDto) {
return toPolicyDto(policyContentDto.getPolicy());
}
}