Erste Version des Versuches, die Original-Quellen zu entwirren
authorfelix <felix@a944a559-bf0e-0410-8ddc-85264b264b6c>
Sat, 12 May 2007 21:23:56 +0000 (21:23 +0000)
committerfelix <felix@a944a559-bf0e-0410-8ddc-85264b264b6c>
Sat, 12 May 2007 21:23:56 +0000 (21:23 +0000)
git-svn-id: https://www.internetallee.de/svn/bytewurf@14 a944a559-bf0e-0410-8ddc-85264b264b6c

12 files changed:
projekte/netzschalter/.classpath [new file with mode: 0644]
projekte/netzschalter/.project [new file with mode: 0644]
projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/LogMediator.java [new file with mode: 0644]
projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/Loggable.java [new file with mode: 0644]
projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/Netzdose.java [new file with mode: 0644]
projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/NetzdoseImpl.java [new file with mode: 0644]
projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/NetzdoseKonstanten.java [new file with mode: 0644]
projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/NetzdosenApplet.java [new file with mode: 0644]
projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/NetzdosenLEDPanel.java [new file with mode: 0644]
projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/TextAreaLogger.java [new file with mode: 0644]
projekte/netzschalter/test/de/bytewurf/projekte/netzschalter/NetzdosenMockup.java [new file with mode: 0644]
projekte/netzschalter/test/de/bytewurf/projekte/netzschalter/NetzdosenMockupTest.java [new file with mode: 0644]

diff --git a/projekte/netzschalter/.classpath b/projekte/netzschalter/.classpath
new file mode 100644 (file)
index 0000000..0a265f5
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="src" path="test"/>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+       <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3.8.1"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/projekte/netzschalter/.project b/projekte/netzschalter/.project
new file mode 100644 (file)
index 0000000..4b304c5
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>netzschalter</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+       </natures>
+</projectDescription>
diff --git a/projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/LogMediator.java b/projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/LogMediator.java
new file mode 100644 (file)
index 0000000..b0e2f1b
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Created on 12.05.2007
+ *
+ * To change this generated comment go to 
+ * Window>Preferences>Java>Code Generation>Code Template
+ */
+package de.bytewurf.projekte.netzschalter;
+
+import java.util.Iterator;
+import java.util.WeakHashMap;
+
+/**
+ * @author felix
+ */
+public class LogMediator {
+       private static LogMediator singleton = new LogMediator();
+       private WeakHashMap observers = new WeakHashMap();
+
+       public static LogMediator getInstance() {
+               return singleton;
+       }
+       
+       public void addObserver(Loggable o) {
+               observers.put(o,"OK");
+       }
+       
+       public void log(String message) {
+               for (Iterator iterator = observers.keySet().iterator(); iterator.hasNext();) {
+                       Loggable observer = (Loggable) iterator.next();
+                       if (observer != null) 
+                               observer.log(message);
+               }
+       }
+}
diff --git a/projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/Loggable.java b/projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/Loggable.java
new file mode 100644 (file)
index 0000000..dd060d0
--- /dev/null
@@ -0,0 +1,14 @@
+/*
+ * Created on 12.05.2007
+ *
+ * To change this generated comment go to 
+ * Window>Preferences>Java>Code Generation>Code Template
+ */
+package de.bytewurf.projekte.netzschalter;
+
+/**
+ * @author felix
+ */
+public interface Loggable {
+       public void log(String message);
+}
diff --git a/projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/Netzdose.java b/projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/Netzdose.java
new file mode 100644 (file)
index 0000000..aa1b04d
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Created on 12.05.2007
+ *
+ * To change this generated comment go to 
+ * Window>Preferences>Java>Code Generation>Code Template
+ */
+package de.bytewurf.projekte.netzschalter;
+
+/**
+ * @author felix
+ */
+public interface Netzdose {
+
+       public void setRelais(int relaisNumber, int state);
+
+       public int getRelais(int relaisNumber);
+       
+       public int getNumberOfRelais();
+
+}
\ No newline at end of file
diff --git a/projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/NetzdoseImpl.java b/projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/NetzdoseImpl.java
new file mode 100644 (file)
index 0000000..739fe20
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Created on 12.05.2007
+ *
+ * To change this generated comment go to 
+ * Window>Preferences>Java>Code Generation>Code Template
+ */
+package de.bytewurf.projekte.netzschalter;
+
+/**
+ * @author felix
+ */
+public class NetzdoseImpl implements Netzdose {
+       /* (non-Javadoc)
+        * @see de.bytewurf.projekte.netzschalter.Netzdose#setRelais(int, int)
+        */
+       public void setRelais(int relaisNumber, int state) {
+       }
+       
+       public int getNumberOfRelais() {
+               // TODO Auto-generated method stub
+               return 0;
+       }
+
+       /* (non-Javadoc)
+        * @see de.bytewurf.projekte.netzschalter.Netzdose#getRelais(int)
+        */
+       public int getRelais(int relaisNumber) {
+               return NetzdoseKonstanten.STATE_OFF;
+       }
+}
diff --git a/projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/NetzdoseKonstanten.java b/projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/NetzdoseKonstanten.java
new file mode 100644 (file)
index 0000000..fe0f47f
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * Created on 12.05.2007
+ *
+ * To change this generated comment go to 
+ * Window>Preferences>Java>Code Generation>Code Template
+ */
+package de.bytewurf.projekte.netzschalter;
+
+/**
+ * @author felix
+ */
+public class NetzdoseKonstanten {
+
+       public static final int STATE_ON = 1;
+       public static final int STATE_OFF = 2;
+
+}
diff --git a/projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/NetzdosenApplet.java b/projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/NetzdosenApplet.java
new file mode 100644 (file)
index 0000000..037e8b1
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Created on 12.05.2007
+ *
+ * To change this generated comment go to 
+ * Window>Preferences>Java>Code Generation>Code Template
+ */
+package de.bytewurf.projekte.netzschalter;
+
+import java.applet.Applet;
+import java.awt.BorderLayout;
+
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTabbedPane;
+
+/**
+ * @author felix
+ */
+public class NetzdosenApplet extends Applet {
+
+       private static final long serialVersionUID = 1L;
+
+       private Netzdose netzdose;
+
+       private TextAreaLogger logArea;
+
+       public void start() {
+               super.start();
+       }
+
+       @Override
+       public void stop() {
+               // TODO Auto-generated method stub
+               super.stop();
+       }
+
+       public void init() {
+               netzdose = new NetzdosenMockup();
+
+               setLayout(new BorderLayout());
+
+               JTabbedPane modePanel = new JTabbedPane();
+
+               modePanel.add("LED", new NetzdosenLEDPanel(netzdose));
+               JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
+               splitPane.add(modePanel, JSplitPane.TOP);
+
+               logArea = new TextAreaLogger();
+               splitPane.add(new JScrollPane(logArea,
+                               JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
+                               JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED), JSplitPane.BOTTOM);
+
+               add(splitPane);
+
+       }
+}
diff --git a/projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/NetzdosenLEDPanel.java b/projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/NetzdosenLEDPanel.java
new file mode 100644 (file)
index 0000000..72ee06d
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Created on 12.05.2007
+ *
+ * To change this generated comment go to 
+ * Window>Preferences>Java>Code Generation>Code Template
+ */
+package de.bytewurf.projekte.netzschalter;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JPanel;
+import javax.swing.JToggleButton;
+
+/**
+ * @author felix
+ */
+public class NetzdosenLEDPanel extends JPanel {
+
+       private Netzdose netzdose;
+       
+       private JToggleButton[] relaisToggles;
+
+       public NetzdosenLEDPanel(Netzdose netzdose) {
+               this.netzdose = netzdose;
+               
+               relaisToggles = new JToggleButton[netzdose.getNumberOfRelais()];
+               for (int i = 0; i < netzdose.getNumberOfRelais(); i++) {
+                       relaisToggles[i] = new JToggleButton("Relais " + i);
+                       relaisToggles[i].setSelected(netzdose.getRelais(i) == NetzdoseKonstanten.STATE_ON);
+                       relaisToggles[i].addActionListener(new RelaisAction(relaisToggles[i], i));
+                       add(relaisToggles[i]);
+               }
+               
+               
+       }
+
+       private class RelaisAction implements ActionListener {
+
+               JToggleButton button;
+
+               int relaisNumber;
+
+               public RelaisAction(JToggleButton button, int relaisNumber) {
+                       this.button = button;
+                       this.relaisNumber = relaisNumber;
+               }
+
+               public void actionPerformed(ActionEvent e) {
+                       netzdose.setRelais(relaisNumber,
+                                       button.isSelected() ? NetzdoseKonstanten.STATE_ON
+                                                       : NetzdoseKonstanten.STATE_OFF);
+                       LogMediator.getInstance().log("toggled " + relaisNumber + " = " + netzdose.getRelais(relaisNumber));
+               }
+
+       }
+}
diff --git a/projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/TextAreaLogger.java b/projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/TextAreaLogger.java
new file mode 100644 (file)
index 0000000..9edf9d7
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Created on 12.05.2007
+ *
+ * To change this generated comment go to 
+ * Window>Preferences>Java>Code Generation>Code Template
+ */
+package de.bytewurf.projekte.netzschalter;
+
+import java.awt.Dimension;
+import java.text.DateFormat;
+import java.util.Date;
+
+import javax.swing.JTextArea;
+
+/**
+ * @author felix
+ */
+public class TextAreaLogger extends JTextArea implements Loggable {
+       
+       public TextAreaLogger() {
+               setMinimumSize(new Dimension(80,60));
+               setPreferredSize(new Dimension(400,60));
+               this.setRows(6);
+               this.setEditable(false);
+               LogMediator.getInstance().addObserver(this);
+       }
+       
+       public void log(String message) {
+               append(DateFormat.getInstance().format(new Date()) + ": " + message + "\n");
+       }
+}
diff --git a/projekte/netzschalter/test/de/bytewurf/projekte/netzschalter/NetzdosenMockup.java b/projekte/netzschalter/test/de/bytewurf/projekte/netzschalter/NetzdosenMockup.java
new file mode 100644 (file)
index 0000000..bee3709
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Created on 12.05.2007
+ *
+ * To change this generated comment go to 
+ * Window>Preferences>Java>Code Generation>Code Template
+ */
+package de.bytewurf.projekte.netzschalter;
+
+/**
+ * @author felix
+ */
+public class NetzdosenMockup implements Netzdose {
+
+       byte relaisState = 0;
+
+       public int getNumberOfRelais() {
+               return 8;
+       }
+
+       public int getRelais(int relaisNumber) {
+               if ((relaisNumber < 0) || (relaisNumber >= getNumberOfRelais()))
+                       throw new IllegalArgumentException("Kein gültiger Wert");
+
+               return ((relaisState & (1 << relaisNumber)) == (1 << relaisNumber)) ? NetzdoseKonstanten.STATE_ON
+                               : NetzdoseKonstanten.STATE_OFF;
+       }
+
+       public void setRelais(int relaisNumber, int state) {
+               if ((relaisNumber < 0) || (relaisNumber >= getNumberOfRelais()))
+                       throw new IllegalArgumentException("Kein gültiger Wert");
+
+               if (state == NetzdoseKonstanten.STATE_ON)
+                       relaisState |= (1 << relaisNumber);
+               else
+                       relaisState &= ~(1 << relaisNumber);
+       }
+
+}
diff --git a/projekte/netzschalter/test/de/bytewurf/projekte/netzschalter/NetzdosenMockupTest.java b/projekte/netzschalter/test/de/bytewurf/projekte/netzschalter/NetzdosenMockupTest.java
new file mode 100644 (file)
index 0000000..89e420f
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Created on 12.05.2007
+ *
+ * To change this generated comment go to 
+ * Window>Preferences>Java>Code Generation>Code Template
+ */
+package de.bytewurf.projekte.netzschalter;
+
+import junit.framework.TestCase;
+
+/**
+ * @author felix
+ */
+public class NetzdosenMockupTest extends TestCase {
+       
+       private Netzdose netzdose;
+
+       protected void setUp() throws Exception {
+               netzdose = new NetzdosenMockup();
+               netzdose.setRelais(4, NetzdoseKonstanten.STATE_ON);
+               netzdose.setRelais(7, NetzdoseKonstanten.STATE_ON);
+       }
+       
+       public void testSetRelaisArguments() {
+               netzdose.setRelais(0, NetzdoseKonstanten.STATE_ON);
+               netzdose.setRelais(3, NetzdoseKonstanten.STATE_ON);
+               netzdose.setRelais(7, NetzdoseKonstanten.STATE_ON);
+               assertTrue("8 ist kein gültiger Wert", checkSetRelaisWithException(8));
+               assertTrue("-1 ist kein gültiger Wert", checkSetRelaisWithException(-1));
+       }
+
+       private boolean checkSetRelaisWithException(int relaisNumber) {
+               boolean exceptionOccured = false;
+               try {
+                       netzdose.setRelais(relaisNumber, NetzdoseKonstanten.STATE_ON);
+               } catch (IllegalArgumentException e) {
+                       exceptionOccured = true;
+               }
+               return exceptionOccured;
+       }
+       
+       public void testGetRelaisArguments() {
+               assertEquals(NetzdoseKonstanten.STATE_OFF, netzdose.getRelais(0));
+               assertEquals(NetzdoseKonstanten.STATE_OFF, netzdose.getRelais(3));
+               assertEquals(NetzdoseKonstanten.STATE_ON, netzdose.getRelais(4));
+               assertEquals(NetzdoseKonstanten.STATE_ON, netzdose.getRelais(7));
+               assertTrue("8 ist kein gültiger Wert", checkGetRelaisWithException(8));
+               assertTrue("-1 ist kein gültiger Wert", checkGetRelaisWithException(-1));
+       }
+
+       private boolean checkGetRelaisWithException(int relaisNumber) {
+               boolean exceptionOccured = false;
+               try {
+                       netzdose.getRelais(relaisNumber);
+               } catch (IllegalArgumentException e) {
+                       exceptionOccured = true;
+               }
+               return exceptionOccured;
+       }
+
+       public void testGetNumberOfRelais() {
+               assertEquals(8, netzdose.getNumberOfRelais());
+       }
+}