#parse("$lang/default:classDiag/class/import.vm" )
#set( $opComment = "class $name" )
#if( $class.hasKeyInStereotypes("enum") )
public enum $name##
#foreach( $generalization in $class.iteratorOfRevSubclass() )
#if( !$enumImplementsPrinted )
 implements ##
#set( $enumImplementsPrinted = true )
#else
, ##
#end
$!{generalization.getSuperclass().Name}##
#end
 {
$!children;
}
#else
#set( $children = $utility.indent("   ",$!children) )
## Begin JavaBean stuff
#set( $declareJavaBean = $utility.isJavaBean($class) )
##this has to come before checking the interfaces!
#set( $implementJavaBean = ($declareJavaBean && !$utility.isJavaBean($superClass) && !$interface))
##check the interfaces
#foreach( $superInterface in $class.iteratorOfSuperClasses() )
#if ( $utility.isJavaBean($superInterface) )
#set( $declareJavaBean = false )
#end
#end
#if ($declareJavaBean)
#set( $return = $imports.addToImports("de.upb.tools.pcs.PropertyChangeClient") )
#end
#if ($implementJavaBean)
#set( $return = $imports.addToImports("java.beans.PropertyChangeSupport") )
#set( $return = $imports.addToImports("java.beans.PropertyChangeListener") )
#end
## End JavaBean stuff
#if( $interface )
#set( $extendsClause = "extends" )
#else
#set( $extendsClause = "implements" )
#end
##
#if ( $comment )
#if( $parsed )
$comment
#elseif( $comment )
/**
$!comment
 **/
#end
#end
$visibility ##
#if( $abstract && !$interface )abstract #end##
#if( $static )static #end##
#if( $final )final #end##
#if( $strictfp && !$interface )strictfp #end##
#if( $interface )
interface ##
#else
class ##
#end
$name##
## parameters, if any
#foreach($includedClass in $class.iteratorOfDeclares() )
#if( $includedClass.hasKeyInStereotypes("parameter") )
#set($containsParameter = true )
#if(!$firstParam)
#set($firstParam = true)
<##
#else
,##
#end
$includedClass.Name##
#end
#if($containsParameter)
>##
#end
#end
#if( $superClass && $utility.isInConfiguration($superClass)  && !$interface )
 extends $superClass.Name##
## the generalization's name contains parameters, if any
#foreach( $generalization in $class.iteratorOfRevSubclass() )
#if( !$match && (${generalization.getSuperclass()} == $superClass ) )
#set( $match = true )
$!{generalization.Name}##
#end
#end
#end
#if ($declareJavaBean)
 $extendsClause PropertyChangeClient##
#set( $firstClass = false )
#else
#set( $firstClass = true )
#end
##
#foreach( $generalization in $class.iteratorOfRevSubclass() )
## add imports for superclasses
#set( $superInterface = $generalization.getSuperclass() )
#set( $classToImport = $superInterface )
#if ( ${classToImport.InheritedCodeStyle} )#set( $importStyle = "$lang/${classToImport.InheritedCodeStyle.Name}:" )
#else#set( $importStyle = "$lang/default:" )#end
#parse("$!{importStyle}classDiag/class/addClassImport.vm" )
#if( $utility.isInterface($superInterface) )
#if( $firstClass )
 $extendsClause ##
#set( $firstClass = false )
#else
, ##
#end
## the generalization's name contains parameters, if any
$superInterface.Name$!{generalization.Name}##
#end
#end

{
#parse("$!{style}classDiag/class/constructor.vm" )
#if ($implementJavaBean)
	protected final PropertyChangeSupport listeners = new PropertyChangeSupport(this);

	public void addPropertyChangeListener(PropertyChangeListener listener)
	{
		getPropertyChangeSupport().addPropertyChangeListener(listener);
	}

	public void removePropertyChangeListener(PropertyChangeListener listener)
	{
		getPropertyChangeSupport().removePropertyChangeListener(listener);
	}

	public void addPropertyChangeListener(String property, PropertyChangeListener listener)
	{
		getPropertyChangeSupport().addPropertyChangeListener(property, listener);
	}

	public void removePropertyChangeListener(String property, PropertyChangeListener listener)
	{
		getPropertyChangeSupport().removePropertyChangeListener(property, listener);
	}

	public PropertyChangeSupport getPropertyChangeSupport()
	{
		return listeners;
	}

#end
##
$!children
#if( $statechart )

$statechart

#end
#parse("$!{style}classDiag/class/destructor.vm" )
}
#end