[migration]
### i-net Clear Reports consists of plugins
With version 14 we are introduced the concept of plugins to i-net Clear Reports. This removes a large amount of libraries from the installation and adds a single zip file per feature. This makes it much easier to say which library is required for a specific feature, this also avoids ClassNotFoundExceptions which could occur when removing libraries for features you didn't need.

#### Loading
Every plugin is a single zip file. All plugins are located in a folder named "plugins". On server start this directory is scanned and a plugin dependency hierarchy is created. All plugins with unresolved dependencies will be disabled. Now the start classes of all valid plugins are instantiated and the extensions for the core or other plugins are registered. The last step is the initialization of all valid plugins. To check which plugins were successfully loaded, activate the logging of i-net Clear Reports and set the log level to at least INFO.

#### Architecture
A plugin is a zip file. It contains at least the files "plugin.properties" and "server.jar". The plugin.properties defines the start class which implements the interface com.inet.plugin.ServerPlugin.
Further properties of the plugin are defined by annotations of the start class. These annotations cover the id of the plugin, its dependencies and the plugin version. For further details refer to the Server Programming Guide.

### Scheduler - Custom Actions / Dynamic Properties
If you are using a custom scheduler action and/or dynamic properties, it is necessary to write a plugin for this action and/or dynamic property class. Registering custom actions or dynamic properties to the scheduler does no longer work by adding a jar-file to the lib path. For more information please refer to the samples in the i-net Clear Reports installation directory.

### API Changes
* The following constructors of the class **com.inet.report.Listener** have been **removed**:
  * Listener(int port, boolean throwException) 
  * Listener(boolean standalone, int port, boolean throwException) 
* The other constructors of class **com.inet.report.Listener** are new throwing an IOException in case of IO error.
* The following interfaces and classes were **moved** from package **com.inet.report.config** to **com.inet.config**:
  * Configuration
  * ConfigurationChangeListener
  * ConfigurationChangeEvent
  * ConfigurationManager
* The following interfaces and classes were **added**:
  * com.inet.authentication
    * UsersAndGroupsProvider
  * com.inet.problemfinder.rules
    * ProblemFinderRule
    * AbstractRuleElement
    * AbstractRuleField
    * AbstractRulePropertyFormula
    * AbstractRuleSection
  * com.inet.plugin
    * ServerPlugin
    * ServerPluginManager
  * com.inet.report
    * ListenerSettings
* Removed deprecated API:
  * com.inet.report.ReportProperties
    * getLabelFormat()
    * setLabelFormat( String s )
  * com.inet.report.ValueProperties
    * getBooleanFormatTypeFormula()
  * com.inet.report.AbstractValueElement
    * getBooleanFormatTypeFormula()
  * com.inet.report.chart.plot.BarPlot
    * DEFAULT_BAR_MARGIN_PERCENT
    * getBarMarginPercent()
    * setBarMarginPercent( double barMarginPercent )

### Email settings
The email settings in the configuration moved from the category "Scheduler" into the new category "Email Settings" because they are used by "Error Notifications" as well.

### Support Email Address
It is now possible to display a link with a support email address in the error dialog of HTML and Java report viewer. You can configure it in the configuration manager category "Email settings". The default value is "clearreports@inetsoftware.de".

### Error notifications
It is now possible to send an email notification in case of an error. In the new plugin "Error Notifications" you can set an email address to which all error notifications will be send.

[migration:de]
### i-net Clear Reports besteht aus Plugins
Mit der Version 14 haben wir das Konzept der Plugins für i-net Clear Reports eingeführt. Dadurch wird eine große Anzahl von Bibliotheken aus der Installation entfernt und eine einzelne Zip-Datei pro Funktion hinzugefügt. Dies macht es viel einfacher zu sagen, welche Bibliothek für ein bestimmtes Feature benötigt wird. Außerdem werden ClassNotFoundExceptions vermieden, die beim Entfernen von Bibliotheken für Features, die Sie nicht benötigen, auftreten können.

#### Laden
Jedes Plugin ist eine einzelne Zip-Datei. Alle Plugins befinden sich in einem Ordner namens "plugins". Beim Start des Servers wird dieses Verzeichnis gescannt und eine Plugin-Abhängigkeitshierarchie erstellt. Alle Plugins mit nicht aufgelösten Abhängigkeiten werden deaktiviert. Nun werden die Startklassen aller gültigen Plugins instanziiert und die Erweiterungen für den Core oder andere Plugins registriert. Der letzte Schritt ist die Initialisierung aller gültigen Plugins. Um zu überprüfen, welche Plugins erfolgreich geladen wurden, aktivieren Sie die Protokollierung von i-net Clear Reports und setzen Sie den Loglevel mindestens auf INFO.

#### Architektur
Ein Plugin ist eine Zip-Datei. Sie enthält mindestens die Dateien "plugin.properties" und "server.jar". Die plugin.properties definiert die Startklasse, die die Schnittstelle com.inet.plugin.ServerPlugin implementiert.
Weitere Eigenschaften des Plugins werden durch Annotationen der Startklasse definiert. Diese Annotationen umfassen die id des Plugins, seine Abhängigkeiten und die Plugin-Version. Weitere Details finden Sie im Server Programming Guide.

### Scheduler - Benutzerdefinierte Aktionen / Dynamische Eigenschaften
Wenn Sie eine benutzerdefinierte Scheduler-Aktion und/oder dynamische Eigenschaften verwenden, ist es notwendig, ein Plugin für diese Aktion und/oder dynamische Eigenschaftsklasse zu schreiben. Die Registrierung von benutzerdefinierten Aktionen oder dynamischen Eigenschaften für den Scheduler funktioniert nicht mehr über das Hinzufügen einer jar-Datei zum lib-Pfad. Weitere Informationen finden Sie in den Beispielen im Installationsverzeichnis von i-net Clear Reports.

### API-Änderungen
* Die folgenden Konstruktoren der Klasse **com.inet.report.Listener** wurden **entfernt**:
  * Listener(int port, boolean throwException) 
  * Listener(boolean standalone, int port, boolean throwException) 
* Die anderen Konstruktoren der Klasse **com.inet.report.Listener** sind neu und werfen eine IOException im Falle eines IO-Fehlers.
* Die folgenden Schnittstellen und Klassen wurden vom Paket **com.inet.report.config** nach **com.inet.config** **verschoben**:
  * Configuration
  * ConfigurationChangeListener
  * ConfigurationChangeEvent
  * ConfigurationManager
* Die folgenden Schnittstellen und Klassen wurden **hinzugefügt**:
  * com.inet.authentication
    * UsersAndGroupsProvider
  * com.inet.problemfinder.rules
    * ProblemFinderRule
    * AbstractRuleElement
    * AbstractRuleField
    * AbstractRulePropertyFormula
    * AbstractRuleSection
  * com.inet.plugin
    * ServerPlugin
    * ServerPluginManager
  * com.inet.report
    * ListenerSettings
* Die veraltete API wurde entfernt:
  * com.inet.report.ReportProperties
    * getLabelFormat()
    * setLabelFormat( String s )
  * com.inet.report.ValueProperties
    * getBooleanFormatTypeFormula()
  * com.inet.report.AbstractValueElement
    * getBooleanFormatTypeFormula()
  * com.inet.report.chart.plot.BarPlot
    * DEFAULT_BAR_MARGIN_PERCENT
    * getBarMarginPercent()
    * setBarMarginPercent( double barMarginPercent )

### E-Mail-Einstellungen
Die E-Mail-Einstellungen in der Konfiguration wurden von der Kategorie "Scheduler" in die neue Kategorie "E-Mail-Einstellungen" verschoben, da sie auch von "Fehlerbenachrichtigungen" verwendet werden.

### Support-E-Mail-Adresse
Es ist nun möglich, im Fehlerdialog des HTML- und Java-Reportviewers einen Link mit einer Support-E-Mail-Adresse anzuzeigen. Sie können dies in der Konfigurationsmanager-Kategorie "E-Mail-Einstellungen" konfigurieren. Der Standardwert ist "clearreports@inetsoftware.de".

### Fehlerbenachrichtigungen
Es ist nun möglich, im Falle eines Fehlers eine E-Mail-Benachrichtigung zu versenden. Im neuen Plugin "Fehlerbenachrichtigungen" können Sie eine E-Mail-Adresse festlegen, an die alle Fehlerbenachrichtigungen gesendet werden sollen.
