View Javadoc

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>&lt;binding name="model" expression="@ar.org.ejemplo.Enum@class"/&gt;</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  // TODO: sacar el .html y crearlo con el renderComponent()
40  // TODO: ponerle un property required de tipo boolean
41  // TODO: aceptar mas tipos de datos (arreglos, etc) y que no necesiten ser objetos con <id,name> tambien una coleccion de strings
42  // TODO: hacer un componente que sea un boton de submit, que al hacer click deshabilite el boton, opcionalmente cambie el texto del boton y haga submit
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  }