sylvain 02/02/06 13:09:22
Added: src/java/org/apache/cocoon/sitemap
DefaultSitemapComponentSelector.java
Log:
Oops, forgot to add the new file :/
Revision Changes Path
1.1
xml-cocoon2/src/java/org/apache/cocoon/sitemap/DefaultSitemapComponentSelector.java
Index: DefaultSitemapComponentSelector.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache Cocoon" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.cocoon.sitemap;
import org.apache.avalon.excalibur.component.ExcaliburComponentSelector;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import java.util.StringTokenizer;
/**
* Default component manager for Cocoon's sitemap components.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
* @version CVS $Id: DefaultSitemapComponentSelector.java,v 1.1 2002/02/06 21:09:22
sylvain Exp $
*/
public class DefaultSitemapComponentSelector extends ExcaliburComponentSelector
implements SitemapComponentSelector {
private Map hintLabels;
private Map mime_types;
private SitemapComponentSelector parentSelector;
/** Dynamic component handlers mapping. */
private Map componentMapping;
/** The conctructors (same as the Avalon ComponentManager)
*/
public DefaultSitemapComponentSelector() {
super();
this.hintLabels = new HashMap();
this.mime_types = new HashMap();
componentMapping = Collections.synchronizedMap(new HashMap());
}
public void setParentSelector(SitemapComponentSelector newSelector) {
if (this.parentSelector == null) {
this.parentSelector = newSelector;
}
}
public Component select(Object hint) throws ComponentException {
Component component = null;
try {
component = super.select(hint);
} catch (ComponentException ce) {
if (this.parentSelector != null) {
component = this.parentSelector.select(hint);
componentMapping.put(component, this.parentSelector);
} else {
throw ce;
}
}
return component;
}
public void release(Component component) {
SitemapComponentSelector selector =
(SitemapComponentSelector)componentMapping.get(component);
if(selector != null) {
componentMapping.remove(component);
selector.release(component);
} else {
super.release(component);
}
}
public void initialize() {
super.initialize();
this.mime_types = Collections.unmodifiableMap(this.mime_types);
}
public String getMimeTypeForHint(Object hint) {
String mimeType = (String)this.mime_types.get(hint);
if (mimeType != null) {
return mimeType;
}
if (this.parentSelector != null) {
return this.parentSelector.getMimeTypeForHint(hint);
}
return null;
}
public boolean hasLabel(Object hint, String label) {
String[] labels = (String[])this.hintLabels.get(hint);
if (labels != null) {
for (int i = 0; i < labels.length; i++) {
if (labels[i].equals(label))
return true;
}
} else if (parentSelector != null) {
return parentSelector.hasLabel(hint, label);
}
return false;
}
public String[] getLabels(Object hint) {
String[] labels = (String[])this.hintLabels.get(hint);
// Labels can be inherited or completely overrided
if (labels == null && parentSelector != null) {
return parentSelector.getLabels(hint);
}
return labels;
}
public void addComponent(Object hint, Class component, Configuration conf)
throws ComponentException {
String mimeType = conf.getAttribute("mime-type", null);
if (mimeType != null)
this.mime_types.put(hint, mimeType);
String label = conf.getAttribute("label", null);
if (label != null) {
// Empty '' attribute will result in empty array,
// overriding all labels on the component declared in the parent.
StringTokenizer st = new StringTokenizer(label, " ,", false);
String[] labels = new String[st.countTokens()];
for (int i = 0; i < labels.length; i++) {
labels[i] = st.nextToken();
}
this.hintLabels.put(hint, labels);
}
super.addComponent(hint, component, conf);
}
public void addSitemapComponent(Object hint, Class component,
Configuration conf, String mimeType)
throws ComponentException, ConfigurationException {
this.addComponent(hint, component, conf);
this.mime_types.put(hint, mimeType);
}
}
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]