01: // Copyright 2006, 2007 The Apache Software Foundation
02: //
03: // Licensed under the Apache License, Version 2.0 (the "License");
04: // you may not use this file except in compliance with the License.
05: // You may obtain a copy of the License at
06: //
07: // http://www.apache.org/licenses/LICENSE-2.0
08: //
09: // Unless required by applicable law or agreed to in writing, software
10: // distributed under the License is distributed on an "AS IS" BASIS,
11: // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12: // See the License for the specific language governing permissions and
13: // limitations under the License.
14:
15: package org.apache.tapestry.model;
16:
17: import org.apache.tapestry.annotations.Parameter;
18: import org.apache.tapestry.annotations.Persist;
19: import org.apache.tapestry.internal.InternalComponentResources;
20: import org.apache.tapestry.ioc.Location;
21:
22: /**
23: * Mutable version of {@link org.apache.tapestry.model.ComponentModel} used during the
24: * transformation phase.
25: */
26: public interface MutableComponentModel extends ComponentModel {
27: /**
28: * Adds a new formal parameter to the model. Each parameter has a unique name (though access to
29: * parameters is case insensitive).
30: *
31: * @param name
32: * new, unique name for the parameter
33: * @param required
34: * if true, the parameter must be bound
35: * @param defaultBindingPrefix
36: * the default binding prefix for this parameter
37: * @throws IllegalArgumentException
38: * if a parameter with the given name has already been defined for this model
39: * @see Parameter
40: */
41: void addParameter(String name, boolean required,
42: String defaultBindingPrefix);
43:
44: /**
45: * Defines a new embedded component.
46: *
47: * @param id
48: * the unique id for the embedded component, which must not already exist.
49: * @param type
50: * the type of the component (posslibly blank)
51: * @param componentClassName
52: * the fully qualified class name (derived from the field), used if the type is blank
53: * @param location
54: * where the component is defined
55: * @return a mutable model allowing parameters to be set
56: */
57: MutableEmbeddedComponentModel addEmbeddedComponent(String id,
58: String type, String componentClassName, Location location);
59:
60: /**
61: * Used to define the field persistence strategy for a particular field name. Returns a logical
62: * name for the field, which is guaranteed to be unique (this is necessary for handling the case
63: * where a subclass has a persistent field with the same name as a persistent field from a
64: * super-class).
65: *
66: * @param fieldName
67: * the name of the field which is to be made persistent
68: * @param strategy
69: * the strategy for persisting the field, from {@link Persist#value()}. This value
70: * may be blank, in which case the stategy is inherited from the component, or the
71: * component's container.
72: * @return a logical name for the field, to be used with
73: * {@link ComponentModel#getFieldPersistenceStrategy(String)}, and with
74: * {@link InternalComponentResources#persistFieldChange(String, Object)}, etc.
75: */
76: String setFieldPersistenceStrategy(String fieldName, String strategy);
77:
78: /** Adds a mixin to the component's implementation. */
79: void addMixinClassName(String mixinClassName);
80:
81: /**
82: * Sets the internal flag to indicate that this model (and all models that extend from it)
83: * support informal parameters.
84: */
85: void enableSupportsInformalParameters();
86:
87: /** Changes the value of the mixinAfter flag. The default value is false. */
88: void setMixinAfter(boolean mixinAfter);
89:
90: /** Stores a meta data value under the indicated key. */
91: void setMeta(String key, String value);
92: }
|