package ch.vorburger.uftam.sample.vaadin;
import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;
import ch.vorburger.blueprints.data.DataObject;
import ch.vorburger.blueprints.data.xmlxsd.XSDDataObjectFactory;
import ch.vorburger.uftam.sample.model.domain.Customer;
import ch.vorburger.uftam.sample.model.domain.repository.CustomersRepository;
import ch.vorburger.uftam.sample.model.representation.UserInfo;
import ch.vorburger.uftam.sample.vaadin.justcomponents.CustomerList;
import ch.vorburger.uftam.sample.vaadin.justcomponents.CustomerOrders;
import ch.vorburger.uftam.sample.vaadin.justcomponents.MainView;
import ch.vorburger.uftam.sample.vaadin.smartform.SampleFormView;
import com.vaadin.Application;
import com.vaadin.data.util.BeanItem;
import com.vaadin.event.ItemClickEvent;
import com.vaadin.event.ItemClickEvent.ItemClickListener;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.Component;
import com.vaadin.ui.Window;
public class SampleApplication extends Application implements ItemClickListener, ClickListener {
private static final long serialVersionUID = 1L;
// TODO Later when the Flow creates the Views then this will be dynamic
private/* NoDecoratingBordersView*/ MainView /* WithCustomLayout */mainView;
private CustomerList customerList;
private Button goToCustomers;
private Button goToFormDemo = new Button("Form Demo");
@Override
public void init() {
setTheme("mytheme");
// Presenter p = new SampleAppPresenter();
// TODO Later this won't be here be in the SampleAppPresenter Flow, only
Collection<Customer> customers = CustomersRepository.getAFewCustomers();
// AbstractView<Collection<Customer>> firstView = new CustomersListView(p);
customerList = new CustomerList();
customerList.setModel(Customer.class, customers);
customerList.addListener(this);
UserInfo userInfo = new UserInfo() {
@Override
public String getUID() {
return "michael.vorburger";
}
};
mainView = new MainView/* WithCustomLayout */(customerList);
mainView.setModel(MainView.USER_INFO, userInfo); // = mainView.setUserInfo(userInfo);
// mainView = new NoDecoratingBordersView(customerList);
// Component component = mainDecoView.getRootComponent();
// ComponentContainer rootViewComponent = (ComponentContainer) component;
// final Window mainWindow = new Window("UFTAM Vaadin Sample Application",
// rootViewComponent);
final Window mainWindow = new Window("UFTAM Vaadin Sample Application", mainView);
// HACK!!!
mainWindow.addComponent(goToFormDemo);
goToFormDemo.addListener(this);
setMainWindow(mainWindow);
}
@Override
public void itemClick(ItemClickEvent event) {
// TODO Later when the Flow creates the Views then this will be dynamic
if (event.getComponent() == customerList) {
@SuppressWarnings("unchecked")
BeanItem<Customer> item = (BeanItem<Customer>) event.getItem();
Customer customer = item.getBean();
CustomerOrders customerOrders = new CustomerOrders();
goToCustomers = customerOrders.goToCustomers();
goToCustomers.addListener(this);
customerOrders.setModel(customer);
mainView.setBody(customerOrders);
}
}
@Override
public void buttonClick(ClickEvent event) {
if (event.getComponent() == goToCustomers) {
mainView.setBody(customerList);
}
if (event.getComponent() == goToFormDemo) {
// HACK this shouldn't be in here later of course...
XSDDataObjectFactory f = new XSDDataObjectFactory();
try {
f.register("/SampleFormStructure.xsd");
} catch (IOException e) {
// HACK Urgh - just shut up, for now..
e.printStackTrace();
}
// 1. Create Form Data Model
DataObject dataObject = f.create("http://schemas.vorburger.ch/formsample#SampleFormType");
dataObject.set("name", "Saluton, Mondpacxo");
// 2. Create View (UI Model)
SampleFormView form = new SampleFormView();
// 3. Bind Model to View (UI Model)
form.getTextField_1().setValue(dataObject.get("name"));
mainView.setBody(form);
}
}
}