entity BuchungskreiseF
(id=bkrId sequenceName=BKR_SEQ) {
}
TABLE BUCHUNGSKREISE_F
ID NAME PROP1 DATE ATTR1
ID NAME PROP1 DATE ATTR1
ID NAME PROP1 DATE ATTR1
ID NAME PROP1 DATE ATTR1
ID NAME PROP1 DATE ATTR1
ID NAME PROP1 DATE ATTR1
ID NAME PROP1 DATE ATTR1
ID NAME PROP1 DATE ATTR1
Database Schema
Number of Characters (Domain model DSL)
30.000 (DSL)
+ 50.000 (code generator)
With DSL
+ 170 / Entity
7000 / Entity
Without DSL
300 TZ
240 TZ
11 Entities
180 TZ
120 TZ
60 TZ
0 TZ
0 20 40
Views
public class PersonenForm extends
Form<Personen> {
public class PersonenForm extends
Form<Personen> {
public class PersonenForm extends
Form<Personen> {
public class PersonenHauptSubForm extends
SubForm<Personen> {
public class PersonenForm extends
Form<Personen> {
public class PersonenHauptSubForm extends
SubForm<Personen> {
public class PersonenForm extends
Form<Personen> {
public class PersonenHauptSubForm extends
SubForm<Personen> {
private JComponent
vornameTextField;
public class PersonenForm extends
Form<Personen> {
public class PersonenHauptSubForm extends
SubForm<Personen> {
private JComponent
vornameTextField;
public class PersonenForm extends
Form<Personen> {
public class PersonenHauptSubForm extends
SubForm<Personen> {
@Override
protected void initComponents() {
...
vornameTextField =
builder.createTextField(desc.vorname(),
private JComponent
vornameTextField;
Editable.PROPERTY_DEFAULT,
MANDATORY);
gepardBuilder.setNoLeadingBlanks
(vornameTextField);
public class PersonenForm extends
Form<Personen> {
public class PersonenHauptSubForm extends
SubForm<Personen> {
@Override
protected void initComponents() {
...
vornameTextField =
private JComponent
builder.createTextField(desc.vorname(),
vornameTextField;
Editable.PROPERTY_DEFAULT,
MANDATORY);
gepardBuilder.setNoLeadingBlanks
(vornameTextField);
Why not GUI-Builder?
• No control over generated
code
• Too many details
• Do not directly leverage
information from the domain
models
Graphical GUI-DSL with GMF
Graphical GUI-DSL with GMF
ID NAME PROP1 DATE ATTR1
ID NAME PROP1 DATE ATTR1
Referencing
ID NAME PROP1 DATE ATTR1
ID NAME PROP1 DATE ATTR1
ID NAME PROP1 DATE ATTR1
ID NAME PROP1 DATE ATTR1
ID NAME PROP1 DATE ATTR1
ID NAME PROP1 DATE ATTR1
model : gepard;
import \"platform:/resource/com.affichage.it21.gp.dao/src/main/model/types.dao\"
com.affichage.it21.gp.dao {
flaechen {
readOnly entity WaehrungF (id =(rvLowValue)) {
}
readOnly entity GepardVerwendungPvF (id =(pvOid)) {
temporal manyToOne GeschpartnerAllBsF geschpartner (joinColum
}
}
verkauf {
readOnly entity GepardVerwendungKdvtF (id =(kdvtId)) {
temporal notNull manyToOne GeschpartnerAllBsF geschpartner (j
notNull Number istLangfrist (castTo=Boolean)
notNull Number istLokaldispo (castTo=Boolean)
}
}
gepard {
readOnly entity AbcKundenF (id = (rvLowValue)) {
Validation
addValidator(new Validator<Institutionen>() {
@Override
public ValidationResult validate(final Institutionen institution) {
final ValidationResult result = new ValidationResult();
if (institution != null
&& institution.getEsrNr() != null
&& !CheckUtils.checkPcKontoNrPruefziffer(
Long.parseLong(institution.getEsrNr())) {
result.add(new SimpleValidationMessage(
getResourceMap().getString(\"validation.esr.msg\"),
Severity.ERROR, getModel(Institutionen.DESC.esrNr())));
}
return result;
}
});
Eliminate framework code
addValidator(new Validator<Institutionen>() {
@Override
public ValidationResult validate(final Institutionen institution) {
final ValidationResult result = new ValidationResult();
if (institution != null
&& institution.getEsrNr() != null
&& !CheckUtils.checkPcKontoNrPruefziffer(
Long.parseLong(institution.getEsrNr())) {
result.add(new SimpleValidationMessage(
getResourceMap().getString(\"validation.esr.msg\"),
Severity.ERROR, getModel(Institutionen.DESC.esrNr())));
}
return result;
}
});
Eliminate framework code
Avoid repetitive null pointer checks
addValidator(new Validator<Institutionen>() {
@Override
public ValidationResult validate(final Institutionen institution) {
final ValidationResult result = new ValidationResult();
if (institution != null
&& institution.getEsrNr() != null
&& !CheckUtils.checkPcKontoNrPruefziffer(
Long.parseLong(institution.getEsrNr())) {
result.add(new SimpleValidationMessage(
getResourceMap().getString(\"validation.esr.msg\"),
Severity.ERROR, getModel(Institutionen.DESC.esrNr())));
}
return result;
}
});
Eliminate framework code
Avoid repetitive null pointer checks
Use static imports
addValidator(new Validator<Institutionen>() {
@Override
public ValidationResult validate(final Institutionen institution) {
final ValidationResult result = new ValidationResult();
if (institution != null
&& institution.getEsrNr() != null
&& !CheckUtils.checkPcKontoNrPruefziffer(
Long.parseLong(institution.getEsrNr())) {
result.add(new SimpleValidationMessage(
getResourceMap().getString(\"validation.esr.msg\"),
Severity.ERROR, getModel(Institutionen.DESC.esrNr())));
}
return result;
}
});
Eliminate framework code
Avoid repetitive null pointer checks
Use static imports
Use and define library methods
addValidator(new Validator<Institutionen>() {
@Override
public ValidationResult validate(final Institutionen institution) {
final ValidationResult result = new ValidationResult();
if (institution != null
&& institution.getEsrNr() != null
&& !CheckUtils.checkPcKontoNrPruefziffer(
Long.parseLong(institution.getEsrNr())) {
result.add(new SimpleValidationMessage(
error(\"validation.esr.msg\", desc.esrNr());
getResourceMap().getString(\"validation.esr.msg\"),
Severity.ERROR, getModel(Institutionen.DESC.esrNr())));
}
return result;
}
});
Internal DSL in Java
@Check
void checkEsrMsg() {
if (!checkKontoNrPruefziffer(parseLong(_this.getEsrNr())))
error(\"validation.esr.msg\",desc.esrNr());
}
• Junit-like
• catches null pointer exceptions
0 comments
Post a comment