01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */
17: package org.apache.wicket.model;
18:
19: /**
20: * A IModel wraps the actual model Object used by a Component. IModel
21: * implementations are used as a facade for the real model so that users have
22: * control over the actual persistence strategy. Note that objects implementing
23: * this interface will be stored in the Session. Hence, you should use
24: * (non-transient) instance variables sparingly.
25: * <ul>
26: * <li><b>Basic Models </b>- To implement a basic (non-detachable) model which
27: * holds its entire state in the Session, you can either subclass
28: * {@link AbstractModel}, or use the simple model wrapper {@link Model}
29: * directly.
30: *
31: * <li><b>Detachable Models </b>- IModel inherits a hook,
32: * {@link IDetachable#detach()}, so that interface implementers can detach
33: * transient information when a model is no longer being actively used by the
34: * framework. This reduces memory use and reduces the expense of replicating the
35: * model in a clustered server environment. To implement a detachable model, you
36: * should generally extend {@link org.apache.wicket.model.AbstractDetachableModel}instead
37: * of implementing IModel directly.
38: *
39: * <li><b>Property Models </b>- The AbstractPropertyModel class provides
40: * default functionality for property models. A property model provides access
41: * to a particular property of its wrapped model.
42: *
43: * <li><b>Compound Property Models </b>- The IModel interface is parameterized
44: * by Component, allowing a model to be shared among several Components. When
45: * the {@link IModel#getObject()}method is called, the value returned will
46: * depend on the Component which is asking for the value. Likewise, the
47: * {@link IModel#setObject(Object)}method sets a different property depending
48: * on which Component is doing the setting. For more information on
49: * CompoundPropertyModels and model inheritance, see
50: * {@link org.apache.wicket.model.CompoundPropertyModel}and {@link org.apache.wicket.Page}.
51: * </ul>
52: *
53: * @see org.apache.wicket.Component#sameInnermostModel(org.apache.wicket.Component)
54: * @see org.apache.wicket.Component#sameInnermostModel(IModel)
55: *
56: * @author Chris Turner
57: * @author Eelco Hillenius
58: * @author Jonathan Locke
59: *
60: * TODO 3.0: Vote on renaming get/setObject to get/setValue
61: */
62: public interface IModel extends IDetachable {
63: /**
64: * Gets the model object.
65: *
66: * @return The model object
67: */
68: Object getObject();
69:
70: /**
71: * Sets the model object.
72: *
73: * @param object
74: * The model object
75: */
76: void setObject(final Object object);
77: }
|