/******************************************************************************* * 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.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import org.eclipse.riena.core.injector.Inject; import org.eclipse.riena.internal.sample.app.client.Activator; import org.eclipse.riena.navigation.ISubModuleNode; import org.eclipse.riena.navigation.ui.controllers.SubModuleController; import org.eclipse.riena.sample.app.common.model.IHelloWorldService; import org.eclipse.riena.ui.ridgets.IActionListener; import org.eclipse.riena.ui.ridgets.IActionRidget; import org.eclipse.riena.ui.ridgets.ITextRidget; public class HelloServerSubModuleController extends SubModuleController { private IActionRidget actionFacade; private ITextRidget textFacade; private IActionListener callback; private IHelloWorldService service; private MessageBean messageBean; public HelloServerSubModuleController(final ISubModuleNode navigationNode) { super(navigationNode); startServiceTracker(); callback = new ActionCallback(); } private void startServiceTracker() { Inject.service(IHelloWorldService.class).into(this).andStart(Activator.getDefault().getContext()); } public void bind(final IHelloWorldService service) { this.service = service; } public void unbind(final IHelloWorldService service) { if (this.service == service) { this.service = null; } } @Override public void afterBind() { super.afterBind(); intializeControlBindings(); } private void intializeControlBindings() { messageBean = new MessageBean(); textFacade.bindToModel(messageBean, "message"); //$NON-NLS-1$ textFacade.updateFromModel(); callback = new ActionCallback(); actionFacade.addListener(callback); } /** * @see org.eclipse.riena.ui.ridgets.IRidgetContainer#configureRidgets() */ @Override public void configureRidgets() { actionFacade = getRidget("actionFacade"); //$NON-NLS-1$ textFacade = getRidget("textFacade"); //$NON-NLS-1$ } private final static class MessageBean { private String message; private final PropertyChangeSupport pcSupport; MessageBean() { pcSupport = new PropertyChangeSupport(this); } @SuppressWarnings("unused") public void addPropertyChangeListener(final PropertyChangeListener listener) { pcSupport.addPropertyChangeListener(listener); } @SuppressWarnings("unused") public void removePropertyChangeListener(final PropertyChangeListener listener) { pcSupport.removePropertyChangeListener(listener); } public void setMessage(final String message) { final String old = this.message; this.message = message; pcSupport.firePropertyChange("message", old, message); //$NON-NLS-1$ } @SuppressWarnings("unused") public String getMessage() { return message; } } private class ActionCallback implements IActionListener { public void callback() { if (service != null) { messageBean.setMessage(service.getMessage()); textFacade.updateFromModel(); } } } }