1 16 package org.apache.cocoon.components.modules.output; 17 18 import org.apache.avalon.framework.configuration.Configuration; 19 20 import org.apache.cocoon.environment.ObjectModelHelper; 21 import org.apache.cocoon.environment.Request; 22 23 import java.util.Iterator ; 24 import java.util.Map ; 25 26 40 public class RequestAttributeOutputModule extends AbstractOutputModule implements OutputModule { 41 42 public static final String PREFIX = OutputModule.ROLE; 43 public static final String TRANS_PREFIX = PREFIX + ".RequestAttributeOutputModule.transient"; 44 public static final String ROLLBACK_LIST = PREFIX + ".RequestAttributeOutputModule.rollback"; 45 46 56 public void setAttribute(Configuration modeConf, Map objectModel, String name, Object value) { 57 if (this.settings.get("isolation-level", "0").equals("1")) { 58 if (getLogger().isDebugEnabled()) { 60 getLogger().debug("Setting transient ['" + name + "'] to ['" + value + "']"); 61 } 62 transientSetAttribute(objectModel, TRANS_PREFIX, name, value); 63 } else { 64 final Request request = ObjectModelHelper.getRequest(objectModel); 66 67 name = getName(name); 68 69 if (!attributeExists(objectModel, ROLLBACK_LIST, name)) { 70 Object tmp = request.getAttribute(name); 71 transientSetAttribute(objectModel, ROLLBACK_LIST, name, tmp); 72 } 73 74 if (getLogger().isDebugEnabled()) { 75 getLogger().debug("Setting ['" + name + "'] to ['" + value + "']"); 76 } 77 request.setAttribute(name, value); 78 } 79 } 80 81 92 public void rollback(Configuration modeConf, Map objectModel, Exception e) { 93 getLogger().debug("Rollback"); 94 final Request request = ObjectModelHelper.getRequest(objectModel); 95 96 if (this.settings.get("isolation-level", "0").equals("1")) { 97 rollback(objectModel, TRANS_PREFIX); 98 } else { 99 Map rollbackList = prepareCommit(objectModel, ROLLBACK_LIST); 100 if (rollbackList != null) { 101 for (Iterator i = rollbackList.entrySet().iterator(); i.hasNext();) { 102 final Map.Entry me = (Map.Entry ) i.next(); 103 String key = (String ) me.getKey(); 104 Object val = me.getValue(); 105 if (val != null) { 106 if (getLogger().isDebugEnabled()) { 107 getLogger().debug("Rolling back ['" + key + "'] to ['" + val + "']"); 108 } 109 request.setAttribute(key, val); 110 } else { 111 if (getLogger().isDebugEnabled()) { 112 getLogger().debug("Rolling back ['" + key + "']"); 113 } 114 request.removeAttribute(key); 115 } 116 } 117 } 118 } 119 120 String prefix = (String ) this.settings.get("key-prefix", PREFIX); 121 if (prefix.equals("")) { 122 request.setAttribute("errorMessage", e.getMessage()); 123 } else { 124 request.setAttribute(prefix + ':' + "errorMessage", e.getMessage()); 125 } 126 } 127 128 132 public void commit(Configuration modeConf, Map objectModel) { 133 getLogger().debug("Commit"); 134 if (this.settings.get("isolation-level", "0").equals("1")) { 135 Map data = prepareCommit(objectModel, TRANS_PREFIX); 136 if (data == null || data.isEmpty()) { 137 return; 138 } 139 140 String prefix = (String ) this.settings.get("key-prefix", PREFIX); 141 if (prefix.length() == 0) { 142 prefix = null; 143 } 144 145 Request request = ObjectModelHelper.getRequest(objectModel); 146 for (Iterator i = data.entrySet().iterator(); i.hasNext();) { 147 final Map.Entry me = (Map.Entry ) i.next(); 148 String key = (String ) me.getKey(); 149 Object value = me.getValue(); 150 if (prefix != null) { 151 key = prefix + ':' + key; 152 } 153 if (getLogger().isDebugEnabled()) { 154 getLogger().debug("Committing ['" + key + "'] to ['" + value + "']"); 155 } 156 request.setAttribute(key, value); 157 } 158 } else { 159 prepareCommit(objectModel, ROLLBACK_LIST); 160 } 161 } 162 163 protected String getName(String name) { 164 String prefix = (String ) this.settings.get("key-prefix", PREFIX); 165 return prefix.equals("") ? name : prefix + ':' + name; 166 } 167 } 168 | Popular Tags |