Edo is the official code generator tool for Entando, started with love by Stefano Puddu s.puddu@entando.com and maintained with pride by the Entando dev team.
Use it to generate the following parts of Entando Components with a single command:
- Pojo
- DAO, Manager, events
- Entando component descriptor and related files
- REST API, CXF and SpringMVC
- Backoffice actions, validations, tiles and JSPs
- A basic set of utility classes for JUnit tests
- Widgets, custom tags
- InternalServlet widget
- Final report
- More than one bean at the same time
- admin console UI producers
- Change the template engine
If you obtained Edo as a pre-compiled binary package, follow these easy installation steps:
- Copy
edo-x.y.z.jarinto a folder of your choice - (Optional for OS X and *nix systems) configure a shell alias like so:
alias edo="java -jar /folder-of-your-choice/edo-x.y.z.jar"
The source comes with an Ant script, and you'll need Ant 1.9+ to make it work.
The build-and-install Ant task is the default one, so you just have to run:
$ ant
- Build (see next section)
- Copy
target/edo-x.y.z.jarinto a folder of your choice
$ ant build
$ java -jar <PATH_TO_YOUR_JAR>/edo-x.y.z.jar [options]
Example:
$ java -jar <PATH_TO_YOUR_JAR>/edo-x.y.z.jar -f edoDescriptor.json
$ edo [options]
Example:
$ edo -f edoDescriptor.json
- --file (Required) The path of the edo file descriptor.
- --zip (Optional) Path of a directory where Edo will save the assets as zip file
This file contains the parameters used to build your assets.
{
"baseDir" : "/path/to/my/project/projectName",
"permission" : "superuser",
"packageName" : "org.entando.entando.plugins.jpzoo",
"model" : {
"name" : "Animal",
"fields" : [ {
"name" : "name",
"type" : "string",
"required" : true,
"length" : null,
"primaryKey" : false
}, {
"name" : "weight",
"type" : "int",
"required" : false,
"length" : null,
"primaryKey" : false
} ]
},
"assets" : {
"rest" : true,
"cxf" : true,
"specialWidget" : true,
"internalServlet" : true,
"adminConsole" : true,
"adminConsoleProducer" : null
}
}
-
baseDir: The path of the main directory, the root folder of your project. Apom.xmlfile must exist in the same directory. If the output is a zip file, eg:java -jar edo-<version>.jar -f /tmp/edo/foo.json -z /tmp/projects/sandboxthepom.xmlis non necessary anymore andbaseDircan be null. -
permission: Thecodeof an existing Entando permission. If not specified, default value is superuser -
packageName: The package that will be used. If not specified, Edo will create a package following the Entando Plugin Pattern. See Plugin mode for more details -
model/name: The name of the bean -
model/fields: The bean fields -
model/fields/name: the field name -
model/fields/type: the filed type, one of Field Data Types -
model/fields/required: whether the field is required (optional) -
model/fields/length: the field length (optional) -
model/fields/primaryKey: whether the field is the primary key (optional) -
assets/rest: whether to produce SpringMVC rest endpoints -
assets/cxf: whether to produce CXF rest endpoints -
assets/specialWidget: whether to produce the assets needed for an entando widget -
assets/internalServlet: whether to produce the assets needed to expose CRUD operations through entando internalServlet widget -
assets/adminConsole: whether to produce the assets needed for backoffice administration UI -
assets/adminConsoleProducer: [TODO] the adminConsole UI producer
- string
- int
- date
- bigdecimal
- primary_key
If no primary key is specified, by default Edo creates a id:int field and uses it as the primary key.
If you want to specify a different name for the primary key, declare it as first field with the property primaryKey: true.
If the packageName is like org.entando.entando.plugins.jp<name> than Edo applies the Entando Plugin Pattern, otherwise it will act as you are building a custom feature.
In this case, if your assets contains apache-tiles definitions make sure to register them in your web.xml
Edo creates a file like this: /WEB-INF/<projectName>/apsadmin/**tiles.xml
that must be registered in your web.xml.
Edo will overwrite any existing file, so be careful.
Only the following files won't get overwritten, because these files are meant to exist just once per Plugin:
Note: [sub-path] can be the project name or plugins/jp[beanName]
src/main/resources/api/[sub-path]/aps/apiMethods.xmlsrc/main/resources/entando-struts-plugin.xmlsrc/main/resources/component/[sub-path]/component.xmlsrc/main/resources/shortcuts/[sub-path]/apsadmin/shortcuts.xmlsrc/main/resources/sql/[sub-path]/port_data_production.sqlsrc/main/resources/sql/[sub-path]/serv_data_production.sqlsrc/main/tld/[sub-path]/name-core.tldsrc/main/webapp/WEB-INF/[sub-path]/apsadmin/tiles.xmlsrc/main/webapp/WEB-INF/[sub-path]/apsadmin/jsp/common/layouts/subMenu.jspsrc/test/resources/sql/[sub-path]/port_data_test.sqlsrc/test/resources/sql/[sub-path]/serv_data_test.sql
Given this file /tmp/edo/foo.json
{
"packageName" : "org.mycompany",
"model" : {
"name" : "Foo",
"fields" : [ {
"name" : "name",
"type" : "string",
"required" : true,
"length" : 10,
"primaryKey" : false
} ]
},
"assets" : {
"rest" : true,
"cxf" : true,
"specialWidget" : true,
"internalServlet" : true,
"adminConsole" : true,
"adminConsoleProducer" : null
}
}
$ java -jar edo-<version>.jar -f /tmp/edo/foo.json
Edo will create these files:
├── edo_20180424_135604_Foo-report.txt
└── src
├── main
│ ├── java
│ │ └── org
│ │ └── mycompany
│ │ ├── aps
│ │ │ ├── internalservlet
│ │ │ │ └── foo
│ │ │ │ ├── FooFinderFrontEndAction.java
│ │ │ │ ├── FooFrontEndAction.java
│ │ │ │ └── fooFront.xml
│ │ │ ├── system
│ │ │ │ ├── init
│ │ │ │ │ └── servdb
│ │ │ │ │ └── Foo.java
│ │ │ │ └── services
│ │ │ │ └── foo
│ │ │ │ ├── api
│ │ │ │ │ ├── FooListResponse.java
│ │ │ │ │ ├── FooListResponseResult.java
│ │ │ │ │ ├── FooResponse.java
│ │ │ │ │ ├── FooResponseResult.java
│ │ │ │ │ └── JAXBFoo.java
│ │ │ │ ├── event
│ │ │ │ │ ├── FooChangedEvent.java
│ │ │ │ │ └── FooChangedObserver.java
│ │ │ │ ├── FooDAO.java
│ │ │ │ ├── Foo.java
│ │ │ │ ├── FooManager.java
│ │ │ │ ├── FooService.java
│ │ │ │ ├── IFooDAO.java
│ │ │ │ ├── IFooManager.java
│ │ │ │ ├── IFooService.java
│ │ │ │ └── model
│ │ │ │ └── FooDto.java
│ │ │ └── tags
│ │ │ ├── FooListTag.java
│ │ │ └── FooTag.java
│ │ ├── apsadmin
│ │ │ ├── foo
│ │ │ │ ├── FooAction.java
│ │ │ │ ├── FooAction-validation.xml
│ │ │ │ ├── FooFinderAction.java
│ │ │ │ ├── foo.xml
│ │ │ │ ├── package_en.properties
│ │ │ │ └── package_it.properties
│ │ │ └── portal
│ │ │ └── specialwidget
│ │ │ └── foo
│ │ │ ├── FooConfigAction.java
│ │ │ ├── fooSpecialWidget.xml
│ │ │ ├── package_en.properties
│ │ │ └── package_it.properties
│ │ └── web
│ │ └── foo
│ │ ├── FooController.java
│ │ ├── model
│ │ │ └── FooRequest.java
│ │ └── validator
│ │ └── FooValidator.java
│ ├── resources
│ │ ├── api
│ │ │ └── 1
│ │ │ └── aps
│ │ │ └── apiMethods.xml
│ │ ├── component
│ │ │ └── 1
│ │ │ └── component.xml
│ │ ├── entando-struts-plugin.xml
│ │ ├── shortcuts
│ │ │ └── 1
│ │ │ └── apsadmin
│ │ │ └── shortcuts.xml
│ │ ├── spring
│ │ │ ├── aps
│ │ │ │ └── managers
│ │ │ │ └── 1FooManagersConfig.xml
│ │ │ └── apsadmin
│ │ │ └── 1FooActionsConfig.xml
│ │ └── sql
│ │ └── misc
│ │ └── 1
│ │ ├── port_data_production.sql
│ │ └── serv_data_production.sql
│ ├── tld
│ │ └── 1
│ │ └── 1-core.tld
│ └── webapp
│ └── WEB-INF
│ ├── 1
│ │ └── apsadmin
│ │ ├── 1-tiles.xml
│ │ └── jsp
│ │ ├── common
│ │ │ └── layouts
│ │ │ └── assets-more
│ │ │ ├── foo-entry-extras.jsp
│ │ │ ├── foo-list-extras.jsp
│ │ │ └── foo-trash-extras.jsp
│ │ ├── foo
│ │ │ ├── foo-entry.jsp
│ │ │ ├── foo-list.jsp
│ │ │ └── foo-trash.jsp
│ │ └── portal
│ │ └── specialwidget
│ │ └── foo
│ │ └── foo-config.jsp
│ └── aps
│ └── jsp
│ ├── internalservlet
│ │ └── foo
│ │ ├── frontend-foo-entry.jsp
│ │ ├── frontend-foo-error.jsp
│ │ ├── frontend-foo-list.jsp
│ │ └── frontend-foo-trash.jsp
│ └── widgets
│ └── Foo.jsp
└── test
├── java
│ └── org
│ └── mycompany
│ ├── 1ConfigTestUtils.java
│ ├── aps
│ │ ├── 1BaseTestCase.java
│ │ └── system
│ │ └── services
│ │ └── TestFooManager.java
│ └── apsadmin
│ ├── 1ApsAdminBaseTestCase.java
│ └── foo
│ ├── TestFooAction.java
│ └── TestFooFinderAction.java
└── resources
└── sql
└── misc
└── 1
├── port_data_test.sql
└── serv_data_test.sql
A lot :D
