/******************************************************************************
* 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.sqlschema;
import org.eclipse.sapphire.ElementList;
import org.eclipse.sapphire.ElementReferenceService;
import org.eclipse.sapphire.Event;
import org.eclipse.sapphire.FilteredListener;
import org.eclipse.sapphire.Listener;
import org.eclipse.sapphire.PropertyContentEvent;
import org.eclipse.sapphire.ReferenceValue;
import org.eclipse.sapphire.services.ReferenceService;
/**
* @author <a href="mailto:konstantin.komissarchik@oracle.com">Konstantin Komissarchik</a>
*/
public final class ForeignKeyColumnReferenceService extends ElementReferenceService
{
private Listener propertyContentListener;
private Listener referenceServiceListener;
@Override
protected void initReferenceService()
{
this.propertyContentListener = new FilteredListener<PropertyContentEvent>()
{
@Override
protected void handleTypedEvent( final PropertyContentEvent event )
{
broadcast( new ListEvent() );
}
};
this.referenceServiceListener = new Listener()
{
@Override
public void handle( final Event event )
{
broadcast( new ListEvent() );
}
};
final ReferenceValue<String,Table> rt = context( ForeignKey.class ).getReferencedTable();
rt.attach( this.propertyContentListener );
rt.service( ReferenceService.class ).attach( this.referenceServiceListener );
super.initReferenceService();
}
@Override
public ElementList<?> list()
{
final Table table = context( ForeignKey.class ).getReferencedTable().target();
return ( table == null ? null : table.getColumns() );
}
@Override
public String key()
{
return "Name";
}
@Override
public void dispose()
{
final ForeignKey fk = context( ForeignKey.class );
if( ! fk.disposed() )
{
final ReferenceValue<String,Table> rt = fk.getReferencedTable();
rt.detach( this.propertyContentListener );
rt.service( ReferenceService.class ).detach( this.referenceServiceListener );
}
this.propertyContentListener = null;
this.referenceServiceListener = null;
super.dispose();
}
}