/****************************************************************************** * Copyright (c) 2016 Oracle * 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: * Konstantin Komissarchik - initial implementation and ongoing maintenance ******************************************************************************/ package org.eclipse.sapphire.samples.calendar.integrated.internal; import org.eclipse.sapphire.FilteredListener; import org.eclipse.sapphire.Listener; import org.eclipse.sapphire.Property; import org.eclipse.sapphire.PropertyBinding; import org.eclipse.sapphire.PropertyDef; import org.eclipse.sapphire.PropertyEvent; import org.eclipse.sapphire.Resource; import org.eclipse.sapphire.ValuePropertyBinding; import org.eclipse.sapphire.samples.calendar.integrated.IEventAttachment; /** * @author <a href="mailto:konstantin.komissarchik@oracle.com">Konstantin Komissarchik</a> */ public final class EventAttachmentResource extends Resource { private final org.eclipse.sapphire.samples.calendar.IEventAttachment base; public EventAttachmentResource( final Resource parent, final org.eclipse.sapphire.samples.calendar.IEventAttachment base ) { super( parent ); this.base = base; final Listener listener = new FilteredListener<PropertyEvent>() { @Override protected void handleTypedEvent( final PropertyEvent event ) { final PropertyDef property = event.property().definition(); final IEventAttachment attachment = (IEventAttachment) element(); if( property == org.eclipse.sapphire.samples.calendar.IEventAttachment.PROP_LOCAL_COPY_LOCATION ) { attachment.getLocalCopyLocation().refresh(); } else if( property == org.eclipse.sapphire.samples.calendar.IEventAttachment.PROP_PUBLIC_COPY_LOCATION ) { attachment.getPublicCopyLocation().refresh(); } } }; this.base.attach( listener ); } public org.eclipse.sapphire.samples.calendar.IEventAttachment getBase() { return this.base; } @Override protected PropertyBinding createBinding( final Property property ) { final PropertyDef pdef = property.definition(); if( pdef == IEventAttachment.PROP_LOCAL_COPY_LOCATION ) { return new ValuePropertyBinding() { @Override public String read() { return getBase().getLocalCopyLocation().text( false ); } @Override public void write( String value ) { getBase().setLocalCopyLocation( value ); } }; } else if( pdef == IEventAttachment.PROP_PUBLIC_COPY_LOCATION ) { return new ValuePropertyBinding() { @Override public String read() { return getBase().getPublicCopyLocation().text( false ); } @Override public void write( String value ) { getBase().setPublicCopyLocation( value ); } }; } return null; } @Override public <A> A adapt( final Class<A> adapterType ) { A res = super.adapt( adapterType ); if( res == null ) { res = this.base.adapt( adapterType ); } return res; } }