# ElementReferenceService

ElementReferenceService provides a common implementation base for ReferenceService implementations that resolve to an Element.

In many situations, the reference semantics can be specified using the @ElementReference annotation rather than through a custom ElementReferenceService implementation.

    @Reference( target = Table.class )
    @ElementReference( list = "/Tables", key = "Name" )

    ValueProperty PROP_TABLE = new ValueProperty( TYPE, "Table" );

    ReferenceValue<String,Table> getTable();
    void setTable( String value );

When more control is necessary, a custom implementation of ElementReferenceService can be provided. This is necessary, for example, when the referenced elements are located in a different model or when the list and key are variable.

    @Reference( target = Table.class )
    @Service( impl = ExampleElementReferenceService.class )

    ValueProperty PROP_TABLE = new ValueProperty( TYPE, "Table" );

    ReferenceValue<String,Table> getTable();
    void setTable( String value );

    public class ExampleElementReferenceService extends ElementReferenceService
    {
        @Override
        protected void initReferenceService()
        {
            // Attach a listener if list or key are variable.
            // Call broadcast( new ListEvent() ) if the list changes.
            // Call broadcast( new KeyEvent() ) if the key changes.

            super.initReferenceService();
        }

        @Override
        protected ElementList<?> list()
        {
            ...
        }

        @Override
        protected String key()
        {
            ...
        }

        @Override
        public void dispose()
        {
            // Detach any listeners that were added during init.

            super.dispose();
        }
    }

A PossibleValuesService implementation is automatically provided when @ElementReference annotation is used or ElementReferenceService is implemented.

Copyright (c) 2016 Oracle
Content made available under the terms of Eclipse Public License.