001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.cocoon.portal.aspect.impl;
018:
019: import java.util.HashMap;
020: import java.util.Iterator;
021: import java.util.Map;
022:
023: import org.apache.cocoon.portal.aspect.AspectDataHandler;
024: import org.apache.cocoon.portal.aspect.Aspectalizable;
025:
026: /**
027: *
028: * @author <a href="mailto:cziegeler@s-und-n.de">Carsten Ziegeler</a>
029: * @author <a href="mailto:volker.schmitt@basf-it-services.com">Volker Schmitt</a>
030: *
031: * @version CVS $Id: AbstractAspectalizable.java 603311 2007-12-11 17:24:31Z cziegeler $
032: */
033: public abstract class AbstractAspectalizable implements Aspectalizable,
034: Cloneable {
035:
036: transient protected AspectDataHandler aspectDataHandler;
037:
038: transient protected Map persistentDatas;
039:
040: /**
041: * Is this aspect supported
042: */
043: public boolean isAspectSupported(String aspectName) {
044: return this .aspectDataHandler.isAspectSupported(aspectName);
045: }
046:
047: public Object getAspectData(String aspectName) {
048: return this .aspectDataHandler.getAspectData(this , aspectName);
049: }
050:
051: public void setAspectData(String aspectName, Object data) {
052: this .aspectDataHandler.setAspectData(this , aspectName, data);
053: }
054:
055: public Map getAspectDatas() {
056: return this .aspectDataHandler.getAspectDatas(this );
057: }
058:
059: public Map getPersistentAspectData() {
060: if (this .aspectDataHandler == null) {
061: return this .persistentDatas;
062: }
063: return this .aspectDataHandler.getPersistentAspectDatas(this );
064: }
065:
066: /**
067: * This method is invoked once to set the handler
068: */
069: public void setAspectDataHandler(AspectDataHandler handler) {
070: this .aspectDataHandler = handler;
071: if (this .persistentDatas != null) {
072: Iterator iter = this .persistentDatas.entrySet().iterator();
073: Map.Entry entry;
074: while (iter.hasNext()) {
075: entry = (Map.Entry) iter.next();
076: handler.setAspectData(this , (String) entry.getKey(),
077: entry.getValue());
078: }
079: this .persistentDatas = null;
080: }
081: }
082:
083: public void addPersistentAspectData(String aspectName, Object data) {
084: if (this .persistentDatas == null) {
085: this .persistentDatas = new HashMap(3);
086: }
087: this .persistentDatas.put(aspectName, data);
088: }
089:
090: /* (non-Javadoc)
091: * @see java.lang.Object#clone()
092: */
093: protected Object clone() throws CloneNotSupportedException {
094: AbstractAspectalizable clone = (AbstractAspectalizable) super
095: .clone();
096:
097: clone.aspectDataHandler = this .aspectDataHandler;
098: final Map datas = this .aspectDataHandler.getAspectDatas(this );
099: final Iterator i = datas.entrySet().iterator();
100: while (i.hasNext()) {
101: final Map.Entry e = (Map.Entry) i.next();
102: clone.aspectDataHandler.setAspectData(clone, e.getKey()
103: .toString(), e.getValue());
104: }
105: clone.persistentDatas = this.persistentDatas;
106:
107: return clone;
108: }
109: }
|