View Javadoc

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    * @author Martin Marinschek
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(/*", ; ,, test1id   (onkeyup,onkeydown,,,test2id test3id;test4id"*/"testid(onchange)");
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 }