1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
//ResponderClient.java
package derms.Replica3pkg;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import java.io.*;
import java.net.URL;
import java.util.*;
public class ResponderClient {
private String responderID;
private String serverName;
private Map<String, DERMSInterface> servers;
public ResponderClient(String responderID) {
this.responderID = responderID;
this.serverName = responderID.substring(0, 3).toUpperCase();
this.servers = new HashMap<>();
}
public void connectToServer() {
try {
String[] serverNames = {"MTL", "QUE", "SHE"};
String[] endpoints = {
"http://localhost:8080/DERMS/MTL?wsdl",
"http://localhost:8081/DERMS/QUE?wsdl",
"http://localhost:8082/DERMS/SHE?wsdl"
};
int i = 0;
for (String name : serverNames) {
URL url = new URL(endpoints[i]);
QName qname = new QName("http://DERMS.org/", "ServerService");
Service service = Service.create(url, qname);
servers.put(name, service.getPort(DERMSInterface.class));
System.out.println("Connected to " + name + " server.");
i++;
}
} catch (Exception e) {
e.printStackTrace();
}
}
public String addResource(String resourceID, String resourceName, int duration) {
try {
String serverCode = resourceID.substring(0, 3).toUpperCase();
DERMSInterface targetServer = servers.get(serverCode);
if (targetServer == null) {
System.out.println("Invalid server code in resourceID.");
return "Error";
}
String response = targetServer.addResource(resourceID, resourceName, duration);
log("addResource", response);
System.out.println(response);
return "OK";
} catch (Exception e) {
e.printStackTrace();
return "Error";
}
}
public String removeResource(String resourceID, int duration) {
try {
String serverCode = resourceID.substring(0, 3).toUpperCase();
DERMSInterface targetServer = servers.get(serverCode);
if (targetServer == null) {
System.out.println("Invalid server code in resourceID.");
}
String response = targetServer.removeResource(resourceID, duration);
log("removeResource", response);
System.out.println(response);
} catch (Exception e) {
e.printStackTrace();
}
return "OK";
}
public String listResourceAvailability(String resourceName) {
try {
String response = servers.get(serverName).listResourceAvailability(resourceName);
log("listResourceAvailability", response);
System.out.println("Available Resources:\n" + response);
} catch (Exception e) {
e.printStackTrace();
}
return "OK";
}
private void log(String operation, String response) {
try (FileWriter fw = new FileWriter(responderID + "_log.txt", true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw)) {
String logEntry = String.format("%s - Operation: %s, Response: %s", new Date(), operation, response);
out.println(logEntry);
} catch (IOException e) {
e.printStackTrace();
}
}
public void start() {
Scanner scanner = new Scanner(System.in);
connectToServer();
while (true) {
System.out.println("Responder menu:");
System.out.println("1. Add Resource");
System.out.println("2. Remove Resource");
System.out.println("3. List Resource Availability");
System.out.println("4. Exit");
System.out.print("Enter choice (number): ");
int choice = Integer.parseInt(scanner.nextLine());
switch (choice) {
case 1:
System.out.print("Enter resourceID: ");
String resourceID = scanner.nextLine();
System.out.print("Enter resourceName: ");
String resourceName = scanner.nextLine();
System.out.print("Enter duration: ");
int duration = Integer.parseInt(scanner.nextLine());
addResource(resourceID, resourceName, duration);
break;
case 2:
System.out.print("Enter resourceID: ");
resourceID = scanner.nextLine();
System.out.print("Enter duration (removal): ");
duration = Integer.parseInt(scanner.nextLine());
removeResource(resourceID, duration);
break;
case 3:
System.out.print("Enter resourceName: ");
resourceName = scanner.nextLine();
listResourceAvailability(resourceName);
break;
case 4:
System.out.println("Exiting client");
scanner.close();
return;
default:
System.out.println("Invalid input");
}
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter responderID: ");
String responderID = scanner.nextLine();
ResponderClient client = new ResponderClient(responderID);
client.start();
}
}
|