class CaseManagementCallActivityConverter extends BaseCallActivityConverter<ReusableSubprocess, BaseReusableSubprocessTaskExecutionSet> {

    @Override
    protected BaseReusableSubprocessTaskExecutionSet createReusableSubprocessTaskExecutionSet(CallActivity activity,
                                                                                              CallActivityPropertyReader p) {
        return p.isCase() ?
                new CaseReusableSubprocessTaskExecutionSet(new CalledElement(activity.getCalledElement()),
                                                           new IsCase(true),
                                                           new Independent(p.isIndependent()),
                                                           new AbortParent(p.isAbortParent()),
                                                           new WaitForCompletion(p.isWaitForCompletion()),
                                                           new IsAsync(p.isAsync()),
                                                           new AdHocAutostart(p.isAdHocAutostart()),
                                                           new IsMultipleInstance(p.isMultipleInstance()),
                                                           new MultipleInstanceExecutionMode(p.isSequential()),
                                                           new MultipleInstanceCollectionInput(p.getCollectionInput()),
                                                           new MultipleInstanceDataInput(p.getDataInput()),
                                                           new MultipleInstanceCollectionOutput(p.getCollectionOutput()),
                                                           new MultipleInstanceDataOutput(p.getDataOutput()),
                                                           new MultipleInstanceCompletionCondition(p.getCompletionCondition()),
                                                           new OnEntryAction(p.getOnEntryAction()),
                                                           new OnExitAction(p.getOnExitAction()),
                                                           new SLADueDate(p.getSlaDueDate())) :
                new ProcessReusableSubprocessTaskExecutionSet(new CalledElement(activity.getCalledElement()),
                                                              new IsCase(false),
                                                              new Independent(p.isIndependent()),
                                                              new AbortParent(p.isAbortParent()),
                                                              new WaitForCompletion(p.isWaitForCompletion()),
                                                              new IsAsync(p.isAsync()),
                                                              new AdHocAutostart(p.isAdHocAutostart()),
                                                              new IsMultipleInstance(p.isMultipleInstance()),
                                                              new MultipleInstanceExecutionMode(p.isSequential()),
                                                              new MultipleInstanceCollectionInput(p.getCollectionInput()),
                                                              new MultipleInstanceDataInput(p.getDataInput()),
                                                              new MultipleInstanceCollectionOutput(p.getCollectionOutput()),
                                                              new MultipleInstanceDataOutput(p.getDataOutput()),
                                                              new MultipleInstanceCompletionCondition(p.getCompletionCondition()),
                                                              new OnEntryAction(p.getOnEntryAction()),
                                                              new OnExitAction(p.getOnExitAction()),
                                                              new SLADueDate(p.getSlaDueDate()));
    }

    public  CaseManagementCallActivityConverter(TypedFactoryManager factoryManager,
                                               PropertyReaderFactory propertyReaderFactory);

}