Package org.apache.velocity.runtime.directive

# Class Directive

java.lang.Object
org.apache.velocity.runtime.directive.Directive

All Implemented Interfaces:
  `Cloneable`, `DirectiveConstants`

Direct Known Subclasses:
  `Block`, `Break`, `Evaluate`, `Foreach`, `InputBase`, `Macro`, `RuntimeMacro`, `Stop`, `VelocimacroProxy`

public abstract class Directive extends Object implements DirectiveConstants, Cloneable
Base class for all directives used in Velocity.

Version:
  $Id$
Author:
  Jason van Zyl, Nathan Bubna

## Field Summary

Fields
Modifier and Type
Field
Description
`protected org.slf4j.Logger`
`log`
`protected RuntimeServices`
`rsvc`

### Fields inherited from interface org.apache.velocity.runtime.directive.DirectiveConstants

`BLOCK, LINE`

## Constructor Summary

Constructors
Constructor
Description
`Directive()`

## Method Summary

Modifier and Type
Method
Description
`void`
`checkArgs(ArrayList<Integer> argtypes, Token t, String templateName)`
The Parser calls this method during template parsing to check the arguments types.
`int`
`getColumn()`
for log msg purposes
`int`
`getLine()`
for log msg purposes
`abstract String`
`getName()`
Return the name of this directive.
`String`
`getScopeName()`
`Template`
`getTemplate()`
returns the template in which this directive appears
`String`
`getTemplateName()`
`abstract int`
`getType()`
Get the directive type BLOCK/LINE.
`void`
`init(RuntimeServices rs, InternalContextAdapter context, Node node)`
How this directive is to be initialized.
`boolean`
`isScopeProvided()`
`protected Scope`
`makeScope(Object prev)`
`protected void`
`postRender(InternalContextAdapter context)`
This cleans up any scope control for this directive after rendering, assuming the scope control was turned on.
`protected void`
`preRender(InternalContextAdapter context)`
This creates and places the scope control for this directive into the context (if scope provision is turned on).
`abstract boolean`
`render(InternalContextAdapter context, Writer writer, Node node)`
How this directive is to be rendered
`void`
`setLocation(int line, int column)`
Allows the template location to be set.
`void`
`setLocation(int line, int column, Template template)`
Allows the template location to be set.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### log

protected org.slf4j.Logger log

### rsvc

protected RuntimeServices rsvc

## Constructor Details

### Directive

public Directive()

## Method Details

### getName

public abstract String getName()
Return the name of this directive.

Returns:
  The name of this directive.

### getType

public abstract int getType()
Get the directive type BLOCK/LINE.

Returns:
  The directive type BLOCK/LINE.

### setLocation

public void setLocation(int line, int column)
Allows the template location to be set.

Parameters:
  `line` -
  `column` -

### setLocation

public void setLocation(int line, int column, Template template)
Allows the template location to be set.

Parameters:
  `line` -
  `column` -
  `template` -

### getTemplate

public Template getTemplate()
returns the template in which this directive appears

Returns:
  template

### getLine

public int getLine()
for log msg purposes

Returns:
  The current line for log msg purposes.

### getColumn

public int getColumn()
for log msg purposes

Returns:
  The current column for log msg purposes.

### getTemplateName

public String getTemplateName()

Returns:
  The template file name this directive was defined in, or null if not defined in a file.

### getScopeName

public String getScopeName()

Returns:
  the name to be used when a scope control is provided for this directive.

### isScopeProvided

public boolean isScopeProvided()

Returns:
  true if there will be a scope control injected into the context when rendering this directive.

### init

public void init(RuntimeServices rs, InternalContextAdapter context, Node node) throws TemplateInitException
How this directive is to be initialized.

Parameters:
  `rs` -
  `context` -
  `node` -
Throws:
  `TemplateInitException`

### checkArgs

public void checkArgs(ArrayList<Integer> argtypes, Token t, String templateName) throws ParseException
The Parser calls this method during template parsing to check the arguments types. Be aware that this method is called pre init, so not all data is available in this method. The default implementation does not peform any checking. We do this so that Custom directives do not trigger any parse errors in IDEs.

Parameters:
  `argtypes` - type, Array of argument types of each argument to the directive for example StandardParserTreeConstants.JJTWORD
  `t` - token of directive
  `templateName` - the name of the template this directive is referenced in.
Throws:
  `ParseException`

### render

public abstract boolean render(InternalContextAdapter context, Writer writer, Node node) throws IOException, ResourceNotFoundException, ParseErrorException, MethodInvocationException
How this directive is to be rendered

Parameters:
  `context` -
  `writer` -
  `node` -
Returns:
  True if the directive rendered successfully.
Throws:
  `IOException`
  `ResourceNotFoundException`
  `ParseErrorException`
  `MethodInvocationException`

### preRender

protected void preRender(InternalContextAdapter context)
This creates and places the scope control for this directive into the context (if scope provision is turned on).

Parameters:
  `context` -

### makeScope

protected Scope makeScope(Object prev)

Parameters:
  `prev` -
Returns:
  scope

### postRender

protected void postRender(InternalContextAdapter context)
This cleans up any scope control for this directive after rendering, assuming the scope control was turned on.

Parameters:
  `context` -