/*
* Created on Mar 22, 2013
* Created by Paul Gardner
*
* Copyright 2013 Azureus Software, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License only.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*/
package com.aelitis.azureus.core.tag.impl;
import java.util.List;
import com.aelitis.azureus.core.tag.Tag;
import com.aelitis.azureus.core.tag.Taggable;
import com.aelitis.azureus.core.tag.TaggableResolver;
import com.aelitis.azureus.core.util.CopyOnWriteList;
public class
TagTypeWithState
extends TagTypeBase
{
private CopyOnWriteList<Tag> tags = new CopyOnWriteList<Tag>();
private TaggableResolver resolver;
protected
TagTypeWithState(
int tag_type,
int tag_features,
String tag_name )
{
super( tag_type, tag_features, tag_name );
}
protected
TagTypeWithState(
int tag_type,
TaggableResolver _resolver,
int tag_features,
String tag_name )
{
super( tag_type, tag_features, tag_name );
resolver = _resolver;
}
protected Taggable
resolveTaggable(
String id )
{
if ( resolver == null ){
return( super.resolveTaggable( id ));
}
return( resolver.resolveTaggable( id ));
}
protected void
removeTaggable(
TaggableResolver _resolver,
Taggable taggable )
{
if ( resolver == _resolver ){
for ( Tag t: tags ){
t.removeTaggable( taggable );
}
}
super.removeTaggable(_resolver, taggable );
}
public void
addTag(
Tag t )
{
tags.add( t );
if ( t instanceof TagWithState ){
getTagManager().tagCreated((TagWithState)t );
}
super.addTag( t );
}
public void
removeTag(
Tag t )
{
tags.remove( t );
if ( t instanceof TagWithState ){
getTagManager().tagRemoved((TagWithState)t );
}
super.removeTag( t );
}
public List<Tag>
getTags()
{
return( tags.getList());
}
}