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 org.apache.hivemind.ClassResolver;
018import org.apache.tapestry.bean.BindingBeanInitializer;
019import org.apache.tapestry.binding.BindingSource;
020import org.apache.tapestry.coerce.ValueConverter;
021
022/**
023 * A Factory used by {@link org.apache.tapestry.parse.SpecificationParser}  to create Tapestry
024 * domain objects.
025 * <p>
026 * The default implementation here creates the expected runtime instances of classes in packages:
027 * <ul>
028 * <li>org.apache.tapestry.spec</li>
029 * <li>org.apache.tapestry.bean</li>
030 * </ul>
031 * <p>
032 * This class is extended by Spindle - the Eclipse Plugin for Tapestry
033 * 
034 * @author GWL
035 * @since 1.0.9
036 */
037
038public class SpecFactory
039{
040    /**
041     * Creates a concrete instance of {@link ApplicationSpecification}.
042     */
043
044    public IApplicationSpecification createApplicationSpecification()
045    {
046        return new ApplicationSpecification();
047    }
048
049    /**
050     * Creates an instance of {@link LibrarySpecification}.
051     * 
052     * @since 2.2
053     */
054
055    public ILibrarySpecification createLibrarySpecification()
056    {
057        return new LibrarySpecification();
058    }
059
060    /**
061     * Returns a new instance of {@link IAssetSpecification}.
062     * 
063     * @since 3.0
064     */
065
066    public IAssetSpecification createAssetSpecification()
067    {
068        return new AssetSpecification();
069    }
070
071    /**
072     * Creates a new instance of {@link IBeanSpecification}.
073     * 
074     * @since 3.0
075     */
076
077    public IBeanSpecification createBeanSpecification()
078    {
079        return new BeanSpecification();
080    }
081
082    public IBindingSpecification createBindingSpecification()
083    {
084        return new BindingSpecification();
085    }
086
087    /**
088     * Creates a concrete instance of {@link IComponentSpecification}.
089     */
090
091    public IComponentSpecification createComponentSpecification()
092    {
093        return new ComponentSpecification();
094    }
095
096    /**
097     * Creates a concrete instance of {@link IContainedComponent}.
098     */
099
100    public IContainedComponent createContainedComponent()
101    {
102        return new ContainedComponent();
103    }
104
105    /**
106     * Creates a concrete instance of {@link ParameterSpecification}.
107     */
108
109    public IParameterSpecification createParameterSpecification()
110    {
111        return new ParameterSpecification();
112    }
113
114    /** @since 4.0 */
115    public BindingBeanInitializer createBindingBeanInitializer(BindingSource source)
116    {
117        return new BindingBeanInitializer(source);
118    }
119
120    /**
121     * Creates a concrete instance of {@link org.apache.tapestry.spec.IExtensionSpecification}.
122     * 
123     * @since 2.2
124     */
125
126    public IExtensionSpecification createExtensionSpecification(ClassResolver resolver,
127            ValueConverter valueConverter)
128    {
129        return new ExtensionSpecification(resolver, valueConverter);
130    }
131
132    /**
133     * Creates a concrete instance of {@link org.apache.tapestry.spec.IPropertySpecification}.
134     * 
135     * @since 3.0
136     */
137
138    public IPropertySpecification createPropertySpecification()
139    {
140        return new PropertySpecification();
141    }
142
143    /** @since 4.0 */
144    public InjectSpecification createInjectSpecification()
145    {
146        return new InjectSpecificationImpl();
147    }
148}