Dieser Showcase soll den lesenden Zugriff auf ein Excel-Workbook darstellen. Die darin enthaltenen Daten sollen als Objekte dem umgebenden System bereitgestellt werden. Das betreffende Workbook besteht hierbei aus den folgenden 4 einzelnen Blättern:
- Stammdaten
- Bestellpositionen
- Rechnungsadresse
- Lieferadresse
Um die Daten adäquat abzubilden, sind zunächst die benötigten Transportobjekte zu definieren:
- Customer.java
public class Customer {
private String kundennummer;
private String anrede;
private String vorname;
private String nachname;
private String strasse;
private String hausnummer;
private String postleitzahl;
private String ort;
// + getter und setter
}
- Orderitem.java
public class Orderitem {
private Long lfdNr;
private String artikelnummer;
private String artikelbezeichnung;
private Double einzelpreis;
private Long menge;
private Double gesamtpreis;
// + getter und setter
}
- Address.java
public class Address {
private String vorname;
private String nachname;
private String strasse;
private String hausnummer;
private String postleitzahl;
private String ort;
// + getter und setter
}
- BillingAddress.java
public class BillingAddress extends Address {}
- ShippingAddress.java
public class ShippingAddress extends Address {}
Für die Erzeugung von Orderitems nutzen wir eine Factory-Klasse:
- OrderitemFactory.java
public class OrderitemFactory {
public Orderitem createNew() {
return new Orderitem();
}
}
Danach kann in einer separaten Textdatei (Showcase.odsl) die DSL-Operationen beschrieben werden:
Stammdaten:
Für jedes Blatt 'Stammdaten'
in Datei ${dateiname}
führe aus
${customer}.Kundennummer = G6;
${customer}.Anrede = G8;
${customer}.Vorname = G9;
${customer}.Nachname = G10;
${customer}.Strasse = G12;
${customer}.Hausnummer = G13;
${customer}.Postleitzahl = G14;
${customer}.Ort = G15;
Bestellpositionen:
Für jede Zeile bei der Zeilennummer größer als 5
und E ist nicht leer
und F ist nicht leer
und H ist nicht leer
und I ist nicht leer
in Blatt 'Bestellung'
in Datei ${dateiname}
führe aus
${bestellposition} = ${orderitem}.createNew();
${bestellposition}.LfdNr = E;
${bestellposition}.Artikelnummer = F;
${bestellposition}.Artikelbezeichnung = G;
${bestellposition}.Einzelpreis = H;
${bestellposition}.Menge = I;
${bestellposition}.Gesamtpreis = J;
${orderitems}.add( ${bestellposition} );
Rechnungsadresse:
Für jedes Blatt 'Rechnungsadresse'
in Datei ${dateiname}
führe aus
${billingaddress}.Vorname = G5;
${billingaddress}.Nachname = G6;
${billingaddress}.Strasse = G8;
${billingaddress}.Hausnummer = G9;
${billingaddress}.Postleitzahl = G10;
${billingaddress}.Ort = G11;
Lieferadresse:
Für jedes Blatt 'Lieferadresse'
in Datei ${dateiname}
führe aus
${shippingaddress}.Vorname = G5;
${shippingaddress}.Nachname = G6;
${shippingaddress}.Strasse = G8;
${shippingaddress}.Hausnummer = G9;
${shippingaddress}.Postleitzahl = G10;
${shippingaddress}.Ort = G11;
Nun kann der Zugriff auf das Excel-Workbook erfolgen.
String filename = ".\\Excel Showcase.xlsx";
OperationDsl dsl = new OperationDsl();
ExcelPlugin excel = new ExcelPlugin();
FilePlugin file = new FilePlugin();
dsl.addPlugin(excel);
dsl.addPlugin(file);
Customer customer = new Customer();
List<Orderitem> orderitems = new LinkedList<Orderitem>();
BillingAddress billingAddress = new BillingAddress();
ShippingAddress shippingAddress = new ShippingAddress();
DslContext context = new DslContext();
context.addExternalParameter("dateiname", filename);
context.addExternalParameter("customer", customer);
context.addExternalParameter("orderitems", orderitems);
context.addExternalParameter("orderitem", new OrderitemFactory());
context.addExternalParameter("shippingaddress", shippingAddress);
context.addExternalParameter("billingaddress", billingAddress);
DslExpressions readOrder = dsl.parseFile("ShowCase.odsl", Locale.GERMAN);
readOrder.execute(context);
// Ab hier stehen die Daten in den Transportobjekten zur Verfügung
...