/protocols/jain-mgcp/stack/src/main/java/org/mobicents/protocols/mgcp/jain/pkg/AUUtils.java

http://mobicents.googlecode.com/ · Java · 1180 lines · 939 code · 99 blank · 142 comment · 738 complexity · 709deae5019a98ee6ca56d832d530dc5 MD5 · raw file

  1. /*
  2. * JBoss, Home of Professional Open Source
  3. * Copyright 2011, Red Hat, Inc. and individual contributors
  4. * by the @authors tag. See the copyright.txt in the distribution for a
  5. * full listing of individual contributors.
  6. *
  7. * This is free software; you can redistribute it and/or modify it
  8. * under the terms of the GNU Lesser General Public License as
  9. * published by the Free Software Foundation; either version 2.1 of
  10. * the License, or (at your option) any later version.
  11. *
  12. * This software is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with this software; if not, write to the Free
  19. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  20. * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  21. */
  22. package org.mobicents.protocols.mgcp.jain.pkg;
  23. import java.util.ArrayList;
  24. import java.util.HashMap;
  25. import java.util.List;
  26. import java.util.Map;
  27. public class AUUtils {
  28. int index = 0;
  29. char[] chars = null;
  30. String rawString = null;
  31. int totalChars = -1;
  32. Value value = null;
  33. AUUtils(String rawString) {
  34. this.rawString = rawString;
  35. System.out.println("rawString = " + rawString);
  36. chars = rawString.toCharArray();
  37. totalChars = chars.length;
  38. value = new EventsValue();
  39. System.out.println("totalChars = " + totalChars);
  40. }
  41. public static void main(String args[]) throws ParserException {
  42. String s = "it=4 an=39<1212,ssss>,40[Lang=dan,gender=female,accent=cajun],47,ts(blaaa),dt(GOOOD),si(asssss)";
  43. AUUtils a = new AUUtils(s);
  44. Value v = a.decode_PlayAnnParmList();
  45. System.out.println("Here it come = " + v.get(ParameterEnum.an) + " " + v.get(ParameterEnum.it));
  46. s = "ip=21 rp=109 nd=102 fa=81 sa=72 dp=#*222 psk=9,nxt sik=*#12345667 na=3";
  47. a = new AUUtils(s);
  48. v = a.decode_PlayColParmList();
  49. System.out.println("Here it come = " + v.get(ParameterEnum.ip) + " " + v.get(ParameterEnum.rp) + " "
  50. + v.get(ParameterEnum.nd) + " " + v.get(ParameterEnum.fa) + " " + v.get(ParameterEnum.sa) + " "
  51. + v.get(ParameterEnum.na) + " " + v.get(ParameterEnum.dp) + " " + v.get(ParameterEnum.psk) + " "
  52. + v.get(ParameterEnum.sik));
  53. }
  54. /*
  55. * ABNF Definition
  56. *
  57. * PlayAnnParmList = PlayAnnParm *( WSP PlayAnnParm ); PlayAnnParm = (
  58. * AnnouncementParm / IterationsParm / IntervalParm / DurationParm /
  59. * SpeedParm / VolumeParm ); AnnouncementParm = AnParmToken EQUALS
  60. * Segmentlist; Segmentlist = SegmentDescriptor *( COMMA SegmentDescriptor );
  61. * SegmentDescriptor = ( ( SegmentId [ EmbedVarList ] [ SegSelectorList ] ) / (
  62. * TextToSpeechSeg [ SegSelectorList ] ) / ( DisplayTextSeg [
  63. * SegSelectorList ] ) / ( VariableSeg [ SegSelectorList ] ) / SilenceSeg );
  64. *
  65. *
  66. * IterationsParm = ItParmToken EQUALS ( NUMBER / "-1" ); IntervalParm =
  67. * IvParmToken EQUALS NUMBER; DurationParm = DuParmToken EQUALS NUMBER;
  68. * SpeedParm = SpParmToken EQUALS SIGNEDINT; VolumeParm = VlParmToken EQUALS
  69. * SIGNEDINT;
  70. */
  71. public Value decode_PlayAnnParmList() throws ParserException {
  72. boolean f = decode_PlayAnnParm();
  73. if (!f) {
  74. throw new ParserException("Parsing of AnnParm failed");
  75. }
  76. while (f) {
  77. f = decode_WSP();
  78. if (f) {
  79. f = decode_PlayAnnParm();
  80. }
  81. }
  82. return value;
  83. }
  84. public Value decode_PlayColParmList() throws ParserException {
  85. // PlayColParmList = PlayColParm *( WSP PlayColParm );
  86. boolean f = decode_PlayColParm();
  87. if (!f) {
  88. throw new ParserException("Parsing of PlayColParm failed");
  89. }
  90. while (f) {
  91. f = decode_WSP();
  92. if (f) {
  93. f = decode_PlayColParm();
  94. }
  95. }
  96. return value;
  97. }
  98. public Value decode_PlayRecParmList() throws ParserException {
  99. // PlayRecParmList = PlayRecParm *( WSP PlayRecParm );
  100. boolean f = decode_PlayRecParm();
  101. if (!f) {
  102. throw new ParserException("Parsing of PlayRecParm failed");
  103. }
  104. while (f) {
  105. f = decode_WSP();
  106. if (f) {
  107. f = decode_PlayRecParm();
  108. }
  109. }
  110. return value;
  111. }
  112. public Value decode_OpCompleteParmList() throws ParserException {
  113. // PlayRecParmList = PlayRecParm *( WSP PlayRecParm );
  114. boolean f = decode_OpCompleteParm();
  115. if (!f) {
  116. throw new ParserException("Parsing of OpCompleteParm failed");
  117. }
  118. while (f) {
  119. f = decode_WSP();
  120. if (f) {
  121. f = decode_OpCompleteParm();
  122. }
  123. }
  124. return value;
  125. }
  126. // Decode Space or HTAB
  127. private boolean decode_WSP() {
  128. boolean decoded = false;
  129. if (index < totalChars && (chars[index] == 0x20 || chars[index] == 0x09)) {
  130. index++;
  131. decoded = true;
  132. }
  133. return decoded;
  134. }
  135. private boolean decode_Segid(AnnouncementParmValue annPaVa) {
  136. boolean decoded = false;
  137. String strSegId = "";
  138. SegmentId segId = null;
  139. if (chars[index] >= '0' && chars[index] <= '9') {
  140. strSegId = strSegId + chars[index];
  141. decoded = true;
  142. index++;
  143. }
  144. if (decoded) {
  145. for (int i = 0; i <= 31; i++) {
  146. if (index < totalChars && (chars[index] >= '0' && chars[index] <= '9')) {
  147. strSegId = strSegId + chars[index];
  148. index++;
  149. } else {
  150. break;
  151. }
  152. }
  153. segId = new SegmentId(strSegId, null);
  154. annPaVa.addSegmentId(segId);
  155. } else if (chars[index] == '/') {
  156. index = index + 1;
  157. decoded = true;
  158. while (chars[index] != '/') {
  159. strSegId = strSegId + chars[index];
  160. index++;
  161. }
  162. segId = new SegmentId(null, strSegId);
  163. annPaVa.addSegmentId(segId);
  164. }
  165. if (decoded && index < totalChars) {
  166. if (chars[index] == '<') {
  167. index = index + 1;
  168. List<String> embedVarList = new ArrayList<String>();
  169. String tmp = "";
  170. while (chars[index] != '>') {
  171. tmp = tmp + chars[index];
  172. index = index + 1;
  173. }
  174. index = index + 1;
  175. String[] s = tmp.split(",");
  176. for (String sTemp : s) {
  177. embedVarList.add(sTemp);
  178. }
  179. segId.setEmbedVarList(embedVarList);
  180. }
  181. if (chars[index] == '[') {
  182. index = index + 1;
  183. Map<String, String> segSelectorMap = new HashMap<String, String>();
  184. String tmp = "";
  185. while (chars[index] != ']') {
  186. tmp = tmp + chars[index];
  187. index = index + 1;
  188. }
  189. index = index + 1;
  190. String[] s = tmp.split(",");
  191. for (String sTemp : s) {
  192. String[] s1 = sTemp.split("=");
  193. segSelectorMap.put(s1[0], s1[1]);
  194. }
  195. segId.setSegSelectorMap(segSelectorMap);
  196. }
  197. }
  198. return decoded;
  199. }
  200. private boolean decode_TextToSpeechSeg(AnnouncementParmValue annPaVa) {
  201. boolean decoded = false;
  202. String textTpSpeech = "";
  203. if (chars[index] == 't' && chars[index + 1] == 's') {
  204. index = index + 3;
  205. while (chars[index] != ')') {
  206. textTpSpeech = textTpSpeech + chars[index];
  207. index++;
  208. }
  209. decoded = true;
  210. index++;
  211. TextToSpeechSeg ts = new TextToSpeechSeg(textTpSpeech);
  212. annPaVa.addTextToSpeechSeg(ts);
  213. if (index < totalChars && chars[index] == '[') {
  214. index = index + 1;
  215. Map<String, String> segSelectorMap = new HashMap<String, String>();
  216. String tmp = "";
  217. while (chars[index] != ']') {
  218. tmp = tmp + chars[index];
  219. index = index + 1;
  220. }
  221. index = index + 1;
  222. String[] s = tmp.split(",");
  223. for (String sTemp : s) {
  224. String[] s1 = sTemp.split("=");
  225. segSelectorMap.put(s1[0], s1[1]);
  226. }
  227. ts.setSegSelectorMap(segSelectorMap);
  228. }
  229. }
  230. return decoded;
  231. }
  232. private boolean decode_DisplayTextSeg(AnnouncementParmValue annPaVa) {
  233. boolean decoded = false;
  234. String displayText = "";
  235. if (chars[index] == 'd' && chars[index + 1] == 't') {
  236. index = index + 3;
  237. while (chars[index] != ')') {
  238. displayText = displayText + chars[index];
  239. index++;
  240. }
  241. decoded = true;
  242. index++;
  243. DisplayTextSeg ds = new DisplayTextSeg(displayText);
  244. annPaVa.addDisplayTextSeg(ds);
  245. if (index < totalChars && chars[index] == '[') {
  246. index = index + 1;
  247. Map<String, String> segSelectorMap = new HashMap<String, String>();
  248. String tmp = "";
  249. while (chars[index] != ']') {
  250. tmp = tmp + chars[index];
  251. index = index + 1;
  252. }
  253. index = index + 1;
  254. String[] s = tmp.split(",");
  255. for (String sTemp : s) {
  256. String[] s1 = sTemp.split("=");
  257. segSelectorMap.put(s1[0], s1[1]);
  258. }
  259. ds.setSegSelectorMap(segSelectorMap);
  260. }
  261. }
  262. return decoded;
  263. }
  264. private boolean decode_SilenceSeg(AnnouncementParmValue annPaVa) {
  265. boolean decoded = false;
  266. if (index < totalChars && chars[index] == 's' && chars[index + 1] == 'i') {
  267. index = index + 3;
  268. String silenceSeg = "";
  269. while (chars[index] != ')') {
  270. silenceSeg = silenceSeg + chars[index];
  271. index++;
  272. }
  273. index++;
  274. SilenceSeg si = new SilenceSeg(silenceSeg);
  275. annPaVa.addSilenceSeg(si);
  276. }
  277. return decoded;
  278. }
  279. // SegmentDescriptor = ( ( SegmentId [ EmbedVarList ] [ SegSelectorList ] )
  280. // / ( TextToSpeechSeg [ SegSelectorList ] ) / ( DisplayTextSeg [
  281. // SegSelectorList ] ) / ( VariableSeg [ SegSelectorList ] ) / SilenceSeg );
  282. private boolean decode_SegmentDescriptor(AnnouncementParmValue annPaVa) throws ParserException {
  283. boolean decoded = false;
  284. decoded = decode_Segid(annPaVa);
  285. if (!decoded) {
  286. decoded = decode_TextToSpeechSeg(annPaVa);
  287. }
  288. if (!decoded) {
  289. decoded = decode_DisplayTextSeg(annPaVa);
  290. }
  291. // TODO VariableSeg impl pending
  292. if (!decoded) {
  293. decoded = decode_SilenceSeg(annPaVa);
  294. }
  295. return decoded;
  296. }
  297. // Segmentlist = SegmentDescriptor *( COMMA SegmentDescriptor );
  298. private boolean decode_Segmentlist(AnnouncementParmValue annPaVa) throws ParserException {
  299. boolean decoded = false;
  300. decoded = decode_SegmentDescriptor(annPaVa);
  301. if (decoded) {
  302. boolean f = true;
  303. while (f && index < totalChars) {
  304. if (chars[index] == ',') {
  305. index++;
  306. f = decode_SegmentDescriptor(annPaVa);
  307. } else {
  308. f = false;
  309. }
  310. }
  311. }
  312. return decoded;
  313. }
  314. /*
  315. * OpCompleteParm = ( VoiceInterruptParm / IntKeySeqParm / NumAttemptsParm /
  316. * AmtPlayedParm / DigitsColParm / RecordingIdParm / ReturnCodeParm );
  317. */
  318. public boolean decode_OpCompleteParm() throws ParserException {
  319. boolean decoded = false;
  320. if (chars[index] == 'v' && chars[index + 1] == 'i') {
  321. // VoiceInterruptParm = ViParmToken EQUALS BOOLSTR;
  322. index = index + 3;
  323. boolean boolStrValue = decode_BOOLSTR();
  324. BooleanValue boolValue = new BooleanValue(ParameterEnum.vi, boolStrValue);
  325. value.put(ParameterEnum.vi, boolValue);
  326. decoded = true;
  327. } else if (chars[index] == 'i' && chars[index + 1] == 'k') {
  328. // IntKeySeqParm = IkParmToken EQUALS CommandKeySequence;
  329. index = index + 3;
  330. String cmdKeySequence = "";
  331. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  332. decoded = true;
  333. cmdKeySequence = cmdKeySequence + chars[index];
  334. index++;
  335. for (int i = 1; i < 3 && (index < totalChars); i++) {
  336. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  337. cmdKeySequence = cmdKeySequence + chars[index];
  338. index++;
  339. } else {
  340. break;
  341. }
  342. }
  343. StringValue s = new StringValue(ParameterEnum.ik, cmdKeySequence);
  344. value.put(ParameterEnum.ik, s);
  345. decoded = true;
  346. } else {
  347. throw new ParserException("Decoding of IntKeySeqParm failed");
  348. }
  349. } else if (chars[index] == 'n' && chars[index + 1] == 'a') {
  350. // NumAttemptsParm = NaParmToken EQUALS NUMBER;
  351. index = index + 3;
  352. int number = decode_NUMBER();
  353. NumberValue n = new NumberValue(ParameterEnum.na, number);
  354. value.put(ParameterEnum.na, n);
  355. decoded = true;
  356. } else if (chars[index] == 'a' && chars[index + 1] == 'p') {
  357. // AmtPlayedParm = ApParmToken EQUALS NUMBER;
  358. index = index + 3;
  359. int number = decode_NUMBER();
  360. NumberValue n = new NumberValue(ParameterEnum.ap, number);
  361. value.put(ParameterEnum.ap, n);
  362. decoded = true;
  363. } else if (chars[index] == 'd' && chars[index + 1] == 'c') {
  364. // DigitsColParm = DcParmToken EQUALS KeySequence;
  365. index = index + 3;
  366. String keySequence = "";
  367. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  368. decoded = true;
  369. keySequence = keySequence + chars[index];
  370. index++;
  371. for (int i = 1; i < 64 && (index < totalChars); i++) {
  372. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  373. keySequence = keySequence + chars[index];
  374. index++;
  375. } else {
  376. break;
  377. }
  378. }
  379. StringValue s = new StringValue(ParameterEnum.dc, keySequence);
  380. value.put(ParameterEnum.dc, s);
  381. decoded = true;
  382. } else {
  383. throw new ParserException("Decoding of DigitsColParm failed");
  384. }
  385. } else if (chars[index] == 'r' && chars[index + 1] == 'i') {
  386. // RecordingIdParm = RiParmToken EQUALS NUMBER;
  387. index = index + 3;
  388. int number = decode_NUMBER();
  389. NumberValue n = new NumberValue(ParameterEnum.ri, number);
  390. value.put(ParameterEnum.ri, n);
  391. decoded = true;
  392. } else if (chars[index] == 'r' && chars[index + 1] == 'c') {
  393. // ReturnCodeParm = RcParmToken EQUALS 3*3(DIGIT);
  394. index = index + 3;
  395. String rc = "";
  396. if (chars[index] >= '0' && chars[index] <= '9') {
  397. rc = rc + chars[index];
  398. index++;
  399. if (chars[index] >= '0' && chars[index] <= '9') {
  400. rc = rc + chars[index];
  401. index++;
  402. if (chars[index] >= '0' && chars[index] <= '9') {
  403. rc = rc + chars[index];
  404. index++;
  405. try {
  406. int number = Integer.parseInt(rc);
  407. NumberValue n = new NumberValue(ParameterEnum.rc, number);
  408. value.put(ParameterEnum.rc, n);
  409. decoded = true;
  410. } catch (NumberFormatException e) {
  411. throw new ParserException(
  412. "Decoding of ReturnCodeParm failed. The Return code is not number");
  413. }
  414. } else {
  415. throw new ParserException("Decoding of ReturnCodeParm failed");
  416. }
  417. } else {
  418. throw new ParserException("Decoding of ReturnCodeParm failed");
  419. }
  420. } else {
  421. throw new ParserException("Decoding of ReturnCodeParm failed");
  422. }
  423. } else {
  424. throw new ParserException("Decoding of PlayRecParm failed");
  425. }
  426. return decoded;
  427. }
  428. /*
  429. * PlayRecParm = ( InitPromptParm / RepromptParm / NoSpeechParm /
  430. * FailAnnParm / SuccessAnnParm / NoInterruptParm / SpeedParm / VolumeParm /
  431. * ClearBufferParm / PreSpeechParm / PostSpeechParm / RecordLenParm /
  432. * RestartKeyParm / ReinputKeyParm / ReturnKeyParm / PosKeyParm /
  433. * StopKeyParm / EndInputKeyParm / RecPersistParm / OverrideAudioParm /
  434. * RestoreAudioParm / DeletePersistParm / NumAttemptsParm );
  435. */
  436. public boolean decode_PlayRecParm() throws ParserException {
  437. boolean decoded = false;
  438. if (chars[index] == 'i' && chars[index + 1] == 'p') {
  439. index = index + 3;
  440. AnnouncementParmValue annPaVa = new AnnouncementParmValue(ParameterEnum.ip);
  441. value.put(ParameterEnum.ip, annPaVa);
  442. // InitPromptParm = IpParmToken EQUALS Segmentlist;
  443. decoded = decode_Segmentlist(annPaVa);
  444. } else if (chars[index] == 'r' && chars[index + 1] == 'p') {
  445. index = index + 3;
  446. AnnouncementParmValue annPaVa = new AnnouncementParmValue(ParameterEnum.rp);
  447. value.put(ParameterEnum.rp, annPaVa);
  448. // RepromptParm = RpParmToken EQUALS Segmentlist;;
  449. decoded = decode_Segmentlist(annPaVa);
  450. } else if (chars[index] == 'n' && chars[index + 1] == 's') {
  451. // NoSpeechParm = NsParmToken EQUALS Segmentlist;
  452. index = index + 3;
  453. AnnouncementParmValue annPaVa = new AnnouncementParmValue(ParameterEnum.ns);
  454. value.put(ParameterEnum.ns, annPaVa);
  455. decoded = decode_Segmentlist(annPaVa);
  456. } else if (chars[index] == 'f' && chars[index + 1] == 'a') {
  457. index = index + 3;
  458. AnnouncementParmValue annPaVa = new AnnouncementParmValue(ParameterEnum.fa);
  459. value.put(ParameterEnum.fa, annPaVa);
  460. // FailAnnParm = FaParmToken EQUALS Segmentlist;
  461. decoded = decode_Segmentlist(annPaVa);
  462. } else if (chars[index] == 's' && chars[index + 1] == 'a') {
  463. index = index + 3;
  464. AnnouncementParmValue annPaVa = new AnnouncementParmValue(ParameterEnum.sa);
  465. value.put(ParameterEnum.sa, annPaVa);
  466. // SuccessAnnParm = SaParmToken EQUALS Segmentlist;
  467. decoded = decode_Segmentlist(annPaVa);
  468. } else if (chars[index] == 'n' && chars[index + 1] == 'i') {
  469. index = index + 3;
  470. // NoInterruptParm = NiParmToken EQUALS BOOLSTR;
  471. boolean boolStrValue = decode_BOOLSTR();
  472. BooleanValue boolValue = new BooleanValue(ParameterEnum.ni, boolStrValue);
  473. value.put(ParameterEnum.ni, boolValue);
  474. decoded = true;
  475. } else if (chars[index] == 's' && chars[index + 1] == 'p') {
  476. index = index + 3;
  477. // SpeedParm = SpParmToken EQUALS SIGNEDINT;
  478. String s = decode_SIGNEDINT();
  479. StringValue sValue = new StringValue(ParameterEnum.sp, s);
  480. value.put(ParameterEnum.sp, sValue);
  481. decoded = true;
  482. } else if (chars[index] == 'v' && chars[index + 1] == 'l') {
  483. index = index + 3;
  484. // VolumeParm = VlParmToken EQUALS SIGNEDINT;
  485. String s = decode_SIGNEDINT();
  486. StringValue sValue = new StringValue(ParameterEnum.vl, s);
  487. value.put(ParameterEnum.vl, sValue);
  488. decoded = true;
  489. } else if (chars[index] == 'c' && chars[index + 1] == 'b') {
  490. index = index + 3;
  491. // ClearBufferParm = CbParmToken EQUALS BOOLSTR;
  492. boolean boolStrValue = decode_BOOLSTR();
  493. BooleanValue boolValue = new BooleanValue(ParameterEnum.cb, boolStrValue);
  494. value.put(ParameterEnum.cb, boolValue);
  495. decoded = true;
  496. } else if (chars[index] == 'p' && chars[index + 1] == 'r' && chars[index + 2] == 't') {
  497. // PreSpeechParm = PrtParmToken EQUALS NUMBER;
  498. index = index + 4;
  499. int number = decode_NUMBER();
  500. NumberValue n = new NumberValue(ParameterEnum.prt, number);
  501. value.put(ParameterEnum.prt, n);
  502. decoded = true;
  503. } else if (chars[index] == 'p' && chars[index + 1] == 's' && chars[index + 2] == 't') {
  504. // PostSpeechParm = PstParmToken EQUALS NUMBER;
  505. index = index + 4;
  506. int number = decode_NUMBER();
  507. NumberValue n = new NumberValue(ParameterEnum.pst, number);
  508. value.put(ParameterEnum.pst, n);
  509. decoded = true;
  510. } else if (chars[index] == 'r' && chars[index + 1] == 'l' && chars[index + 2] == 't') {
  511. // RecordLenParm = RltParmToken EQUALS NUMBER;
  512. index = index + 4;
  513. int number = decode_NUMBER();
  514. NumberValue n = new NumberValue(ParameterEnum.rlt, number);
  515. value.put(ParameterEnum.rlt, n);
  516. decoded = true;
  517. } else if (chars[index] == 'r' && chars[index + 1] == 's' && chars[index + 2] == 'k') {
  518. // RestartKeyParm = RskParmToken EQUALS CommandKeySequence;
  519. index = index + 4;
  520. String cmdKeySequence = "";
  521. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  522. decoded = true;
  523. cmdKeySequence = cmdKeySequence + chars[index];
  524. index++;
  525. for (int i = 1; i < 3 && (index < totalChars); i++) {
  526. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  527. cmdKeySequence = cmdKeySequence + chars[index];
  528. index++;
  529. } else {
  530. break;
  531. }
  532. }
  533. StringValue s = new StringValue(ParameterEnum.rsk, cmdKeySequence);
  534. value.put(ParameterEnum.rsk, s);
  535. decoded = true;
  536. } else {
  537. throw new ParserException("Decoding of RestartKeyParm failed");
  538. }
  539. } else if (chars[index] == 'r' && chars[index + 1] == 'i' && chars[index + 2] == 'k') {
  540. // ReinputKeyParm = RikParmToken EQUALS CommandKeySequence;
  541. index = index + 4;
  542. String cmdKeySequence = "";
  543. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  544. decoded = true;
  545. cmdKeySequence = cmdKeySequence + chars[index];
  546. index++;
  547. for (int i = 1; i < 3 && (index < totalChars); i++) {
  548. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  549. cmdKeySequence = cmdKeySequence + chars[index];
  550. index++;
  551. } else {
  552. break;
  553. }
  554. }
  555. StringValue s = new StringValue(ParameterEnum.rik, cmdKeySequence);
  556. value.put(ParameterEnum.rik, s);
  557. decoded = true;
  558. } else {
  559. throw new ParserException("Decoding of ReinputKeyParm failed");
  560. }
  561. } else if (chars[index] == 'r' && chars[index + 1] == 't' && chars[index + 2] == 'k') {
  562. // ReturnKeyParm = RtkParmToken EQUALS CommandKeySequence;
  563. index = index + 4;
  564. String cmdKeySequence = "";
  565. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  566. decoded = true;
  567. cmdKeySequence = cmdKeySequence + chars[index];
  568. index++;
  569. for (int i = 1; i < 3 && (index < totalChars); i++) {
  570. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  571. cmdKeySequence = cmdKeySequence + chars[index];
  572. index++;
  573. } else {
  574. break;
  575. }
  576. }
  577. StringValue s = new StringValue(ParameterEnum.rtk, cmdKeySequence);
  578. value.put(ParameterEnum.rtk, s);
  579. decoded = true;
  580. } else {
  581. throw new ParserException("Decoding of ReinputKeyParm failed");
  582. }
  583. } else if (chars[index] == 'p' && chars[index + 1] == 's' && chars[index + 2] == 'k') {
  584. // PosKeyParm = PskParmToken EQUALS KeyPadKey COMMA
  585. // PosKeyAction;
  586. index = index + 4;
  587. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  588. String keyPadKey = String.valueOf(chars[index]);
  589. String posKeyAction = null;
  590. index++;
  591. if (chars[index] == ',') {
  592. index++;
  593. // PosKeyAction = FirstSegmentToken / LastSegmentToken /
  594. // PreviousSegmentToken / NextSegmentToken /
  595. // CurrentSegmentToken;
  596. if (chars[index] == 'f' && chars[index + 1] == 's' && chars[index + 2] == 't') {
  597. posKeyAction = "fst";
  598. index = index + 3;
  599. } else if (chars[index] == 'l' && chars[index + 1] == 's' && chars[index + 2] == 't') {
  600. posKeyAction = "lst";
  601. index = index + 3;
  602. } else if (chars[index] == 'p' && chars[index + 1] == 'r' && chars[index + 2] == 'v') {
  603. posKeyAction = "prv";
  604. index = index + 3;
  605. } else if (chars[index] == 'n' && chars[index + 1] == 'x' && chars[index + 2] == 't') {
  606. posKeyAction = "nxt";
  607. index = index + 3;
  608. } else if (chars[index] == 'c' && chars[index + 1] == 'u' && chars[index + 2] == 'r') {
  609. posKeyAction = "cur";
  610. index = index + 3;
  611. } else {
  612. throw new ParserException("Decoding of PosKeyParm's PosKeyAction failed");
  613. }
  614. PosKeyValue p = new PosKeyValue(ParameterEnum.psk, keyPadKey, posKeyAction);
  615. value.put(ParameterEnum.psk, p);
  616. decoded = true;
  617. } else {
  618. throw new ParserException("Decoding of PosKeyParm failed. No comma found after KeyPadKey");
  619. }
  620. } else {
  621. throw new ParserException("Decoding of PosKeyParm failed");
  622. }
  623. } else if (chars[index] == 's' && chars[index + 1] == 't' && chars[index + 2] == 'k') {
  624. // StopKeyParm = StkParmToken EQUALS KeyPadKey;
  625. index = index + 4;
  626. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  627. StringValue s = new StringValue(ParameterEnum.stk, String.valueOf(chars[index]));
  628. value.put(ParameterEnum.stk, s);
  629. index++;
  630. decoded = true;
  631. } else {
  632. throw new ParserException("Decoding of StopKeyParm failed.");
  633. }
  634. } else if (chars[index] == 'e' && chars[index + 1] == 'i' && chars[index + 2] == 'k') {
  635. // EndInputKeyParm = EikParmToken EQUALS KeyPadKey;
  636. index = index + 4;
  637. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  638. StringValue s = new StringValue(ParameterEnum.eik, String.valueOf(chars[index]));
  639. value.put(ParameterEnum.eik, s);
  640. index++;
  641. decoded = true;
  642. } else {
  643. throw new ParserException("Decoding of EndInputKeyParm failed.");
  644. }
  645. } else if (chars[index] == 'e' && chars[index + 1] == 'i' && chars[index + 2] == 'k') {
  646. // RecPersistParm = RpaParmToken EQUALS BOOLSTR;
  647. index = index + 4;
  648. boolean boolStrValue = decode_BOOLSTR();
  649. BooleanValue boolValue = new BooleanValue(ParameterEnum.eik, boolStrValue);
  650. value.put(ParameterEnum.eik, boolValue);
  651. decoded = true;
  652. } else if (chars[index] == 'o' && chars[index + 1] == 'a') {
  653. // OverrideAudioParm = OaParmToken EQUALS SEGID;
  654. int number = decode_NUMBER();
  655. NumberValue n = new NumberValue(ParameterEnum.oa, number);
  656. value.put(ParameterEnum.oa, n);
  657. decoded = true;
  658. } else if (chars[index] == 'r' && chars[index + 1] == 'a') {
  659. // RestoreAudioParm = RaParmToken EQUALS SEGID;
  660. int number = decode_NUMBER();
  661. NumberValue n = new NumberValue(ParameterEnum.ra, number);
  662. value.put(ParameterEnum.ra, n);
  663. decoded = true;
  664. } else if (chars[index] == 'd' && chars[index + 1] == 'p' && chars[index + 2] == 'a') {
  665. // DeletePersistParm = DpaParmToken EQUALS SEGID;
  666. int number = decode_NUMBER();
  667. NumberValue n = new NumberValue(ParameterEnum.dpa, number);
  668. value.put(ParameterEnum.dpa, n);
  669. decoded = true;
  670. } else if (chars[index] == 'n' && chars[index + 1] == 'a') {
  671. // NumAttemptsParm = NaParmToken EQUALS NUMBER;
  672. index = index + 3;
  673. int number = decode_NUMBER();
  674. NumberValue n = new NumberValue(ParameterEnum.na, number);
  675. value.put(ParameterEnum.na, n);
  676. decoded = true;
  677. } else {
  678. throw new ParserException("Decoding of PlayRecParm failed");
  679. }
  680. return decoded;
  681. }
  682. /*
  683. * PlayColParm = ( InitPromptParm / RepromptParm / NoDigitsParm /
  684. * FailAnnParm / SuccessAnnParm / NoInterruptParm / SpeedParm / VolumeParm /
  685. * ClearBufferParm / MaxDigitsParm / MinDigitsParm / DigitPatternParm /
  686. * FirstDigitParm / InterDigitParm / ExtraDigitParm / RestartKeyParm /
  687. * ReinputKeyParm / ReturnKeyParm / PosKeyParm / StopKeyParm /
  688. * StartInputKeyParm / EndInputKeyParm / IncludeEndInputKey /
  689. * NumAttemptsParm );
  690. */
  691. private boolean decode_PlayColParm() throws ParserException {
  692. boolean decoded = false;
  693. if (index < totalChars) {
  694. if (chars[index] == 'i' && chars[index + 1] == 'p') {
  695. index = index + 3;
  696. AnnouncementParmValue annPaVa = new AnnouncementParmValue(ParameterEnum.ip);
  697. value.put(ParameterEnum.ip, annPaVa);
  698. // InitPromptParm = IpParmToken EQUALS Segmentlist;
  699. decoded = decode_Segmentlist(annPaVa);
  700. } else if (chars[index] == 'r' && chars[index + 1] == 'p') {
  701. index = index + 3;
  702. AnnouncementParmValue annPaVa = new AnnouncementParmValue(ParameterEnum.rp);
  703. value.put(ParameterEnum.rp, annPaVa);
  704. // RepromptParm = RpParmToken EQUALS Segmentlist;;
  705. decoded = decode_Segmentlist(annPaVa);
  706. } else if (chars[index] == 'n' && chars[index + 1] == 'd') {
  707. index = index + 3;
  708. AnnouncementParmValue annPaVa = new AnnouncementParmValue(ParameterEnum.nd);
  709. value.put(ParameterEnum.nd, annPaVa);
  710. // NoDigitsParm = NdParmToken EQUALS Segmentlist;
  711. decoded = decode_Segmentlist(annPaVa);
  712. } else if (chars[index] == 'f' && chars[index + 1] == 'a') {
  713. index = index + 3;
  714. AnnouncementParmValue annPaVa = new AnnouncementParmValue(ParameterEnum.fa);
  715. value.put(ParameterEnum.fa, annPaVa);
  716. // FailAnnParm = FaParmToken EQUALS Segmentlist;
  717. decoded = decode_Segmentlist(annPaVa);
  718. } else if (chars[index] == 's' && chars[index + 1] == 'a') {
  719. index = index + 3;
  720. AnnouncementParmValue annPaVa = new AnnouncementParmValue(ParameterEnum.sa);
  721. value.put(ParameterEnum.sa, annPaVa);
  722. // SuccessAnnParm = SaParmToken EQUALS Segmentlist;
  723. decoded = decode_Segmentlist(annPaVa);
  724. } else if (chars[index] == 'n' && chars[index + 1] == 'i') {
  725. index = index + 3;
  726. // NoInterruptParm = NiParmToken EQUALS BOOLSTR;
  727. boolean boolStrValue = decode_BOOLSTR();
  728. BooleanValue boolValue = new BooleanValue(ParameterEnum.ni, boolStrValue);
  729. value.put(ParameterEnum.ni, boolValue);
  730. decoded = true;
  731. } else if (chars[index] == 's' && chars[index + 1] == 'p') {
  732. index = index + 3;
  733. // SpeedParm = SpParmToken EQUALS SIGNEDINT;
  734. String s = decode_SIGNEDINT();
  735. StringValue sValue = new StringValue(ParameterEnum.sp, s);
  736. value.put(ParameterEnum.sp, sValue);
  737. decoded = true;
  738. } else if (chars[index] == 'v' && chars[index + 1] == 'l') {
  739. index = index + 3;
  740. // VolumeParm = VlParmToken EQUALS SIGNEDINT;
  741. String s = decode_SIGNEDINT();
  742. StringValue sValue = new StringValue(ParameterEnum.vl, s);
  743. value.put(ParameterEnum.vl, sValue);
  744. decoded = true;
  745. } else if (chars[index] == 'c' && chars[index + 1] == 'b') {
  746. index = index + 3;
  747. // ClearBufferParm = CbParmToken EQUALS BOOLSTR;
  748. boolean boolStrValue = decode_BOOLSTR();
  749. BooleanValue boolValue = new BooleanValue(ParameterEnum.cb, boolStrValue);
  750. value.put(ParameterEnum.cb, boolValue);
  751. decoded = true;
  752. } else if (chars[index] == 'm' && chars[index + 1] == 'x') {
  753. index = index + 3;
  754. // MaxDigitsParm = MxParmToken EQUALS NUMBER;
  755. int number = decode_NUMBER();
  756. NumberValue n = new NumberValue(ParameterEnum.mx, number);
  757. value.put(ParameterEnum.mx, n);
  758. decoded = true;
  759. } else if (chars[index] == 'm' && chars[index + 1] == 'n') {
  760. // MinDigitsParm = MnParmToken EQUALS NUMBER;
  761. index = index + 3;
  762. int number = decode_NUMBER();
  763. NumberValue n = new NumberValue(ParameterEnum.mn, number);
  764. value.put(ParameterEnum.mn, n);
  765. decoded = true;
  766. } else if (chars[index] == 'd' && chars[index + 1] == 'p') {
  767. // DigitPatternParm = DpParmToken EQUALS DIGITPATTERN;
  768. // DIGITPATTERN = DigitString *(DigitString) ;
  769. // DigitString = DIGIT / "*" / "#" / "A" / "B" / "C" / "D";
  770. index = index + 3;
  771. String digitPattern = "";
  772. while (!(chars[index] == 0x20 || chars[index] == 0x09)) {
  773. digitPattern = digitPattern + chars[index];
  774. index++;
  775. }
  776. decoded = true;
  777. StringValue s = new StringValue(ParameterEnum.dp, digitPattern);
  778. value.put(ParameterEnum.dp, s);
  779. } else if (chars[index] == 'f' && chars[index + 1] == 'd' && chars[index + 2] == 't') {
  780. // FirstDigitParm = FdtParmToken EQUALS NUMBER;
  781. index = index + 4;
  782. int number = decode_NUMBER();
  783. NumberValue n = new NumberValue(ParameterEnum.fdt, number);
  784. value.put(ParameterEnum.fdt, n);
  785. decoded = true;
  786. } else if (chars[index] == 'i' && chars[index + 1] == 'd' && chars[index + 2] == 't') {
  787. // InterDigitParm = IdtParmToken EQUALS NUMBER;
  788. index = index + 4;
  789. int number = decode_NUMBER();
  790. NumberValue n = new NumberValue(ParameterEnum.idt, number);
  791. value.put(ParameterEnum.idt, n);
  792. decoded = true;
  793. } else if (chars[index] == 'e' && chars[index + 1] == 'd' && chars[index + 2] == 't') {
  794. // ExtraDigitParm = EdtParmToken EQUALS NUMBER;
  795. index = index + 4;
  796. int number = decode_NUMBER();
  797. NumberValue n = new NumberValue(ParameterEnum.edt, number);
  798. value.put(ParameterEnum.edt, n);
  799. decoded = true;
  800. } else if (chars[index] == 'r' && chars[index + 1] == 's' && chars[index + 2] == 'k') {
  801. // RestartKeyParm = RskParmToken EQUALS CommandKeySequence;
  802. index = index + 4;
  803. String cmdKeySequence = "";
  804. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  805. decoded = true;
  806. cmdKeySequence = cmdKeySequence + chars[index];
  807. index++;
  808. for (int i = 1; i < 3 && (index < totalChars); i++) {
  809. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  810. cmdKeySequence = cmdKeySequence + chars[index];
  811. index++;
  812. } else {
  813. break;
  814. }
  815. }
  816. StringValue s = new StringValue(ParameterEnum.rsk, cmdKeySequence);
  817. value.put(ParameterEnum.rsk, s);
  818. decoded = true;
  819. } else {
  820. throw new ParserException("Decoding of RestartKeyParm failed");
  821. }
  822. } else if (chars[index] == 'r' && chars[index + 1] == 'i' && chars[index + 2] == 'k') {
  823. // ReinputKeyParm = RikParmToken EQUALS CommandKeySequence;
  824. index = index + 4;
  825. String cmdKeySequence = "";
  826. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  827. decoded = true;
  828. cmdKeySequence = cmdKeySequence + chars[index];
  829. index++;
  830. for (int i = 1; i < 3 && (index < totalChars); i++) {
  831. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  832. cmdKeySequence = cmdKeySequence + chars[index];
  833. index++;
  834. } else {
  835. break;
  836. }
  837. }
  838. StringValue s = new StringValue(ParameterEnum.rik, cmdKeySequence);
  839. value.put(ParameterEnum.rik, s);
  840. decoded = true;
  841. } else {
  842. throw new ParserException("Decoding of ReinputKeyParm failed");
  843. }
  844. } else if (chars[index] == 'r' && chars[index + 1] == 't' && chars[index + 2] == 'k') {
  845. // ReturnKeyParm = RtkParmToken EQUALS CommandKeySequence;
  846. index = index + 4;
  847. String cmdKeySequence = "";
  848. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  849. decoded = true;
  850. cmdKeySequence = cmdKeySequence + chars[index];
  851. index++;
  852. for (int i = 1; i < 3 && (index < totalChars); i++) {
  853. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  854. cmdKeySequence = cmdKeySequence + chars[index];
  855. index++;
  856. } else {
  857. break;
  858. }
  859. }
  860. StringValue s = new StringValue(ParameterEnum.rtk, cmdKeySequence);
  861. value.put(ParameterEnum.rtk, s);
  862. decoded = true;
  863. } else {
  864. throw new ParserException("Decoding of ReinputKeyParm failed");
  865. }
  866. } else if (chars[index] == 'p' && chars[index + 1] == 's' && chars[index + 2] == 'k') {
  867. // PosKeyParm = PskParmToken EQUALS KeyPadKey COMMA
  868. // PosKeyAction;
  869. index = index + 4;
  870. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  871. String keyPadKey = String.valueOf(chars[index]);
  872. String posKeyAction = null;
  873. index++;
  874. if (chars[index] == ',') {
  875. index++;
  876. // PosKeyAction = FirstSegmentToken / LastSegmentToken /
  877. // PreviousSegmentToken / NextSegmentToken /
  878. // CurrentSegmentToken;
  879. if (chars[index] == 'f' && chars[index + 1] == 's' && chars[index + 2] == 't') {
  880. posKeyAction = "fst";
  881. index = index + 3;
  882. } else if (chars[index] == 'l' && chars[index + 1] == 's' && chars[index + 2] == 't') {
  883. posKeyAction = "lst";
  884. index = index + 3;
  885. } else if (chars[index] == 'p' && chars[index + 1] == 'r' && chars[index + 2] == 'v') {
  886. posKeyAction = "prv";
  887. index = index + 3;
  888. } else if (chars[index] == 'n' && chars[index + 1] == 'x' && chars[index + 2] == 't') {
  889. posKeyAction = "nxt";
  890. index = index + 3;
  891. } else if (chars[index] == 'c' && chars[index + 1] == 'u' && chars[index + 2] == 'r') {
  892. posKeyAction = "cur";
  893. index = index + 3;
  894. } else {
  895. throw new ParserException("Decoding of PosKeyParm's PosKeyAction failed");
  896. }
  897. PosKeyValue p = new PosKeyValue(ParameterEnum.psk, keyPadKey, posKeyAction);
  898. value.put(ParameterEnum.psk, p);
  899. decoded = true;
  900. } else {
  901. throw new ParserException("Decoding of PosKeyParm failed. No comma found after KeyPadKey");
  902. }
  903. } else {
  904. throw new ParserException("Decoding of PosKeyParm failed");
  905. }
  906. } else if (chars[index] == 's' && chars[index + 1] == 't' && chars[index + 2] == 'k') {
  907. // StopKeyParm = StkParmToken EQUALS KeyPadKey;
  908. index = index + 4;
  909. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  910. StringValue s = new StringValue(ParameterEnum.stk, String.valueOf(chars[index]));
  911. value.put(ParameterEnum.stk, s);
  912. index++;
  913. decoded = true;
  914. } else {
  915. throw new ParserException("Decoding of StopKeyParm failed.");
  916. }
  917. } else if (chars[index] == 's' && chars[index + 1] == 'i' && chars[index + 2] == 'k') {
  918. // StartInputKeyParm = SikParmToken EQUALS KeySet;
  919. index = index + 4;
  920. // KeySet = 1*11(KeyPadKey);
  921. String keySet = "";
  922. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  923. keySet = keySet + chars[index];
  924. index++;
  925. for (int i = 1; i < 11 && (!(chars[index] == 0x20 || chars[index] == 0x09)); i++) {
  926. keySet = keySet + chars[index];
  927. index++;
  928. }
  929. StringValue s = new StringValue(ParameterEnum.sik, keySet);
  930. value.put(ParameterEnum.sik, s);
  931. decoded = true;
  932. } else {
  933. throw new ParserException("Decoding of StartInputKeyParm failed.");
  934. }
  935. } else if (chars[index] == 'e' && chars[index + 1] == 'i' && chars[index + 2] == 'k') {
  936. // EndInputKeyParm = EikParmToken EQUALS KeyPadKey;
  937. index = index + 4;
  938. if ((chars[index] >= '0' && chars[index] <= '9') || chars[index] == '*' || chars[index] == '#') {
  939. StringValue s = new StringValue(ParameterEnum.eik, String.valueOf(chars[index]));
  940. value.put(ParameterEnum.eik, s);
  941. index++;
  942. decoded = true;
  943. } else {
  944. throw new ParserException("Decoding of EndInputKeyParm failed.");
  945. }
  946. } else if (chars[index] == 'i' && chars[index + 1] == 'e' && chars[index + 2] == 'k') {
  947. // IncludeEndinputKey = IekParmToken EQUALS BOOLSTR;
  948. index = index + 4;
  949. boolean boolStrValue = decode_BOOLSTR();
  950. BooleanValue boolValue = new BooleanValue(ParameterEnum.iek, boolStrValue);
  951. value.put(ParameterEnum.iek, boolValue);
  952. decoded = true;
  953. } else if (chars[index] == 'n' && chars[index + 1] == 'a') {
  954. // NumAttemptsParm = NaParmToken EQUALS NUMBER;
  955. index = index + 3;
  956. int number = decode_NUMBER();
  957. NumberValue n = new NumberValue(ParameterEnum.na, number);
  958. value.put(ParameterEnum.na, n);
  959. decoded = true;
  960. } else {
  961. throw new ParserException("Decoding of PlayColParm failed");
  962. }
  963. }
  964. return decoded;
  965. }
  966. private boolean decode_BOOLSTR() throws ParserException {
  967. boolean value = false;
  968. if (chars[index] == 't' && chars[index + 1] == 'r' && chars[index + 2] == 'u' && chars[index + 3] == 'e') {
  969. value = true;
  970. index = index + 5;
  971. } else if (chars[index] == 'f' && chars[index + 1] == 'a' && chars[index + 2] == 'l' && chars[index + 3] == 's'
  972. && chars[index + 3] == 'e') {
  973. value = false;
  974. index = index + 6;
  975. } else {
  976. throw new ParserException("Parsing of BOOLSTR failed");
  977. }
  978. return value;
  979. }
  980. private String decode_SIGNEDINT() throws ParserException {
  981. String sign = "";
  982. if (chars[index] == '+') {
  983. sign = "+";
  984. index++;
  985. } else if (chars[index] == '-') {
  986. sign = "-";
  987. index++;
  988. } else {
  989. throw new ParserException("Parsing of SIGNEDINT failed");
  990. }
  991. return (sign + decode_NUMBER());
  992. }
  993. private int decode_NUMBER() throws ParserException {
  994. boolean decoded = false;
  995. String number = "";
  996. int num = 0;
  997. if (chars[index] >= '0' && chars[index] <= '9') {
  998. number = number + chars[index];
  999. index++;
  1000. decoded = true;
  1001. for (int i = 0; i < 31 && decoded && (index < totalChars); i++) {
  1002. if (chars[index] >= '0' && chars[index] <= '9') {
  1003. number = number + chars[index];
  1004. index++;
  1005. decoded = true;
  1006. } else {
  1007. decoded = false;
  1008. }
  1009. }
  1010. try {
  1011. num = Integer.parseInt(number);
  1012. } catch (NumberFormatException e) {
  1013. throw new ParserException("decode_NUMBER failed");
  1014. }
  1015. } else {
  1016. throw new ParserException("decode_NUMBER failed");
  1017. }
  1018. return num;
  1019. }
  1020. /*
  1021. * PlayAnnParm = ( AnnouncementParm / IterationsParm / IntervalParm /
  1022. * DurationParm / SpeedParm / VolumeParm );
  1023. */
  1024. private boolean decode_PlayAnnParm() throws ParserException {
  1025. boolean decoded = false;
  1026. if (index < totalChars) {
  1027. if (chars[index] == 'a' && chars[index + 1] == 'n') {
  1028. index = index + 3;
  1029. AnnouncementParmValue annPaVa = new AnnouncementParmValue(ParameterEnum.an);
  1030. value.put(ParameterEnum.an, annPaVa);
  1031. decoded = decode_Segmentlist(annPaVa);
  1032. } else if (chars[index] == 'i' && chars[index + 1] == 't') {
  1033. index = index + 3;
  1034. // IterationsParm = ItParmToken EQUALS ( NUMBER / "-1" );
  1035. if (index < totalChars && chars[index] == '-') {
  1036. NumberValue temp = new NumberValue(ParameterEnum.it, -1);
  1037. value.put(ParameterEnum.it, temp);
  1038. index = index + 3;
  1039. decoded = true;
  1040. } else {
  1041. int interval = decode_NUMBER();
  1042. NumberValue temp = new NumberValue(ParameterEnum.it, interval);
  1043. value.put(ParameterEnum.it, temp);
  1044. decoded = true;
  1045. }
  1046. } else if (chars[index] == 'i' && chars[index + 1] == 'v') {
  1047. index = index + 3;
  1048. // IntervalParm = IvParmToken EQUALS NUMBER;
  1049. decoded = true;
  1050. int interval = decode_NUMBER();
  1051. NumberValue temp = new NumberValue(ParameterEnum.iv, interval);
  1052. value.put(ParameterEnum.iv, temp);
  1053. } else if (chars[index] == 'd' && chars[index + 1] == 'u') {
  1054. index = index + 3;
  1055. // DurationParm = DuParmToken EQUALS NUMBER;
  1056. decoded = true;
  1057. int interval = decode_NUMBER();
  1058. NumberValue temp = new NumberValue(ParameterEnum.du, interval);
  1059. value.put(ParameterEnum.du, temp);
  1060. } else if (chars[index] == 's' && chars[index + 1] == 'p') {
  1061. // SpeedParm = SpParmToken EQUALS SIGNEDINT;
  1062. index = index + 3;
  1063. String num = decode_SIGNEDINT();
  1064. decoded = true;
  1065. StringValue temp = new StringValue(ParameterEnum.sp, num);
  1066. value.put(ParameterEnum.sp, temp);
  1067. } else if (chars[index] == 'v' && chars[index + 1] == 'l') {
  1068. // VolumeParm = VlParmToken EQUALS SIGNEDINT;
  1069. index = index + 3;
  1070. String num = decode_SIGNEDINT();
  1071. decoded = true;
  1072. StringValue temp = new StringValue(ParameterEnum.vl, num);
  1073. value.put(ParameterEnum.vl, temp);
  1074. } else {
  1075. throw new ParserException(
  1076. "PlayAnn decoding failed. None of AnnouncementParm / IterationsParm / IntervalParm / DurationParm / SpeedParm / VolumeParm found");
  1077. }
  1078. }
  1079. return decoded;
  1080. }
  1081. }