/*******************************************************************************
* 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.example.client.controllers;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Iterator;
import org.eclipse.riena.beans.common.Person;
import org.eclipse.riena.beans.common.PersonFactory;
import org.eclipse.riena.beans.common.PersonManager;
import org.eclipse.riena.example.client.views.ComboSubModuleView;
import org.eclipse.riena.internal.example.client.beans.PersonModificationBean;
import org.eclipse.riena.navigation.ISubModuleNode;
import org.eclipse.riena.navigation.NavigationArgument;
import org.eclipse.riena.navigation.listener.SubModuleNodeListener;
import org.eclipse.riena.navigation.ui.controllers.SubModuleController;
import org.eclipse.riena.ui.ridgets.IActionListener;
import org.eclipse.riena.ui.ridgets.IActionRidget;
import org.eclipse.riena.ui.ridgets.IComboRidget;
import org.eclipse.riena.ui.ridgets.ITextRidget;
import org.eclipse.riena.ui.ridgets.IToggleButtonRidget;
/**
* Controller for the {@link ComboSubModuleView} example.
*/
public class ComboSubModuleController extends SubModuleController {
/** Manages a collection of persons. */
private final PersonManager manager;
/** Holds editable data for a person. */
private PersonModificationBean value;
private IComboRidget comboOne;
private ITextRidget textFirst;
private ITextRidget textLast;
public ComboSubModuleController() {
this(null);
}
public ComboSubModuleController(final ISubModuleNode navigationNode) {
super(navigationNode);
manager = new PersonManager(PersonFactory.createPersonList());
manager.setSelectedPerson(manager.getPersons().iterator().next());
value = new PersonModificationBean();
}
@Override
public void afterBind() {
super.afterBind();
bindModels();
}
private void bindModels() {
comboOne.bindToModel(manager, "persons", String.class, null, manager, "selectedPerson"); //$NON-NLS-1$ //$NON-NLS-2$
comboOne.updateFromModel();
textFirst.bindToModel(value, "firstName"); //$NON-NLS-1$
textFirst.updateFromModel();
textLast.bindToModel(value, "lastName"); //$NON-NLS-1$
textLast.updateFromModel();
}
@Override
public void configureRidgets() {
comboOne = getRidget(IComboRidget.class, "comboOne"); //$NON-NLS-1$
value.setPerson(manager.getSelectedPerson());
textFirst = getRidget(ITextRidget.class, "textFirst"); //$NON-NLS-1$
textLast = getRidget(ITextRidget.class, "textLast"); //$NON-NLS-1$
if (getNavigationNode().getNavigationArgument() != null
&& getNavigationNode().getNavigationArgument().getParameter() instanceof PersonModificationBean) { // we came here from a navigation
setValuesFromNavigation();
}
comboOne.addPropertyChangeListener(IComboRidget.PROPERTY_SELECTION, new PropertyChangeListener() {
public void propertyChange(final PropertyChangeEvent evt) {
final Person selectedPerson = (Person) evt.getNewValue();
value.setPerson(selectedPerson);
textFirst.updateFromModel();
textLast.updateFromModel();
}
});
final IActionRidget buttonSave = getRidget(IActionRidget.class, "buttonSave"); //$NON-NLS-1$
buttonSave.setText("&Save"); //$NON-NLS-1$
buttonSave.addListener(new IActionListener() {
public void callback() {
value.update();
comboOne.updateFromModel();
}
});
final IToggleButtonRidget buttonSecondValue = getRidget("buttonSecondValue"); //$NON-NLS-1$
if (buttonSecondValue != null) {
buttonSecondValue.setText("Always use second person!"); //$NON-NLS-1$
buttonSecondValue.addListener(new IActionListener() {
public void callback() {
if (buttonSecondValue.isSelected()) {
if (manager.getPersons().size() > 1) {
final Iterator<Person> iterator = manager.getPersons().iterator();
iterator.next();
final Person second = iterator.next();
manager.setSelectedPerson(second);
}
comboOne.setOutputOnly(true);
} else {
comboOne.setOutputOnly(false);
}
System.out.println("Selected Person: " + manager.getSelectedPerson()); //$NON-NLS-1$
comboOne.updateFromModel();
}
});
}
getNavigationNode().addListener(new NavigateSubModuleNavigationNodeListener());
}
private void setValuesFromNavigation() {
final NavigationArgument navigationArgument = getNavigationNode().getNavigationArgument();
if (navigationArgument != null) {
value = (PersonModificationBean) navigationArgument.getParameter();
manager.setSelectedPerson(value.getPerson());
bindModels();
}
}
private class NavigateSubModuleNavigationNodeListener extends SubModuleNodeListener {
@Override
public void afterActivated(final ISubModuleNode source) {
super.afterActivated(source);
if (getNavigationNode().getNavigationArgument() != null
&& getNavigationNode().getNavigationArgument().getParameter() instanceof PersonModificationBean) { // we came here from a navigation
setValuesFromNavigation();
}
}
}
}