001// Copyright 2004, 2005 The Apache Software Foundation
002//
003// Licensed under the Apache License, Version 2.0 (the "License");
004// you may not use this file except in compliance with the License.
005// You may obtain a copy of the License at
006//
007//     http://www.apache.org/licenses/LICENSE-2.0
008//
009// Unless required by applicable law or agreed to in writing, software
010// distributed under the License is distributed on an "AS IS" BASIS,
011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012// See the License for the specific language governing permissions and
013// limitations under the License.
014
015package org.apache.tapestry.spec;
016
017import java.util.Collection;
018import java.util.Collections;
019import java.util.HashMap;
020import java.util.Map;
021
022/**
023 * Defines a contained component. This includes the information needed to get the contained
024 * component's specification, as well as any bindings for the component.
025 * 
026 * @author Howard Lewis Ship
027 */
028
029public class ContainedComponent extends LocatablePropertyHolder implements IContainedComponent
030{
031    private String type;
032
033    private String copyOf;
034
035    private boolean inheritInformalParameters;
036
037    protected Map bindings;
038
039    private static final int MAP_SIZE = 3;
040
041    /** @since 4.0 */
042    private String _propertyName;
043
044    /**
045     * Returns the named binding, or null if the binding does not exist.
046     */
047
048    public IBindingSpecification getBinding(String name)
049    {
050        if (bindings == null)
051            return null;
052
053        return (IBindingSpecification) bindings.get(name);
054    }
055
056    /**
057     * Returns an umodifiable <code>Collection</code> of Strings, each the name of one binding for
058     * the component.
059     */
060
061    public Collection getBindingNames()
062    {
063        if (bindings == null)
064            return Collections.EMPTY_LIST;
065
066        return Collections.unmodifiableCollection(bindings.keySet());
067    }
068
069    public String getType()
070    {
071        return type;
072    }
073
074    public void setBinding(String name, IBindingSpecification spec)
075    {
076        if (bindings == null)
077            bindings = new HashMap(MAP_SIZE);
078
079        bindings.put(name, spec);
080    }
081
082    public void setType(String value)
083    {
084        type = value;
085    }
086
087    /**
088     * Sets the String Id of the component being copied from. For use by IDE tools like Spindle.
089     * 
090     * @since 1.0.9
091     */
092
093    public void setCopyOf(String id)
094    {
095        copyOf = id;
096    }
097
098    /**
099     * Returns the id of the component being copied from. For use by IDE tools like Spindle.
100     * 
101     * @since 1.0.9
102     */
103
104    public String getCopyOf()
105    {
106        return copyOf;
107    }
108
109    /**
110     * Returns whether the contained component will inherit the informal parameters of its parent.
111     * 
112     * @since 3.0
113     */
114    public boolean getInheritInformalParameters()
115    {
116        return inheritInformalParameters;
117    }
118
119    /**
120     * Sets whether the contained component will inherit the informal parameters of its parent.
121     * 
122     * @since 3.0
123     */
124    public void setInheritInformalParameters(boolean value)
125    {
126        inheritInformalParameters = value;
127    }
128
129    /** @since 4.0 */
130    public String getPropertyName()
131    {
132        return _propertyName;
133    }
134
135    /** @since 4.0 */
136    public void setPropertyName(String propertyName)
137    {
138        _propertyName = propertyName;
139    }
140}