/*******************************************************************************
* Copyright (c) 2007, 2014 compeople AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* compeople AG - initial API and implementation
*******************************************************************************/
package org.eclipse.riena.sample.app.client.helloworld.controllers;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.core.databinding.observable.value.WritableValue;
import org.eclipse.riena.core.wire.InjectService;
import org.eclipse.riena.navigation.ISubModuleNode;
import org.eclipse.riena.navigation.model.SubModuleNode;
import org.eclipse.riena.navigation.ui.controllers.SubModuleController;
import org.eclipse.riena.sample.app.client.helloworld.views.CustomerDetailsSubModuleView;
import org.eclipse.riena.sample.app.common.model.Customer;
import org.eclipse.riena.sample.app.common.model.ICustomerSearch;
import org.eclipse.riena.ui.ridgets.IActionListener;
import org.eclipse.riena.ui.ridgets.IActionRidget;
import org.eclipse.riena.ui.ridgets.ITableRidget;
import org.eclipse.riena.ui.ridgets.ITextRidget;
import org.eclipse.riena.ui.workarea.WorkareaManager;
public class CustomerSearchSubModuleController extends SubModuleController {
private ICustomerSearch service;
private ITableRidget tableRidget;
private IActionRidget searchAction;
private IActionRidget clearAction;
private IActionRidget openAction;
private ITextRidget firstNameRidget;
private ITextRidget lastNameRidget;
private final ResultContainer searchResult;
private WritableValue tableSelection;
private final Customer sample;
public CustomerSearchSubModuleController(final ISubModuleNode navigationNode) {
super(navigationNode);
searchResult = new ResultContainer();
sample = new Customer();
}
@InjectService()
public void bind(final ICustomerSearch service) {
this.service = service;
}
public void unbind(final ICustomerSearch service) {
if (this.service == service) {
this.service = null;
}
}
private class SearchCallback implements IActionListener {
public void callback() {
searchCustomers();
}
}
protected void searchCustomers() {
final Customer[] result = service.findCustomer(sample);
this.searchResult.setList(Arrays.asList(result));
tableRidget.updateFromModel();
}
/**
* @see org.eclipse.riena.ui.ridgets.IRidgetContainer#configureRidgets()
*/
@Override
public void configureRidgets() {
tableRidget = getRidget("tableRidget"); //$NON-NLS-1$
searchAction = getRidget("searchAction"); //$NON-NLS-1$
clearAction = getRidget("clearAction"); //$NON-NLS-1$
openAction = getRidget("openAction"); //$NON-NLS-1$
firstNameRidget = getRidget("firstNameRidget"); //$NON-NLS-1$
lastNameRidget = getRidget("lastNameRidget"); //$NON-NLS-1$
}
@Override
public void afterBind() {
super.afterBind();
final String[] columnProperties = new String[] { Customer.PROPERTY_CUSTOMER_NUMBER,
Customer.PROPERTY_LAST_NAME, Customer.PROPERTY_FIRST_NAME, Customer.PROPERTY_PHONE_BUSINESS };
tableRidget.bindToModel(searchResult, "list", Customer.class, columnProperties, new String[] { "Number", //$NON-NLS-1$ //$NON-NLS-2$
"Lastname", "Firstname", "phone" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
tableRidget.updateFromModel();
tableSelection = new WritableValue();
tableRidget.bindSingleSelectionToModel(tableSelection);
searchAction.addListener(new SearchCallback());
firstNameRidget.bindToModel(sample, "firstName"); //$NON-NLS-1$
lastNameRidget.bindToModel(sample, "lastName"); //$NON-NLS-1$
clearAction.addListener(new ClearCallback());
openAction.addListener(new OpenCallback());
}
private class OpenCallback implements IActionListener {
public void callback() {
final Object selectedValue = tableSelection.getValue();
if (selectedValue == null) {
return;
}
if (!(selectedValue instanceof Customer)) {
throw new RuntimeException("invalid datatype for selected value"); //$NON-NLS-1$
}
final Customer selected = (Customer) selectedValue;
final ISubModuleNode node = getNavigationNode();
final SubModuleNode cNode = new SubModuleNode(null, selected.getFirstName());
cNode.setContext(Customer.class.getName(), selected);
WorkareaManager.getInstance().registerDefinition(cNode, CustomerDetailsSubModuleView.ID);
node.addChild(cNode);
cNode.activate();
}
}
private class ClearCallback implements IActionListener {
public void callback() {
sample.setCustomerNumber(null);
sample.setFirstName(""); //$NON-NLS-1$
sample.setLastName(""); //$NON-NLS-1$
firstNameRidget.updateFromModel();
lastNameRidget.updateFromModel();
}
}
public static class ResultContainer {
private List<Customer> list = new ArrayList<Customer>();
public List<Customer> getList() {
return list;
}
public void setList(final List<Customer> list) {
this.list = list;
}
}
}