class RuleCompositionServiceImpl extends AbstractJargonService implements RuleCompositionService {

	@Override
	public IRODSRuleExecResult executeRuleFromParts(final String ruleBody, final List<String> inputParameters,
			final List<String> outputParameters) throws JargonException {

		if (ruleBody == null || ruleBody.isEmpty()) {
			throw new IllegalArgumentException("null or empty ruleBody");
		}

		if (inputParameters == null) {
			throw new IllegalArgumentException("null inputParameters");
		}

		if (outputParameters == null) {
			throw new IllegalArgumentException("null outputParameters");
		}

		log.info("ruleBody:{}", ruleBody);
		log.info("inputParameters:{}", inputParameters);
		log.info("outputParameters:{}", outputParameters);

		String ruleAsString = buildRuleStringFromParts(ruleBody, inputParameters, outputParameters);

		RuleProcessingAO ruleProcessingAO = irodsAccessObjectFactory.getRuleProcessingAO(getIrodsAccount());
		RuleInvocationConfiguration ruleInvocationConfiguration = RuleInvocationConfiguration
				.instanceWithDefaultAutoSettings(irodsAccessObjectFactory.getJargonProperties());

		log.info("getting ready to submit rule:{}", ruleAsString);
		return ruleProcessingAO.executeRule(ruleAsString, null, ruleInvocationConfiguration);

	}

	public  RuleCompositionServiceImpl();
	public  RuleCompositionServiceImpl(final IRODSAccessObjectFactory irodsAccessObjectFactory,
			final IRODSAccount irodsAccount);

}