@Override
	public void action()
	{
		Agent ag = getAgent();
		
		if( ag instanceof ReflexAgent )
		{
			ReflexAgent ra = (ReflexAgent)ag;

			Norm norm = ra.containsNorm(this, NormType.OBLIGATION);

			if( norm != null )
			{
				setNormType(NormType.OBLIGATION);
				execute();
				if( !isCyclic )
					done = true;
			}
			else 
			{
				norm = ra.containsNormDiferent(this, NormType.OBLIGATION);

				if( norm == null )
				{
					norm = ra.containsNorm(this, NormType.PROHIBITION);
					
					if( norm == null )
					{
						if( preConditionIsTrue() )
						{
							setNormType(NormType.PERMISSION);
							execute();
							if( !isCyclic )
								done = true;
						}
						else
						{
							done = true;
						}
					}
					else
					{
						setNormType(NormType.PROHIBITION);
						done = true;
					}
				}
				else
				{
					done = true;
				}
			}
		}
		else
		{
			if( preConditionIsTrue() )
			{
				execute();
				if( !isCyclic )
					done = true;
			}
			else
			{
				done = true;
			}
		}
	}