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 package uk.ac.rdg.resc.jstyx.messages;
30
31 import uk.ac.rdg.resc.jstyx.StyxUtils;
32 import uk.ac.rdg.resc.jstyx.types.Qid;
33
34 import java.util.Vector;
35
36 /***
37 * Message returned by the server in response to a TwalkMessage
38 *
39 * @author Jon Blower
40 * $Revision: 263 $
41 * $Date: 2005-05-25 16:39:02 +0100 (Wed, 25 May 2005) $
42 * $Log$
43 * Revision 1.5 2005/05/25 15:39:02 jonblower
44 * Bug fixes
45 *
46 * Revision 1.4 2005/03/15 09:01:48 jonblower
47 * Message type now stored as short, not int
48 *
49 * Revision 1.3 2005/03/11 14:02:15 jonblower
50 * Merged MINA-Test_20059309 into main line of development
51 *
52 * Revision 1.2.2.1 2005/03/10 11:50:59 jonblower
53 * Changed to fit with MINA framework
54 *
55 * Revision 1.2 2005/02/24 07:44:43 jonblower
56 * Added getFriendlyString()
57 *
58 * Revision 1.1.1.1 2005/02/16 18:58:28 jonblower
59 * Initial import
60 *
61 */
62 public class RwalkMessage extends StyxMessage
63 {
64
65 private Vector qids;
66
67 /***
68 * Creates a new RwalkMessage
69 * @param length The total length of the message (including all header info)
70 * @param type The type of the message (a number between 100 and 127)
71 * @param tag The tag that identifies this message
72 */
73 public RwalkMessage(int length, short type, int tag)
74 {
75 super(length, type, tag);
76 this.name = "Rwalk";
77 this.qids = new Vector(5, 2);
78 }
79
80 public RwalkMessage(Qid[] qids)
81 {
82 this(0, (short)111, 0);
83 for (int i = 0; i < qids.length; i++)
84 {
85 this.putQid(qids[i]);
86 }
87 this.setLength();
88 }
89
90 protected final void decodeBody(StyxBuffer buf)
91 {
92
93 int numQids = buf.getUShort();
94 for (int i = 0; i < numQids; i++)
95 {
96 this.putQid(buf.getQid());
97 }
98 }
99
100 protected final void encodeBody(StyxBuffer buf)
101 {
102
103 buf.putUShort(this.qids.size());
104
105 for (int i = 0; i < this.qids.size(); i++)
106 {
107 buf.putQid((Qid)this.qids.get(i));
108 }
109 }
110
111 public void putQid(Qid qid)
112 {
113 this.qids.add(qid);
114 this.setLength();
115 }
116
117 public Qid getQid(int index)
118 {
119 return (Qid)this.qids.get(index);
120 }
121
122 /***
123 * Sets the correct length of this message
124 */
125 private void setLength()
126 {
127 this.length = StyxUtils.HEADER_LENGTH + 2 + (13 * this.qids.size());
128 }
129
130 /***
131 * @return The number of successful walks made in the file traversal
132 */
133 public int getNumSuccessfulWalks()
134 {
135 return this.qids.size();
136 }
137
138 protected String getElements()
139 {
140 String s = ", " + this.qids.size();
141 for (int i = 0; i < this.qids.size(); i++)
142 {
143 s += ", " + this.qids.get(i);
144 }
145 return s;
146 }
147
148 public String toFriendlyString()
149 {
150 if (this.qids.size() == 0)
151 {
152
153
154
155 return "(fid cloned)";
156 }
157 StringBuffer s = new StringBuffer();
158 for (int i = 0; i < this.qids.size(); i++)
159 {
160 Qid qid = (Qid)this.qids.get(i);
161 s.append("(" + qid.toFriendlyString() + ") ");
162 }
163 return s.toString();
164 }
165
166 }