From e0ef8d9941d074ed1cb41bcf8f66b3055833dcd8 Mon Sep 17 00:00:00 2001
From: "Dr. Martin Goik" <goik@hdm-stuttgart.de>
Date: Mon, 6 May 2019 10:19:03 +0200
Subject: [PATCH] Restoring .gitinore files, committing enum chapter

---
 .gitignore                                    |   2 +
 Doc/Sd1/Ref/Interfaces/P/iface/.gitignore     |   1 +
 .../mi/sd1/class_wrapper/Driver.java          |   6 +-
 .../mi/sd1/class_wrapper/Screwed2.java        |  20 ++
 .../mi/sd1/class_wrapper_private/Day.java     |   2 +-
 .../mi/sd1/class_wrapper_private/Screwed.java |   4 +
 .../de/hdm_stuttgart/mi/sd1/use_enum/Day.java |  12 +-
 .../Ref/Projects/WeatherSkeleton/.gitignore   |   1 +
 Doc/Sd1/objectsClasses.xml                    | 190 +++++++++++++++++-
 ws/Docbook/Id2topic/.gitignore                |   1 +
 10 files changed, 227 insertions(+), 12 deletions(-)
 create mode 100644 Doc/Sd1/Ref/Interfaces/P/iface/.gitignore
 create mode 100644 Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper/Screwed2.java
 create mode 100644 Doc/Sd1/Ref/Projects/WeatherSkeleton/.gitignore
 create mode 100644 ws/Docbook/Id2topic/.gitignore

diff --git a/.gitignore b/.gitignore
index 3a1ce93c1..a02e23253 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
+/Makefile
+*.iml
 .idea
 A1.log
 *~
diff --git a/Doc/Sd1/Ref/Interfaces/P/iface/.gitignore b/Doc/Sd1/Ref/Interfaces/P/iface/.gitignore
new file mode 100644
index 000000000..8617481f5
--- /dev/null
+++ b/Doc/Sd1/Ref/Interfaces/P/iface/.gitignore
@@ -0,0 +1 @@
+output.txt
diff --git a/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper/Driver.java b/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper/Driver.java
index a91b2fdba..2b9992f13 100644
--- a/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper/Driver.java
+++ b/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper/Driver.java
@@ -1,7 +1,5 @@
 package de.hdm_stuttgart.mi.sd1.class_wrapper;
 
-
-
 public class Driver {
 
     public static void main(String[] args) {
@@ -12,6 +10,10 @@ public class Driver {
         System.out.println(phpIntro);
         System.out.println(advancedJava);
 
+        System.out.println(Screwed2.getPrice(Day.SUNDAY,  2));
+
+        // Type violation error
+        //System.out.println(Screwed2.getPrice(2, Day.SUNDAY));
 
     }
 }
diff --git a/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper/Screwed2.java b/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper/Screwed2.java
new file mode 100644
index 000000000..c65668651
--- /dev/null
+++ b/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper/Screwed2.java
@@ -0,0 +1,20 @@
+package de.hdm_stuttgart.mi.sd1.class_wrapper;
+
+
+public class Screwed2 {
+
+
+    /**
+     * Charge double prices on weekends
+     * @param day Day of week
+     * @param amount
+     * @return the effective amount depending on day of week.
+     */
+    static public int getPrice(final Day day, final int amount) {
+        if (Day.SATURDAY == day || Day.SUNDAY == day) {
+            return 2 * amount;
+        } else {
+            return amount;
+        }
+    }
+}
\ No newline at end of file
diff --git a/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper_private/Day.java b/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper_private/Day.java
index 7bfc20ace..949d3f0ad 100644
--- a/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper_private/Day.java
+++ b/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper_private/Day.java
@@ -6,7 +6,7 @@ package de.hdm_stuttgart.mi.sd1.class_wrapper_private;
 
 public class Day {
 
-    private Day() {} // Disallow object creation outside this class
+    private Day() {} // Disallow object creation outside class
 
     static public final Day
             MONDAY    = new Day(),
diff --git a/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper_private/Screwed.java b/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper_private/Screwed.java
index 3e8b4f0ef..1727cf868 100644
--- a/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper_private/Screwed.java
+++ b/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper_private/Screwed.java
@@ -9,5 +9,9 @@ public class Screwed {
 
         //final Day PAST_SUNDAY = new Day();
 
+        //final Lecture phpIntro = new Lecture(PAST_SUNDAY, "PHP introduction");
+
+        //System.out.println(phpIntro.toString());
+
     }
 }
\ No newline at end of file
diff --git a/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/use_enum/Day.java b/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/use_enum/Day.java
index 967c6a020..6b649cd3f 100644
--- a/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/use_enum/Day.java
+++ b/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/use_enum/Day.java
@@ -6,13 +6,13 @@ package de.hdm_stuttgart.mi.sd1.use_enum;
 
 public enum Day {
 
-    MONDAY("Monday"),
-    TUESDAY("Tuesday"),
+    MONDAY(   "Monday"),
+    TUESDAY(  "Tuesday"),
     WEDNESDAY("Wednesday"),
-    THURSDAY("Thursday"),
-    FRIDAY("Friday"),
-    SATURDAY("Saturday"),
-    SUNDAY("Sunday");
+    THURSDAY( "Thursday"),
+    FRIDAY(   "Friday"),
+    SATURDAY( "Saturday"),
+    SUNDAY(   "Sunday");
 
     final String name;
 
diff --git a/Doc/Sd1/Ref/Projects/WeatherSkeleton/.gitignore b/Doc/Sd1/Ref/Projects/WeatherSkeleton/.gitignore
new file mode 100644
index 000000000..0567e2019
--- /dev/null
+++ b/Doc/Sd1/Ref/Projects/WeatherSkeleton/.gitignore
@@ -0,0 +1 @@
+*.properties
diff --git a/Doc/Sd1/objectsClasses.xml b/Doc/Sd1/objectsClasses.xml
index 37d2d721f..da8560b57 100644
--- a/Doc/Sd1/objectsClasses.xml
+++ b/Doc/Sd1/objectsClasses.xml
@@ -9985,6 +9985,8 @@ System.out.println(Screwed2.
       <figure xml:id="sd1_fig_statesByClassIdea">
         <title>Enumeration by instances</title>
 
+        <para>Roadmap:</para>
+
         <itemizedlist>
           <listitem>
             <para>Define a dedicated class representing the
@@ -10002,10 +10004,11 @@ System.out.println(Screwed2.
         </itemizedlist>
       </figure>
 
-      <figure xml:id="sd1_fig_enumByClass">
-        <title>Printing lecture info</title>
+      <figure xml:id="sd1_fig_enumByClassInstances">
+        <title>Class instance per enumeration value</title>
 
-        <programlisting language="java">public class Day {
+        <programlisting language="java">public class <link
+            xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/tree/master/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper/Day.java">Day</link> {
 
   static public final Day
     MONDAY    = new Day(),
@@ -10015,6 +10018,187 @@ System.out.println(Screwed2.
     FRIDAY    = new Day(),
     SATURDAY  = new Day(),
     SUNDAY    = new Day();
+}</programlisting>
+      </figure>
+
+      <figure xml:id="sd1_fig_enumByClassNoSwitch">
+        <title><code language="java">switch</code> no longer works!</title>
+
+        <programlisting language="java">public static String <link
+            xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/tree/master/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper/Day.java">getDaysName</link>(final Day day) {
+  if (MONDAY == day) {  // Switch no longer possible, sigh!
+    return "Monday";
+  } else if (TUESDAY == day) {
+      ...
+  } else if (SUNDAY == day) {
+    return "Sunday";
+  } else {
+    return "Illegal day instance: " + day;
+  }
+}</programlisting>
+      </figure>
+
+      <figure xml:id="sd1_fig_rewriteGetPrice">
+        <title> Re-writing <methodname>getPrice()</methodname></title>
+
+        <programlisting language="java">/**
+ * Charge double prices on weekends
+ * @param day Day of week
+ * @param amount
+ * @return the effective amount depending on day of week.
+ */
+static public int <link
+            xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/tree/master/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper/Screwed2.java">getPrice</link>(final Day day, final int amount) {
+  if (Day.SATURDAY == day || Day.SUNDAY == day) {
+    return 2 * amount;
+  } else {
+    return amount;
+  }
+}</programlisting>
+      </figure>
+
+      <figure xml:id="sd1_fig_getPriceTypeViolationError">
+        <title>Argument mismatch error</title>
+
+        <programlisting language="java">// Class <link
+            xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/tree/master/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper/Driver.java">Driver</link>
+
+// o.K.
+System.out.println(Screwed2.getPrice(Day.SUNDAY,  2));
+
+// Argument mismatch causing type violation error
+System.out.println(Screwed2.getPrice(2, Day.SUNDAY));</programlisting>
+      </figure>
+
+      <figure xml:id="sd1_fig_userCircumventProblem">
+        <title>Creating an undesired instance</title>
+
+        <informaltable border="0">
+          <tr>
+            <td valign="top"><programlisting language="java">Class <link
+                  xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/tree/master/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper/Screwed.java">Screwed</link>:
+
+final Day PAST_SUNDAY = new Day();
+
+final Lecture phpIntro = new Lecture(
+     PAST_SUNDAY, "PHP introduction");
+
+System.out.println(phpIntro.toString());</programlisting></td>
+
+            <td valign="top"><screen>Lecture «PHP introduction» being
+held each <emphasis role="red">Illegal day instance: 
+de.hdm_stuttgart.mi.sd1.
+class_wrapper.Day@63961c42</emphasis></screen></td>
+          </tr>
+        </informaltable>
+      </figure>
+    </section>
+
+    <section xml:id="sd1_enum_sect_privateConstructor">
+      <title>Defining a private constructor</title>
+
+      <figure xml:id="sd1_fig_enumPrivateConstructor">
+        <title><code language="java">private</code> <classname>Day</classname>
+        constructor </title>
+
+        <programlisting language="none">public class <link
+            xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/tree/master/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper_private/Day.java">Day</link> {
+
+  <emphasis role="red">// Disallow object creation outside class
+  private Day() {}</emphasis> 
+
+  static public final Day
+    MONDAY    = new Day(),
+    TUESDAY   = new Day(),
+  ...
+    SUNDAY    = new Day();
+}</programlisting>
+      </figure>
+
+      <figure xml:id="sd1_fig_preventUndesiredDayCreation">
+        <title>Preventing undesired <classname>Day</classname> instance
+        creation</title>
+
+        <informaltable border="0">
+          <tr>
+            <td valign="top"><programlisting language="java">Class <link
+                  xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/tree/master/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper_private/Screwed.java">Screwed</link>:
+
+final Day PAST_SUNDAY = new Day();
+
+final Lecture phpIntro = new Lecture(
+     PAST_SUNDAY, "PHP introduction");
+
+System.out.println(phpIntro.toString());</programlisting></td>
+
+            <td valign="top"><para>Compile time error:</para><screen><emphasis
+                  role="red">'Day()' has private access in
+'de.hdm_stuttgart.mi.sd1.
+class_wrapper_private.Day'</emphasis></screen></td>
+          </tr>
+        </informaltable>
+      </figure>
+
+      <figure xml:id="sd1_fig_privateDaysNameConstructor">
+        <title>Even better: Adding day name attribute</title>
+
+        <programlisting language="none">public class <link
+            xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/tree/master/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/class_wrapper_daysname/Day.java">Day</link> {
+  public final String <emphasis role="red">name</emphasis>;
+
+  private Day(final String name) {
+    <emphasis role="red">this.name</emphasis> = name;
+  }
+  static public final Day
+    MONDAY    = new Day("Monday"),
+  ...
+    SUNDAY    = new Day("Sunday");
+
+    public String toString() { return <emphasis role="red">name</emphasis>; }
+}</programlisting>
+      </figure>
+    </section>
+
+    <section xml:id="sd1_enum_sect_dayAsEnumType">
+      <title><code language="java">enum</code> replacing <code
+      language="java">class</code></title>
+
+      <figure xml:id="sd1_fig_useEnumDay">
+        <title><code language="java">enum</code>
+        <classname>Day</classname></title>
+
+        <programlisting language="java">public enum <link
+            xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/tree/master/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/use_enum/Day.java">Day</link> {
+
+  MONDAY("Monday"),
+  TUESDAY("Tuesday"),
+  ...
+  SUNDAY("Sunday");
+
+  final String name;
+  Day(final String name) { this.name = name;}
+
+  public String toString() { return name;}
+}</programlisting>
+      </figure>
+
+      <figure xml:id="sd1_fig_enumSwitchWorking">
+        <title><code language="java">switch</code> statements working
+        again</title>
+
+        <programlisting language="java">public enum <link
+            xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/tree/master/Doc/Sd1/Ref/ObjectsAndClasses/Enum/src/main/java/de/hdm_stuttgart/mi/sd1/use_enum/Day.java">Day</link> {
+...
+  public static String getItalianDayname(final Day day) {
+    switch (day) {
+      case MONDAY:    return "Lunedì";
+      case TUESDAY:   return "Martedì";
+   ...
+      case SUNDAY:    return "Domenica";
+    }
+    return null; // Actually unreachable, but static
+                // code analysis is limited
+  }
 }</programlisting>
       </figure>
     </section>
diff --git a/ws/Docbook/Id2topic/.gitignore b/ws/Docbook/Id2topic/.gitignore
new file mode 100644
index 000000000..96de9ad6c
--- /dev/null
+++ b/ws/Docbook/Id2topic/.gitignore
@@ -0,0 +1 @@
+topics.xml
-- 
GitLab