/******************************************************************************* * 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.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.riena.beans.common.ListBean; import org.eclipse.riena.navigation.ISubModuleNode; import org.eclipse.riena.navigation.ui.controllers.SubModuleController; import org.eclipse.riena.ui.ridgets.IActionListener; import org.eclipse.riena.ui.ridgets.IFilterableContentRidget; import org.eclipse.riena.ui.ridgets.IListRidget; import org.eclipse.riena.ui.ridgets.IRidgetContentFilter; import org.eclipse.riena.ui.ridgets.ITableRidget; import org.eclipse.riena.ui.ridgets.IToggleButtonRidget; import org.eclipse.riena.ui.ridgets.ITreeRidget; public class ContentFilterSubModuleController extends SubModuleController { public static class Something { private final String name; private final List<Something> children; Something(final String name) { this(name, new ArrayList<Something>()); } Something(final String name, final List<Something> children) { this.name = name; this.children = children; } public String getName() { return name; } public List<Something> getChildren() { return children; } } private class HideWeekendFilter implements IRidgetContentFilter { public boolean isElementVisible(final Object parentElement, final Object element) { final Something s = (Something) element; return !s.getChildren().isEmpty() || !isWeekend(s); } } private class HideWeekdaysFilter implements IRidgetContentFilter { public boolean isElementVisible(final Object parentElement, final Object element) { final Something s = (Something) element; return !s.getChildren().isEmpty() || isWeekend(s); } } private static final List<Something> DAYS = Arrays.asList(new Something("Monday"), new Something("Tuesday"), new Something("Wednesday"), new Something( "Thursday"), new Something("Friday"), new Something("Saturday"), new Something("Sunday")); private static final List<String> RIDGET_IDS = Arrays.asList("list", "table", "tree"); private final IRidgetContentFilter hideWeekendFilter = new HideWeekendFilter(); private final IRidgetContentFilter hideWeekdaysFilter = new HideWeekdaysFilter(); public ContentFilterSubModuleController() { this(null); } public ContentFilterSubModuleController(final ISubModuleNode navigationNode) { super(navigationNode); } /* * (non-Javadoc) * * @see org.eclipse.riena.navigation.ui.controllers.SubModuleController#configureRidgets() */ @Override public void configureRidgets() { final IListRidget list = getRidget(IListRidget.class, "list"); list.bindToModel(new ListBean(DAYS), ListBean.PROPERTY_VALUES, Something.class, "name"); final ITableRidget table = getRidget(ITableRidget.class, "table"); table.bindToModel(new ListBean(DAYS), ListBean.PROPERTY_VALUES, Something.class, new String[] { "name" }, new String[] { "day" }); final ITreeRidget tree = getRidget(ITreeRidget.class, "tree"); tree.bindToModel(new Object[] { new Something("Week", DAYS) }, Something.class, "children", "name", "name"); updateAllRidgetsFromModel(); final IToggleButtonRidget hideWeekdays = getRidget(IToggleButtonRidget.class, "hideWeekdays"); hideWeekdays.addListener(new IActionListener() { public void callback() { if (hideWeekdays.isSelected()) { setFilter(hideWeekdaysFilter); } else { unsetFilter(hideWeekdaysFilter); } } }); final IToggleButtonRidget hideWeekend = getRidget(IToggleButtonRidget.class, "hideWeekend"); hideWeekend.addListener(new IActionListener() { public void callback() { if (hideWeekend.isSelected()) { setFilter(hideWeekendFilter); } else { unsetFilter(hideWeekendFilter); } } }); } private void setFilter(final IRidgetContentFilter filter) { for (final String id : RIDGET_IDS) { getRidget(IFilterableContentRidget.class, id).addFilter(filter); } } private void unsetFilter(final IRidgetContentFilter filter) { for (final String id : RIDGET_IDS) { getRidget(IFilterableContentRidget.class, id).removeFilter(filter); } } private boolean isWeekend(final Something element) { return "Saturday".equals(element.getName()) || "Sunday".equals(element.getName()); } }