/*******************************************************************************
* 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.rcpmail;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.core.databinding.observable.list.WritableList;
import org.eclipse.core.databinding.observable.value.WritableValue;
import org.eclipse.core.databinding.validation.IValidator;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.riena.beans.common.Person;
import org.eclipse.riena.beans.common.TestBean;
import org.eclipse.riena.beans.common.WordNode;
import org.eclipse.riena.navigation.ui.controllers.SubModuleController;
import org.eclipse.riena.ui.core.marker.ValidationTime;
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.IDecimalTextRidget;
import org.eclipse.riena.ui.ridgets.IGroupedTreeTableRidget;
import org.eclipse.riena.ui.ridgets.IListRidget;
import org.eclipse.riena.ui.ridgets.IMarkableRidget;
import org.eclipse.riena.ui.ridgets.IMultipleChoiceRidget;
import org.eclipse.riena.ui.ridgets.IRidget;
import org.eclipse.riena.ui.ridgets.ISelectableRidget;
import org.eclipse.riena.ui.ridgets.ISingleChoiceRidget;
import org.eclipse.riena.ui.ridgets.ITableRidget;
import org.eclipse.riena.ui.ridgets.ITextRidget;
import org.eclipse.riena.ui.ridgets.IToggleButtonRidget;
import org.eclipse.riena.ui.ridgets.ITreeRidget;
import org.eclipse.riena.ui.ridgets.tree2.ITreeNode;
import org.eclipse.riena.ui.ridgets.tree2.TreeNode;
import org.eclipse.riena.ui.ridgets.validation.ValidationRuleStatus;
/**
* Controller for the {@link TextSubModuleView} example.
*/
public class MarkerSubModuleController extends SubModuleController {
/**
* @see org.eclipse.riena.ui.ridgets.IRidgetContainer#configureRidgets()
*/
@Override
public void configureRidgets() {
final ITextRidget textName = getRidget("textName"); //$NON-NLS-1$
textName.setText("Chateau Schaedelbrummer"); //$NON-NLS-1$
final IDecimalTextRidget textPrice = getRidget("textPrice"); //$NON-NLS-1$
textPrice.setText(Double.toString(-29.99));
final IComboRidget comboAge = getRidget("comboAge"); //$NON-NLS-1$
final List<String> ages = Arrays.asList(new String[] { "<none>", "young", "moderate", "aged", "old" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
comboAge.bindToModel(new WritableList(ages, String.class), String.class, null, new WritableValue());
comboAge.updateFromModel();
comboAge.setEmptySelectionItem("<none>"); //$NON-NLS-1$
comboAge.setSelection(1);
final ISingleChoiceRidget choiceType = getRidget("choiceType"); //$NON-NLS-1$
choiceType.bindToModel(Arrays.asList("red", "white", "rose"), (List<String>) null, new TestBean(), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
TestBean.PROPERTY);
choiceType.updateFromModel();
choiceType.setSelection("red"); //$NON-NLS-1$
final IMultipleChoiceRidget choiceFlavor = getRidget("choiceFlavor"); //$NON-NLS-1$
choiceFlavor.bindToModel(Arrays.asList("dry", "sweet", "sour", "spicy"), (List<String>) null, new TestBean(), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
TestBean.PROPERTY);
choiceFlavor.updateFromModel();
choiceFlavor.setSelection(Arrays.asList("dry")); //$NON-NLS-1$
final IListRidget listPersons = getRidget("listPersons"); //$NON-NLS-1$
listPersons.setSelectionType(ISelectableRidget.SelectionType.SINGLE);
listPersons.bindToModel(createPersonList(), Person.class, "listEntry"); //$NON-NLS-1$
listPersons.updateFromModel();
final ITableRidget tablePersons = getRidget("tablePersons"); //$NON-NLS-1$
tablePersons.setSelectionType(ISelectableRidget.SelectionType.SINGLE);
String[] colValues = new String[] { "lastname", "firstname" }; //$NON-NLS-1$ //$NON-NLS-2$
String[] colHeaders = new String[] { "Last Name", "First Name" }; //$NON-NLS-1$ //$NON-NLS-2$
tablePersons.bindToModel(createPersonList(), Person.class, colValues, colHeaders);
tablePersons.updateFromModel();
final ITreeRidget treePersons = getRidget("treePersons"); //$NON-NLS-1$
treePersons.setSelectionType(ISelectableRidget.SelectionType.SINGLE);
treePersons.bindToModel(createTreeRoots(), ITreeNode.class, ITreeNode.PROPERTY_CHILDREN,
ITreeNode.PROPERTY_PARENT, ITreeNode.PROPERTY_VALUE);
treePersons.updateFromModel();
final IGroupedTreeTableRidget treeWCols = getRidget("treeWCols"); //$NON-NLS-1$
treeWCols.setSelectionType(ISelectableRidget.SelectionType.MULTI);
treeWCols.setGroupingEnabled(true);
colValues = new String[] { "word", "ACount" }; //$NON-NLS-1$ //$NON-NLS-2$
colHeaders = new String[] { "Word", "#A" }; //$NON-NLS-1$ //$NON-NLS-2$
treeWCols.bindToModel(createTreeTableRoots(), WordNode.class, ITreeNode.PROPERTY_CHILDREN,
ITreeNode.PROPERTY_PARENT, colValues, colHeaders);
treeWCols.updateFromModel();
final IToggleButtonRidget buttonToggle = getRidget("buttonToggle"); //$NON-NLS-1$
buttonToggle.setText("Toggle"); //$NON-NLS-1$
buttonToggle.setSelected(true);
final IActionRidget buttonPush = getRidget("buttonPush"); //$NON-NLS-1$
final IToggleButtonRidget buttonRadioA = getRidget("buttonRadioA"); //$NON-NLS-1$
final IToggleButtonRidget buttonRadioB = getRidget("buttonRadioB"); //$NON-NLS-1$
final IToggleButtonRidget buttonCheck = getRidget("buttonCheck"); //$NON-NLS-1$
final IRidget[] markables = new IRidget[] { textName, textPrice, comboAge, choiceType, choiceFlavor,
listPersons, tablePersons, treePersons, treeWCols, buttonToggle, buttonPush, buttonRadioA,
buttonRadioB, buttonCheck };
final IToggleButtonRidget checkMandatory = getRidget("checkMandatory"); //$NON-NLS-1$
final IToggleButtonRidget checkError = getRidget("checkError"); //$NON-NLS-1$
final IToggleButtonRidget checkDisabled = getRidget("checkDisabled"); //$NON-NLS-1$
final IToggleButtonRidget checkOutput = getRidget("checkOutput"); //$NON-NLS-1$
final IToggleButtonRidget checkHidden = getRidget("checkHidden"); //$NON-NLS-1$
checkMandatory.addListener(new IActionListener() {
public void callback() {
final boolean isMandatory = checkMandatory.isSelected();
for (final IRidget ridget : markables) {
if (ridget instanceof IMarkableRidget) {
((IMarkableRidget) ridget).setMandatory(isMandatory);
}
}
if (isMandatory) {
textName.setText(""); //$NON-NLS-1$
textPrice.setText(""); //$NON-NLS-1$
comboAge.setSelection("<none>"); //$NON-NLS-1$
choiceType.setSelection(null);
choiceFlavor.setSelection(null);
listPersons.setSelection((Object) null);
tablePersons.setSelection((Object) null);
treePersons.setSelection((Object) null);
treeWCols.setSelection((Object) null);
buttonToggle.setSelected(false);
buttonRadioA.setSelected(false);
buttonRadioB.setSelected(false);
buttonCheck.setSelected(false);
}
}
});
checkError.addListener(new IActionListener() {
private final IValidator alwaysWrong = new AlwaysWrongValidator();
public void callback() {
final boolean isError = checkError.isSelected();
for (final IRidget ridget : markables) {
if (ridget instanceof IMarkableRidget) {
((IMarkableRidget) ridget).setErrorMarked(isError);
}
}
/*
* using this "always wrong" validator for purposes of this
* demo. It prevents the error marker being removed from the
* text field on the next revalidation (i.e. when the user
* types).
*/
if (isError) {
textName.addValidationRule(alwaysWrong, ValidationTime.ON_UI_CONTROL_EDIT);
textPrice.addValidationRule(alwaysWrong, ValidationTime.ON_UI_CONTROL_EDIT);
} else {
textName.removeValidationRule(alwaysWrong);
textPrice.removeValidationRule(alwaysWrong);
}
}
});
checkDisabled.addListener(new IActionListener() {
public void callback() {
final boolean isEnabled = !checkDisabled.isSelected();
for (final IRidget ridget : markables) {
ridget.setEnabled(isEnabled);
}
}
});
checkOutput.addListener(new IActionListener() {
public void callback() {
final boolean isOutput = checkOutput.isSelected();
for (final IRidget ridget : markables) {
if (ridget instanceof IMarkableRidget) {
((IMarkableRidget) ridget).setOutputOnly(isOutput);
}
}
}
});
checkHidden.addListener(new IActionListener() {
public void callback() {
final boolean isVisible = !checkHidden.isSelected();
for (final IRidget ridget : markables) {
ridget.setVisible(isVisible);
}
}
});
}
// helping methods
// ////////////////
private WritableList createPersonList() {
final ArrayList<Person> personList = new ArrayList<Person>();
personList.add(new Person("Albinus", "Albert")); //$NON-NLS-1$ //$NON-NLS-2$
personList.add(new Person("Aurelius", "Mark")); //$NON-NLS-1$ //$NON-NLS-2$
personList.add(new Person("Adjunctus", "Maximus")); //$NON-NLS-1$ //$NON-NLS-2$
return new WritableList(personList, Person.class);
}
private ITreeNode[] createTreeRoots() {
final ITreeNode rootA = new TreeNode("A"); //$NON-NLS-1$
new TreeNode(rootA, new Person("Albinus", "Albert")); //$NON-NLS-1$ //$NON-NLS-2$
new TreeNode(rootA, new Person("Aurelius", "Mark")); //$NON-NLS-1$ //$NON-NLS-2$
final ITreeNode rootB = new TreeNode("B"); //$NON-NLS-1$
new TreeNode(rootB, new Person("Barker", "Clyve")); //$NON-NLS-1$ //$NON-NLS-2$
new TreeNode(rootB, new Person("Barclay", "Bob")); //$NON-NLS-1$ //$NON-NLS-2$
return new ITreeNode[] { rootA, rootB };
}
private WordNode[] createTreeTableRoots() {
final WordNode rootA = new WordNode("A"); //$NON-NLS-1$
final WordNode rootB = new WordNode("B"); //$NON-NLS-1$
new WordNode(rootA, "Astoria"); //$NON-NLS-1$
new WordNode(rootA, "Ashland"); //$NON-NLS-1$
new WordNode(rootA, "Aurora"); //$NON-NLS-1$
new WordNode(rootA, "Alpine"); //$NON-NLS-1$
new WordNode(rootB, "Boring"); //$NON-NLS-1$
new WordNode(rootB, "Bend"); //$NON-NLS-1$
new WordNode(rootB, "Beaverton"); //$NON-NLS-1$
new WordNode(rootB, "Bridgeport"); //$NON-NLS-1$
return new WordNode[] { rootA, rootB };
}
// helping classes
// ////////////////
/**
* Validator that always returns an error status.
*/
private static final class AlwaysWrongValidator implements IValidator {
public IStatus validate(final Object value) {
return ValidationRuleStatus.error(false, ""); //$NON-NLS-1$
}
}
}