Apache Syncope - CHANGES
Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
--------------------------------------------------------------------------------

Release Notes - Syncope - Version 1.2.11
================================================================================

** Bug
    * [SYNCOPE-1070] - Conversion pattern ignored for date, long and double values during propagation
    * [SYNCOPE-1102] - Unique attribute update inserts additional value
    * [SYNCOPE-1128] - Content exporter does not sort for internal foreign keys
    * [SYNCOPE-1168] - Encryptor pads short secret keys with "0" instead of random characters
    * [SYNCOPE-1210] - Random password generation fails for push tasks

** Improvement
    * [SYNCOPE-1083] - ConnInstance location is not normalized
    * [SYNCOPE-1086] - Avoid to read whole entities to check ETag
    * [SYNCOPE-1087] - Avoid to read input entities if no notification or audit are requested
    * [SYNCOPE-1103] - Option to disable Quartz instances across cluster

Release Notes - Syncope - Version 1.2.10
================================================================================

** Bug
    * [SYNCOPE-963] - Various content upgrade "edge case" failures
    * [SYNCOPE-965] - Cron expression for scheduled job is not saved from the console
    * [SYNCOPE-973] - NotFound error returned by user create under high load
    * [SYNCOPE-975] - Search case insensitive ilike operator triggers search validation
    * [SYNCOPE-976] - Duplicated events shown by admin console for notifications and audit
    * [SYNCOPE-999] - REST exception mapper overwrites Spring Security response

** Improvement
    * [SYNCOPE-971] - Case insensitive search
    * [SYNCOPE-983] - Search performance improvement with mandatory schemas only

Release Notes - Syncope - Version 1.2.9
================================================================================

** Bug
    * [SYNCOPE-876] - Fake after object reported by propagation in case of delete
    * [SYNCOPE-923] - Sync / Pull task not configured for delete causes incremental sync to prematurely stop
    * [SYNCOPE-928] -  Table that stores user passwords store duplicate entries
    * [SYNCOPE-929] - Braces are ignored for FIQL strings
    * [SYNCOPE-936] - Sync token reset to NULL when no SyncDelta items are available
    * [SYNCOPE-939] - Password history not checked when user changes password
    * [SYNCOPE-943] - Security question gets deleted when changing a user attribute in the console
    * [SYNCOPE-954] - Wicket exception when running an enable or disable action

** Improvement
    * [SYNCOPE-877] - Better handling of not found exception logged at global policy retrieval time
    * [SYNCOPE-949] - Leave WebApplicationException to default processing

Release Notes - Syncope - Version 1.2.8
================================================================================

** Bug
    * [SYNCOPE-768] - Missing records in case of user list ordered by nullable schema
    * [SYNCOPE-769] - Sync performance decrease
    * [SYNCOPE-800] - Synchronization fails in case of accountId mapped on derived attribute starting with literal
    * [SYNCOPE-840] - REST API doc url breaks without trailing slash

** Improvement
    * [SYNCOPE-767] - Password Policy: mustn't contain value of the following attributes case insensitive
    * [SYNCOPE-804] - Support the explanation of the Connector Configuration properties
    * [SYNCOPE-815] - Configure standalone to log under $CATALINA_HOME/logs
    * [SYNCOPE-855] - Synchronization token management enhancement in case of errors
    * [SYNCOPE-858] - Ensure afterObject is provided after propagation

** New Feature
    * [SYNCOPE-856] - Allow to provision all group's members upon request

Release Notes - Syncope - Version 1.2.7
================================================================================

** Bug
    * [SYNCOPE-729] - Skipped remote update during resource assignment if connector CREATE capability is not provided
    * [SYNCOPE-735] - Acitiviti history tables uncontrolled growth
    * [SYNCOPE-739] - Virtual attributes are not updated after a sync task
    * [SYNCOPE-741] - Tasks page unusable when a task has thousand executions

** Improvement
    * [SYNCOPE-748] - Selectively delete task and report executions
    * [SYNCOPE-751] - Preview for PDF binary values

Release Notes - Syncope - Version 1.2.6
================================================================================

** Bug
    * [SYNCOPE-686] - Indirect LDAP resource provisioning fails on missing password
    * [SYNCOPE-691] - Multivalue virtual attribute does not work
    * [SYNCOPE-702] - Documentation issue on Architecture section
    * [SYNCOPE-707] - ConfigurationLogic doesn't check the existence of key during deletion.
    * [SYNCOPE-710] - Password propagation not occuring if other updates are set on different resources
    * [SYNCOPE-712] - Error while searching roles by parent
    * [SYNCOPE-716] - Cannot specify conversion pattern during schema creation
    * [SYNCOPE-717] - Inconsistent double attribute value management

** Improvement
    * [SYNCOPE-708] - Conform the Logger "service stack" to others

Release Notes - Syncope - Version 1.2.5
================================================================================

** Bug
    * [SYNCOPE-668] - JobInstanceLoader class is not able to return the correct Task id or Report id from its job name 
    * [SYNCOPE-669] - Search filter in the notifications doesn't work properly
    * [SYNCOPE-670] - Prpagation miss all UserMod's changes performed by the Activiti update service task
    * [SYNCOPE-671] - Changed password value is not propagated to external resources on successful password reset
    * [SYNCOPE-672] - Console doesn't display the right condition when configuring a search filter with a resource
    * [SYNCOPE-673] - Null ids in SyncJob report
    * [SYNCOPE-677] - Cannot override console's landing page
    * [SYNCOPE-678] - Password generation fails with no password policy or no min / max length
    * [SYNCOPE-682] - NPE when defining resources for pass-through authentication
    * [SYNCOPE-683] - Cannot unassign and reassign role with membership attrs to user
    * [SYNCOPE-684] - Password not updated on external resources from self-service

** Improvement
    * [SYNCOPE-660] - Extend control over asynchronous job execution
    * [SYNCOPE-667] - simplification of admin roles filter query used in search
    * [SYNCOPE-674] - NotificationManager should be able to return a list of created task ids
    * [SYNCOPE-676] - Option for getting simplified list of users and roles

Release Notes - Syncope - Version 1.2.4
================================================================================

** Bug
    * [SYNCOPE-654] - Some generic and uninformative error messages
    * [SYNCOPE-655] - Files under /etc/apache-syncope ignored
    * [SYNCOPE-656] - Debian configuration files overwrittern
    * [SYNCOPE-658] - Duplicate derived attribute after sync task when it is configured as accountid for the synched resource
    * [SYNCOPE-659] - Wrong fasterxml.jackson, common-lang3 version in the Import-Package in the syncope-common, syncope-client
    * [SYNCOPE-664] - Empty string values not allowed with Oracle DB

** Improvement
    * [SYNCOPE-663] - Option to ignore users / roles during synchronization or push

Release Notes - Syncope - Version 1.2.3
================================================================================

** Bug
    * [SYNCOPE-638] - MAttrTemplate and RAttrTemplate sequence values are not managed in content.xml
    * [SYNCOPE-639] - Notification 'recipientAttrType' and 'recipientAttrName' are not required
    * [SYNCOPE-641] - Concurrency issues with multiple client threads
    * [SYNCOPE-643] - WorkflowResult provides unmodifiable collection for performed tasks
    * [SYNCOPE-644] - Error during synchronization of roles when using a RoleSchema as accountId
    * [SYNCOPE-647] - Problem during propagation of an updated membership on a resource 
    * [SYNCOPE-649] - Paged lists not working properly

** Improvement
    * [SYNCOPE-634] - performance optimization for content loading
    * [SYNCOPE-640] - Allow MariaDB to be chosen with installer
    * [SYNCOPE-645] - Provide validation error message when add a role attribute in a user mapping as accountId
    * [SYNCOPE-646] - Do not propagate password if not explicitely requested
    * [SYNCOPE-648] - Notification Configuration: missing some labels in events
    * [SYNCOPE-651] - SyncopeUser:checkToken() should fail if token is not set on user

** Task
    * [SYNCOPE-633] - Add support for MariaDB
    * [SYNCOPE-635] - Upgrade CSVDir connector bundle dependency version

Release Notes - Syncope - Version 1.2.2
================================================================================

** Bug
    * [SYNCOPE-607] - Error when adding a value to a multivalue configuration parameter of type long
    * [SYNCOPE-608] - Cannot configure audit for AuthenticationController
    * [SYNCOPE-610] - Installer doesn't update the console.properties with the container port
    * [SYNCOPE-611] - An approver displays all approval tasks including those not assigned to him
    * [SYNCOPE-613] - delete overridable connector configuration property of type array String in resource edit panel
    * [SYNCOPE-614] - NotificationJob fails with NullPointerException
    * [SYNCOPE-615] - Updating properties and xml files of the installer module with the current version
    * [SYNCOPE-617] - User/role schema attribute with minus symbol in name
    * [SYNCOPE-625] - Build fails with Java 6
    * [SYNCOPE-629] - ATTRTEMPLATE entities not exported
    * [SYNCOPE-632] - Errors during update propagation when derived attribute is configured as account id

** Improvement
    * [SYNCOPE-612] - explicit configuration of Velocity logging
    * [SYNCOPE-616] - Improving the management of the xml and properties files inside the installer
    * [SYNCOPE-621] - Reduce log level of bean validation errors (in data binder)
    * [SYNCOPE-622] - Improve VirAttrCache management
    * [SYNCOPE-630] - Eliminate duplicate Syncope WADL methods

Release Notes - Syncope - Version 1.2.1
================================================================================

** Bug
    * [SYNCOPE-554] - Class Cast Exception when syncronization task starts
    * [SYNCOPE-557] - Exception during report execution when matching condition is not provided for user and role reportlets
    * [SYNCOPE-560] - build-tools classes artifact not published to Maven repository
    * [SYNCOPE-561] - HTML reports not displayed correctly with no external resources
    * [SYNCOPE-562] - Duplicated configuration parameters in the CATTR table
    * [SYNCOPE-564] - Error while viewing user details in approval request workflow from Approvers login
    * [SYNCOPE-565] - Error on ResourceModalPage when override a SpinnerField in the ConnectorModalPage
    * [SYNCOPE-566] - Name attribute value disappears after changing attribute type during schema manipulation
    * [SYNCOPE-567] - Security question is not displayed correctly during password reset 
    * [SYNCOPE-568] - Connectors configuration "check connection" 
    * [SYNCOPE-569] - The user status is not propagated on the resources
    * [SYNCOPE-571] - ResourceConnConfPanel feedback panel does not work
    * [SYNCOPE-572] - overridable resource connector properties cannot be changed
    * [SYNCOPE-574] - NullPointerException in ConnInstanceDataBinder with Java 8
    * [SYNCOPE-576] - The values of configuration parameters are not saved
    * [SYNCOPE-578] - Role bulk delete not working
    * [SYNCOPE-596] - Standalone persistence not configured for H2
    * [SYNCOPE-597] - Error when serializating SyncToken with byte array type during sync task from Active Directory
    * [SYNCOPE-598] - Push Task fails on role with LDAP resource with rolemapping defined
    * [SYNCOPE-600] - Approval chains do not work from second form onwards
    * [SYNCOPE-601] - AD deleted object synchronization fails if a sync policy is specified on one or more attributes that can have no values on Syncope
    * [SYNCOPE-603] - Remote unauthorized exception when a user makes a request to add a role to his profile
    * [SYNCOPE-605] - Impossible to update the connector capabilities

** Improvement
    * [SYNCOPE-570] - Remove usage of deprecated com.thoughtworks.selenium.Selenium
    * [SYNCOPE-575] - Choose between stable and snapshot release
    * [SYNCOPE-599] - Enhance console's authorization.xml parsing
    * [SYNCOPE-602] - Make form approver available as workflow variable
    * [SYNCOPE-604] - allow configuring empty connid location list

** New Feature
    * [SYNCOPE-558] - Ability to configure which user, role and membership attributes to display, and in which order

** Task
    * [SYNCOPE-573] - Upgrade ConnId connectors to latest versions featuring ConnId 1.4.0.0

Release Notes - Syncope - Version 1.2.0
================================================================================

** Sub-task
    * [SYNCOPE-529] - Install through HTTP proxy
    * [SYNCOPE-552] - Provide Activiti modeler installation feature to installer

** Bug
    * [SYNCOPE-547] - Cannot send e-mails out when SMTP server requires authentication
    * [SYNCOPE-548] - Provide Activiti Modeler setup instructions
    * [SYNCOPE-549] - Activiti Modeler always show the default workflow definition
    * [SYNCOPE-551] - Admin console shows 24 roles at most in the role tree
    * [SYNCOPE-553] - Internal Server Error when creating account policy
    * [SYNCOPE-556] - Error in the enum schema when trying to add new enumeration value/label

** Improvement
    * [SYNCOPE-550] - Provide cleaner user workflow definition for production
    * [SYNCOPE-555] - check for id != 0 in *Controller.resolveReference()

** New Feature
    * [SYNCOPE-135] - Password reset
    * [SYNCOPE-143] - GUI Installer

Release Notes - Syncope - Version 1.2.0-M1
================================================================================

** Sub-task
    * [SYNCOPE-246] - Remove collection setters in transfer objects for JAXB marshalling
    * [SYNCOPE-271] - Review REST interface methods and introduce @Deprecated
    * [SYNCOPE-286] - Remove Spring MVC
    * [SYNCOPE-471] - Provide matching/unmatchig rule management for push tasks
    * [SYNCOPE-472] - Provide user filter rule management for push task
    * [SYNCOPE-473] - Provide configuration interface for push tasks
    * [SYNCOPE-521] - use newer HttpClient 4.3 instead on legacy 3.1
    * [SYNCOPE-522] - Use newer Jackson
    * [SYNCOPE-523] - Remove dependencies of MySQL and PostgreSQL JDBC drivers
    * [SYNCOPE-525] - Https support
    * [SYNCOPE-526] - Test in Windows environment
    * [SYNCOPE-528] - Check Oracle and SqlServer database connection
    * [SYNCOPE-530] - Wiki page
    * [SYNCOPE-541] - Add configuration directory field
    * [SYNCOPE-542] - Improve feedback massages and logs

** Bug
    * [SYNCOPE-285] - Complete CXF migration
    * [SYNCOPE-349] - Sorting scope is limited to each page
    * [SYNCOPE-351] - Errors when editing role membership assignment in notifications (About and Recipients)
    * [SYNCOPE-352] - No connectors available on clean install
    * [SYNCOPE-353] - UserTemplate evaluation generates unjustified attributes to be removed
    * [SYNCOPE-354] - LDAP Membership propagation does not remove memberships
    * [SYNCOPE-356] - Unable to set resource for role via the console
    * [SYNCOPE-357] - When deleting role on external resource, also remove from there users with resource assigned only via that role
    * [SYNCOPE-358] - ConnectorService#list invocation with null parameter actually calls ConnectorService#readByResource
    * [SYNCOPE-360] - Removing Role mapping from External Resource fails
    * [SYNCOPE-361] - When creating new report, the modal window does not close and an exception is logged
    * [SYNCOPE-363] - ApacheDS not available since second run of the standalone distribution
    * [SYNCOPE-364] - Rejected users are anyway propagate to associated resources
    * [SYNCOPE-365] - External attribute disabled in case of schema info not available
    * [SYNCOPE-366] - Uniform constraint violation building
    * [SYNCOPE-367] - ConfigurationTestITCase#browseAccountPolicy Selenium test fails
    * [SYNCOPE-368] - Cannot add 'RoleOwnerSchema' mapping item via console
    * [SYNCOPE-369] - Wrong error message on failed login
    * [SYNCOPE-370] - HTTP Status 404 adding a role to a user with IE8 
    * [SYNCOPE-371] - Console RuntimeException with multiple sessions for the same user
    * [SYNCOPE-372] - Connector error before save
    * [SYNCOPE-373] - 500 when self reading admin user
    * [SYNCOPE-375] - QUARTZ tables are not written into an innodb mysql DB for an mvn generated and created project
    * [SYNCOPE-376] - Console webapp does not start on Glassfish
    * [SYNCOPE-377] - Exporting configuration via console causes exceptions to be thrown
    * [SYNCOPE-380] - Deleting a role from admin console throws an exception
    * [SYNCOPE-381] - Adding and saving roles with resources during save
    * [SYNCOPE-382] - Core hangs for a very long time (1h+ and then resumes) after a CLI role create and list
    * [SYNCOPE-383] - Failure assigning resource to an existing user
    * [SYNCOPE-384] - Issues with CXF and Glassfish
    * [SYNCOPE-385] - NPE when reading user assigned to resource with no mapping
    * [SYNCOPE-386] - Database sync (no full reconciliation) fails with "Unsupported object class"
    * [SYNCOPE-387] - Unable to synchronize deleted objects from OpenDJ
    * [SYNCOPE-394] - Scheduled tasks are executed without transaction support
    * [SYNCOPE-396] - removeAll and retainAll in PropagationByResource dont evaluate correctly boolean expression
    * [SYNCOPE-397] - Double update propagation with virtual attributes on already associated resource when changing password and adding new resource
    * [SYNCOPE-398] - secretKey does not get resolved during archetype:generate
    * [SYNCOPE-399] - Role attribute mapping for user mapping item doesn't result in a multivalue property
    * [SYNCOPE-400] - Poor search performance on MySQL
    * [SYNCOPE-401] - Deploying syncope.war with MSSQL server settings to Tomcat on Windows results in Error listenerStart
    * [SYNCOPE-404] - LDAP Roles lose entitlement upon LDAP synchronization
    * [SYNCOPE-414] - Cannot successfully deploy on Weblogic 12c (12.1.1)
    * [SYNCOPE-417] - Users are made active when updating in NoOpWorkflowAdapter
    * [SYNCOPE-418] - Special chars break REST URLs
    * [SYNCOPE-419] - Meaningless error message when attempting to delete user owning role
    * [SYNCOPE-423] - Improve notifications
    * [SYNCOPE-426] - UserService#update and RoleService#update require entity id to be specified twice
    * [SYNCOPE-433] - Counting search results fails with MySQL when OR condition is used
    * [SYNCOPE-434] - Users can log in the admin console despite of their status
    * [SYNCOPE-435] - Password not mandatory when subscribing external resource
    * [SYNCOPE-436] - Read-only virtual attribute values not retrieved from external resource
    * [SYNCOPE-437] - Wrong ID generation for new Notification instances
    * [SYNCOPE-440] - Timestamp based synchronization miss events
    * [SYNCOPE-452] - Generated project not starting in embedded mode
    * [SYNCOPE-453] - Propagation problem with role virtual attribute mapped in user mapping 
    * [SYNCOPE-454] - Update user without password specification involving resource with "Generate password if missing" enabled, sends password out anyway
    * [SYNCOPE-455] - Role child implicit delete won't be propagated during parent delete
    * [SYNCOPE-457] - Must be able to configure JavaMailSender used by NotificationJob
    * [SYNCOPE-458] - Change membership virtual attribute management
    * [SYNCOPE-459] - Read-only virtual attribute cannot be added for a user by admin console
    * [SYNCOPE-462] - Upgrade Spring to 3.2.7
    * [SYNCOPE-465] - Selected items lost browsing paged results
    * [SYNCOPE-466] - Server error when updating an existing policy to its global counterpart
    * [SYNCOPE-475] - After session expired, console shows split screen
    * [SYNCOPE-476] - NPE opening Roles tab
    * [SYNCOPE-477] - Alert popup appears through page navigation after modal window closing
    * [SYNCOPE-482] - Updating workflow definition throught console XML editor doesn't really update
    * [SYNCOPE-483] - Configured CSVDir connector doesn't work fine
    * [SYNCOPE-489] - Feedback panel not working in workflow xml editor popup
    * [SYNCOPE-490] - Problem returning to login page with manual url insertion after typing invalid username and/or password
    * [SYNCOPE-495] - List of role(s) assigned to user is deleted in edit user modal page if cancel button of role modal page is clicked
    * [SYNCOPE-497] - JEXL Frame positioning error
    * [SYNCOPE-498] - Connector SpinnerFieldPanel required values
    * [SYNCOPE-499] - Deletion of role set as parent role in template generates exception
    * [SYNCOPE-500] - Wrong (unwanted) derived attribute insertion addition in membership modal page
    * [SYNCOPE-501] - Virtual attribute propagation not working when updating only virtual attributes
    * [SYNCOPE-504] - Sync/Push actions shouldn't be executed in dryrun
    * [SYNCOPE-506] - Connector configuration tab in connector modal page does not accept new values
    * [SYNCOPE-509] - In Task page after change of number of rows (to display) is erroneously added a column to tasks table
    * [SYNCOPE-510] - Class cast exception in AbstractSearchPanel
    * [SYNCOPE-512] - If there are no roles in edit user modal page is possible to create membership between root (fake) role and user
    * [SYNCOPE-514] - Core doesn't deploy on Glassfish
    * [SYNCOPE-515] - Bad integration test causes role ownership conflicts
    * [SYNCOPE-518] - ApacheDS connector in test samples cannot be modified
    * [SYNCOPE-527] - Stacktrace on BulkAction result
    * [SYNCOPE-531] - Failed login counter not reset if log.lastlogindate==false
    * [SYNCOPE-532] - Installer does not pick Syncope version from POM
    * [SYNCOPE-539] - Edit user with resources causes Ajax failure
    * [SYNCOPE-540] - Console build fails on Windows
    * [SYNCOPE-543] - Role's "Inherit Attributes" does not inherit from parent role for check box attribute
    * [SYNCOPE-545] - Date field without conversion pattern specified goes in NPE if deleting date

** Improvement
    * [SYNCOPE-15] - Manage creator, lastmodifier and approvers information about each SyncopeUser bean
    * [SYNCOPE-131] - Assign membership and role schemas to either all memberships / roles or only some memberships / roles
    * [SYNCOPE-132] - Don't expose some REST list methods for anonymous
    * [SYNCOPE-133] - Add UserRequestController.execute() that will execute the provided UserRequest and remove it on success
    * [SYNCOPE-145] - Configurable user request approval
    * [SYNCOPE-149] - Easier and cleaner way to override REST methods
    * [SYNCOPE-151] - Document RESTful services
    * [SYNCOPE-153] - Use logback-audit
    * [SYNCOPE-290] - Typed SyncopeConf
    * [SYNCOPE-298] - Persistence beans: change AUTO Id generation strategy to TABLE
    * [SYNCOPE-300] - Supporting Feed Item Query Language (FIQL)
    * [SYNCOPE-303] - Mapping to SyncopeClientCompositeException on client side
    * [SYNCOPE-304] - Mapping low level exceptions in core
    * [SYNCOPE-313] - Support synchronizing non-cleartext passwords from external resources
    * [SYNCOPE-359] - Ignore propagation if no schema mapping is provided
    * [SYNCOPE-362] - Disable mapping tab when the underlying connector does not support correspondent ObjectClass
    * [SYNCOPE-374] - SyncopeUser tokens do not use secure random strings
    * [SYNCOPE-390] - Default Reportlets improvements
    * [SYNCOPE-391] - Make password management optional
    * [SYNCOPE-392] - Full reconciliation from syncope to resource
    * [SYNCOPE-393] - Resource unlink
    * [SYNCOPE-395] - Role Reportlet
    * [SYNCOPE-402] - Inconsistent status of user edit form after exception returned by bad propagation on primary resource
    * [SYNCOPE-403] - Enrich PropagationStatusTO to report possible propagation exception message
    * [SYNCOPE-405] - Replace logback with log4j 2
    * [SYNCOPE-406] - Invoke bean validation via JPA entity listener
    * [SYNCOPE-407] - Add claim for user requests and trace user request history into SyncopeUser bean
    * [SYNCOPE-408] - Add index on task.executed
    * [SYNCOPE-409] - Allow notifications with empty about field
    * [SYNCOPE-410] - Make username pattern configurable via account policy
    * [SYNCOPE-411] - Perform retries on failed notifications
    * [SYNCOPE-413] - Clean activiti history for unused variables
    * [SYNCOPE-415] - Reduce log level of bean validation errors
    * [SYNCOPE-416] - AttributableSearchDAOImpl / Avoid query construction with string concatenation
    * [SYNCOPE-420] - Provide user / role pre-processing mechanism
    * [SYNCOPE-421] - Provide an attribute value pre-processing mechanism
    * [SYNCOPE-422] - Improve audit info
    * [SYNCOPE-424] - Resolve OpenJPA dependency overlap
    * [SYNCOPE-425] - Further REST refactoring
    * [SYNCOPE-427] - Add CSV report format
    * [SYNCOPE-428] - Provide resource link, associate and provision independent features
    * [SYNCOPE-429] - Support ETag-based conditional requests for users and roles
    * [SYNCOPE-430] - Support returning no content after create / update
    * [SYNCOPE-431] - Provide debug logging for controller methods' input and output
    * [SYNCOPE-432] - Replace role action labels with icons
    * [SYNCOPE-438] - Provide values for ConnId's APIConfiguration via ConnInstance entities
    * [SYNCOPE-439] - Embed Activiti modeler for graphical workflow editing
    * [SYNCOPE-441] - Index on Activiti table boosts overall performance
    * [SYNCOPE-442] - Use cached virtual attribute values with offline resources
    * [SYNCOPE-443] - Use WebJars to avoid including 3rd party JS and CSS files
    * [SYNCOPE-444] - Notification: improve 'selfAsRecipient' management
    * [SYNCOPE-445] - Provide a text field to specify whatever notification recipient
    * [SYNCOPE-446] - Notification: let admins specify "About" for roles
    * [SYNCOPE-447] - Provide the ability to have a single (cumulative) notification for task execution
    * [SYNCOPE-450] - Support JAX-RS 2.0
    * [SYNCOPE-460] - Default datasource uses BasicDataSource
    * [SYNCOPE-461] - Use BeanValidation 1.1 with JAX-RS services
    * [SYNCOPE-464] - Report error information in HTTP body 
    * [SYNCOPE-468] - Add information to what components refer to a certain policy
    * [SYNCOPE-469] - Group policies and logs under configuration
    * [SYNCOPE-479] - Use X-Application-Error-Code Response header instead of ExceptionType
    * [SYNCOPE-480] - Change feedback panel into a smart animated notification panel
    * [SYNCOPE-485] - Upgrade to Activiti 5.15.1
    * [SYNCOPE-486] - Update Selenium test configuration
    * [SYNCOPE-487] - make Velocity tools available in templates for notifications
    * [SYNCOPE-488] - Use CXF Maven WADL plugin
    * [SYNCOPE-491] - Use consistent icon set
    * [SYNCOPE-492] - Provide possibility to activate/deactivate notifications
    * [SYNCOPE-493] - Provide new user and role mapping purpose "NONE"
    * [SYNCOPE-502] - Allow list of PropagationActions for Resource, SyncActions for SyncTask and PushActions for PushTask
    * [SYNCOPE-505] - Support propagating non-cleartext passwords to external resources
    * [SYNCOPE-507] - User login date conditional logging
    * [SYNCOPE-511] - Enhance synchronization report information
    * [SYNCOPE-513] - Make value encryption parametric
    * [SYNCOPE-516] - Binary Schema UI enhancements
    * [SYNCOPE-517] - Empower ETag from console
    * [SYNCOPE-519] - Report default values for connector properties
    * [SYNCOPE-520] - Move reset sync token to resource actions
    * [SYNCOPE-524] - Use JSON for serialized POJOs in the internal storage
    * [SYNCOPE-536] - Upgrade to Activiti 5.16
    * [SYNCOPE-538] - Externalize all WAR configuration

** New Feature
    * [SYNCOPE-123] - Binary schema
    * [SYNCOPE-150] - Rich client library
    * [SYNCOPE-164] - Passthrough authentication
    * [SYNCOPE-270] - Encrypted schema

** Task
    * [SYNCOPE-448] - Provide build instructions
    * [SYNCOPE-449] - Fix support for Eclipse IDE
    * [SYNCOPE-451] - Upgrade to OpenJPA 2.3.0
    * [SYNCOPE-463] - Update notification docs after SYNCOPE-423
    * [SYNCOPE-467] - Update notification docs with latest improvements
    * [SYNCOPE-478] - Upgrade to Wicket 6.14.0
    * [SYNCOPE-496] - Upgrade jboss-it profile to Wildfly 8
    * [SYNCOPE-537] - Upgrade to ConnId 1.4.0.0
    * [SYNCOPE-544] - Review LICENSE & NOTICE for binary artifacts

** Wish
    * [SYNCOPE-340] - Translate items of Syncope UI and config files labels for Portuguese language 
    * [SYNCOPE-535] - Provide Debian packages for Apache Syncope

Release Notes - Syncope - Version 1.1.8
================================================================================
** Bug
    * [SYNCOPE-499] - Deletion of role set as parent role in template generates exception
    * [SYNCOPE-500] - Wrong (unwanted) derived attribute insertion addition in membership modal page
    * [SYNCOPE-501] - Virtual attribute propagation not working when updating only virtual attributes
    * [SYNCOPE-504] - Sync/Push actions shouldn't be executed in dryrun
    * [SYNCOPE-509] - In Task page after change of number of rows (to display) is erroneously added a column to tasks table
    * [SYNCOPE-512] - If there are no roles in edit user modal page is possible to create membership between root (fake) role and user
    * [SYNCOPE-515] - Bad integration test causes role ownership conflicts

** Improvement
    * [SYNCOPE-485] - Upgrade to Activiti 5.15.1
    * [SYNCOPE-486] - Update Selenium test configuration
    * [SYNCOPE-507] - User login date conditional logging
    * [SYNCOPE-511] - Enhance synchronization report information
    * [SYNCOPE-519] - Report default values for connector properties
    * [SYNCOPE-520] - Move reset sync token to resource actions

Release Notes - Syncope - Version 1.1.7
================================================================================
** Bug
    * [SYNCOPE-484] - Reports and Content export fails over HTTPS connection

** Improvement
    * [SYNCOPE-487] - make Velocity tools available in templates for notifications

Release Notes - Syncope - Version 1.1.6
================================================================================
** Bug
    * [SYNCOPE-452] - Generated project not starting in embedded mode
    * [SYNCOPE-453] - Propagation problem with role virtual attribute mapped in user mapping 
    * [SYNCOPE-454] - Update user without password specification involving resource with "Generate password if missing" enabled, sends password out anyway
    * [SYNCOPE-455] - Role child implicit delete won't be propagated during parent delete
    * [SYNCOPE-459] - Read-only virtual attribute cannot be added for a user by admin console
    * [SYNCOPE-462] - Upgrade Spring to 3.2.7
    * [SYNCOPE-465] - Selected items lost browsing paged results
    * [SYNCOPE-466] - Server error when updating an existing policy to its global counterpart
    * [SYNCOPE-474] - forbidden error when tried to change password
    * [SYNCOPE-475] - After session expired, console shows split screen
    * [SYNCOPE-476] - NPE opening Roles tab
    * [SYNCOPE-477] - Alert popup appears through page navigation after modal window closing

** Improvement
    * [SYNCOPE-460] - Default datasource uses BasicDataSource
    * [SYNCOPE-468] - Add information to what components refer to a certain policy
    * [SYNCOPE-469] - Group policies and logs under configuration

** Task
    * [SYNCOPE-463] - Update notification docs after SYNCOPE-423
    * [SYNCOPE-478] - Upgrade to Wicket 6.14.0

Release Notes - Syncope - Version 1.1.5
================================================================================
** Bug
    * [SYNCOPE-419] - Meaningless error message when attempting to delete user owning role
    * [SYNCOPE-423] - Improve notifications
    * [SYNCOPE-426] - UserService#update and RoleService#update require entity id to be specified twice
    * [SYNCOPE-433] - Counting search results fails with MySQL when OR condition is used
    * [SYNCOPE-434] - Users can log in the admin console despite of their status
    * [SYNCOPE-435] - Password not mandatory when subscribing external resource
    * [SYNCOPE-436] - Read-only virtual attribute values not retrieved from external resource
    * [SYNCOPE-437] - Wrong ID generation for new Notification instances
    * [SYNCOPE-440] - Timestamp based synchronization miss events

** Improvement
    * [SYNCOPE-420] - Provide user / role pre-processing mechanism
    * [SYNCOPE-422] - Improve audit info
    * [SYNCOPE-424] - Resolve OpenJPA dependency overlap
    * [SYNCOPE-427] - Add CSV report format
    * [SYNCOPE-431] - Provide debug logging for controller methods' input and output
    * [SYNCOPE-432] - Replace role action labels with icons
    * [SYNCOPE-441] - Index on Activiti table boosts overall performance
    * [SYNCOPE-442] - Use cached virtual attribute values with offline resources

** Task
    * [SYNCOPE-448] - Provide build instructions
    * [SYNCOPE-449] - Fix support for Eclipse IDE

Release Notes - Syncope - Version 1.1.4
================================================================================
** Bug
    * [SYNCOPE-404] - LDAP Roles lose entitlement upon LDAP synchronization
    * [SYNCOPE-412] - Audit tables are reset after restart
    * [SYNCOPE-417] - Users are made active when updating in NoOpWorkflowAdapter
    * [SYNCOPE-418] - Special chars break REST URLs

** Improvement
    * [SYNCOPE-402] - Inconsistent status of user edit form after exception returned by bad propagation on primary resource
    * [SYNCOPE-403] - Enrich PropagationStatusTO to report possible propagation exception message
    * [SYNCOPE-408] - Add index on task.executed
    * [SYNCOPE-409] - Allow notifications with empty about field
    * [SYNCOPE-410] - Make username pattern configurable via account policy
    * [SYNCOPE-411] - Perform retries on failed notifications
    * [SYNCOPE-413] - Clean activiti history for unused variables
    * [SYNCOPE-415] - Reduce log level of bean validation errors
    * [SYNCOPE-416] - AttributableSearchDAOImpl / Avoid query construction with string concatenation

Release Notes - Syncope - Version 1.1.3
================================================================================
** Bug
    * [SYNCOPE-370] - HTTP Status 404 adding a role to a user with IE8 
    * [SYNCOPE-394] - Scheduled tasks are executed without transaction support
    * [SYNCOPE-396] - removeAll and retainAll in PropagationByResource dont evaluate correctly boolean expression
    * [SYNCOPE-397] - Double update propagation with virtual attributes on already associated resource when changing password and adding new resource
    * [SYNCOPE-398] - secretKey does not get resolved during archetype:generate
    * [SYNCOPE-399] - Role attribute mapping for user mapping item doesn't result in a multivalue property
    * [SYNCOPE-400] - Poor search performance on MySQL
    * [SYNCOPE-401] - Deploying syncope.war with MSSQL server settings to Tomcat on Windows results in Error listenerStart

** Improvement
    * [SYNCOPE-395] - Role Reportlet

Release Notes - Syncope - Version 1.1.2
================================================================================
** Bug
    * [SYNCOPE-369] - Wrong error message on failed login
    * [SYNCOPE-371] - Console RuntimeException with multiple sessions for the same user
    * [SYNCOPE-372] - Connector error before save
    * [SYNCOPE-373] - 500 when self reading admin user
    * [SYNCOPE-375] - QUARTZ tables are not written into an innodb mysql DB for an mvn generated and created project
    * [SYNCOPE-376] - Console webapp does not start on Glassfish
    * [SYNCOPE-377] - Exporting configuration via console causes exceptions to be thrown
    * [SYNCOPE-380] - Deleting a role from admin console throws an exception
    * [SYNCOPE-381] - Adding and saving roles with resources during save
    * [SYNCOPE-382] - Core hangs for a very long time (1h+ and then resumes) after a CLI role create and list
    * [SYNCOPE-383] - Failure assigning resource to an existing user
    * [SYNCOPE-384] - Issues with CXF and Glassfish
    * [SYNCOPE-385] - NPE when reading user assigned to resource with no mapping
    * [SYNCOPE-386] - Database sync (no full reconciliation) fails with "Unsupported object class"
    * [SYNCOPE-387] - Unable to synchronize deleted objects from OpenDJ

** Improvement
    * [SYNCOPE-374] - SyncopeUser tokens do not use secure random strings
    * [SYNCOPE-390] - Default Reportlets improvements

Release Notes - Syncope - Version 1.1.1
================================================================================
** Bug
    * [SYNCOPE-351] - Errors when editing role membership assignment in notifications (About and Recipients)
    * [SYNCOPE-352] - No connectors available on clean install
    * [SYNCOPE-353] - UserTemplate evaluation generates unjustified attributes to be removed
    * [SYNCOPE-354] - LDAP Membership propagation does not remove memberships
    * [SYNCOPE-356] - Unable to set resource for role via the console
    * [SYNCOPE-357] - When deleting role on external resource, also remove from there users with resource assigned only via that role
    * [SYNCOPE-358] - ConnectorService#list invocation with null parameter actually calls ConnectorService#readByResource
    * [SYNCOPE-360] - Removing Role mapping from External Resource fails
    * [SYNCOPE-361] - When creating new report, the modal window does not close and an exception is logged
    * [SYNCOPE-363] - ApacheDS not available since second run of the standalone distribution
    * [SYNCOPE-364] - Rejected users are anyway propagate to associated resources
    * [SYNCOPE-365] - External attribute disabled in case of schema info not available
    * [SYNCOPE-366] - Uniform constraint violation building
    * [SYNCOPE-367] - ConfigurationTestITCase#browseAccountPolicy Selenium test fails
    * [SYNCOPE-368] - Cannot add 'RoleOwnerSchema' mapping item via console

** Improvement
    * [SYNCOPE-359] - Ignore propagation if no schema mapping is provided
    * [SYNCOPE-362] - Disable mapping tab when the underlying connector does not support correspondent ObjectClass

** Task
    * [SYNCOPE-126] - Database import / export and related tasks

** Wish
    * [SYNCOPE-340] - Translate items of Syncope UI and config files labels for Portuguese language 

Release Notes - Syncope - Version 1.1.0
================================================================================
** Sub-task
    * [SYNCOPE-26] - Membership propagation / synchronization
    * [SYNCOPE-172] - Role propagation / synchronization
    * [SYNCOPE-173] - Role workflow
    * [SYNCOPE-227] - Role virtual attributes
    * [SYNCOPE-251] - Fix Dependency issues with ConnID Bundle deployment 
    * [SYNCOPE-252] - Update LICENSE / NOTICE files for any added or removed Maven dependency
    * [SYNCOPE-256] - Update Rest exception mapper to Apache CXF
    * [SYNCOPE-282] - Implement JAX-RS exception mapper for server side
    * [SYNCOPE-287] - Information for release notes
    * [SYNCOPE-288] - Make setters of Transfer Objects (TO) compatible to CXF and JAXB
    * [SYNCOPE-289] - Prepare CXF Rest integration tests migration
    * [SYNCOPE-335] - Use correct wrapper names for returning lists

** Bug
    * [SYNCOPE-182] - LICENSE & NOTICE: duplicated entries
    * [SYNCOPE-183] - 'Enforce mandatory constraints' not working
    * [SYNCOPE-185] - Could not delete an user with LDAP resource
    * [SYNCOPE-187] - When deleting an user, REST error doesn't bring error message to display
    * [SYNCOPE-191] - UI Error when sorting Synchronization Task executions
    * [SYNCOPE-192] - With trace level NONE notification tasks don't get updated
    * [SYNCOPE-193] - LDAP test connector status management does not work with synchronization
    * [SYNCOPE-194] - User attributes not sychronized properly from LDAP resource
    * [SYNCOPE-196] - Change Display Attributes button misaligned
    * [SYNCOPE-197] - TaskModalPage Refresh button misaligned
    * [SYNCOPE-202] - MySQL and Oracle integration test hangs
    * [SYNCOPE-208] - Resources: schema mapping form shows incorrect external field names for SyncopeUserId and Password
    * [SYNCOPE-211] - Test org.apache.syncope.core.persistence.relationships.derAttrFromSpecialAttrs not enabled
    * [SYNCOPE-214] - Error when trying to change readonly attribute
    * [SYNCOPE-217] - SyncopeUser.hasTokenExpired() can easily cause nullpointer exception
    * [SYNCOPE-220] - When running in embedded mode, CSVDir configuration shows unresolved ${urlencoded.csvdir.path} property
    * [SYNCOPE-224] - ActivitiWorkflowLoader called by SpringContextInitializer even when ActivitiUserWorkflowAdapter is not selected
    * [SYNCOPE-226] - Invalid passwords might fill up user's password history
    * [SYNCOPE-228] - When updating a role, assigned entitlements get lost
    * [SYNCOPE-230] - Sync user attributes using a long schema attribute as accountId
    * [SYNCOPE-232] - "Connection is read-only" during initialization
    * [SYNCOPE-233] - Authentication failure using password with special characters
    * [SYNCOPE-234] - Failures upgrading OpenJPA
    * [SYNCOPE-235] - CSVDir connector fails during check connection
    * [SYNCOPE-236] - Username and password not evaluated from user template during synchronization
    * [SYNCOPE-237] - Users with no entitlements cannot edit their own profile via console
    * [SYNCOPE-238] - With an high number of users, the admin console's 'TODO' tab is extremely slow
    * [SYNCOPE-260] - Update propagation with null virtual attribute values
    * [SYNCOPE-261] - Role visualization error
    * [SYNCOPE-262] - Create sync policy fail
    * [SYNCOPE-267] - Possible NullPointerException into SchemaMappingUtil.getAccountIdValue()
    * [SYNCOPE-269] - AES encryption key defined in source code
    * [SYNCOPE-273] - Role deletion inhibits notification update
    * [SYNCOPE-274] - Sync: during update with user template existing memberships break update
    * [SYNCOPE-284] - Broken export
    * [SYNCOPE-292] - NPE when accessing Configuration page with no global sync policy
    * [SYNCOPE-294] - User data not refreshed before edit
    * [SYNCOPE-297] - External Attributes are showing up for AccoundId/Password in Resource User Mappings
    * [SYNCOPE-301] - Status is not updated when synchronizing existing users
    * [SYNCOPE-302] - Error when accessing the Resources page as non-admin
    * [SYNCOPE-305] - Can't create Sync or Sched Task in Console
    * [SYNCOPE-306] - 'Mandatory' error in Console when propagating Virtual Attributes
    * [SYNCOPE-307] - Virtual Attributes don't propagated in case of update during synchronization
    * [SYNCOPE-308] - When trying to update an user in status 'rejected', an error 500 is returned
    * [SYNCOPE-309] - Enter key not bound to user form submit
    * [SYNCOPE-310] - Palette elements get translated
    * [SYNCOPE-312] - Introducing UserWorkflowService
    * [SYNCOPE-314] - User list sort based on username fails 
    * [SYNCOPE-315] - "Persistent" feedback messages
    * [SYNCOPE-316] - Exception when creating connector instances with no bundles available
    * [SYNCOPE-317] - Error executing SyncTask twice or more
    * [SYNCOPE-318] - No way to see Connector help message for multi-valued property
    * [SYNCOPE-320] - Support synchronizing role memberships from LDAP groupOfNames
    * [SYNCOPE-321] - Wicket error adding new derived/virtual attribute
    * [SYNCOPE-322] - Can't create a new Role in Chromium
    * [SYNCOPE-323] - REST: create turns into update for some entities
    * [SYNCOPE-325] - Stacktrace when accessing the Configuration page on JBoss
    * [SYNCOPE-327] - Error messages during Tomcat shutdown
    * [SYNCOPE-328] - NPE with no global password policy defined
    * [SYNCOPE-329] - Wrong CSS deleting execution task
    * [SYNCOPE-330] - noopworkflow profile not succeeding
    * [SYNCOPE-332] - User List sorting via Derived attributes column doesn't work
    * [SYNCOPE-334] - Can't delete a role from a user in the console
    * [SYNCOPE-336] - Use a auto-complete textfield to chose for external attribute to be mapped during schema mapping creation
    * [SYNCOPE-338] - Some CXF REST services can be accessed by anonymous
    * [SYNCOPE-339] - enum schema multivalue doesn't work
    * [SYNCOPE-341] - When deleting user schema, user list attributes head don't get updated
    * [SYNCOPE-342] - Console might fail to connect when core is deployed on virtual host
    * [SYNCOPE-343] - REST methods returning implementation classes might fail when there are no available
    * [SYNCOPE-344] - Error in the console when you try to assign to an user a resource without CREATE or UPDATE capabilities
    * [SYNCOPE-347] - User schema mapping error for Username

** Improvement
    * [SYNCOPE-14] - Solve some warnings and verify if generated projects still work
    * [SYNCOPE-44] - Add ability to search for Roles via the REST API
    * [SYNCOPE-51] - Remove MD5 as a supported password cipher algorithm
    * [SYNCOPE-67] - Display all Execute Tasks (Propagation, Notification and Scheduled) and related Execution history items sortered in descending order
    * [SYNCOPE-79] - Simplify Maven project structure
    * [SYNCOPE-93] - Upgrade Quartz to latest 2.X stable version
    * [SYNCOPE-100] - Add more password encryption options
    * [SYNCOPE-124] - Prevent task execution request for running tasks
    * [SYNCOPE-130] - Avoid propagating useless update operations
    * [SYNCOPE-134] - User, role and membership properties for derived schemas
    * [SYNCOPE-136] - Password required for resource subscription
    * [SYNCOPE-137] - Support more than one local connector bundles directory and zero or more ConnId's connector servers
    * [SYNCOPE-144] - Provide Task entities with a name and an optional description
    * [SYNCOPE-146] - Provide asynchronous refresh of tasks and reports list
    * [SYNCOPE-147] - Provide refresh button in task and report modal windows
    * [SYNCOPE-148] - Provide cancel button for all modal windows
    * [SYNCOPE-154] - Virtual attribute cache
    * [SYNCOPE-184] - LDAP test connector should provide status information
    * [SYNCOPE-195] - Make default sorting order consistent
    * [SYNCOPE-198] - Add checkboxes to tables headers and rows
    * [SYNCOPE-199] - Refocus on user deletion page
    * [SYNCOPE-200] - Improve rat-plugin configuration
    * [SYNCOPE-201] - AbstractSchema enumerationValues and enumerationKeys too short
    * [SYNCOPE-203] - Add OSGi support
    * [SYNCOPE-206] - Create standalone distribution
    * [SYNCOPE-207] - Clear test configuration in order to avoid AccountId/Password mapping explicitely valued
    * [SYNCOPE-209] - DB Table connector does not see changes in underlying table until restart
    * [SYNCOPE-210] - Provide suggestions / help / examples for JEXL-based input fields
    * [SYNCOPE-212] - Provide Validation Error message to user
    * [SYNCOPE-215] - ReadOnly option for virtual attributes
    * [SYNCOPE-216] - NotificationJob is hardcoded to run every 2 minutes
    * [SYNCOPE-218] - User Workflow visualization
    * [SYNCOPE-221] - Let user explicitly choose to give value for AccountLink (when defining resource schema mapping)
    * [SYNCOPE-222] - Check for mandatory condition on Virtual / Derived attributes
    * [SYNCOPE-225] - Role owner
    * [SYNCOPE-229] - Allow to change the bundle version associated to an existing connector instance
    * [SYNCOPE-231] - Using Standard JAX-RS API in Syncope (Introducing Apache CXF WS Stack)
    * [SYNCOPE-241] - Move persistence and persistence impl into separate modules
    * [SYNCOPE-242] - Resolve dependency cycles between persistence and the rest of syncope core
    * [SYNCOPE-243] - Extended org.apache.rat exclude list for eclipse IDE
    * [SYNCOPE-244] - Make external property file usage possible
    * [SYNCOPE-245] - Improve UserTestITCase, RoleTestITCase and TaskTestITCase
    * [SYNCOPE-248] - Consolidate task execution in TaskTestITCase
    * [SYNCOPE-249] - Implement RoleOwnerSchema for role propagation and synchronization
    * [SYNCOPE-250] - Improve error handling in NotificationTest
    * [SYNCOPE-253] - Upgrade Activiti to 5.11
    * [SYNCOPE-254] - Provide build profile for skipping any test-related activity
    * [SYNCOPE-255] - Hide Global Password/Account/Sync policy in security resource selections
    * [SYNCOPE-257] - Schema Mapping for propagation and synchronization
    * [SYNCOPE-258] - Java class as sync policy correlation rule
    * [SYNCOPE-259] - Create transitional Service interfaces and switch tests and console to use them
    * [SYNCOPE-263] - Inject Recipient and Event variable in Velocity Email Notification Template
    * [SYNCOPE-264] - Email Notification Templates Documentation
    * [SYNCOPE-266] - Password should be provided again at resource subscription time if a "Password" schema mapping for that resource exists
    * [SYNCOPE-268] - Enable Rest IntegrationTests to run more than once (per build)
    * [SYNCOPE-275] - Upgrade Spring to 3.2.1
    * [SYNCOPE-277] - Improve archetype resource population from core and console
    * [SYNCOPE-279] - Connector instance timeout
    * [SYNCOPE-280] - Update some checked exceptions to runtime ones
    * [SYNCOPE-281] - Refactor client module: Move common classes into common module
    * [SYNCOPE-283] - website edits
    * [SYNCOPE-291] - Move NotFoundException to core.persistence.dao
    * [SYNCOPE-293] - Show information (version, license, ...)
    * [SYNCOPE-295] - If AccountId is selected when creating a Resource Mapping, then make it mandatory
    * [SYNCOPE-296] - Align search botton
    * [SYNCOPE-299] - Add "row to display" selector in resources
    * [SYNCOPE-311] - View user details during approval
    * [SYNCOPE-319] - Provide feature for reloading all connectors
    * [SYNCOPE-324] - Return User instead of Boolean from REST username + password query
    * [SYNCOPE-331] - Provide access to user / role data on external resources
    * [SYNCOPE-348] - Email address validator regexp

** New Feature
    * [SYNCOPE-121] - Policy-compliant random password generation
    * [SYNCOPE-122] - Password change on an external resource only
    * [SYNCOPE-138] - Scripted SQL connector bundle
    * [SYNCOPE-171] - Role provisioning

** Task
    * [SYNCOPE-125] - Derived and Virtual attribute use cases
    * [SYNCOPE-127] - Workflow: concepts, how to customize and how to trace
    * [SYNCOPE-128] - Self-registration
    * [SYNCOPE-186] - Build reference flows for propagation and synchronization
    * [SYNCOPE-188] - Upgrade to Apache Wicket 1.5.8
    * [SYNCOPE-189] - Close Modal Window on keypress (ESC)
    * [SYNCOPE-190] - Automatic page refresher for task and report
    * [SYNCOPE-205] - Upgrade to latest Apache Wicket 6.X.Y
    * [SYNCOPE-265] - Ensure that Syncope test data is consistent
    * [SYNCOPE-276] - Upgrade instructions from 1.0.X to 1.1.0
    * [SYNCOPE-278] - Verify export / import
    * [SYNCOPE-326] - Check console style (CSS) on Internet Explorer
    * [SYNCOPE-350] - Provide Getting started / Standalone distribution

Release Notes - Syncope - Version 1.0.9
================================================================================
** Bug
    * [SYNCOPE-364] - Rejected users are anyway propagate to associated resources

Release Notes - Syncope - Version 1.0.8
================================================================================
** Bug
    * [SYNCOPE-351] - Errors when editing role membership assignment in notifications (About and Recipients)

** Improvement
    * [SYNCOPE-348] - Email address validator regexp

** Wish
    * [SYNCOPE-340] - Translate items of Syncope UI and config files labels for Portuguese language

Release Notes - Syncope - Version 1.0.7
================================================================================
** Bug
    * [SYNCOPE-332] - User List sorting via Derived attributes column doesn't work
    * [SYNCOPE-336] - Use a auto-complete textfield to chose for external attribute to be mapped during schema mapping creation
    * [SYNCOPE-339] - enum schema multivalue doesn't work
    * [SYNCOPE-341] - When deleting user schema, user list attributes head don't get updated
    * [SYNCOPE-342] - Console might fail to connect when core is deployed on virtual host

** Task
    * [SYNCOPE-326] - Check console style (CSS) on Internet Explorer

Release Notes - Syncope - Version 1.0.6
================================================================================
** Bug
    * [SYNCOPE-294] - User data not refreshed before edit
    * [SYNCOPE-301] - Status is not updated when synchronizing existing users
    * [SYNCOPE-307] - Virtual Attributes don't propagated in case of update during synchronization
    * [SYNCOPE-308] - When trying to update an user in status 'rejected', an error 500 is returned
    * [SYNCOPE-309] - Enter key not bound to user form submit
    * [SYNCOPE-310] - Palette elements get translated
    * [SYNCOPE-314] - User list sort based on username fails 
    * [SYNCOPE-315] - "Persistent" feedback messages
    * [SYNCOPE-316] - Exception when creating connector instances with no bundles available
    * [SYNCOPE-325] - Stacktrace when accessing the Configuration page on JBoss

** Improvement
    * [SYNCOPE-154] - Virtual attribute cache
    * [SYNCOPE-299] - Add "row to display" selector in resources
    * [SYNCOPE-311] - View user details during approval

Release Notes - Syncope - Version 1.0.5
================================================================================
** Bug
    * [SYNCOPE-260] - Update propagation with null virtual attribute values
    * [SYNCOPE-267] - Possible NullPointerException into SchemaMappingUtil.getAccountIdValue()
    * [SYNCOPE-269] - AES encryption key defined in source code
    * [SYNCOPE-272] - During sync null attributes from template are considered
    * [SYNCOPE-273] - Role deletion inhibits notification update
    * [SYNCOPE-274] - Sync: during update with user template existing memberships break update

** Improvement
    * [SYNCOPE-14] - Solve some warnings and verify if generated projects still work
    * [SYNCOPE-67] - Display all Execute Tasks (Propagation, Notification and Scheduled) and related Execution history items sortered in descending order
    * [SYNCOPE-201] - AbstractSchema enumerationValues and enumerationKeys too short
    * [SYNCOPE-255] - Hide Global Password/Account/Sync policy in security resource selections
    * [SYNCOPE-263] - Inject Recipient and Event variable in Velocity Email Notification Template
    * [SYNCOPE-264] - Email Notification Templates Documentation
    * [SYNCOPE-266] - Password should be provided again at resource subscription time if a "Password" schema mapping for that resource exists
    * [SYNCOPE-279] - Connector instance timeout
    * [SYNCOPE-283] - website edits

Release Notes - Syncope - Version 1.0.4
================================================================================
** Bug
    * [SYNCOPE-232] - "Connection is read-only" during initialization
    * [SYNCOPE-233] - Authentication failure using password with special characters
    * [SYNCOPE-234] - Failures upgrading OpenJPA
    * [SYNCOPE-235] - CSVDir connector fails during check connection
    * [SYNCOPE-236] - Username and password not evaluated from user template during synchronization
    * [SYNCOPE-237] - Users with no entitlements cannot edit their own profile via console
    * [SYNCOPE-238] - With an high number of users, the admin console's 'TODO' tab is extremely slow
    * [SYNCOPE-240] - Missed CREATE status into org.apache.syncope.console.commons.StatusUtils.Status

** Improvement
    * [SYNCOPE-239] - Add OSGi support for the client
    * [SYNCOPE-243] - Extended org.apache.rat exclude list for eclipse IDE

Release Notes - Syncope - Version 1.0.3-incubating
================================================================================
** Bug
    * [SYNCOPE-214] - Error when trying to change readonly attribute
    * [SYNCOPE-217] - SyncopeUser.hasTokenExpired() can easily cause nullpointer exception
    * [SYNCOPE-220] - When running in embedded mode, CSVDir configuration shows unresolved ${urlencoded.csvdir.path} property
    * [SYNCOPE-224] - ActivitiWorkflowLoader called by SpringContextInitializer even when ActivitiUserWorkflowAdapter is not selected
    * [SYNCOPE-226] - Invalid passwords might fill up user's password history
    * [SYNCOPE-228] - When updating a role, assigned entitlements get lost
    * [SYNCOPE-230] - Sync user attributes using a long schema attribute as accountId

Release Notes - Syncope - Version 1.0.2-incubating
================================================================================
** Bug
    * [SYNCOPE-193] - LDAP test connector status management does not work with synchronization
    * [SYNCOPE-194] - User attributes not sychronized properly from LDAP resource
    * [SYNCOPE-196] - Change Display Attributes button misaligned
    * [SYNCOPE-202] - MySQL and Oracle integration test hangs
    * [SYNCOPE-208] - Resources: schema mapping form shows incorrect external field names for SyncopeUserId and Password
    * [SYNCOPE-211] - Test org.apache.syncope.core.persistence.relationships.derAttrFromSpecialAttrs not enabled

** Improvement
    * [SYNCOPE-124] - Prevent task execution request for running tasks
    * [SYNCOPE-195] - Make default sorting order consistent
    * [SYNCOPE-200] - Improve rat-plugin configuration
    * [SYNCOPE-207] - Clear test configuration in order to avoid AccountId/Password mapping explicitely valued

Release Notes - Syncope - Version 1.0.1-incubating
================================================================================
** Bug
    * [SYNCOPE-182] - LICENSE & NOTICE: duplicated entries
    * [SYNCOPE-183] - 'Enforce mandatory constraints' not working
    * [SYNCOPE-185] - Could not delete an user with LDAP resource
    * [SYNCOPE-187] - When deleting an user, REST error doesn't bring error message to display
    * [SYNCOPE-191] - UI Error when sorting Synchronization Task executions
    * [SYNCOPE-192] - With trace level NONE notification tasks don't get updated

** Improvement
    * [SYNCOPE-184] - LDAP test connector should provide status information

** Task
    * [SYNCOPE-188] - Upgrade to Apache Wicket 1.5.8

Release Notes - Syncope - Version 1.0.0-incubating
================================================================================
** Bug
    * [SYNCOPE-114] - Cannot edit an existing reportlet
    * [SYNCOPE-113] - Adding schema mapping to new resource requires changing connector
    * [SYNCOPE-115] - Spring warns about 'Ambiguous write methods found' for HttpClientParams
    * [SYNCOPE-118] - User list: 'propagationTOs' shouldn't be shown for display attributes
    * [SYNCOPE-117] - Empty default user list display attributes selection
    * [SYNCOPE-178] - Incomplete processing during synchronization / full reconciliation
    * [SYNCOPE-179] - Synchronization task executions not connected to owning task
    * [SYNCOPE-180] - After test execution spare files aren't all cleaned up
    * [SYNCOPE-181] - Missing entries in LICENSE & NOTICE for JQuery and CodeMirror

** Improvement
    * [SYNCOPE-116] - Display execution date on Task and Report lists

Release Notes - Syncope - Version 1.0.0-RC3-incubating
================================================================================
** Bug
    * [SYNCOPE-101] - Release process creates three source artifacts
    * [SYNCOPE-102] - Concurrent execution of the same report might lead to inconsistencies
    * [SYNCOPE-103] - Export function in console not working
    * [SYNCOPE-104] - UTF-8 characters do not appear in notification mails
    * [SYNCOPE-106] - User search based on Enum attribute doesn't work
    * [SYNCOPE-108] - Wrong de-provisioning in case of different role with the same externat resource
    * [SYNCOPE-111] - Failure during role attribute propagation
    * [SYNCOPE-112] - Resource test connection doesn't work fine

** New Feature
    * [SYNCOPE-105] - Support Oracle WebLogic

** Task
    * [SYNCOPE-109] - Support JBoss AS 7.1 with native OpenJPA

Release Notes - Syncope - Version 1.0.0-RC2-incubating
================================================================================
** Bug
    * [SYNCOPE-83] - Recipients tab has all fields required when editing NotificationTask
    * [SYNCOPE-90] - GenerateToken class doesn't persist token to DB 
    * [SYNCOPE-92] - Align parent POM version to latest release
    * [SYNCOPE-94] - When upgrading to HttpComponents Client 4.2, an Integration Test fails
    * [SYNCOPE-95] - Search doesn't work at all with production content.xml
    * [SYNCOPE-96] - Invalid authentication
    * [SYNCOPE-97] - Singleton RestTemplate
    * [SYNCOPE-99] - Problem editing notifications through console when Membership included in about

** Improvement
    * [SYNCOPE-73] - Add staging site generation steps to release-process page
    * [SYNCOPE-74] - Make configuration params available in mail templates
    * [SYNCOPE-76] - Manage connector configuration property confidential
    * [SYNCOPE-88] - Support MS SQL Server
    * [SYNCOPE-89] - ReportTestITCase.executeAndExport hangs with oracle
    * [SYNCOPE-91] - More UserController RESTful method consistency
    * [SYNCOPE-98] - Method to check if token has expired

Release Notes - Syncope - Version 1.0.0-RC1-incubating
================================================================================

** Sub-task
    * [SYNCOPE-5] - Report configuration UI
    * [SYNCOPE-6] - Add Selenium test case for Report

** Bug
    * [SYNCOPE-1] - ASF license headers not correct
    * [SYNCOPE-3] - Include NOTICE and LICENSE in all artifacts
    * [SYNCOPE-8] - ERROR: type "clob" does not exist
    * [SYNCOPE-10] - ConnInstance update doesn't imply related connector spring beans reloading
    * [SYNCOPE-11] - Editing a virtual attribute, error after submit
    * [SYNCOPE-12] - Error Selenium Tests
    * [SYNCOPE-16] - Update propagation fails in case of virtual attributes
    * [SYNCOPE-17] - Manage ConnID's configuration exception
    * [SYNCOPE-18] - Virtual attributes cannot be mapped as AccountId
    * [SYNCOPE-21] - ACT_HI_ACTINST:Unique index or primary key violation on non-empty database
    * [SYNCOPE-23] - TODO tab glitches
    * [SYNCOPE-27] - Reflection aware REST methods don't consider classes not explicitly implementing interfaces
    * [SYNCOPE-29] - Deployment on JBoss AS 7.1.0-Final does not work
    * [SYNCOPE-30] - Generation from archetype fails with error 'The defined artifact is not an archetype'
    * [SYNCOPE-31] - User status is not propagated during update
    * [SYNCOPE-32] - Missing SMALLINT type in ImportExport class
    * [SYNCOPE-33] - Virtual attribute missing during synchronization
    * [SYNCOPE-34] - No propagation fo virtual attributes retrieved/generated  during synchronization
    * [SYNCOPE-36] - User read fails in case of error during virtual attribute retrieving
    * [SYNCOPE-37] - Using console, create a new report feature does not work.
    * [SYNCOPE-39] - Notification task is not created during synchronization
    * [SYNCOPE-40] - Notification task error: small field size (htmlbody and txtbody)
    * [SYNCOPE-41] - NotificationManager: extend email.schema to derived and virtual attributes
    * [SYNCOPE-43] - Report does not keep a reference to its executions for a new report
    * [SYNCOPE-46] - Error: Search from console with LIKE condition
    * [SYNCOPE-47] - User resource set update fails during synchronization
    * [SYNCOPE-48] - Incorrect entitlement inheritance
    * [SYNCOPE-49] - Make utility maps returned by TO's methods read-only
    * [SYNCOPE-52] - Recipient search does not work
    * [SYNCOPE-54] - Notification e-mails can be sent forever
    * [SYNCOPE-58] - User request approval duplicates requests
    * [SYNCOPE-61] - WARNING: DB connection abandoned
    * [SYNCOPE-63] - PolicyBeanPanel doesn't work fine
    * [SYNCOPE-65] - Export/Import doesn't work with MySQL
    * [SYNCOPE-68] - Existing memberships removed during synchronization
    * [SYNCOPE-70] - Source artifacts include either 'syncope-1.0.0-RC1-incubating-source' and 'syncope-root-1.0.0-RC1-incubating-source' root dirs
    * [SYNCOPE-71] - Foreign key constraints missed with OpenJPA
    * [SYNCOPE-72] - JSP files don't contain the required ASF license header
    * [SYNCOPE-75] - User create fails providing more than one value for a multivalued attribute of type date
    * [SYNCOPE-77] - Save button not displayed in MembershipModalPage
    * [SYNCOPE-80] - Changin Rows to display value in Propagation Tasks does not take effect
    * [SYNCOPE-81] - NotificationTasks cannot be deleted
    * [SYNCOPE-82] - Propagation task executions don't get persisted
    * [SYNCOPE-84] - Projects generated with maven artifacts fail because of missing legal files
    * [SYNCOPE-85] - Replace dependency on openjpa-all
    * [SYNCOPE-86] - TaskExec instances are not associated with owning NotificationTask

** Improvement
    * [SYNCOPE-14] - Solve some warnings and verify if generated projects still work
    * [SYNCOPE-22] - Improve virtual attribute value retrieving
    * [SYNCOPE-24] - Remove code replication managing resource schema mappings
    * [SYNCOPE-28] - SyncJobActions interface improvement
    * [SYNCOPE-38] - Todo icon is different compared to other icons.
    * [SYNCOPE-42] - Add the ability to delete a user by username via the REST API
    * [SYNCOPE-45] - Make all delete operations consistent in the REST API
    * [SYNCOPE-50] - Cache custom implementation classes
    * [SYNCOPE-53] - Make the whole UserTO object available in mail templates
    * [SYNCOPE-55] - Allow users to read roles assigned to them by membership
    * [SYNCOPE-60] - Display Excecutions in Synhronization Tasks with descendent order as default
    * [SYNCOPE-62] - Improve enum schema by giving the possibility to specify labels
    * [SYNCOPE-67] - Display all Execute Tasks (Propagation, Notification and Scheduled) and related Execution history items sortered in descending order
    * [SYNCOPE-69] - Increase compile performance
    * [SYNCOPE-74] - Make configuration params available in mail templates

** New Feature
    * [SYNCOPE-7] - Role/Membership attributes propagation

** Task
    * [SYNCOPE-2] - Fix NOTICE and LICENSE content
    * [SYNCOPE-4] - Report features
    * [SYNCOPE-9] - Update logo in console web UI
    * [SYNCOPE-13] - Migrate documentation from old wiki
    * [SYNCOPE-19] - Update Activiti to release 5.9 
    * [SYNCOPE-20] - Audit features
    * [SYNCOPE-25] - Update glassfish-it profile to latest glassfish 3.1.2
    * [SYNCOPE-35] - Update to Wicket 1.5.5 and verify selenium tests
    * [SYNCOPE-56] - Package rename
    * [SYNCOPE-64] - Issues fixed since last non-ASF release (0.7.1)
    * [SYNCOPE-66] - Add source distribution sub-module

--------------------------------------------------------------------------------
