01: package org.andromda.core.server;
02:
03: import java.io.DataInputStream;
04: import java.io.ObjectInputStream;
05: import java.io.ObjectOutputStream;
06:
07: import java.net.ConnectException;
08: import java.net.Socket;
09: import java.net.UnknownHostException;
10:
11: import org.andromda.core.configuration.Configuration;
12:
13: /**
14: * The default AndroMDA {@link Client} instance.
15: *
16: * @author Chad Brandon
17: */
18: public class DefaultClient implements Client {
19: /**
20: * @see org.andromda.core.server.Client#start(org.andromda.core.configuration.Configuration)
21: */
22: public void start(final Configuration configuration)
23: throws ConnectException {
24: this .performServerOperation(configuration, configuration);
25: }
26:
27: /**
28: * @see org.andromda.core.server.Client#stop(org.andromda.core.configuration.Configuration)
29: */
30: public void stop(final Configuration configuration)
31: throws ConnectException {
32: this .performServerOperation(configuration, DefaultServer.STOP);
33: }
34:
35: /**
36: * Connects to the server and passes the <code>object</code>
37: * to the server. The server will take the appropriate action based
38: * on the value of the <code>object</code>
39: * @param configuration the AndroMDA configuration (contains the server information).
40: * @param object the object to pass to the server.
41: * @throws ConnectException if an error occurs while attempting to connect to the server.
42: */
43: private void performServerOperation(
44: final Configuration configuration, final Object object)
45: throws ConnectException {
46: if (configuration != null && configuration.getServer() != null) {
47: final org.andromda.core.configuration.Server serverConfiguration = configuration
48: .getServer();
49: if (serverConfiguration != null) {
50: try {
51: Socket server;
52: ObjectInputStream objectInput;
53: ObjectOutputStream out;
54: final String host = serverConfiguration.getHost();
55: try {
56: server = new Socket(host, serverConfiguration
57: .getPort());
58: objectInput = new ObjectInputStream(
59: new DataInputStream(server
60: .getInputStream()));
61: out = new ObjectOutputStream(server
62: .getOutputStream());
63: } catch (final UnknownHostException exception) {
64: throw new ClientException(
65: "Can't connect to host '" + host + "'");
66: }
67: out.writeObject(object);
68: if (object instanceof Configuration) {
69: final Object input = objectInput.readObject();
70: if (input instanceof Throwable) {
71: throw new ClientException((Throwable) input);
72: }
73: }
74: objectInput.close();
75: server.close();
76: out.flush();
77: out.close();
78: } catch (final ConnectException exception) {
79: // just re-throw since we need to detect when
80: // we can't communicate with the server
81: throw exception;
82: } catch (final Throwable throwable) {
83: throw new ClientException(throwable);
84: }
85: }
86: }
87: }
88: }
|