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

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

 

 

 

 

...