package com.google.gsoc.web.pages;
import java.util.List;
import org.apache.tapestry5.EventConstants;
import org.apache.tapestry5.OptionGroupModel;
import org.apache.tapestry5.OptionModel;
import org.apache.tapestry5.SelectModel;
import org.apache.tapestry5.SelectModelVisitor;
import org.apache.tapestry5.ValueEncoder;
import org.apache.tapestry5.annotations.IncludeJavaScriptLibrary;
import org.apache.tapestry5.annotations.OnEvent;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.internal.OptionModelImpl;
import org.apache.tapestry5.internal.util.PrimaryKeyEncoder2ValueEncoder;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.util.EnumSelectModel;
import com.google.gsoc.entity.Animal;
import com.google.gsoc.entity.Person;
import com.google.gsoc.model.PersonSelectModel;
@IncludeJavaScriptLibrary({ "${tapestry.scriptaculous}/controls.js"})
public class Complete {
@Persist("flash")
@Property
private String message;
@Persist
@Property
private Integer number;
@Persist
@Property
private Animal animal;
@Persist
@Property
private Person person;
@Persist
@Property
private String text;
@Inject
private Messages _messages;
public SelectModel getSM() {
return new SelectModel() {
public void visit(SelectModelVisitor visitor) {
// TODO Auto-generated method stub
}
public List<OptionModel> getOptions() {
List<OptionModel> options = CollectionFactory.newList();
options.add(new OptionModelImpl("1", 1));
options.add(new OptionModelImpl("2", 2));
options.add(new OptionModelImpl("3", 3));
return options;
}
public List<OptionGroupModel> getOptionGroups() {
// TODO Auto-generated method stub
return null;
}
};
}
SelectModel onProvideCompletionsFromFirst(String part)
{
return new SelectModel() {
public void visit(SelectModelVisitor visitor) {
// TODO Auto-generated method stub
}
public List<OptionModel> getOptions() {
List<OptionModel> options = CollectionFactory.newList();
options.add(new OptionModelImpl("1", 1));
options.add(new OptionModelImpl("2", 2));
options.add(new OptionModelImpl("3", 3));
return options;
}
public List<OptionGroupModel> getOptionGroups() {
// TODO Auto-generated method stub
return null;
}
};
}
SelectModel onProvideCompletionsFromSecond(String part)
{
return new EnumSelectModel(Animal.class, _messages);
}
SelectModel onProvideCompletionsFromFifty(String partial)
{
List<Person> list = CollectionFactory.newList();
for(Person p : getPersons())
{
if(p.getName().toUpperCase().indexOf(partial.toUpperCase()) >= 0 )
list.add(p);
}
return new PersonSelectModel(list);
}
SelectModel onProvideCompletionsFromThird(String partial)
{
List<Person> list = CollectionFactory.newList();
for(Person p : getPersons())
{
if(p.getName().toUpperCase().indexOf(partial.toUpperCase()) >= 0 )
list.add(p);
}
return new PersonSelectModel(list);
}
public ValueEncoder<Person> getEncoder() {
return new PersonPrimaryKeyEncoder();
}
@OnEvent(component = "form", value = EventConstants.SUCCESS)
public Object submit() {
message = "Number: " + number + " Animal: " + animal + " Person: " + person;
System.out.println(number);
System.out.println(animal);
System.out.println(person);
return null;
}
/*
* Person Encoder
*/
private class PersonPrimaryKeyEncoder implements ValueEncoder<Person> {
public String toClient(Person value) {
if(value == null || value.getId() == null) {
return "";
}
return value.getId().toString();
}
public Person toValue(String keyAsString) {
Integer key = new Integer(keyAsString);
Person person = loadPerson(key);
return person;
}
};
/*
* Get a person for id
*/
private Person loadPerson(Integer id) {
for(Person p : getPersons()) {
if(p.getId().equals(id)) {
return p;
}
}
return null;
}
/*
* Get a list of persons
*/
private List<Person> getPersons() {
List<Person> persons = CollectionFactory.newList();
persons.add(new Person(1, "Mary", 10));
persons.add(new Person(2, "John", 10));
persons.add(new Person(3, "Antony", 10));
persons.add(new Person(4, "Jack", 10));
persons.add(new Person(5, "Paul", 10));
persons.add(new Person(6, "Katy", 10));
return persons;
}
}