Implementation for Computed Action Parser
To implement your own computed runtime action with custom UI rendering, the parser (MyComputedRuntimeActionParser.java) must be located in the service directory. A parser is responsible for generating compressed JSON data from the given policy action instance, and creating a custom rendering of the action instance using the JSON data.
Here is the frame of the computed runtime action parser implementation:
src\com\softwareag\centrasite\bui\extension\service\ MyComputedRuntimeActionParser.java
public class MyComputedRuntimeActionParser extends BasePolicyActionExtensionParser {
public MyComputedRuntimeActionParser(CentraSiteSession centraSiteSession,
CentraSitePolicyActionTemplate actionTemplate,
CentraSitePolicyActionInstance actionInstance) {
super(centraSiteSession, actionTemplate, actionInstance);
}
@Override
public CentraSitePolicyActionInstance getActionInstance(String json)
throws CLLException {
Gson gson = new Gson();
MyComputedRuntimeActionInfo = gson.fromJson(json,
MyComputedRuntimeActionInfo.class);
if (actionInfo == null) {
return null;
}
CentraSitePolicyActionInstance policyActionInstance = null;
CentraSiteObjectManager objectManager =
getCentraSiteSession().getCentraSiteObjectManager();
if (actionInfo.isActionInstance()) {
policyActionInstance = objectManager.getPolicyActionInstance(action
Info.getId());
} else {
policyActionInstance = objectManager.createPolicyActionInstance(act
ionInfo.getId());
}
if (policyActionInstance == null) {
return null;
}
setParameterValues(policyActionInstance, actionInfo);
return policyActionInstance;
}
private void setParameterValues(CentraSitePolicyActionInstance
policyActionInstance, MyComputedRuntimeActionInfo actionInfo)
throws CLLException {
List<MyComputedRuntimeParameterInfo> parameters = actionInfo.getParame
ters();
if (parameters == null || parameters.isEmpty()) {
return;
}
MyComputedRuntimeParameterInfo parameterInfo = parameters.get(0);
Collection<Object> convertedParameterValues = new ArrayList<Object>();
convertedParameterValues.addAll(parameterInfo.getValues());
policyActionInstance.setAttributeValue(parameterInfo.getId(),
convertedParameterValues);
}
@Override
public String getJson() throws CLLException {
Gson gson = new Gson();
MyComputedRuntimeActionInfo actionInfo = null;
if (getActionInstance() != null) {
CentraSitePolicyActionTemplate policyActionTemplate =
getActionInstance().getCentraSitePolicyActionTemplate();
actionInfo = new MyComputedRuntimeActionInfo(getActionInstance().g
etId(),
policyActionTemplate.getName());
actionInfo.setActionId(policyActionTemplate.getId());
actionInfo.setIsActionInstance(true);
} else if (getActionTemplate() != null) {
actionInfo = new MyComputedRuntimeActionInfo(getActionTemplate().g
etId(),
getActionTemplate().getName());
actionInfo.setActionId(getActionTemplate().getId());
}
fillParameterInfos(getActionTemplate(), actionInfo);
return (actionInfo != null ? gson.toJson(actionInfo) : null);
}
private void fillParameterInfos(CentraSitePolicyActionTemplate actionTemplate,
MyComputedRuntimeActionInfo actionInfo) throws CLLException {
if (actionTemplate == null) {
return;
}
Collection<CentraSiteObjectAttribute> attributes = actionTemplate.getA
ttributes();
if (attributes == null || attributes.isEmpty()) {
return;
}
List<MyComputedRuntimeParameterInfo> parameters = new
ArrayList<MyComputedRuntimeParameterInfo>(attributes.size());
MyComputedRuntimeParameterInfo parameter = null;
for (CentraSiteObjectAttribute attribute : attributes) {
parameter = new MyComputedRuntimeParameterInfo(attribute.getName(),
attribute.getDisplayName());
parameters.add(parameter);
}
actionInfo.setParameters(parameters);
}
}