Skip to content

Latest commit

History

149 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Coverage StatusStories in Ready

lightblue-java-generator

Generate lightblue metadata from java classes.

Given this:

@Version(value = "1.0.0", changelog = "Do some stuff")
staticclassUser {
privateString_id;
privateStringfirstName;
privateStringlastName;
privateDatelastUpdateDate;
privateDatebirthdate;
privateList<Address> addresses;
privatePhoneNumberphoneNumber;
privatePhoneNumberfaxNumber;
privateStatusstatus;
publicStringget_id() {
return_id;
}
@Identity@IntSequence(name = "userIdSequence")
publicvoidset_id(String_id) {
this._id = _id;
}
publicStringgetFirstName() {
returnfirstName;
}
@Required@MinLength(2)
publicvoidsetFirstName(StringfirstName) {
this.firstName = firstName;
}
publicStringgetLastName() {
returnlastName;
}
publicvoidsetLastName(StringlastName) {
this.lastName = lastName;
}
publicDategetLastUpdateDate() {
returnlastUpdateDate;
}
@Required@CurrentTime(overwrite = true)
publicvoidsetLastUpdateDate(DatelastUpdateDate) {
this.lastUpdateDate = lastUpdateDate;
}
publicDategetBirthdate() {
returnbirthdate;
}
publicvoidsetBirthdate(Datebirthdate) {
this.birthdate = birthdate;
}
publicList<Address> getAddresses() {
returnaddresses;
}
@MinItems(1)
publicvoidsetAddresses(List<Address> addresses) {
this.addresses = addresses;
}
publicPhoneNumbergetPhoneNumber() {
returnphoneNumber;
}
publicvoidsetPhoneNumber(PhoneNumberphoneNumber) {
this.phoneNumber = phoneNumber;
}
publicPhoneNumbergetFaxNumber() {
returnfaxNumber;
}
publicvoidsetFaxNumber(PhoneNumberfaxNumber) {
this.faxNumber = faxNumber;
}
publicStatusgetStatus() {
returnstatus;
}
@RequiredpublicvoidsetStatus(Statusstatus) {
this.status = status;
}
enumStatus {
enabled,
@Description("Use instead of deleting users")
disabled;
}
staticclassAddress {
privateStringusage;
privateStringaddress1;
privateStringaddress2;
privateintpostalCode;
privateStringcity;
privateStatestate;
privateStringuuid;
publicStringgetUuid() {
returnuuid;
}
@ElementIdentity@UuidpublicvoidsetUuid(Stringuuid) {
this.uuid = uuid;
}
publicStringgetUsage() {
returnusage;
}
publicvoidsetUsage(Stringusage) {
this.usage = usage;
}
publicStringgetAddress1() {
returnaddress1;
}
@RequiredpublicvoidsetAddress1(Stringaddress1) {
this.address1 = address1;
}
publicStringgetAddress2() {
returnaddress2;
}
publicvoidsetAddress2(Stringaddress2) {
this.address2 = address2;
}
publicintgetPostalCode() {
returnpostalCode;
}
@RequiredpublicvoidsetPostalCode(intpostalCode) {
this.postalCode = postalCode;
}
publicStringgetCity() {
returncity;
}
@RequiredpublicvoidsetCity(Stringcity) {
this.city = city;
}
publicStategetState() {
returnstate;
}
@RequiredpublicvoidsetState(Statestate) {
this.state = state;
}
staticclassState {
privateStringcode;
privateStringname;
publicStringgetCode() {
returncode;
}
@RequiredpublicvoidsetCode(Stringcode) {
this.code = code;
}
publicStringgetName() {
returnname;
}
publicvoidsetName(Stringname) {
this.name = name;
}
}
}
staticclassPhoneNumber {
privateintareaCode;
privateintdigits;
publicintgetAreaCode() {
returnareaCode;
}
@RequiredpublicvoidsetAreaCode(intareaCode) {
this.areaCode = areaCode;
}
publicintgetDigits() {
returndigits;
}
@RequiredpublicvoidsetDigits(intdigits) {
this.digits = digits;
}
}
}

Get this:

{
"entityInfo": {
"enums": [
{
"annotatedValues": [
{
"description": "Use instead of deleting users",
"name": "disabled"
},
{
"description": null,
"name": "enabled"
}
],
"name": "status",
"values": [
"disabled",
"enabled"
]
}
],
"name": "user"
},
"schema": {
"access": {
"delete": [],
"find": [],
"insert": [],
"update": []
},
"fields": {
"_id": {
"constraints": {
"identity": true
},
"description": null,
"type": "string",
"valueGenerator": {
"configuration": {
"name": "userIdSequence"
},
"type": "IntSequence"
}
},
"addresses": {
"constraints": {
"minItems": 1
},
"description": null,
"items": {
"fields": {
"address1": {
"constraints": {
"required": true
},
"description": null,
"type": "string"
},
"address2": {
"description": null,
"type": "string"
},
"city": {
"constraints": {
"required": true
},
"description": null,
"type": "string"
},
"postalCode": {
"constraints": {
"required": true
},
"description": null,
"type": "integer"
},
"state": {
"constraints": {
"required": true
},
"description": null,
"fields": {
"code": {
"constraints": {
"required": true
},
"description": null,
"type": "string"
},
"name": {
"description": null,
"type": "string"
}
},
"type": "object"
},
"usage": {
"description": null,
"type": "string"
},
"uuid": {
"constraints": {
"element-identity": true
},
"description": null,
"type": "string",
"valueGenerator": {
"type": "UUID"
}
}
},
"type": "object"
},
"type": "array"
},
"birthdate": {
"description": null,
"type": "date"
},
"faxNumber": {
"description": null,
"fields": {
"areaCode": {
"constraints": {
"required": true
},
"description": null,
"type": "integer"
},
"digits": {
"constraints": {
"required": true
},
"description": null,
"type": "integer"
}
},
"type": "object"
},
"firstName": {
"constraints": {
"minLength": 2,
"required": true
},
"description": null,
"type": "string"
},
"lastName": {
"description": null,
"type": "string"
},
"lastUpdateDate": {
"constraints": {
"required": true
},
"description": null,
"type": "date",
"valueGenerator": {
"overwrite": true,
"type": "CurrentTime"
}
},
"phoneNumber": {
"description": null,
"fields": {
"areaCode": {
"constraints": {
"required": true
},
"description": null,
"type": "integer"
},
"digits": {
"constraints": {
"required": true
},
"description": null,
"type": "integer"
}
},
"type": "object"
},
"status": {
"constraints": {
"enum": "status",
"required": true
},
"description": null,
"type": "string"
}
},
"name": "user",
"status": {
"value": "active"
},
"version": {
"changelog": "Do some stuff",
"value": "1.0.0"
}
}
}

status

  • simple fields
  • object fields
  • array fields
  • constraints (see #1)
  • references (see #3)
  • versions (see #2)
  • enums (see #5)
  • generators (see #6)
  • element identity
  • generate java from metadata (see #4). This is lowest priority since java to metadata is lossy therefore going the other direction will require a small amount of "magic" to compute that missing information. For this reason I think it's better to simply use Java classes as the starting point / source of truth since they're much easier to write, usable in other code, and retain more information.

About

Experimenting with generating lightblue metadata from java classes and vice versa

Resources

Stars

5 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages