= codegen
:author: 
:revnumber: 
:revdate: 2016/03/17 20:48
:relfileprefix: ../../../
:imagesdir: ../../..
ifdef::env-github,env-browser[:outfilesuffix: .adoc]



== Codegen Introduction

Code generator for various - cross platform programming languages and paradims. All in one!

Powered by AtomCore and JME3.


=== Inspired by

ECore

UML

MetaWidget

Other game engines and editor: UDK, Unity, Blender, GameMaker…

Other node base editor: 

Web world: 


==== Features

Node &amp; Flow &amp; Graph base

Model base

Scope &amp; Instruction &amp; Control base


==== Comparasion


=== VS MetaWidget OIM

link:http://metawidget.org/[http://metawidget.org/]

is for generating UI from objects. 

*CodeGen* is for generating data (objects) from (data) objects.


=== VS EMF

link:https://www.eclipse.org/modeling/emf/[https://www.eclipse.org/modeling/emf/]

link:http://www.eclipse.org/ecoretools/[http://www.eclipse.org/ecoretools/]

is for model based generation.

*CodeGen* works upon EMF and also support others: flow base - scope base paradigm.

CodeGen tools toward Netbean instead of Eclipse to suite with JME3's SDK. Also CodeGen toward Games, not general applications!


=== VS Morph/ BeanMapping / ORM

Work in higher level than those.

That's said!

*CodeGen* work in higher level, solve other problems and depends on MetaWidget, EMF, Morph, BeanMapping and ORM.


== First look


==== Generation

link:http://en.wikipedia.org/wiki/Code_generation_%28compiler%29[http://en.wikipedia.org/wiki/Code_generation_%28compiler%29]

Atom support code generation from multiple sources and to various targets to help speed up and unite production pipeline. CodeGen - Ultimate tools for code genration corporate with AtomExAsset - Ultimate tools for game assets management is 2 facilities in charge for the job.

Sources

*  UML
*  ECore
*  Java code or Java classes with annotations
*  Code gen diagrams (modified UML diagrams for games)
*  3D Model and assets

Targets

*  Other Model format - via ECore, UML
*  Groovy or Java - via ECore, UML, ANTLR
*  Java bytecode - via instrument and transformation ASM
*  JavaScript - via GWT, ANTLR (supervisor translation)
*  StringTemplate, XML, Text, Configurations … and other textbased - via StringTemplate
*  Assetpack and other kind of assets - via processing pipeline


==== Simulation


== Architecture & Designs


==== MetaWidget Architecture

link:http://metawidget.sourceforge.net/doc/reference/en/html/ch02.html[http://metawidget.sourceforge.net/doc/reference/en/html/ch02.html]

link:http://metawidget.sourceforge.net/elevator.php[http://metawidget.sourceforge.net/elevator.php]


[TIP]
====
MORAL: Object has “similar semantic with its UI. A thing has conceptal similarties with its representation, if there is a projection from it to the representation.
====



==== EMF Architecture

link:http://wiki.eclipse.org/index.php/EMF/FAQ[http://wiki.eclipse.org/index.php/EMF/FAQ]


[TIP]
====
MORAL: 
====



==== CodeGen Architecture

The initial idea of CodeGen is “there is similarity between two, there is a transform available, learnt from above.

Also take a look at wisdoms and <<jme3/advanced/atom_framework/atomcore/algorithms#,Algorithms>> which AtomCore sketchs for Generation:

*  [Math] A function from one set to another set.
*  [Physics] Energy from one form to another.
*  [Language] Translate sematic from one to another language need a dictionary.
*  [Art] Nothing new, just a cover
*  [Computing] Template is a good abstraction of algorimths.
*  [Programming] DRY and open source. 
*  [New techs &amp; trends] Topology and well defined network actually a virtue. 


==== Layouts

GraphLayout


==== Builders

BlockBuilder


==== Blocks

CodeBlock

PlaceHolderBlock


== Documentation
