Properties props = oldResource.getProperties();
Properties newProps = newResource.getProperties();
String lcName = newResource.getProperty("registry.LC.name");
String oldLcName = oldResource.getProperty("registry.LC.name");
if (lcName == null && oldLcName != null) {
RegistryEvent event = new LifeCycleDeletedEvent<String>(
"[" + oldLcName + "] The LifeCycle was deleted.");
((LifeCycleDeletedEvent)event).setResourcePath(relativePath);
event.setParameter("LifecycleName", oldLcName);
event.setTenantId(CurrentSession.getCallerTenantId());
try {
notify(event, requestContext.getRegistry(), relativePath);
} catch (Exception e) {
handleException("Unable to send notification for Put Operation", e);
}
return;
} else if (lcName != null && oldLcName == null) {
RegistryEvent event = new LifeCycleCreatedEvent<String>(
"[" + lcName + "] The LifeCycle was created.");
((LifeCycleCreatedEvent)event).setResourcePath(relativePath);
event.setParameter("LifecycleName", lcName);
event.setTenantId(CurrentSession.getCallerTenantId());
try {
notify(event, requestContext.getRegistry(), relativePath);
} catch (Exception e) {
handleException("Unable to send notification for Put Operation", e);
}
return;
}
for (Map.Entry<Object, Object> e : props.entrySet()) {
String propKey = (String) e.getKey();
if (propKey.matches("registry\\p{Punct}.*\\p{Punct}checklist\\p{Punct}.*")) {
List<String> propValues = (List<String>) e.getValue();
List<String> newPropValues = (List<String>) newProps.get(propKey);
if ((propValues == null) || (newPropValues == null))
continue;
if ((propValues.size() > 2) && (newPropValues.size() > 2)) {
String oldName = null;
String oldValue = null;
String oldLifeCycleState = null;
String newName = null;
String newValue = null;
String newLifeCycleState = null;
for (String param : propValues) {
if (param.startsWith("status:")) {
oldLifeCycleState = param.substring(7);
} else if (param.startsWith("name:")) {
oldName = param.substring(5);
} else if (param.startsWith("value:")) {
oldValue = param.substring(6);
}
}
for (String param : newPropValues) {
if (param.startsWith("status:")) {
newLifeCycleState = param.substring(7);
} else if (param.startsWith("name:")) {
newName = param.substring(5);
} else if (param.startsWith("value:")) {
newValue = param.substring(6);
}
}
if (oldName.equalsIgnoreCase(newName) &&
oldLifeCycleState.equalsIgnoreCase(newLifeCycleState) &&
!oldValue.equalsIgnoreCase(newValue)) {
RegistryEvent<String> event = null;
if (oldValue.equals(Boolean.toString(Boolean.TRUE)) ||
oldValue.equals(Boolean.toString(Boolean.FALSE))) {
String checkedState = null;
if (oldValue.equals(Boolean.toString(Boolean.TRUE))) {
event = new CheckListItemUncheckedEvent<String>(
"[" + lcName + "] The CheckList item '" + oldName + "' of LifeCycle State '" +
oldLifeCycleState + "' was Unchecked.");
((CheckListItemUncheckedEvent)event).setResourcePath(relativePath);
} else {
event = new CheckListItemCheckedEvent<String>(
"[" + lcName + "] The CheckList item '" + oldName + "' of LifeCycle State '" +
oldLifeCycleState + "' was Checked.");
((CheckListItemCheckedEvent)event).setResourcePath(relativePath);
}
} else {
// In here we are un-aware of the changes that happened.
event = new CheckListItemCheckedEvent<String>(
"[" + lcName + "] The State of the CheckList item '" + oldName + "' of LifeCycle State '" +
oldLifeCycleState + "' was changed.");
((CheckListItemCheckedEvent)event).setResourcePath(relativePath);
}
event.setParameter("LifecycleName", lcName);
event.setParameter("LifecycleState", oldLifeCycleState);
event.setParameter("CheckItem", oldName);
event.setTenantId(CurrentSession.getCallerTenantId());
try {
notify(event, requestContext.getRegistry(), relativePath);
} catch (Exception ex) {
handleException("Unable to send notification for Put Operation", ex);
}