packageview;
importjava.util.Collection;
importjava.util.HashMap;
importjava.util.Map;
importjavax.faces.application.Application;
importjavax.faces.context.FacesContext;
importoracle.adf.controller.ControllerContext;
importoracle.adf.controller.TaskFlowContext;
importoracle.adf.controller.TaskFlowId;
importoracle.adf.controller.ViewPortContext;
importoracle.adf.controller.metadata.MetadataService;
importoracle.adf.controller.metadata.model.DataControlScopeType;
importoracle.adf.controller.metadata.model.NamedParameter;
importoracle.adf.controller.metadata.model.TaskFlowDefinition;
importoracle.adf.controller.metadata.model.TaskFlowInputParameter;
importoracle.adf.controller.metadata.model.TransactionType;
importoracle.adf.model.BindingContext;
importoracle.adf.model.DataControlFrame;
importoracle.adf.model.binding.DCDataControl;
importoracle.adf.view.rich.context.AdfFacesContext;
/**
* ADF task flow utilities for use with JDev/ADF 11g+.
*
* Available under the Creative Commons Attribution 3.0 Unported License.
* See: http://one-size-doesnt-fit-all.blogspot.com/p/terms-conditions.html
*
* Absolutely no warranty implied, *use*at*your*own*risk*. This code has been mostly used
* for checking task flow features and hasn't been used in a production environment.
*
* Author: Chris Muir @ Oracle.com
* Date: 19th April 2012
*/
publicclassTaskFlowUtils {
publicString getTaskFlowName() {
MetadataService metadataService = MetadataService.getInstance();
TaskFlowDefinition taskFlowDefinition = metadataService.getTaskFlowDefinition(getCurrentTaskFlowId());
String taskFlowName = null;
if(taskFlowDefinition !=null) {
TaskFlowId taskFlowId = taskFlowDefinition.getTaskFlowId();
if(taskFlowId !=null)
taskFlowName = taskFlowDefinition.getTaskFlowId().getFullyQualifiedName();
else
taskFlowName = "Null";
} else
taskFlowName = "Null";
returntaskFlowName;
}
publicString getTaskFlowControlScopeName() {
MetadataService metadataService = MetadataService.getInstance();
String controlScopeTypeString;
TaskFlowDefinition taskFlowDefinition = metadataService.getTaskFlowDefinition(getCurrentTaskFlowId());
if(taskFlowDefinition !=null) {
String taskFlowName = taskFlowDefinition.getTaskFlowId().getFullyQualifiedName();
DataControlScopeType controlScopeType = taskFlowDefinition.getDataControlScopeType();
if(controlScopeType ==null|| controlScopeType == DataControlScopeType.SHARED)
controlScopeTypeString = "Shared Data Control Scope";
elseif(controlScopeType == DataControlScopeType.ISOLATED)
controlScopeTypeString = "Isolated Data Control Scope";
else
controlScopeTypeString = "UNKNOWN Data Control Scope";
} else
controlScopeTypeString = "Null";
returncontrolScopeTypeString;
}
publicString getTaskFlowControlTransactionTypeName() {
MetadataService metadataService = MetadataService.getInstance();
String transactionTypeString;
TaskFlowDefinition taskFlowDefinition = metadataService.getTaskFlowDefinition(getCurrentTaskFlowId());
if(taskFlowDefinition !=null) {
String taskFlowName = taskFlowDefinition.getTaskFlowId().getFullyQualifiedName();
TransactionType transactionType = taskFlowDefinition.getTransactionType();
if(transactionType ==null)
transactionTypeString = "-No Controller Transaction-";
elseif(transactionType == TransactionType.NEW_TRANSACTION)
transactionTypeString = "Always Begin New Transaction";
elseif(transactionType == TransactionType.REQUIRES_TRANSACTION)
transactionTypeString = "Use Existing Transaction if Possible";
elseif(transactionType == TransactionType.REQUIRES_EXISTING_TRANSACTION)
transactionTypeString = "Always Use Existing Transaction";
else
transactionTypeString = "UNKNOWN Transaction Type";
} else
transactionTypeString = "Null";
returntransactionTypeString;
}
publicHashMap formatTaskFlowParameters(Map btfParameters) {
HashMap taskFlowParameterValues = newHashMap();
FacesContext facesContext = FacesContext.getCurrentInstance();
Application application = facesContext.getApplication();
AdfFacesContext adfFacesContext = AdfFacesContext.getCurrentInstance();
Map pageFlowScope = adfFacesContext.getPageFlowScope();
for(Object parameter : btfParameters.values()) {
NamedParameter namedParameter = (NamedParameter)parameter;
String parameterName = namedParameter.getName();
String parameterExpression = namedParameter.getValueExpression();
Object parameterValue;
String stringValue;
if(parameterExpression ==null) {
parameterValue = pageFlowScope.get(parameterName);
} else{
parameterValue = application.evaluateExpressionGet(facesContext, parameterExpression, Object.class);
}
if(parameterValue !=null) {
try{
stringValue = parameterValue.toString();
} catch(Exception e) {
stringValue = "";
}
} else{
stringValue = "";
}
taskFlowParameterValues.put(parameterName, stringValue);
}
returntaskFlowParameterValues;
}
publicTaskFlowId getCurrentTaskFlowId() {
ControllerContext controllerContext = ControllerContext.getInstance();
ViewPortContext currentViewPort = controllerContext.getCurrentViewPort();
TaskFlowContext taskFlowContext = currentViewPort.getTaskFlowContext();
TaskFlowId taskFlowId = taskFlowContext.getTaskFlowId();
returntaskFlowId;
}
publicTaskFlowDefinition getTaskFlowDefinition(TaskFlowId taskFlowId) {
MetadataService metadataService = MetadataService.getInstance();
TaskFlowDefinition taskFlowDefinition = metadataService.getTaskFlowDefinition(taskFlowId);
returntaskFlowDefinition;
}
publicMap getCurrentTaskFlowInputParameters() {
returngetInputParameters(getCurrentTaskFlowId());
}
publicMap getInputParameters(TaskFlowId taskFlowId) {
TaskFlowDefinition taskFlowDefinition = getTaskFlowDefinition(taskFlowId);
Map taskFlowInputParameters = taskFlowDefinition.getInputParameters();
returntaskFlowInputParameters;
}
publicMap getCurrentTaskFlowReturnParameters() {
returngetReturnParameters(getCurrentTaskFlowId());
}
publicMap getReturnParameters(TaskFlowId taskFlowId) {
TaskFlowDefinition taskFlowDefinition = getTaskFlowDefinition(taskFlowId);
Map namedParameters = taskFlowDefinition.getReturnValues();
returnnamedParameters;
}
publicString getDataControlFrameName() {
BindingContext bindingContext = oracle.adf.controller.binding.BindingUtils.getBindingContext();
String dataControlFrameName = bindingContext.getCurrentDataControlFrame();
returndataControlFrameName;
}
publicDataControlFrame getDataControlFrame() {
BindingContext bindingContext = oracle.adf.controller.binding.BindingUtils.getBindingContext();
String dataControlFrameName = bindingContext.getCurrentDataControlFrame();
DataControlFrame dataControlFrame = bindingContext.findDataControlFrame(dataControlFrameName);
returndataControlFrame;
}
publicvoidcommitTaskFlow() {
getDataControlFrame().commit();
}
publicvoidrollbackTaskFlow() {
getDataControlFrame().rollback();
}
publicbooleanisTaskFlowTransactionDirty() {
returngetDataControlFrame().isTransactionDirty();
}
publicString getOpenTransactionName() {
returngetDataControlFrame().getOpenTransactionName();
}
publicString getDataControlNames() {
BindingContext bindingContext = oracle.adf.controller.binding.BindingUtils.getBindingContext();
String dataControlFrameName = bindingContext.getCurrentDataControlFrame();
DataControlFrame dataControlFrame = bindingContext.findDataControlFrame(dataControlFrameName);
Collection dataControls = dataControlFrame.datacontrols();
String names = "";
for(DCDataControl dc : dataControls) {
names = names + ","+ dc.getName() + dc.hashCode();
}
returnnames;
}
}