/**
* {@Inherited}
*/
public synchronized void update(String papId, String version, PolicyType newPolicy) {
PolicyTypeString newPolicyTypeString = TypeStringUtils.cloneAsPolicyTypeString(newPolicy);
TypeStringUtils.releaseUnneededMemory(newPolicy);
String policyId = newPolicyTypeString.getPolicyId();
File policyFile = new File(getPolicyFileAbsolutePath(papId, policyId));
if (!policyFile.exists()) {
throw new NotFoundException(policyNotFoundExceptionMsg(policyId));
}
Map<String, PolicyTypeString> papCache = getPapCache(papId);
PolicyTypeString oldPolicy = papCache.get(policyId);
if (oldPolicy == null) {
try {
oldPolicy = new PolicyTypeString(policyHelper.buildFromFile(policyFile));
} catch (Throwable e) {
throw new RepositoryException(e);
}
}
if (!(oldPolicy.getVersion().equals(version))) {
throw new InvalidVersionException(String.format("Attempting to update the wrong version of PolicyId=\"%s\" (requestedVersion=\"%s\", repositoryVersion=\"%s\")",
policyId,
version,
oldPolicy.getVersion()));
}
TypeStringUtils.releaseUnneededMemory(oldPolicy);
PolicyHelper.toFile(policyFile, newPolicyTypeString);