1 package org.apache.myfaces.custom.ppr;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.List;
6
7
8
9
10 public class PartialTriggerParser
11 {
12
13 public List parse(String partialTriggerString)
14 {
15
16 int lastTokenEnd = 0;
17 boolean subLevelMode = false;
18
19 List partialTriggers = new ArrayList();
20 PartialTrigger currentTrigger = null;
21
22 for (int i = 0, length = partialTriggerString.length(); i <= length; i++) {
23 boolean newTokenMode = false;
24 boolean endTopLevelMode = false;
25 boolean endSubLevelMode = false;
26
27 if (!(i == partialTriggerString.length())) {
28 char c = partialTriggerString.charAt(i);
29
30 if (c == ',' || c == ';' || c == ' ') {
31 newTokenMode = true;
32 }
33 else if (c == '(') {
34 newTokenMode = true;
35 subLevelMode = true;
36 endTopLevelMode = true;
37 }
38 else if (c == ')') {
39 newTokenMode = true;
40 subLevelMode = false;
41 endSubLevelMode = true;
42 }
43 }
44 else {
45 newTokenMode = true;
46 }
47
48 if (newTokenMode) {
49 if (((!subLevelMode && !endSubLevelMode) || endTopLevelMode) && i > lastTokenEnd) {
50 currentTrigger = new PartialTrigger();
51 partialTriggers.add(currentTrigger);
52 currentTrigger.setPartialTriggerId(partialTriggerString.substring(lastTokenEnd, i));
53 }
54 else if ((subLevelMode || endSubLevelMode) && i > lastTokenEnd) {
55 currentTrigger.addEventHook(partialTriggerString.substring(lastTokenEnd, i));
56 }
57
58 lastTokenEnd = i + 1;
59 }
60 }
61
62 return partialTriggers;
63 }
64
65
66 public static class PartialTrigger
67 {
68 private String partialTriggerId;
69 private List eventHooks;
70
71 public void addEventHook(String eventHook)
72 {
73 if (eventHooks == null) {
74 eventHooks = new ArrayList();
75 }
76 eventHooks.add(eventHook);
77 }
78
79 public String getPartialTriggerId()
80 {
81 return partialTriggerId;
82 }
83
84 public void setPartialTriggerId(String partialTriggerId)
85 {
86 this.partialTriggerId = partialTriggerId;
87 }
88
89 public List getEventHooks()
90 {
91 if (eventHooks == null) {
92 return Collections.EMPTY_LIST;
93 }
94
95 return eventHooks;
96 }
97 }
98
99 public static void main(String[] args)
100 {
101 PartialTriggerParser parser = new PartialTriggerParser();
102 List li = parser.parse(
103
104 for (int i = 0; i < li.size(); i++) {
105 PartialTrigger partialTrigger = (PartialTrigger) li.get(i);
106 System.out.println("partialTrigger.partialTriggerId = " + partialTrigger.getPartialTriggerId());
107
108 for (int j = 0; j < partialTrigger.getEventHooks().size(); j++) {
109 String eventHook = (String) partialTrigger.getEventHooks().get(j);
110 System.out.println("eventHook = " + eventHook);
111 }
112 }
113 }
114
115 }