Update JUnit version.
Code refactoring.
Imports optimizations.
Changes to UI of E-mail Templates page.
New values for i18n.
Validations of E-mail functionality.
Add license header to many files.
Add new strings to i18n.
Code refactoring.
Add few comments to classes.
Add new method for NotificationModel.
Optimizing imports.
Manually add constraints for email/username at E-mail connector page.
A lot of changes to SendEmail class.
Add DAOs for EmailNotification/Template.
Add entities for EmailNotification/Template.
Add models for EmailNotification/Template.
Add Hibernate mapping for email tables.
Some changes to resources mapping.
Add classes for job scheduling of emails.
Code refactoring.
Test email button changes.
Add solution to get welcome page URL from system.
Remarks to method that adds new row to notification_queue table.
New role in Spring security.
New content of Edit E-mail templates page.
All that is referencing to email template - moved into another package.
Add classes/mapping for notification_queue table.
Update Hibernate version in pom file.
Add role to accept email.
Changed quartz scheduler version
Add opportunity to Schedule E-mail class
Add opportunity to test E-mail connector
Minor changes to BaseCRUDController
Add new strings for i18n
Some changes to editJobScheduling form
- task-code (technical, often auto-generated)
+ Total budgeted hours for task
+ Notes (usable for detailed task description)
+ Procentual Progression
+ Filtering: only active tasks (progress < 100%)
+ Filtering: only tasks starting from the last X months to the next Y
months. X and Y are user settings for “ResourcesLoadFilterSince/From”.
+ Tasks sorted by date ascending - seems much more logical than
descending.
Check on task != null before forceLoading a task.
Now Libreplan can be run on Java8.
This implied some changes:
* Latest versions of hibernate use the Bean Validation API. This
implied renaming the imports and use ConstraintViolationException
instead of InvalidValue. Besides some constraints had to be renamed,
otherwise they wouldn't be recognized by Hibernate validation. In
the new version of Hibernate validator @AssertTrue can only be
applied to properties. So all methods it was applied to must follow
the is.* format.
Automatic execution of Bean Validation API is disabled, otherwise an
infinite loop would happen. This is because there are some
validation constraints that do launch queries to the database. This
causes a flush of the objects in the session and automatic
validation is called again.
* A new library for persisting JodaTime is necessary since
joda-time-hibernate is incompatible with hibernate 4. This library
can automatically register its types for Date conversion so they're
removed from configuration.
* Now, in some places, an InvalidDataAccessApiUsageException is thrown
instead of a DataIntegrityViolationException.
This is because no constraint is violated, the API is being used
incorrectly because a transient instance is being provided where a
persisted one was expected.
* In hibernate 4 listeners cannot be configured via properties.
HibernateDatabaseModificationsListener registers itself in its @PostConstruct method.
* ehcache classes used are now different.
It's not necessary, the standard strategy redirect to the original URL
and if it's the default one, IndexController will redirect to the user
default location.
A regression was introduced when adding filtering for the WBS screen.
Instead of being associated to the original TreeModel, the tree is
associated to a newly created one based on the current filtering
predicate. So any changes to the original TreeModel aren't
automatically shown in the Tree UI.
A method must be called to associate a new TreeModel, with the new
changes incorporated, to the tree. The method `filterByPredicateIfAny`
implemented this functionality, but it was renamed to
`reloadTreeUIAfterChanges` to convey better its purpose.
Now when adding a new template, `reloadTreeUIAfterChanges` is called
and the newly created element is shown.
When calculating the load ratio of each resource, a new transaction is
being created for each one. Now one transaction is reused for
everyone, which gives a good performance boost when loading the
`Advanced search`.
When opening the `resource allocation modal window` (double-click on a
task), the advanced search was calculating the load of the resources
when it should do it when clicking advanced search button. This leads
to a big delay when opening the `resource allocation modal window` if
there is a moderate amount of data.
Now these calculations are only done when clicking advanced search
button and the `resource allocation modal window` is opened almost
instantly.
A JavaScript string is being generated quoted by the ' character. If
it finds that character in a string inside the evaled JavaScript it
would terminate the string prematurely, causing syntax errors.
When an allocation cannot be done, the error message on the input
disappeared because the rows were re-rendered due to reloadBindings
call. Now this call is avoided and some extracted functionality from
getCurrentRows is called.
It's not strictly necessary since inside the listener is checked that
effortInput is enabled, but for consistency do it the same way as with
effortInput.