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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
|
/*
* Copyright (c) 2008 Paul C. Buetow, vs@dev.buetow.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* All icons of the icons/ folder are under a Creative Commons
* Attribution-Noncommercial-Share Alike License a CC-by-nc-sa.
*
* The icon's homepage is http://code.google.com/p/ultimate-gnome/
*/
package core;
import core.time.*;
import events.*;
import prefs.VSPrefs;
/**
* An object of this class represents a message which is sent from one process
* to another process in the simulator.
*
* @author Paul C. Buetow
*/
public class VSMessage extends VSPrefs {
/** The serial version uid */
private static final long serialVersionUID = 1L;
/** The constant IS_SERVER_MESSAGE. */
public static final boolean IS_SERVER_MESSAGE = true;
/** The constant IS_CLIENT_MESSAGE. */
public static final boolean IS_CLIENT_MESSAGE = false;
/** true, if the message has been sent from a server. false, if the message
* has been sent from a client.
*/
private boolean isServerMessage;
/** Each message belongs to a specific protocol. This variable defined the
* class name of the protocol being used.
*/
private String protocolClassname;
/** The default application preferences. */
private VSPrefs prefs;
/** A reference to the process who sent this message. */
private VSInternalProcess sendingProcess;
/** The vector time of the sending process after sending. The receiver
* process will use this vector time in order to update the local vector
* time.
*/
private VSVectorTime vectorTime;
/** The lamport time of the sending process after sending. The receiver
* process will use this lamport time in order to update the local vector
* time.
*/
private long lamportTime;
/** Each message has its own unique ID. The ID will show up in the loging
* window of the simulator
*/
private long messageID;
/** This counter is used in order to generate unique message ID's. */
private static long messageCounter;
/**
* The constructor of the message. Creates a new message object.
*/
public VSMessage() {
this.messageID = ++messageCounter;
}
/**
* Initializes the message.
*
* @param process The sending process of this message.
* @param protocolClassname The classname of the protocol this message.
* @param isServerMessage Sets if the message has been sent by a server.
*/
void init(VSInternalProcess process, String protocolClassname,
boolean isServerMessage) {
this.sendingProcess = process;
this.protocolClassname = protocolClassname;
this.isServerMessage = isServerMessage;
this.prefs = process.getPrefs();
lamportTime = sendingProcess.getLamportTime();
vectorTime = sendingProcess.getVectorTime().getCopy();
}
/**
* Gets the protocol name of the message.
*
* @return The protocol name of the message.
*/
public String getName() {
return VSRegisteredEvents.getNameByClassname(getProtocolClassname());
}
/**
* Gets the protocol classname.
*
* @return The protocol classname of the message.
*/
public String getProtocolClassname() {
return protocolClassname;
}
/**
* Gets the message id.
*
* @return The id of the message.
*/
public long getMessageID() {
return messageID;
}
/**
* Gets a reference of the sending process.
*
* @return The process which sent this message.
*/
public VSAbstractProcess getSendingProcess() {
return sendingProcess;
}
/**
* Gets the lamport time.
*
* @return The lamport time of the sending process.
*/
public long getLamportTime() {
return lamportTime;
}
/**
* Gets the vector time.
*
* @return The vector time of the sending process.
*/
public VSVectorTime getVectorTime() {
return vectorTime;
}
/**
* Checks if the message has been sent by a server or a client.
*
* @return true, if the message has been sent by a server. false, if the
* message has been sent by a client.
*/
public boolean isServerMessage() {
return isServerMessage;
}
/* (non-Javadoc)
* @see prefs.VSPrefs#toString()
*/
public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append("ID: ");
buffer.append(messageID);
buffer.append("; ");
buffer.append(prefs.getString("lang.protocol"));
buffer.append(": ");
buffer.append(VSRegisteredEvents.getShortnameByClassname(
getProtocolClassname()));
return buffer.toString();
}
/**
* Extended string representation of the message object.
*
* @return Extended string representation of the message object.
*/
public String toStringFull() {
return toString() + "; " + super.toString();
}
/**
* Compares two messages.
*
* @param message The message to compare with.
*
* @return true, if the messages have the same id. Otherwise false.
*/
public boolean equals(VSMessage message) {
return messageID == message.getMessageID();
}
}
|