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

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

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