001: /*
002: * Copyright 2001-2006 C:1 Financial Services GmbH
003: *
004: * This software is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License Version 2.1, as published by the Free Software Foundation.
007: *
008: * This software is distributed in the hope that it will be useful,
009: * but WITHOUT ANY WARRANTY; without even the implied warranty of
010: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
011: * Lesser General Public License for more details.
012: *
013: * You should have received a copy of the GNU Lesser General Public
014: * License along with this library; if not, write to the Free Software
015: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
016: */
017:
018: package de.finix.contelligent.action;
019:
020: import java.io.IOException;
021: import java.io.Writer;
022: import java.util.Collection;
023: import java.util.Collections;
024: import java.util.Map;
025:
026: import de.finix.contelligent.CallData;
027: import de.finix.contelligent.Component;
028: import de.finix.contelligent.ComponentManager;
029: import de.finix.contelligent.ComponentNotFoundException;
030: import de.finix.contelligent.Container;
031: import de.finix.contelligent.exception.ContelligentException;
032: import de.finix.contelligent.logging.LoggingService;
033: import de.finix.contelligent.render.ParameterDescription;
034: import de.finix.contelligent.render.Renderable;
035: import de.finix.contelligent.render.Renderer;
036:
037: public abstract class ValueMapReference extends StoredObject implements
038: Constants, Renderer, Renderable {
039: private String property = "";
040:
041: final static org.apache.log4j.Logger log = LoggingService
042: .getLogger(ValueMapReference.class);
043:
044: public void setValueName(String prop) {
045: property = prop;
046: }
047:
048: public String getValueName() {
049: return property;
050: }
051:
052: public String getString(CallData callData)
053: throws ContelligentException, IOException {
054: String prop = getPropertyName(callData);
055: Map storage = (Map) getObject(callData);
056: Object value;
057:
058: if (storage == null) {
059: return "";
060: }
061: value = storage.get(prop);
062:
063: if (value == null) {
064: return "";
065: }
066: return value.toString();
067: }
068:
069: protected String getPropertyName(CallData callData) {
070: if ((property != null) && (property.length() != 0)) {
071: return property;
072: } else {
073: Container parent = null;
074: try {
075: ComponentManager manager = ctx.getCallManager();
076: parent = manager.parentContainer(this );
077: Component paramAssoc = manager.getSubcomponent(parent,
078: PARAM_ASSOC, callData);
079: if (paramAssoc == null) {
080: return getComponentContext().getPath().getName();
081: }
082: return renderComponent(paramAssoc, callData);
083: } catch (ComponentNotFoundException e) {
084: if (parent != null) {
085: return parent.getComponentContext().getPath()
086: .getName();
087: } else {
088: return "";
089: }
090: }
091: }
092: }
093:
094: public void render(Writer writer, Map parameterMap,
095: CallData callData) throws IOException {
096: try {
097: writer.write(getString(callData));
098: } catch (Exception e) {
099: log
100: .error(
101: "Failed to write ValueMapReference to output stream.",
102: e);
103: }
104: }
105:
106: protected String getSessionStorageKey() {
107: return getMapKey();
108: }
109:
110: protected String getRequestStorageKey() {
111: return getMapKey();
112: }
113:
114: protected abstract String getMapKey();
115:
116: public Renderer getRenderer() {
117: return this ;
118: }
119:
120: public ParameterDescription[] getParameterDescription() {
121: return null;
122: }
123:
124: public Collection getSensitiveCategories() {
125: return Collections.EMPTY_SET;
126: }
127:
128: }
|