ph-jdmc-parent-pom

Base POM to build the ph-jdmc projects

License

License

GroupId

GroupId

com.helger
ArtifactId

ArtifactId

ph-jdmc-parent-pom
Last Version

Last Version

0.0.5
Release Date

Release Date

Type

Type

pom
Description

Description

ph-jdmc-parent-pom
Base POM to build the ph-jdmc projects
Project URL

Project URL

https://github.com/phax/ph-jdmc
Project Organization

Project Organization

Philip Helger
Source Code Management

Source Code Management

http://github.com/phax/ph-jdmc

Download ph-jdmc-parent-pom

How to add to project

<!-- https://jarcasting.com/artifacts/com.helger/ph-jdmc-parent-pom/ -->
<dependency>
    <groupId>com.helger</groupId>
    <artifactId>ph-jdmc-parent-pom</artifactId>
    <version>0.0.5</version>
    <type>pom</type>
</dependency>
// https://jarcasting.com/artifacts/com.helger/ph-jdmc-parent-pom/
implementation 'com.helger:ph-jdmc-parent-pom:0.0.5'
// https://jarcasting.com/artifacts/com.helger/ph-jdmc-parent-pom/
implementation ("com.helger:ph-jdmc-parent-pom:0.0.5")
'com.helger:ph-jdmc-parent-pom:pom:0.0.5'
<dependency org="com.helger" name="ph-jdmc-parent-pom" rev="0.0.5">
  <artifact name="ph-jdmc-parent-pom" type="pom" />
</dependency>
@Grapes(
@Grab(group='com.helger', module='ph-jdmc-parent-pom', version='0.0.5')
)
libraryDependencies += "com.helger" % "ph-jdmc-parent-pom" % "0.0.5"
[com.helger/ph-jdmc-parent-pom "0.0.5"]

Dependencies

compile (1)

Group / Artifact Type Version
org.slf4j : slf4j-api jar 1.7.30

test (1)

Group / Artifact Type Version
junit : junit jar 4.13.1

Project Modules

  • ph-jdmc-core
  • ph-jdmc-example
  • ph-jdmc-maven-plugin

ph-jdmc

Status: last release is 0.0.4 (2019-11-05)

Java Domain Model Creator (jdmc). The source structure is defined in JSON, and the domain model, test classes and XML serialization for usage on the "ph-" stack is created. See the ph-jdmc-example subproject at https://github.com/phax/ph-jdmc/tree/master/ph-jdmc-example which is purely created by the unit tests of ph-jdmc-core.

The ph-jdmc-maven-plugin subproject is a Maven plugin to use JDMC in your projects.

File format

The .jdm files are JSON files having a certain predefined layout. There are two main file layouts - one for enumerations and one for classes. In both cases the basename of the file determines the destination class name. So the filename Age.jdm creates either an enum Age or a class Age.

Enum file format

A simple enumeration with three entries can be defined like this:

{
  "RED" : "r",
  "GREEN" : "g",
  "BLUE" : "b"
}

This defines an enum with the enumeration constants RED, GREEN and BLUE. The strings on the right side define the internal ID of the object. So enumeration constant RED has the internal ID r, BLUE has b etc.

The created class looks like this assuming the file was labeled EDemo1.jdm:

public enum EDemo1
  implements IHasID<String> , IHasDisplayName
{
  RED("r", "r"),
  GREEN("g", "g"),
  BLUE("b", "b");
  private final String m_sID;
  private final String m_sDisplayName;

  private EDemo1(@Nonnull @Nonempty final String sID, @Nonnull @Nonempty final String sDisplayName) {
    m_sID = sID;
    m_sDisplayName = sDisplayName;
  }

  @Nonnull
  @Nonempty
  public String getID() {
    return m_sID;
  }

  @Nonnull
  @Nonempty
  public String getDisplayName() {
    return m_sDisplayName;
  }

  @Nullable
  public static EDemo1 getFromIDOrNull(@Nullable final String sID) {
    return EnumHelper.getFromIDOrNull(EDemo1 .class, sID);
  }

  @Nullable
  public static EDemo1 getFromIDOrDefault(@Nullable final String sID, @Nullable final EDemo1 eDefault) {
    return EnumHelper.getFromIDOrDefault(EDemo1 .class, sID, eDefault);
  }

  @Nonnull
  public static EDemo1 getFromIDOrThrow(@Nullable final String sID) {
    return EnumHelper.getFromIDOrThrow(EDemo1 .class, sID);
  }
}

Instead of just a simple ID (the string "r" in the above example) also a more sophisticated information can be provided. When using a JSON array, the first entry is the internal ID, the second String is the "display name" associated with the entry, and the third entry is the source code comment. If the array has one entry, the internal ID and the display name contain this value, but no comment is used. If the array has two entries, the internal ID and the display name are, whereas the comment still stays empty. If the array has more than three entries, the values are ignored. Of course the definitions can be mixed between the different enum constants, so one entry can only have the ID, whereas another entry can have the internal ID, a display name and a comment.

So the following example is a valid enumeration definition:

{
  "ALPHA" : "a",
  "RED" : [ "r" ],
  "GREEN" : [ "g", "green", "The green part." ],
  "BLUE" :  [ "b", "blue" ]
}

Alternatively an object can be used to describe the same values in a more explicit way (since v0.0.4):

{
  "ALPHA" : { "id": "a" },
  "RED" :   {},
  "GREEN" : { "id": "g", "name": "green", "comment": "The green part." },
  "BLUE" :  [ "id": "b", "name": "blue" }
}

The created code looks as follows, assuming the definition was in file EDemo2.jdm. Note: The common parts (starting after the constructor) where omitted because it is identical to the previous example:

public enum EDemo2
  implements IHasID<String> , IHasDisplayName
{
  ALPHA("a", "a"),
  RED("r", "r"),

  /**
   * The green part.
   */
  GREEN("g", "green"),
  BLUE("b", "blue");
  private final String m_sID;
  private final String m_sDisplayName;

  private EDemo2(@Nonnull @Nonempty final String sID, @Nonnull @Nonempty final String sDisplayName) {
    m_sID = sID;
    m_sDisplayName = sDisplayName;
  }
  ...
}

News and noteworthy

  • v0.0.5 - 2021-03-22
    • Updated to ph-commons 10
  • v0.0.4 - 2019-11-05
    • Updated to ph-oton 8.2.0
    • Maven plugin parameter createManager is now set correctly
    • Allowing for JSON Object for enum and class members
    • Added new JDMProcessor.reader() to allow for forward reference resolution
  • v0.0.3 - 2019-02-11
    • Added the possibility to create self referencing types (optional only)
    • Added base types char and Character as numeric types
    • Added per-field settings (currently on businessObjectReference for XML serialization only)
  • v0.0.2 - 2019-02-02
    • Fixed the code generation for serialization of optional primitive types (e.g. int?)
  • v0.0.1 - 2019-01-24
    • Initial code generation

My personal Coding Styleguide | On Twitter: @philiphelger | Kindly supported by YourKit Java Profiler

Versions

Version
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1