@NAME@ version @VERSION@ Release Notes for IDEA @IDEA-VERSION@

NOTE: This version requires IDEA to be executed with JDK 1.5.0 or greater.

Project/Module Copyright Notice.

This plugin is used to ensure files in a project or module have a consistent
copyright notice. Copyright notices can be created for the following file
types: Java, JavaScript, JSP, JSPx, XML, HTML, xHTML, DTD, Properties, and CSS.

* Configuration

** Enable Plugin

By default the plugin is disabled for a project. Simple select the Enable
Copyright Notice Plugin checkbox to enable copyright notices for this project.

** Project and Module Level

You can set the copyright notice at the project level first. This setting
will be used as the default for each new module added to the project. You
then have the option of adjusting each module's setting individually. For each
module you can specify whether it has it's own custom copyright, uses the
project copyright, or has no copyright at all.

You can also import copyright notice settings from other, external projects and
modules by pressing the Import Settings button. This brings up a file chooser
that lets you select project (*.ipr) or module (*.iml) files. Once selected the
project or module is scanned for copyright plugin settings. If found they are
imported into the current level.

At the module level you can also copy over the current project's settings by
pressing the Copy Project Settings button.

** Settings

At a given level (project or module) you can define a copyright notice template
to be used by all supported file types and/or you can tailor the copyright
notice settings for a specific file type.

*** Template

**** Text

Most likely you will want the same general copyright notice for all file types.
This is done by setting up the template. The copyright notice template should
be undecorated and language independent. In other words, the template should
not contain any language specific comment markers.

The template will be treated as a Velocity template. See the section below for
more information on Velocity templates.

**** Formatting Options

Once the basic text of the copyright notice is set you can specify several
formatting options.

First you should specify whether the copyright should be entered using a
file's block or line comment syntax. A language not containing the selected
choice will use the syntax it does have available to best emulate the choice. If
the block comment is chosen you have the option of having each line preceded by
a comment marker.

Second you can specify whether the comment should be surrounded by a line of
comment markers, referred to as a separator. If both separators are selected
and are of the same length you will have the option of having the whole comment
"boxed" in. The character used to fill the separator can specified. By default
(nothing specified) the character used will be appropriate for the given
language. Tilde (~) is used for XML type languages because a hypen (-) isn't
valid when strung together.

**** Relative Location

If the area containing the copyright notice contains other, non-copyright
comments you can specify whether the copyright notice comes before or after the
other comments.

You may also specify that you want a blank line to appear after the copyright
notice.

**** Copyright Keyword

This keyword must be a valid Java regular expression (see
java.util.regex.Pattern) used to determine if a comment is a normal comment or a
copyright notice comment. It is important that the keyword expression doesn't
match non-copyright notice comments or you may find comments getting deleted
that you didn't want deleted. This warning is only true for comments near the
beginning of files within the areas that copyright notices may appear. Comments
in other parts of a file will not be effected even if the keyword expression
matches.

**** Preview

Checking the Preview checkbox allows you to see what your comment will look like
using Java comment syntax. This is your entered text formatted with all the
options chosen in the Formatting Options area.

**** Validate

Pressing this button verifies that the text is a valid Velocity template. If
the Velocity engine finds any problem with the text an error message is
displayed. This does not verify whether the resulting comment is valid for the
given file type.

*** File Types

By default all supported file types will use the template copyright notice.
You do have the option of changing the settings for a specific file type.

**** Template Override

No Copyright - Select this if you don't want any copyright notice added to
   files of this type. If a copyright notice exists it will be removed.
Use Template - Use the template copyright notice.
Use Template Text - Select this if you want to use the text of the template
   copyright notice but you wish to format the text differently.
Fully Custom - Select this if you need to enter a copyright notice in a form
   not supported by the supplied formatting options. If you choose this
   option then the text you enter must be a complete and valid comment for
   the given file type. See the section below on multi-comment notices.

**** Formatting Options

This is only enabled if Use Template Text has been selected. The options work
just as described under the Template section. The only exception is that the
Block and Line comment choices are enabled based on the features of the
language.

**** Alternate Comment Syntax

JSP files can use either JSP comments or XML comments. By default the JSP
syntax is used. To use XML you must check the Use XML Comments checkbox.

**** Relative Location

This is enabled if Use Template Text or Fully Custom has been selected. The
options work just as described under the Template section.

**** File Location

This specifies where within a file the copyright notice is to be placed.

***** Java

The copyright notice can be placed in one of the following locations:

- At the start of the file before the "package" statement.
- Between the package statement and any imports.
- Between the imports and the first top level class (before the class' Javadoc
  comment, if present).

***** XML/DTD/HTML/xHTML/JSP/JSPx

The copyright notice can be placed in one of the following locations:

- Before the <!DOCTYPE> specification.
- Before the first tag of the document.

***** All Other File Types

For all other file types the copyright notice must appear in the begining of
the file before any non-comment, non-whitespace content.

* Multi-Comment Notices and Blank Lines

A copyright notice may contain multiple comments. This is a given when using
line comments and the copyright notice contains more than one line of text. You
can also have muliple block comments in a single copyright notice. This can only
happen when using a Fully Custom copyright notice. A Fully Custom copyright
notice also allows for any combination of line and block comments to be used.

There is one very important consideration though when your copyright notice
contains multiple comments - there can't be any blank lines between any of the
comments. Note - this doesn't mean there can't be blank lines in the copyright
notice. They just need to be within a block comment.

If you have a Fully Custom copyright notice with multiple comments and you
place blank lines between any of them, you will most likely get undesirable
effects when you perform copyright updates on files of that type.

* Menus

The option to update the copyright notice will appear in the following
locations:

- At the end of the context menu for a supported file in the project tree.
- At the end of the context menu for a supported file in the packages tree.
- At the end of the context menu for a supported file in an editor.
- At the end of the context menu for a directory in the project tree.
- At the end of the context menu for a package in the packages tree.
- At the end of the context menu for a module in the packages tree.
- At the end of the context menu for a module in the project tree.
- At the end of the Code menu if the current editor contains a supported file.
- At the end of the Generate popup menu if the current editor contains a
  supported file.

Selecting a file or directory in the project tree works just like Optimize
Imports. You will have the option of updating a single file or the whole
directory.

New files will automatically have the correct copyright notice applied to them
if the file is a supported type and the file type has copyright notices enabled.

* Copyright Template

The contents of the copyright notice can be plain text or a Velocity template.
See http://jakarta.apache.org/velocity for more information on Velocity and see
http://jakarta.apache.org/velocity/user-guide.html for more details on writing
Velocity templates.

Currently the following variables are available in the Velocity context:

Name                     Type     Comment
======================== ======== ============================================
$today                   DateInfo Represents the current date and time
$file.fileName           String   The current file's name
$file.pathName           String   The current file's complete path and name
$file.className          String   The current java file's classname
$file.qualifiedClassName String   The current java file's fully qualified name
$file.lastModified       DataInfo The date and time the file was last changed
$project.name            String   The current project's name
$module.name             String   The current module's name
$username                String   The user's name

DateInfo has the following properties:

Name                     Type     Comment
======================== ======== ============================================
year                     int      The date's year
month                    int      The date's month (1 - 12)
day                      int      The date's day of month (1 - 31)
hour                     int      The date's hour (0 - 23)
minute                   int      The date's minute of the hour (0 - 59)
second                   int      The date's second of the minute (0 - 59)

DateInfo has the following method:

Name                     Type     Comment
======================== ======== ============================================
format(String format)    String   See java.text.SimpleDateFormat format options

