iCCG is a general purpose model translation framework implemented as a set of xUML models. It provides a ready-to-use framework for capturing the expert software design and coding knowledge that you will use to derive code from xUML domain models.
With iCCG, designers can formalise their insights and expertise to create a code generator which implements the optimum software design policy for a project. There is no limit to the flexibility and sophistication can be achieved with code generation since iCCG is a fully extensible framework.
iCCG has been used to build code generators for a wide variety of system architectures, ranging from small single-processor embedded systems to complex multi-node networks.
With iCCG to translate application models users have complete flexibility to:
- generate header code only and complete the code by hand
- code directly in the application models and use iCCG to assemble it
- code models with the target independent language ASL, and use iCCG to generate 100% of the target code
- modify iCCG to implement multiple coding strategies to achieve different kinds of optimisation of the target code
- translate application models into any intermediate format required by downstream development tools
iCCG has been used to create a variety of off-the-shelf code generators, and the XMI export/import facility for iUML Modeller.
iCCG as a Meta-Model Translation Framework
iCCG consists of a set of "meta-models" of the source models contained in an iUML Database. There are meta-models covering:
- The Executable UML Formalism
- The Action Specification Language (ASL)
- Model Build-State Control
- Textual Requirements Management
and so on. Model translators are constructed by embedding Action Language in these meta-models that translates their content into some other form. Sometimes this other form is target code, but often it is another meta-model. Typically, this will be a meta-model of the desired software design, i.e. the platform model.

Such design meta-models enable users to describe and manage very complex mappings. It also means that such translators are not restricted purely to code generation but can instead become sophisticated model transformation engines.
