package com.enonic.cms.core.plugin.ext;
import com.enonic.cms.api.plugin.ext.Extension;
public abstract class FilteredExtensionListener<T extends Extension>
implements ExtensionListener
{
private final Class<T> type;
public FilteredExtensionListener( final Class<T> type )
{
this.type = type;
}
public final Class<T> getType()
{
return this.type;
}
@Override
@SuppressWarnings("unchecked")
public final void extensionAdded( final Extension ext )
{
if ( isOfType( ext ) )
{
addExtension( (T) ext );
}
}
@Override
@SuppressWarnings("unchecked")
public final void extensionRemoved( final Extension ext )
{
if ( isOfType( ext ) )
{
removeExtension( (T) ext );
}
}
private boolean isOfType( final Extension ext )
{
return this.type.isAssignableFrom( ext.getClass() );
}
protected abstract void addExtension( T ext );
protected abstract void removeExtension( T ext );
}