1 /**
2 *
3 */
4 package sf.net.kayestry.components.combo;
5
6 import java.util.List;
7
8 import org.apache.tapestry.ApplicationRuntimeException;
9 import org.apache.tapestry.BaseComponent;
10 import org.apache.tapestry.form.IPropertySelectionModel;
11
12 import sf.net.kayestry.EnumSelectionModel;
13 import sf.net.kayestry.GenericSelectionModel;
14
15
16 /**
17 * <p>
18 * Crea un combo a partir de una Lista o una enumeracion.
19 * </p>
20 * <p>
21 * Los parametros <code>model</code>, <code>label</code> y
22 * <code>returnId</code> son cuando los datos se sacan de una lista (ver la
23 * documentacion de GenericSelectionModel).
24 * </p>
25 * <p>
26 * En el caso de generar el combo desde una enumeracion se pasa la clase que la
27 * define. Por ejemplo: si la clase que define la enumeracion es
28 * ar.org.ejemplo.Enum, el se usaria en la definicion del componente:<br/>
29 * <code><binding name="model" expression="@ar.org.ejemplo.Enum@class"/></code>
30 * <br/>En este ultimo caso, el parametro <code>returnId</code> no se usa.
31 * </p>
32 *
33 *
34 * @author lparra
35 * @see sf.net.kayestry.GenericSelectionModel
36 * @see sf.net.kayestry.EnumSelectionModel
37 *
38 */
39
40
41
42
43 public abstract class Combo extends BaseComponent {
44
45 protected abstract Object getModel();
46
47 protected abstract String getLabel();
48
49 protected abstract boolean getReturnId();
50
51 protected abstract boolean getEnumTranslateLabels();
52
53 @SuppressWarnings("unchecked")
54 public IPropertySelectionModel getModelData() {
55 IPropertySelectionModel select = null;
56 Object model = getModel();
57
58 if (model != null) {
59 if (model instanceof List)
60 select = new GenericSelectionModel((List) getModel(),
61 getLabel(), getReturnId());
62 else if (model instanceof Class && ((Class) model).isEnum())
63 select = new EnumSelectionModel((Class<Enum>) model,
64 getEnumTranslateLabels());
65 }
66
67 if (select == null)
68 throw new ApplicationRuntimeException(
69 "model debe ser un List o un Enum y es "
70 + (model == null ? model : model.getClass()
71 .getName()));
72
73 return select;
74 }
75 }