RmiClient  1.0
 Alle Klassen Namensbereiche Dateien Funktionen Variablen
Controller.java
gehe zur Dokumentation dieser Datei
1 package controller;
2 
3 import java.rmi.NotBoundException;
4 import java.rmi.RMISecurityManager;
5 import java.rmi.RemoteException;
6 import java.rmi.registry.LocateRegistry;
7 import java.rmi.registry.Registry;
8 import java.util.ArrayList;
9 import java.util.List;
10 import java.util.Observable;
11 
12 import javax.persistence.metamodel.ManagedType;
13 import javax.swing.JDialog;
14 import javax.swing.JFrame;
15 import javax.swing.JOptionPane;
16 import javax.swing.SwingUtilities;
17 
18 import main.ResultContent;
19 
20 import view.AbstractDialog;
21 import view.AbstractFrame;
22 import view.LoginFrame;
23 
30 public class Controller extends Observable {
31  private Controller controller = null;
32  public static ServerInterface rmiServer = null;
33  public static ClientInterfaceImpl rmiClient = null;
34 
38  private static ArrayList<AbstractFrame> viewFrames = new ArrayList<AbstractFrame>();
39  private static ArrayList<AbstractDialog> viewDialogs = new ArrayList<AbstractDialog>();
40 
45  private static int framesLimit = 2;
46  private static int dialogsLimit = 2;
47 
48  public Controller(String[] args) {
49  controller = this;
50  boolean ok = false;
51 
55  String serverPort = String.valueOf(Registry.REGISTRY_PORT);
56  String serverAddress = "192.168.178.45";
57 
58  System.setProperty("java.security.policy", "file:./client.policy");
59 
60  if (args.length > 1) {
61  serverPort = args[0];
62  serverAddress = args[1];
63  }
64 
68  if (System.getSecurityManager() == null) {
69  System.setSecurityManager(new RMISecurityManager());
70  }
71 
72  try {
73  Registry registry = LocateRegistry.getRegistry(serverAddress,
74  (new Integer(serverPort)).intValue());
75  rmiServer = (ServerInterface) (registry
76  .lookup(ServerInterface.SERVICE_NAME));
77  ok = true;
78  } catch (java.rmi.ConnectException ce) {
79  JOptionPane
80  .showMessageDialog(
81  null,
82  "Die Server-Anwendung der Projektverwaltung wurde noch nicht gestartet!",
83  "Fehler", JOptionPane.ERROR_MESSAGE);
84  System.err.println("Server-Anwendung wurde noch nicht gestartet!");
85  } catch (RemoteException e) {
86  System.err.println(e);
87  } catch (NotBoundException e) {
88  System.err.println(e);
89  }
90 
94  if (ok) {
95  SwingUtilities.invokeLater(new Runnable() {
96  public void run() {
97  try {
98  LoginFrame frame = new LoginFrame(controller);
99  } catch (RemoteException e) {
100  System.err
101  .println("Fehler beim Anmelden zum Server bzw. hinzufügen zur Observer-Liste!");
102  System.err.println(e);
103  System.err
104  .println("Anwendung wird fehlerbedingt beendet!");
105  System.exit(1);
106  }
107 
112  }
113  });
114  } else {
115  System.err.println("Anwendung wird fehlerbedingt beendet!");
116  System.exit(1);
117  }
118  }
119 
127  public void delegateObject(Class t, List<Object> object) {
128  tellChangedData(t, object);
129  }
130 
137  public AbstractFrame getFrame(Class jFrame) {
138  AbstractFrame result = null;
139  for (AbstractFrame view : viewFrames) {
140  if (view.getClass().equals(jFrame)) {
141  result = view;
142  break;
143  }
144  }
145  return result;
146  }
147 
153  public void addFrame(AbstractFrame jFrame) {
154  viewFrames.add(jFrame);
155 
156  if (viewFrames.size() > framesLimit) {
157  viewFrames.remove(0);
158  System.out
159  .println("Listenkapazität der JFrames im Controller überschritten, das erste Element wurde wieder entfernt!");
160  }
161  }
162 
170  public AbstractDialog getDialog(Class jDialog) {
171  AbstractDialog result = null;
172  for (AbstractDialog view : viewDialogs) {
173  if (view.getClass().equals(jDialog)) {
174  result = view;
175  break;
176  }
177  }
178  return result;
179  }
180 
186  public void addDialog(AbstractDialog jDialog) {
187  viewDialogs.add(jDialog);
188 
189  if (viewDialogs.size() > dialogsLimit) {
190  viewDialogs.remove(0);
191  System.out
192  .println("Listenkapazität der JDialogs im Controller überschritten, das erste Element wurde wieder entfernt!");
193  }
194  }
195 
203  private void tellChangedData(Class t, List<Object> results) {
204  if (t != null) {
205  submitData(new ResultContent(t, results));
206  } else {
207  submitData(null);
208  }
209  }
210 
217  private void submitData(Object object) {
218  // setChanged() markiert das Objekt als sendebereit, sodass bei
219  // notifyObservers() Meldungen gegeben werden.
220  setChanged();
221  notifyObservers(object);
222  }
223 }