1 15 package org.apache.tapestry.record; 16 17 import java.util.ArrayList ; 18 import java.util.Collection ; 19 import java.util.Collections ; 20 import java.util.Iterator ; 21 22 import org.apache.hivemind.util.Defense; 23 import org.apache.tapestry.IRequestCycle; 24 import org.apache.tapestry.TapestryUtils; 25 import org.apache.tapestry.engine.ServiceEncoding; 26 import org.apache.tapestry.web.WebRequest; 27 import org.apache.tapestry.web.WebSession; 28 29 36 public class SessionPropertyPersistenceStrategy implements PropertyPersistenceStrategy 37 { 38 42 private String _applicationId; 43 44 private WebRequest _request; 45 46 public void store(String pageName, String idPath, String propertyName, Object newValue) 47 { 48 Defense.notNull(pageName, "pageName"); 49 Defense.notNull(propertyName, "propertyName"); 50 51 WebSession session = _request.getSession(true); 52 53 StringBuffer buffer = new StringBuffer (); 54 55 buffer.append(_applicationId); 56 buffer.append(","); 57 buffer.append(pageName); 58 59 if (idPath != null) 60 { 61 buffer.append(","); 62 buffer.append(idPath); 63 } 64 65 buffer.append(","); 66 buffer.append(propertyName); 67 68 String key = buffer.toString(); 69 70 session.setAttribute(key, newValue); 71 } 72 73 public Collection getStoredChanges(String pageName, IRequestCycle cycle) 74 { 75 Defense.notNull(pageName, "pageName"); 76 77 WebSession session = _request.getSession(false); 78 79 if (session == null) 80 return Collections.EMPTY_LIST; 81 82 Collection result = new ArrayList (); 83 84 String prefix = _applicationId + "," + pageName + ","; 85 86 Iterator i = session.getAttributeNames().iterator(); 87 while (i.hasNext()) 88 { 89 String key = (String ) i.next(); 90 91 if (key.startsWith(prefix)) 92 { 93 PropertyChange change = buildChange(key, session.getAttribute(key)); 94 95 result.add(change); 96 } 97 } 98 99 return result; 100 } 101 102 private PropertyChange buildChange(String key, Object value) 103 { 104 String [] tokens = TapestryUtils.split(key); 105 106 109 String idPath = (tokens.length == 4) ? tokens[2] : null; 110 String propertyName = tokens[tokens.length - 1]; 111 112 return new PropertyChangeImpl(idPath, propertyName, value); 113 } 114 115 public void discardStoredChanges(String pageName, IRequestCycle cycle) 116 { 117 Defense.notNull(pageName, "pageName"); 118 119 WebSession session = _request.getSession(false); 120 121 if (session == null) 122 return; 123 124 String prefix = _applicationId + "," + pageName + ","; 125 126 Iterator i = session.getAttributeNames().iterator(); 127 while (i.hasNext()) 128 { 129 String key = (String ) i.next(); 130 131 if (key.startsWith(prefix)) 132 session.setAttribute(key, null); 133 } 134 } 135 136 139 140 public void addParametersForPersistentProperties(ServiceEncoding encoding, IRequestCycle cycle) 141 { 142 } 143 144 public void setApplicationId(String applicationName) 145 { 146 _applicationId = applicationName; 147 } 148 149 public void setRequest(WebRequest request) 150 { 151 _request = request; 152 } 153 } | Popular Tags |