Acceleo 4 can be used programmatically and for instance integrated in other products.
Parsing
URI destination = URI.createURI(...);
final IQualifiedNameResolver resolver = new ClassLoaderQualifiedNameResolver(getClass().getClassLoader(), AcceleoParser.QUALIFIER_SEPARATOR);
final QualifiedNameQueryEnvironment queryEnvironment = new QualifiedNameQueryEnvironment(resolver);
IAcceleoEnvironment acceleoEnvironment = new AcceleoEnvironment(resolver, queryEnvironment, new DefaultGenerationStrategy(), destination);
AcceleoEvaluator evaluator = new AcceleoEvaluator(acceleoEnvironment, queryEnvironment.getLookupEngine());
resolver.addLoader(new ModuleLoader(new AcceleoParser(queryEnvironment), evaluator));
resolver.addLoader(new JavaLoader(AcceleoParser.QUALIFIER_SEPARATOR));
final Object resolved = resolver.resolve(moduleQualifiedName);
final Module mainModule;
if (resolved instanceof Module) {
mainModule = (Module)resolved;
} else {
mainModule = null;
}
Validation
final AcceleoValidator acceleoValidator = new AcceleoValidator(acceleoEnvironment, queryEnvironment.getLookupEngine());
final IAcceleoValidationResult acceleoValidationResult = acceleoValidator.validate(mainModule.getAst(), moduleQualifiedNameForCompletion);
Completion
final AcceleoCompletor acceleoCompletor = new AcceleoCompletor();
String source = ...;
int position = ...;
List<AcceleoCompletionProposal> completionProposals = acceleoCompletor.getProposals(acceleoEnvironment, acceleoEnvironment.getQueryEnvironment().getLookupEngine(), qualifiedName, source, position);
Generation
final ResourceSetImpl rs = new ResourceSetImpl();
final Resource model = rs.getResource(..., true);
AcceleoUtil.generate(evaluator, environment, module, model);
Unit test module
You can unit test your modules using the same JUnit test suite we are using for the development of Acceleo 4. You will simply need to create a class extending the class org.eclipse.acceleo.tests.utils.AbstractEvaluationTestSuite and create a folder with you test folders. Those folders need to respect a naming convention. You can find a working example with the class FileStatementTests and the corresponding folder.