EMMA??Coverage??Report??(generated??Fri??May??15??16:21:14??BST??2009)
[all??classes][org.apache.james.mpt]

COVERAGE??SUMMARY??FOR??SOURCE??FILE??[ProtocolSessionBuilder.java]

nameclass,??%method,??%block,??%line,??%
ProtocolSessionBuilder.java100%??(1/1)56%????(5/9)45%????(156/347)50%????(44.6/89)

COVERAGE??BREAKDOWN??BY??CLASS??AND??METHOD

nameclass,??%method,??%block,??%line,??%
??????????
class??ProtocolSessionBuilder100%??(1/1)56%????(5/9)45%????(156/347)50%????(44.6/89)
addProtocolLines??(String,??InputStream,??ProtocolInteractor):??void??0%??????(0/1)0%??????(0/14)0%??????(0/3)
addTestFile??(String,??ProtocolInteractor):??void??0%??????(0/1)0%??????(0/27)0%??????(0/5)
buildProtocolSession??(String):??ProtocolInteractor??0%??????(0/1)0%??????(0/10)0%??????(0/3)
buildProtocolSession??(String,??Reader):??ProtocolInteractor??0%??????(0/1)0%??????(0/11)0%??????(0/3)
doAddProtocolLines??(ProtocolInteractor,??String,??BufferedReader):??void??100%??(1/1)30%????(54/178)37%????(16.6/45)
addProtocolLines??(String,??Reader,??ProtocolInteractor):??void??100%??(1/1)78%????(14/18)80%????(4/5)
substituteVariables??(String):??String??100%??(1/1)99%????(73/74)95%????(19/20)
ProtocolSessionBuilder??():??void??100%??(1/1)100%??(8/8)100%??(3/3)
setVariable??(String,??String):??void??100%??(1/1)100%??(7/7)100%??(2/2)

1/****************************************************************
2??*??Licensed??to??the??Apache??Software??Foundation??(ASF)??under??one??????*
3??*??or??more??contributor??license??agreements.????See??the??NOTICE??file??*
4??*??distributed??with??this??work??for??additional??information????????????????*
5??*??regarding??copyright??ownership.????The??ASF??licenses??this??file??????*
6??*??to??you??under??the??Apache??License,??Version??2.0??(the????????????????????????*
7??*??"License");??you??may??not??use??this??file??except??in??compliance??????*
8??*??with??the??License.????You??may??obtain??a??copy??of??the??License??at??????*
9??*????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????*
10??*??????http://www.apache.org/licenses/LICENSE-2.0??????????????????????????????????*
11??*????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????*
12??*??Unless??required??by??applicable??law??or??agreed??to??in??writing,??????*
13??*??software??distributed??under??the??License??is??distributed??on??an????*
14??*??"AS??IS"??BASIS,??WITHOUT??WARRANTIES??OR??CONDITIONS??OF??ANY??????????????*
15??*??KIND,??either??express??or??implied.????See??the??License??for??the????????*
16??*??specific??language??governing??permissions??and??limitations????????????*
17??*??under??the??License.??????????????????????????????????????????????????????????????????????????????????????*
18??****************************************************************/
19??
20package??org.apache.james.mpt;
21??
22import??java.io.BufferedReader;
23import??java.io.InputStream;
24import??java.io.InputStreamReader;
25import??java.io.Reader;
26import??java.util.ArrayList;
27import??java.util.List;
28import??java.util.Properties;
29??
30??
31/**
32??*??A??builder??which??generates??scripts??from??textual??input.
33??*??
34??*??@author??Darrell??DeBoer??<darrell@apache.org>
35??*??
36??*??@version??$Revision:??722585??$
37??*/
38public??class??ProtocolSessionBuilder??{
39????????
40????????public??static??final??String??SERVER_CONTINUATION_TAG??=??"S:??\\+";
41??
42????????public??static??final??String??CLIENT_TAG??=??"C:";
43??
44????????public??static??final??String??SERVER_TAG??=??"S:";
45??
46????????public??static??final??String??OPEN_UNORDERED_BLOCK_TAG??=??"SUB??{";
47??
48????????public??static??final??String??CLOSE_UNORDERED_BLOCK_TAG??=??"}";
49??
50????????public??static??final??String??COMMENT_TAG??=??"#";
51??
52????????public??static??final??String??SESSION_TAG??=??"SESSION:";
53??
54????????private??final??Properties??variables;
55????????
56????????public??ProtocolSessionBuilder()??{
57????????????????variables??=??new??Properties();
58????????}
59????????
60????????/**
61??????????*??Sets??a??substitution??varaible.
62??????????*??The??value??of??a??variable??will??be??substituted??whereever
63??????????*??${<code>NAME</code>}??is??found??in??the??input
64??????????*??where??<code>NAME</code>??is??the??name??of??the??variable.
65??????????*??@param??name??not??null
66??????????*??@param??value??not??null
67??????????*/
68????????public??void??setVariable(final??String??name,??final??String??value)??{
69????????????????variables.put(name,??value);
70????????}
71????????
72????????/**
73??????????*??Builds??a??ProtocolSession??by??reading??lines??from??the??test??file??with??the
74??????????*??supplied??name.
75??????????*??
76??????????*??@param??fileName
77??????????*????????????????????????The??name??of??the??protocol??session??file.
78??????????*??@return??The??ProtocolSession
79??????????*/
80????????public??ProtocolInteractor??buildProtocolSession(String??fileName)
81????????????????????????throws??Exception??{
82????????????????ProtocolInteractor??session??=??new??ProtocolSession();
83????????????????addTestFile(fileName,??session);
84????????????????return??session;
85????????}
86????????
87????????/**
88??????????*??Builds??a??ProtocolSession??by??reading??lines??from??the??reader.
89??????????*??
90??????????*??@param??fileName
91??????????*????????????????????????The??name??of??the??protocol??session??file.
92??????????*??@return??The??ProtocolSession
93??????????*/
94????????public??ProtocolInteractor??buildProtocolSession(final??String??scriptName,??final??Reader??reader)
95????????????????????????throws??Exception??{
96????????????????ProtocolInteractor??session??=??new??ProtocolSession();
97????????????????addProtocolLines(scriptName,??reader,??session);
98????????????????return??session;
99????????}
100??
101??
102????????/**
103??????????*??Adds??all??protocol??elements??from??a??test??file??to??the??ProtocolSession
104??????????*??supplied.
105??????????*??
106??????????*??@param??fileName
107??????????*????????????????????????The??name??of??the??protocol??session??file.
108??????????*??@param??session
109??????????*????????????????????????The??ProtocolSession??to??add??the??elements??to.
110??????????*/
111????????public??void??addTestFile(String??fileName,??ProtocolInteractor??session)
112????????????????????????throws??Exception??{
113????????????????//??Need??to??find??local??resource.
114????????????????InputStream??is??=??this.getClass().getResourceAsStream(fileName);
115????????????????if??(is??==??null)??{
116????????????????????????throw??new??Exception("Test??Resource??'"??+??fileName??+??"'??not??found.");
117????????????????}
118??
119????????????????addProtocolLines(fileName,??is,??session);
120????????}
121??
122????????/**
123??????????*??Reads??ProtocolElements??from??the??supplied??InputStream??and??adds??them??to??the
124??????????*??ProtocolSession.
125??????????*??@param??scriptName
126??????????*????????????????????????The??name??of??the??source??file,??for??error??messages.
127??????????*??@param??is
128??????????*????????????????????????The??input??stream??containing??the??protocol??definition.
129??????????*??@param??session
130??????????*????????????????????????The??ProtocolSession??to??add??elements??to.
131??????????*/
132????????public??void??addProtocolLines(String??scriptName,??InputStream??is,??ProtocolInteractor??session)??throws??Exception??{
133????????????????BufferedReader??reader??=??new??BufferedReader(new??InputStreamReader(is));
134????????????????
135????????????????doAddProtocolLines(session,??scriptName,??reader);
136????????}
137??
138????????/**
139??????????*??Reads??ProtocolElements??from??the??supplied??Reader??and??adds??them??to??the
140??????????*??ProtocolSession.
141??????????*??@param??scriptName
142??????????*????????????????????????The??name??of??the??source??file,??for??error??messages.
143??????????*??@param??reader
144??????????*????????????????????????the??reader??containing??the??protocol??definition.
145??????????*??@param??session
146??????????*????????????????????????The??ProtocolSession??to??add??elements??to.
147??????????*/
148????????public??void??addProtocolLines(String??scriptName,??Reader??reader,??ProtocolInteractor??session)??throws??Exception??{
149????????????????final??BufferedReader??bufferedReader;
150????????????????if??(reader??instanceof??BufferedReader)??{
151????????????????????????bufferedReader??=??(BufferedReader)??reader;
152????????????????}??else??{
153????????????????????????bufferedReader??=??new??BufferedReader(reader);
154????????????????}
155????????????????doAddProtocolLines(session,??scriptName,??bufferedReader);
156????????}
157????????
158????????/**
159??????????*??Reads??ProtocolElements??from??the??supplied??Reader??and??adds??them??to??the
160??????????*??ProtocolSession.
161??????????*??
162??????????*??@param??reader
163??????????*????????????????????????the??reader??containing??the??protocol??definition.
164??????????*??@param??session
165??????????*????????????????????????The??ProtocolSession??to??add??elements??to.
166??????????*??@param??scriptName
167??????????*????????????????????????The??name??of??the??source??file,??for??error??messages.
168??????????*/
169????????private??void??doAddProtocolLines(ProtocolInteractor??session,??String??scriptName,??BufferedReader??reader)??throws??Exception??{
170????????????????String??line;
171????????????????int??sessionNumber??=??-1;
172????????????????int??lineNumber??=??-1;
173????????????????String??lastClientMsg??=??"";
174????????????????while??((line??=??reader.readLine())??!=??null)??{
175????????????????????????line??=??substituteVariables(line);
176????????????????????????String??location??=??scriptName??+??":"??+??lineNumber;
177????????????????????????if??(SERVER_CONTINUATION_TAG.equals(line))??{
178????????????????????????????????session.CONT(sessionNumber);
179????????????????????????}??else??if??(line.startsWith(CLIENT_TAG))??{
180????????????????????????????????String??clientMsg??=??"";
181????????????????????????????????if??(line.length()??>??3)??{
182????????????????????????????????????????clientMsg??=??line.substring(3);
183????????????????????????????????}
184????????????????????????????????session.CL(sessionNumber,??clientMsg);
185????????????????????????????????lastClientMsg??=??clientMsg;
186????????????????????????}??else??if??(line.startsWith(SERVER_TAG))??{
187????????????????????????????????String??serverMsg??=??"";
188????????????????????????????????if??(line.length()??>??3)??{
189????????????????????????????????????????serverMsg??=??line.substring(3);
190????????????????????????????????}
191????????????????????????????????session.SL(sessionNumber,??serverMsg,??location,??lastClientMsg);
192????????????????????????}??else??if??(line.startsWith(OPEN_UNORDERED_BLOCK_TAG))??{
193????????????????????????????????List<String>??unorderedLines??=??new??ArrayList<String>(5);
194????????????????????????????????line??=??reader.readLine();
195??
196????????????????????????????????while??(!line.startsWith(CLOSE_UNORDERED_BLOCK_TAG))??{
197????????????????????????????????????????if??(!line.startsWith(SERVER_TAG))??{
198????????????????????????????????????????????????throw??new??Exception(
199????????????????????????????????????????????????????????????????"Only??'S:??'??lines??are??permitted??inside??a??'SUB??{'??block.");
200????????????????????????????????????????}
201????????????????????????????????????????String??serverMsg??=??line.substring(3);
202????????????????????????????????????????unorderedLines.add(serverMsg);
203????????????????????????????????????????line??=??reader.readLine();
204????????????????????????????????????????lineNumber++;
205????????????????????????????????}
206??
207????????????????????????????????session.SUB(sessionNumber,??unorderedLines,??location,
208????????????????????????????????????????????????lastClientMsg);
209????????????????????????}??else??if??(line.startsWith(COMMENT_TAG)
210????????????????????????????????????????||??line.trim().length()??==??0)??{
211????????????????????????????????//??ignore??these??lines.
212????????????????????????}??else??if??(line.startsWith(SESSION_TAG))??{
213????????????????????????????????String??number??=??line.substring(SESSION_TAG.length()).trim();
214????????????????????????????????if??(number.length()??==??0)??{
215????????????????????????????????????????throw??new??Exception("No??session??number??specified");
216????????????????????????????????}
217????????????????????????????????sessionNumber??=??Integer.parseInt(number);
218????????????????????????}??else??{
219????????????????????????????????String??prefix??=??line;
220????????????????????????????????if??(line.length()??>??3)??{
221????????????????????????????????????????prefix??=??line.substring(0,??3);
222????????????????????????????????}
223????????????????????????????????throw??new??Exception("Invalid??line??prefix:??"??+??prefix);
224????????????????????????}
225????????????????????????lineNumber++;
226????????????????}
227????????}
228??
229????????/**
230??????????*??Replaces??${<code>NAME</code>}??with??variable??value.
231??????????*??@param??line??not??null
232??????????*??@return??not??null
233??????????*/
234????????private??String??substituteVariables(String??line)??{
235????????????????if??(variables.size()??>??0)??{
236????????????????????????final??StringBuffer??buffer??=??new??StringBuffer(line);
237????????????????????????int??start??=??0;
238????????????????????????int??end??=??0;
239????????????????????????while??(start??>=??0??&&??end??>=??0)??{??
240????????????????????????????????start??=??buffer.indexOf("${",??end);
241????????????????????????????????if??(start??<??0)??{
242????????????????????????????????????????break;
243????????????????????????????????}
244????????????????????????????????end??=??buffer.indexOf("}",??start);
245????????????????????????????????if??(end??<??0)??{
246????????????????????????????????????????break;
247????????????????????????????????}
248????????????????????????????????final??String??name??=??buffer.substring(start+2,??end);
249????????????????????????????????final??String??value??=??variables.getProperty(name);
250????????????????????????????????if??(value??!=??null)??{
251????????????????????????????????????????buffer.replace(start,??end??+??1,??value);
252????????????????????????????????????????final??int??variableLength??=??(end??-??start??+??2);
253????????????????????????????????????????end??=??end??+??(value.length()??-??variableLength);
254????????????????????????????????}
255????????????????????????}
256????????????????????????line??=??buffer.toString();
257????????????????}
258????????????????return??line;
259????????}
260??
261}

[all??classes][org.apache.james.mpt]
EMMA??2.0.5312??(C)??Vladimir??Roubtsov