From 2a8b2332a0a281ca2ae3e011362f454d8f526adb Mon Sep 17 00:00:00 2001
From: Martin Goik <goik@hdm-stuttgart.de>
Date: Fri, 12 Jun 2015 09:31:00 +0200
Subject: [PATCH] Exercise relating employees to companies writing XML data to
 a RDBMS.

---
 Exam/Sda1/EmployeeCompany/Skeleton/.gitignore |  4 +
 .../EmployeeCompany/Skeleton/employee.xml     |  0
 Exam/Sda1/EmployeeCompany/Skeleton/pom.xml    | 99 +++++++++++++++++++
 .../mi/sd1/employeecompany/Xml2Rdbms.java     | 37 +++++++
 .../Skeleton/src/main/resources/company.xsd   | 50 ++++++++++
 .../Skeleton/src/main/resources/employees.xml | 33 +++++++
 .../Skeleton/src/main/resources/log4j2.xml    | 21 ++++
 Exam/Sda1/EmployeeCompany/Solution/.gitignore |  4 +
 Exam/Sda1/EmployeeCompany/Solution/pom.xml    | 99 +++++++++++++++++++
 .../mi/sd1/employeecompany/Xml2Rdbms.java     | 94 ++++++++++++++++++
 .../Solution/src/main/resources/company.xsd   | 50 ++++++++++
 .../Solution/src/main/resources/employees.xml | 33 +++++++
 .../Solution/src/main/resources/log4j2.xml    | 21 ++++
 .../Solution/src/main/resources/schema.sql    | 28 ++++++
 Exam/Sda1/EmployeeCompany/description.html    | 41 ++++++++
 15 files changed, 614 insertions(+)
 create mode 100644 Exam/Sda1/EmployeeCompany/Skeleton/.gitignore
 create mode 100644 Exam/Sda1/EmployeeCompany/Skeleton/employee.xml
 create mode 100644 Exam/Sda1/EmployeeCompany/Skeleton/pom.xml
 create mode 100644 Exam/Sda1/EmployeeCompany/Skeleton/src/main/java/de/hdm_stuttgart/mi/sd1/employeecompany/Xml2Rdbms.java
 create mode 100644 Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/company.xsd
 create mode 100644 Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/employees.xml
 create mode 100644 Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/log4j2.xml
 create mode 100644 Exam/Sda1/EmployeeCompany/Solution/.gitignore
 create mode 100644 Exam/Sda1/EmployeeCompany/Solution/pom.xml
 create mode 100644 Exam/Sda1/EmployeeCompany/Solution/src/main/java/de/hdm_stuttgart/mi/sd1/employeecompany/Xml2Rdbms.java
 create mode 100644 Exam/Sda1/EmployeeCompany/Solution/src/main/resources/company.xsd
 create mode 100644 Exam/Sda1/EmployeeCompany/Solution/src/main/resources/employees.xml
 create mode 100644 Exam/Sda1/EmployeeCompany/Solution/src/main/resources/log4j2.xml
 create mode 100644 Exam/Sda1/EmployeeCompany/Solution/src/main/resources/schema.sql
 create mode 100644 Exam/Sda1/EmployeeCompany/description.html

diff --git a/Exam/Sda1/EmployeeCompany/Skeleton/.gitignore b/Exam/Sda1/EmployeeCompany/Skeleton/.gitignore
new file mode 100644
index 000000000..a1c3ab4d0
--- /dev/null
+++ b/Exam/Sda1/EmployeeCompany/Skeleton/.gitignore
@@ -0,0 +1,4 @@
+/target/
+/.settings/
+.classpath
+.project
diff --git a/Exam/Sda1/EmployeeCompany/Skeleton/employee.xml b/Exam/Sda1/EmployeeCompany/Skeleton/employee.xml
new file mode 100644
index 000000000..e69de29bb
diff --git a/Exam/Sda1/EmployeeCompany/Skeleton/pom.xml b/Exam/Sda1/EmployeeCompany/Skeleton/pom.xml
new file mode 100644
index 000000000..75513cf56
--- /dev/null
+++ b/Exam/Sda1/EmployeeCompany/Skeleton/pom.xml
@@ -0,0 +1,99 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>de.hdm-stuttgart.mi.sd1</groupId>
+	<artifactId>employeecompany</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<packaging>jar</packaging>
+
+	<name>employeecompany</name>
+
+	<!--Fixme: Add a sensible project related domain here -->
+	<url>http://somedomain.org</url>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+
+	<dependencies>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.11</version>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-api</artifactId>
+			<version>2.1</version>
+		</dependency>
+
+		<dependency>
+			<groupId>mysql</groupId>
+			<artifactId>mysql-connector-java</artifactId>
+			<version>5.1.35</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.jdom</groupId>
+			<artifactId>jdom2</artifactId>
+			<version>2.0.6</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-core</artifactId>
+			<version>2.1</version>
+		</dependency>
+
+	</dependencies>
+
+	<build>
+		<plugins>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.1</version>
+				<configuration>
+					<source>1.8</source>
+					<target>1.8</target>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-javadoc-plugin</artifactId>
+				<version>2.10.1</version>
+				<configuration />
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-shade-plugin</artifactId>
+				<version>2.3</version>
+				<configuration>
+					<transformers>
+						<transformer
+							implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+							<manifestEntries>
+								<Main-Class>de.hdm_stuttgart.mi.sd1.employeecompany.App</Main-Class>
+							</manifestEntries>
+						</transformer>
+					</transformers>
+				</configuration>
+				<executions>
+					<execution>
+						<phase>package</phase>
+						<goals>
+							<goal>shade</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+		</plugins>
+	</build>
+</project>
diff --git a/Exam/Sda1/EmployeeCompany/Skeleton/src/main/java/de/hdm_stuttgart/mi/sd1/employeecompany/Xml2Rdbms.java b/Exam/Sda1/EmployeeCompany/Skeleton/src/main/java/de/hdm_stuttgart/mi/sd1/employeecompany/Xml2Rdbms.java
new file mode 100644
index 000000000..e2eef25da
--- /dev/null
+++ b/Exam/Sda1/EmployeeCompany/Skeleton/src/main/java/de/hdm_stuttgart/mi/sd1/employeecompany/Xml2Rdbms.java
@@ -0,0 +1,37 @@
+package de.hdm_stuttgart.mi.sd1.employeecompany;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+import org.jdom2.Document;
+import org.jdom2.JDOMException;
+import org.jdom2.input.SAXBuilder;
+
+public class Xml2Rdbms {
+
+   static Connection conn;
+
+   static void connect() throws SQLException {
+      conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/hdm", "hdmuser", "XYZ");
+   }
+   
+   /**
+     * @param args Unused
+     * @throws IOException 
+     * @throws JDOMException 
+     * @throws SQLException 
+     */
+    public static void main( String[] args ) throws JDOMException, IOException, SQLException {
+
+       connect();
+       
+       final SAXBuilder builder = new SAXBuilder();
+       
+       final Document doc = builder.build("src/main/resources/employees.xml");
+       
+       // TODO: Process the XML doc and create database INSERT statements. 
+
+    }    
+}
diff --git a/Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/company.xsd b/Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/company.xsd
new file mode 100644
index 000000000..2ef1ee3ed
--- /dev/null
+++ b/Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/company.xsd
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+    
+    
+    <xs:element name="name" type="xs:string"/>
+    <xs:element name="category" type="xs:string"/>
+    <xs:element name="commonName" type="xs:string"/>
+    <xs:element name="email" type="xs:string"/>
+    
+    <xs:element name="employee">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="commonName"/>
+                <xs:element ref="email" minOccurs="0"/>
+            </xs:sequence>
+            <xs:attribute name="id" type="xs:int" use="required"/>
+        </xs:complexType>
+    </xs:element>
+    
+    <xs:element name="employees" >
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="employee"  minOccurs="0" maxOccurs="unbounded"/>
+            </xs:sequence>
+        </xs:complexType>
+        <xs:unique name="uniqueEmployeeId">
+            <xs:selector xpath="employee"/>
+            <xs:field xpath="@id"/>
+        </xs:unique>
+    </xs:element>
+    
+    <xs:element name="company">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="name"/>
+                <xs:element ref="category"/>
+                <xs:element ref="employees"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+    
+    <xs:element name="top">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="company" minOccurs="0" maxOccurs="unbounded"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+    
+</xs:schema>
diff --git a/Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/employees.xml b/Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/employees.xml
new file mode 100644
index 000000000..71901ba42
--- /dev/null
+++ b/Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/employees.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<top xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="company.xsd">
+    
+    <company>
+        <name>John &amp; sons</name>
+        <category>Coal and gas</category>
+        <employees>
+            <employee id="2334">
+                <commonName>Andrew Wilkins</commonName>
+                <email>wilkins@hotspot.com</email>
+            </employee>
+            <employee id="5512">
+                <commonName>John Oats</commonName>
+                <email>wilkins@hotspot.com</email>
+            </employee>
+        </employees>
+    </company>
+    
+    <company>
+        <name>Sinister ways</name>
+        <category>Film and performance artists</category>
+        <employees>
+            <employee id="2234">
+                <commonName>Florence Ambler</commonName>
+            </employee>
+            <employee id="7712">
+                <commonName>Kim Anderson</commonName>
+            </employee>
+        </employees>
+    </company>
+    
+</top>
\ No newline at end of file
diff --git a/Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/log4j2.xml b/Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/log4j2.xml
new file mode 100644
index 000000000..276bc7c62
--- /dev/null
+++ b/Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/log4j2.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration>
+    <Appenders>
+        <File name="A1" fileName="A1.log" append="false">
+            <PatternLayout pattern="%t %-5p %c{2} - %m%n"/>
+        </File>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
+        </Console>
+    </Appenders>
+    <Loggers>
+
+        <!-- You my want to define class or package level per-logger rules -->
+        <Logger name="de.hdm_stuttgart.mi.sd1.employeecompany.App" level="debug">
+            <AppenderRef ref="A1"/>
+        </Logger>
+        <Root level="info">
+            <AppenderRef ref="STDOUT"/>
+        </Root>
+    </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/Exam/Sda1/EmployeeCompany/Solution/.gitignore b/Exam/Sda1/EmployeeCompany/Solution/.gitignore
new file mode 100644
index 000000000..a1c3ab4d0
--- /dev/null
+++ b/Exam/Sda1/EmployeeCompany/Solution/.gitignore
@@ -0,0 +1,4 @@
+/target/
+/.settings/
+.classpath
+.project
diff --git a/Exam/Sda1/EmployeeCompany/Solution/pom.xml b/Exam/Sda1/EmployeeCompany/Solution/pom.xml
new file mode 100644
index 000000000..75513cf56
--- /dev/null
+++ b/Exam/Sda1/EmployeeCompany/Solution/pom.xml
@@ -0,0 +1,99 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>de.hdm-stuttgart.mi.sd1</groupId>
+	<artifactId>employeecompany</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<packaging>jar</packaging>
+
+	<name>employeecompany</name>
+
+	<!--Fixme: Add a sensible project related domain here -->
+	<url>http://somedomain.org</url>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+
+	<dependencies>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.11</version>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-api</artifactId>
+			<version>2.1</version>
+		</dependency>
+
+		<dependency>
+			<groupId>mysql</groupId>
+			<artifactId>mysql-connector-java</artifactId>
+			<version>5.1.35</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.jdom</groupId>
+			<artifactId>jdom2</artifactId>
+			<version>2.0.6</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-core</artifactId>
+			<version>2.1</version>
+		</dependency>
+
+	</dependencies>
+
+	<build>
+		<plugins>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.1</version>
+				<configuration>
+					<source>1.8</source>
+					<target>1.8</target>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-javadoc-plugin</artifactId>
+				<version>2.10.1</version>
+				<configuration />
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-shade-plugin</artifactId>
+				<version>2.3</version>
+				<configuration>
+					<transformers>
+						<transformer
+							implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+							<manifestEntries>
+								<Main-Class>de.hdm_stuttgart.mi.sd1.employeecompany.App</Main-Class>
+							</manifestEntries>
+						</transformer>
+					</transformers>
+				</configuration>
+				<executions>
+					<execution>
+						<phase>package</phase>
+						<goals>
+							<goal>shade</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+		</plugins>
+	</build>
+</project>
diff --git a/Exam/Sda1/EmployeeCompany/Solution/src/main/java/de/hdm_stuttgart/mi/sd1/employeecompany/Xml2Rdbms.java b/Exam/Sda1/EmployeeCompany/Solution/src/main/java/de/hdm_stuttgart/mi/sd1/employeecompany/Xml2Rdbms.java
new file mode 100644
index 000000000..24d5935f9
--- /dev/null
+++ b/Exam/Sda1/EmployeeCompany/Solution/src/main/java/de/hdm_stuttgart/mi/sd1/employeecompany/Xml2Rdbms.java
@@ -0,0 +1,94 @@
+package de.hdm_stuttgart.mi.sd1.employeecompany;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.util.List;
+
+import org.jdom2.Document;
+import org.jdom2.Element;
+import org.jdom2.JDOMException;
+import org.jdom2.input.SAXBuilder;
+
+
+/**
+ * A simple http://logging.apache.org/log4j/2.x demo,
+ *  see file log4j2.xml for configuration options.
+ * 
+ */
+public class Xml2Rdbms {
+
+   static Connection conn = null;
+   
+   /**
+     * @param args Unused
+     * @throws IOException 
+     * @throws JDOMException 
+     * @throws SQLException 
+     */
+    public static void main( String[] args ) throws JDOMException, IOException, SQLException {
+       connect();
+       
+       final SAXBuilder builder = new SAXBuilder();
+       
+       final Document doc = builder.build("src/main/resources/employees.xml");
+       final Element top = doc.getRootElement();
+       
+       processCompanys(top.getChildren());
+       
+       conn.close();
+    }
+    
+    static void connect() throws SQLException {
+       conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/hdm", "hdmuser", "XYZ");
+    }
+    static void disConnect() throws SQLException {
+       conn.close();
+    }
+    
+    static void processCompanys(final List<Element> companies) throws SQLException {
+       
+       try (final PreparedStatement insert = conn.prepareStatement(
+             "INSERT INTO Company VALUES(?, ?, ?)")) {
+          final int                      ID_IDX = 1,
+                                            NAME_IDX = 2,
+                                               CATEGORY_IDX = 3;
+          
+          for (int i = 0; i < companies.size(); i++) {
+             
+             final int companyId = i + 1;
+             
+             final Element company = companies.get(i);
+             insert.setInt(ID_IDX, companyId);
+             insert.setString(NAME_IDX, company.getChildText("name"));
+             insert.setString(CATEGORY_IDX, company.getChildText("category"));
+             
+             insert.executeUpdate();
+             
+             processEmployees(companyId, company.getChild("employees").getChildren());
+          }
+       }
+    }
+    
+    static void processEmployees(final int companyId, final List<Element> employees) throws SQLException {
+       try (final PreparedStatement insert = conn.prepareStatement(
+             "INSERT INTO Employee VALUES(?, ?, ?, ?)")) {
+          final int                       ID_IDX = 1,
+                                             COMPANY_IDX = 2,
+                                                COMMONNAME_IDX = 3,
+                                                   EMAIL_IDX = 4;
+          
+          for (final Element e: employees) {
+             insert.setInt(ID_IDX, Integer.parseInt(e.getAttributeValue("id")));
+             insert.setInt(COMPANY_IDX, companyId);
+             insert.setString(COMMONNAME_IDX, e.getChildText("commonName"));
+             insert.setString(EMAIL_IDX, e.getChildText("email"));
+             
+             insert.executeUpdate();
+          }
+       }
+    }
+    
+}
diff --git a/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/company.xsd b/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/company.xsd
new file mode 100644
index 000000000..2ef1ee3ed
--- /dev/null
+++ b/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/company.xsd
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+    
+    
+    <xs:element name="name" type="xs:string"/>
+    <xs:element name="category" type="xs:string"/>
+    <xs:element name="commonName" type="xs:string"/>
+    <xs:element name="email" type="xs:string"/>
+    
+    <xs:element name="employee">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="commonName"/>
+                <xs:element ref="email" minOccurs="0"/>
+            </xs:sequence>
+            <xs:attribute name="id" type="xs:int" use="required"/>
+        </xs:complexType>
+    </xs:element>
+    
+    <xs:element name="employees" >
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="employee"  minOccurs="0" maxOccurs="unbounded"/>
+            </xs:sequence>
+        </xs:complexType>
+        <xs:unique name="uniqueEmployeeId">
+            <xs:selector xpath="employee"/>
+            <xs:field xpath="@id"/>
+        </xs:unique>
+    </xs:element>
+    
+    <xs:element name="company">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="name"/>
+                <xs:element ref="category"/>
+                <xs:element ref="employees"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+    
+    <xs:element name="top">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="company" minOccurs="0" maxOccurs="unbounded"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+    
+</xs:schema>
diff --git a/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/employees.xml b/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/employees.xml
new file mode 100644
index 000000000..71901ba42
--- /dev/null
+++ b/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/employees.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<top xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="company.xsd">
+    
+    <company>
+        <name>John &amp; sons</name>
+        <category>Coal and gas</category>
+        <employees>
+            <employee id="2334">
+                <commonName>Andrew Wilkins</commonName>
+                <email>wilkins@hotspot.com</email>
+            </employee>
+            <employee id="5512">
+                <commonName>John Oats</commonName>
+                <email>wilkins@hotspot.com</email>
+            </employee>
+        </employees>
+    </company>
+    
+    <company>
+        <name>Sinister ways</name>
+        <category>Film and performance artists</category>
+        <employees>
+            <employee id="2234">
+                <commonName>Florence Ambler</commonName>
+            </employee>
+            <employee id="7712">
+                <commonName>Kim Anderson</commonName>
+            </employee>
+        </employees>
+    </company>
+    
+</top>
\ No newline at end of file
diff --git a/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/log4j2.xml b/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/log4j2.xml
new file mode 100644
index 000000000..276bc7c62
--- /dev/null
+++ b/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/log4j2.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration>
+    <Appenders>
+        <File name="A1" fileName="A1.log" append="false">
+            <PatternLayout pattern="%t %-5p %c{2} - %m%n"/>
+        </File>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
+        </Console>
+    </Appenders>
+    <Loggers>
+
+        <!-- You my want to define class or package level per-logger rules -->
+        <Logger name="de.hdm_stuttgart.mi.sd1.employeecompany.App" level="debug">
+            <AppenderRef ref="A1"/>
+        </Logger>
+        <Root level="info">
+            <AppenderRef ref="STDOUT"/>
+        </Root>
+    </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/schema.sql b/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/schema.sql
new file mode 100644
index 000000000..87a0c5f1e
--- /dev/null
+++ b/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/schema.sql
@@ -0,0 +1,28 @@
+DROP TABLE Employee;
+DROP TABLE Company;
+
+CREATE TABLE  Company (
+   id INTEGER NOT NULL
+  ,name VARCHAR(255) NOT NULL
+  ,category VARCHAR(255) NOT NULL
+  ,PRIMARY KEY(id)
+) ;
+
+CREATE TABLE Employee (
+   id INTEGER NOT NULL
+  ,company INTEGER NOT NULL
+  ,commonName VARCHAR(255) NOT NULL
+  ,email VARCHAR(255) NULL
+  ,FOREIGN KEY (company) REFERENCES Company(id)
+  ,PRIMARY KEY(id, company)
+);
+
+INSERT INTO Company VALUES(1, 'Smith & sons', 'Coal and gas');
+INSERT INTO Employee VALUES(2231, 1, 'Jim Bone', null);
+
+DELETE FROM Employee;
+DELETE FROM Company;
+DELETE FROM Company WHERE id=2;
+
+SELECT * FROM Company;
+SELECT * FROM Employee;
\ No newline at end of file
diff --git a/Exam/Sda1/EmployeeCompany/description.html b/Exam/Sda1/EmployeeCompany/description.html
new file mode 100644
index 000000000..39cb5a345
--- /dev/null
+++ b/Exam/Sda1/EmployeeCompany/description.html
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <title></title>
+  </head>
+
+  <body><h1>Preparations</h1><p>Download this <a
+  href="/files/goik/Sda1/EmployeeCompany/dujewdh323FggFFD_72w.zip"
+  target="_blank">Maven skeleton archive</a>, unzip it and import the
+  resulting sub directory <code>Skeleton</code> as a Maven project into your
+  Eclipse workspace. This project contains:</p><ol>
+      <li><p>A schema file <code>src/main/resources/company.xsd</code>
+      describing company and employee data as being provided in the sample
+      instance <code>src/main/resources/employees.xml</code>.</p></li>
+
+      <li><p>A Java skeleton class
+      <code>de.hdm_stuttgart.mi.sd1.employeecompany.Xml2Rdbms</code>
+      containing boilerplate code being related to <code>Jdom</code> and
+      <code>Jdbc</code>.</p></li>
+    </ol><h1>Description</h1><p>This exercise's aim is to transfer XML file
+  data like being represented by <code>src/main/resources/employees.xml</code>
+  to a relational database system via <code>Jdbc</code>. You are expected to
+  solve two tasks:</p><ol type="i">
+      <li><p>Create a SQL-DDL schema which best resembles the XML schema
+      <code>src/main/resources/company.xsd</code>.</p><p>Hint: Since employees
+      belong to a specific company (composition) you'll need two tables being
+      connected by a foreign key relation.</p></li>
+
+      <li><p>Complete the implementation of
+      <code>de.hdm_stuttgart.mi.sd1.employeecompany.Xml2Rdbms.java</code> to
+      read XML data and write it to your database server.</p><p>Hint: With
+      respect to the foreign key reference connecting employees and companies
+      you'll have to invent <code>id</code> values for company datasets. This
+      may be accomplished by simply enumerating all companies appearing in
+      your XML input data.</p></li>
+    </ol><p>Upon completion zip up your project directory and upload it to the
+  E-learning system. Mind the remaining time! <strong style="color: red;">When
+  the examination terminates no subsequent uploads will be
+  possible!</strong></p></body>
+</html>
-- 
GitLab