1 15 package org.apache.tapestry.record; 16 17 import java.util.Collection ; 18 import java.util.Collections ; 19 import java.util.HashMap ; 20 import java.util.Iterator ; 21 import java.util.List ; 22 import java.util.Map ; 23 24 import org.apache.hivemind.util.Defense; 25 import org.apache.tapestry.IRequestCycle; 26 import org.apache.tapestry.engine.ServiceEncoding; 27 import org.apache.tapestry.web.WebRequest; 28 29 39 public class ClientPropertyPersistenceStrategy implements PropertyPersistenceStrategy 40 { 41 45 public static final String PREFIX = "state:"; 46 47 51 private final Map _data = new HashMap (); 52 53 private final PersistentPropertyDataEncoder _encoder; 54 55 private WebRequest _request; 56 57 private ClientPropertyPersistenceScope _scope; 58 59 public ClientPropertyPersistenceStrategy() 60 { 61 this(new PersistentPropertyDataEncoderImpl()); 62 } 63 64 ClientPropertyPersistenceStrategy(PersistentPropertyDataEncoder encoder) 66 { 67 _encoder = encoder; 68 } 69 70 77 78 public void initializeService() 79 { 80 List names = _request.getParameterNames(); 81 Iterator i = names.iterator(); 82 while (i.hasNext()) 83 { 84 String name = (String ) i.next(); 85 86 if (!name.startsWith(PREFIX)) 87 continue; 88 89 String pageName = name.substring(PREFIX.length()); 90 String encoded = _request.getParameterValue(name); 91 92 PersistentPropertyData data = new PersistentPropertyData(_encoder); 93 data.storeEncoded(encoded); 94 95 _data.put(pageName, data); 96 } 97 } 98 99 public void store(String pageName, String idPath, String propertyName, Object newValue) 100 { 101 PersistentPropertyData data = (PersistentPropertyData) _data.get(pageName); 102 if (data == null) 103 { 104 data = new PersistentPropertyData(_encoder); 105 _data.put(pageName, data); 106 } 107 108 data.store(idPath, propertyName, newValue); 109 } 110 111 public Collection getStoredChanges(String pageName, IRequestCycle cycle) 112 { 113 PersistentPropertyData data = (PersistentPropertyData) _data.get(pageName); 114 115 if (data == null) 116 return Collections.EMPTY_LIST; 117 118 return data.getPageChanges(); 119 } 120 121 public void discardStoredChanges(String pageName, IRequestCycle cycle) 122 { 123 _data.remove(pageName); 124 } 125 126 public void addParametersForPersistentProperties(ServiceEncoding encoding, IRequestCycle cycle) 127 { 128 Defense.notNull(encoding, "encoding"); 129 Defense.notNull(cycle, "cycle"); 130 131 Iterator i = _data.entrySet().iterator(); 132 while (i.hasNext()) 133 { 134 Map.Entry e = (Map.Entry ) i.next(); 135 136 String pageName = (String ) e.getKey(); 137 PersistentPropertyData data = (PersistentPropertyData) e.getValue(); 138 139 ClientPropertyPersistenceScope scope = getScope(); 140 141 if (scope.addParametersForPersistentProperties(encoding, cycle, pageName, data)) 142 encoding.setParameterValue(PREFIX + pageName, data.getEncoded()); 143 } 144 } 145 146 public void setRequest(WebRequest request) 147 { 148 _request = request; 149 } 150 151 public ClientPropertyPersistenceScope getScope() { 152 return _scope; 153 } 154 155 public void setScope(ClientPropertyPersistenceScope scope) { 156 _scope = scope; 157 } 158 } | Popular Tags |