Table of Contents:
2.4.x to 2.5.0-M6
KULRICE-8195 - Add suffix to id from groups id
- For parts of a group (header and header groups, help, validation messages, instructional text, constraint message) added a suffix to ids from groups id
KULRICE-10443 - Ability to use dialogs for confirmations boxes
This actually included a nearly full rewrite of dialogs. Included in this was moving the implementation from lightbox to Bootstrap modal. Several enhancements were added and changes made to existing support to make the component more friendly to work with.
The library demo for dialog groups will serve as a good resource (including demos for added functionality): http://env14.rice.kuali.org/kr-krad/dialog?viewId=Demo-DialogGroupView
The following bean name changes were made:
2.4 Bean Name | 2.5 Bean Name |
---|---|
Uif-OK-Cancel-DialogGroup | Uif-DialogGroup-OkCancel |
Did Not Exist | Uif-DialogGroup-OkCancelExpl |
Uif-Yes-No-DialogGroup | Uif-DialogGroup-YesNo |
Uif-True-False-DialogGroup | Removed, just override footer buttons |
Uif-Checkbox-DialogGroup | Removed, just override dialog explanation |
Uif-RadioButton-DialogGroup | Removed, just override dialog explanation |
Uif-DialogResponse | Removed, there is no input field for the response anymore. It is returned by the buttons to script or controller code |
Did Not Exist | Uif-DialogDismissButton, used in confirmation dialog to dismiss the dialog and return 'false' |
Did Not Exist | Uif-DialogConfirmButton, used in confirmation dialog to dismiss the dialog and return 'true' |
The following property changes were made to Dialog Group:
2.4 Dialog Group Property | 2.5 Dialog Group Property |
---|---|
responseInputField | Removed, the response does not populate an input now. |
reverseButtonOrder | Removed, just set the order of buttons as needed |
Did not exist | dialogCssClass, used to set the bootstrap modal class (small, medium(default), or large) |
Did not exist | onHideDialogScript, handler for the hide modal event |
Server Dialogs
Code for server side dialogs has also changed to be more efficient.
- First we determine whether the dialog has been shown yet by getting the DialogResponse object using the form's getDialogResponse(dialogId) method
- If the returned DialogResponse is null, this means the dialog has not been shown
- We can show a dialog by calling the base controller method showDialog. The first parameter is the ID for the dialog we want to show. The second parameter is a boolean indicating whether we are showing a confirmation dialog or not. If we are showing a confirmation, the framework will not trigger our controller method again if the user selected the false (no) option. This means if the DialogResponse object is not null, we have shown the dialog and the user selected true (yes)
For non-confirmation server dialogs, we can get the response to our dialog using the getResponse method of the DialogResponse object:
Collection Group
Add line through dialogs was also changed to use the new implementation. In addition, these property names on CollectionGroup were changed:
- addViaLightBox renamed to addWithDialog
- addViaLightBoxAction renamed to addWithDialogAction
The following beans were renamed:
- Uif-AddViaLightBoxAction renamed to Uif-AddWithDialogAction
KULRICE-7607 - Using Uif_TableCollectionSection, sequencePropertyName of date doesn't sort
- Modified sequence field sorting. See library table collection samples.
KULRICE-9783 - Support ability to explicitly set the sort type (string,number,currency) within a collection
- Added 'sortAs' property to DataField and LinkField objects. See library table collection samples.
KULRICE-12302 - Enhance document service and document controller base to allow event objects
- Added interface and base class for RuleEvent to allow for event objects.
- Renamed KualiDocumentEvent to DocumentEvent which now extends the above newly created RuleEvent (similar behavior is reflected with the base classes).
- Edited code to reflect the document service and the rule service to now take and process the RuleEvent/DocumentEvent.
- Added functionality to allow custom rule processing.
KULRICE-8889 - Buttons at bottom of maintenance pages vary across each other
- Made buttons more consistent. Also the primary button should be on the right and all other buttons secondary.
KULRICE-11977 - Collection add line and line item enter key support implementation
- Added support for controls and collections for the enter key in controls
KULRICE-11978 - Enter key component attribute and primaryAction flag
- Added support for action items for the enter key
KULRICE-11086 - Tab Groups converted to use Bootstrap Tabs
- This change changed the js implementation and functionality of tabs
- Tabs.java changes
- tabContentClass was eliminated
- tabNavClass was eliminated
- NavigationGroup's name was changed to TabNavigationGroup mirroring the SidebarNavigationGroup name standard
- navigationType property was eliminated
- Markup produced by the tabNavigationGroup.ftl was altered
- Tab positioning was fixed
- js files for now unused navigation types were eliminated
- Configuration should remain largely unaltered
KULRICE-11700 - Tooltips converted to Bootstrap implementation (called popover)
- All tooltips now use the popover js implementation from bootstrap
- This change should be seamless unless you are calling the bubblepopup plugin directly, any calls that use the old plugin must be converted to use popover
- Content must have a width that does not exceed their visible content for the tooltip to appear correctly over it
KULRICE-11685 - CssGridLayout redesign
- The css grid layout markup output has changed drastically to output a single container div per a group with "cell" divs for each item. The visual result will be extremely similar or the same in most cases that are already using CssGridLayout
- The CssGridLayout configuration should largely remain the same except some options were eliminated or renamed
conditionalRowCssClasses eliminated because not needed in new output
rowLayoutCssClass eliminated because not needed in new output
- defaultItemColSpan was renamed to defaultItemSize
- CssGridSizes defaultItemSizes was added for more fine grain control
- Multiple properties internal (non-settable) were eliminated/added in the classes
- CssGridLabelColumnLayoutManager had the following properties added for more fine grained control
CssGridSizes labelColumnSizes
CssGridSizes fieldColumnSizes
- CssGridSizes is a new object on all components and for some properties on these layout managers, which allows full control over the size of content at multiple screen sizes when using CssGridLayout groups
- It is recommended that developers view the demos and labs associated with this new functionality before using it
KULRICE-9922 - refactored deleteMatching on JpaPersistenceProvider to utilize JPA 2.1 CriteriaDelete
- To avoid accidental delete of all records in a table the deleteMatching method doesn't accept empty criteria anymore.
KULRICE-12646 - Added new methods deleteAll and findAll to the PersistenceProvider
- Any custom classes extending the PersistenceProvider interface or implementations may need to implement or override the new deleteAll and findAll methods.
2.5.0-M2 to 2.5.0-M3
KULRICE-5637 - commons-httpclient has been eol'd. We should use org.apache.httpcomponents:httpclient
- Note that all of the standard services in Rice are exported either as SOAP or REST endpoints, and that the HttpClient is not involved in the client call chain to those services. This limits the impact to legacy applications that have not converted the services they export to the bus to one of those two forms. You can tell if your application could potentially be impacted by seeing if you have beans in your spring configuration with the class
org.kuali.rice.ksb.api.bus.support.JavaServiceDefinition
. Legacy configuration parameters:
- Many of the
rice-config.xml
parameters that were previously honored byHttpInvokerConnector
when creating the clients used for java service connections (non-SOAP and non-REST) are no longer supported. These configuration parameters all start with"http."
, although it should be noted that there are a few parameters with that same prefix that don't apply toHttpClient
s (such ashttp.port
andhttp.service.url
). - Following is the list of parameters that are still supported:
http.protocol.expect-continue
http.protocol.content-charset
http.protocol.cookie-policy
http.socket.timeout
http.tcp.nodelay
http.socket.sendbuffer
http.socket.receivebuffer
http.socket.linger
http.connection.timeout
http.connection.stalecheck
http.connection-manager.max-total
http.connection-manager.timeout
http.protocol.reject-relative-redirect
http.protocol.max-redirects
http.protocol.allow-circular-redirects
There is a possibility that these configuration options will not be sufficient for some implementations. In that case, there is a bean that can be overridden to customize the HttpComponents HttpClients. You will want to add an override Spring configuration file to your project, and point to your override file by adding a param to your application's config.xml similar to this:
<param name="rice.ksb.additionalSpringFiles">classpath:edu/yourschool/rice/ksb/YourKsbOverrideSpringBeans.xml</param>
- The bean id you will be overriding is "
rice.ksb.httpClientConfigurer
". - Your custom class must implement
org.kuali.rice.ksb.messaging.serviceconnectors.HttpClientConfigurer
, and you will probably find it useful to extendorg.kuali.rice.ksb.messaging.serviceconnectors.DefaultHttpClientConfigurer
.
- Many of the
Service Removal Exceptions:
- Note that there is a possibility that this change of http clients will render incomplete the list of
serviceRemovalExceptions
inorg.kuali.rice.ksb.messaging.BusClientFailureProxy
. These are the exceptions that, if caught by the client service proxy (BusClientFailureProxy
), will result in attempting to "fail over" to another endpoint for that service. The ability to inject a custom list ofExceptions
via a Spring bean has been added to that class in case the need should arise. The bean id that can be overridden for this purpose is "rice.ksb.serviceRemovalExceptions" which is aList
of exceptionClass
es.
- Note that there is a possibility that this change of http clients will render incomplete the list of
KULRICE-10432 - Allow Action Buttons to determine whether they show on New sides of a Maintenance document
- Maintenance documents can now include an Action Button to display on the New side.
- Changed property "idSuffix" in to comparableId ComparableInfo. This is now used in CompareFieldCreateModifier as a new context variable renderCompareSaveButton . The comparableId is suffixed with a 0 or 1 depending on which column we are creating. The action button uses a render flag to determine if it displays in the New column.
- See Travel Company Labs Maintenance Documents - Maintenance Edit Sample - Action Button.
KULRICE-12626 - Improvements on binding/method security
- Method access is allowed for all GET requests.
- Method access is allowed for POST requests without the @MethodAccessible annotation (the application keeps track and allows access to methods configured on the view), and with it.
- Property binding is allowed for GET requests if the methodToCall matches one of the listed methods in the parameter methodToCalls configured on the @RequestAccessible annotation.
KULRICE-12734 - Update default values to use a boolean variable rather than a list
- Setting default values need to occur on the controller. This is because values set prior to the lifecycle running, could be over written. The variable that controls whether default values on fields should be added was viewsThatNeedDefaultValuesApplied. It was determined that we could simplify the process by making this variable a boolean since there will be at most one view. Any usage of viewsThatNeedDefaultValuesApplied should be updated to use applyDefaultValues.
2.5.0-M3 to 2.5.0-M4
KULRICE-10889 - Look into how base controller functionality is provided
This work involved offering use of provided framework controller functionality through composition rather than inheritance. The composition model offers more flexibility in how the provided functionality is used, and facilitates better testing.
Controller services (interface and implementation) were created to contain the controller code. The base controllers are still in place for those who wish to continue using inheritance, but they now simply delegate to the services.
Effort was also given to simplify the signatures of controller methods. Note, this does not limit the parameters that can be accepted by custom application methods.
Some base controllers were moved to different packages:
- org.kuali.rice.krad.web.controller.LookupController moved to org.kuali.rice.krad.lookup.LookupController
- org.kuali.rice.krad.web.controller.InquiryController moved to org.kuali.rice.krad.inquiry.InquiryController
- org.kuali.rice.krad.web.controller.DocumentControllerBase moved to org.kuali.rice.krad.document.DocumentControllerBase
- org.kuali.rice.krad.web.controller.MaintenanceDocumentController moved to org.kuali.rice.krad.maintenance.MaintenanceDocumentController
- org.kuali.rice.krad.web.controller.TransactionalDocumentControllerBase moved to org.kuali.rice.krad.document.TransactionalDocumentControllerBase
- org.kuali.rice.krad.web.controller.InitiatedDocumentInfoController moved to org.kuali.rice.krad.document.InitiatedDocumentInfoController
The following controller methods were renamed:
- UifControllerBase#getUIFModelAndView methods renamed to getModelAndView
- MaintenanceDocumentController
- setupMaintenance renamed to setupMaintenanceDocument
- maintenanceEdit renamed to setupMaintenanceEdit
- maintenanceCopy renamed to setupMaintenanceCopy
- maintenanceNewWithExisting renamed to setupMaintenanceNewWithExisting
- maintenanceDelete renamed to setupMaintenanceDelete
- downloadBoAttachment renamed to downloadDataObjectAttachment
Most base controller methods now accept a single parameter, the form. Note also, the ModelAttribute("KualiForm") annotation is no longer needed for the form parameter (although can be specified if you have multiple forms in the session).
Some controller methods still use the request, which is now available through the form.
UifControllerHelper was removed and its methods moved to org.kuali.rice.krad.web.service.impl.ModelAndViewServiceImpl
Because the implementation has moved to controller services, some protected methods are no longer available for override with inheritance. The following table shows were these protected methods have moved to:
2.4 Controller Protected Method | 2.5 Service Method |
---|---|
DocumentControllerBase#loadDocument | DocumentControllerServiceImpl#loadDocument (protected) |
DocumentControllerBase#createDocument | DocumentControllerServiceImpl#createDocument (protected) |
DocumentControllerBase#performWorkflowAction | DocumentControllerServiceImpl#performWorkflowAction (public) |
DocumentControllerBase#checkAndWarnAboutSensitiveData | DocumentControllerServiceImpl#checkAndWarnAboutSensitiveData (protected) |
DocumentControllerBase#combineAdHocRecipients | DocumentControllerServiceImpl#combineAdHocRecipients (protected) |
DocumentControllerBase#buildAuthorizationException | DocumentControllerServiceImpl#buildAuthorizationException (protected) |
MaintenanceDocumentControllerBase#setupMaintenance | MaintenanceDocumentControllerServiceImpl#setupMaintenanceDocument (public) |
Finally, the createInitialForm method no longer takes the request as a parameter.
2.5.0-M4 to 2.5.0-M5
This work upgraded Spring to 4.0.5 with subsequent updates to Servlet 3.0.1.
KULRICE-12880 Apply Spring 4.0.5 upgrade
Update Web Application Deployment Descriptors (version and xsd)
From <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
To <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
Update Spring XML Beans DTD
From <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
To <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
KULRICE-12928 - Changes to Inquiry, Link, and Quickfinder dialogs to use bootstrap Modal
- js functions:
- createLightBoxPost renamed to showLookupDialog
- handleLightboxOpen name changed to openLinkInDialog and param signature changed
- showDirectInquiry signature changed
- isCalledWithinLightbox is now isCalledWithinDialog
- Link:
- lightBox property removed
- linkDialogId property added
- openInLightbox changed to openInDialog
- Quickfinder:
- lightBox property removed
- lookupDialogId property added
- openInDialog property added
- Form:
- renderedInLightBox is now renderedInDialog
- url param:
- renderedInLightBox is now renderedInDialog
UX change - Read-only fields are now wrapped in a span and are tab-able
2.5.0-M5 to 2.5.0-M6
For this jira, we upgraded a good number of dependencies in Rice. In many cases we had a choice of how aggressive an upgrade to make. The decisions we made in these cases were to minimize impact, largely due to time constraints: we wouldn't have been able to handle all the refactoring needed to be more aggressive. The following table lists the direct dependencies that were upgraded as part of the work on this issue:
Maven coordinates | Product Name | From Ver | To Ver | Latest Avail Ver | Notes |
org.codehaus.btm:btm | Bitronix Transaction Manager | 2.1.2 (Oct '11) | 2.1.4 (Sep '13) | 2.1.4 (Sep '13) | |
org.apache.cxf:cxf-api | CXF | 2.7.0 (Oct '12) | 2.7.12 (Jul '14) | 3.0.1 (Jul '14) | Due to the immaturity of CXF 3 we chose to go with the latest 2.7 patch |
net.sf.ehcache:ehcache-core | EhCache | 2.5.0 (Nov '11) | 2.6.9 (Apr '14) | 2.8.3 (Jun '14) | 2.6.9 is the latest version that uses the same groupId and artifactId as our dependencies use. After that version, ehcache-core uses the groupId net.sf.ehcache.internal, and is not intended to be depended on directly. There are some changes that affect cache construction starting in 2.6.0: you can no longer have multiple caches with the same name. Since we let Spring construct the caches for us, and we don't use duplicate names, we should be fine. |
com.google.guava:guava | Google Guava | 11 (Dec '11) | 17 (Apr '14) | 17 (Apr '14) | Had to refactor around one deprecated method (MapMaker().softKeys(), see http://stackoverflow.com/questions/7618129/why-is-softkeys-deprecated-in-guava-10?lq=1), but that was the full impact for Rice. |
org.apache.httpcomponents:httpclient | HttpComponents HttpClient | 4.3.3 (Feb '14) | 4.3.4 (May '14) | 4.3.5 (Jul '14) | 4.3.5 just came out July 30th. |
org.eclipse.persistence:org.eclipse.persistence.core org.eclipse.persistence:org.eclipse.persistence.jpa | EclipseLink | 2.5.1 (Sep '13) | 2.5.2 (Jul '14) | 2.5.2 (Jul '14) | |
org.codehaus.jackson:jackson-core-asl org.codehaus.jackson:jackson-mapper-asl | Jackson | 1.8.8 (Jan '12) | 1.9.13 (Jul '13) | 2.4.2 (Aug '14) | Upgrading to Jackson 2.x is not backwards compatible (http://wiki.fasterxml.com/JacksonRelease20) |
jaxen:jaxen | Jaxen | 1.1.3 (Nov '11) | 1.1.6 (Dec '13) | 1.1.6 (Dec '13) | |
org.javassist:javassist | Javassist | 3.1.5.0-GA (Jul '11) | 3.18.2-GA (May '14) | 3.18.2-GA (May '14) | |
org.jdom:jdom | JDOM | 1.1 (Sep '08) | 1.1.3 (Feb '12) | 2.0.2 (Jun '12) | JDOM 2.x is not backwards compatible (https://github.com/hunterhacker/jdom/wiki/JDOM2-Migration-Issues) |
joda-time:joda-time | joda-time | 2.0 (Jul '11) | 2.4 (Jul '14) | 2.4 (Jul '14) | |
log4j:log4j | log4j | 1.2.16 (Mar '10) | 1.2.17 (May '12) | 2.0.1 (May '12) | The latest in the 1.2 line. Moving to 2.0.1 requires some refactoring in Rice. |
javax.mail:mail -> com.sun.mail:javax.mail | javax.mail | 1.4.4 (Jan '11) | 1.5.2 (May '14) | 1.5.2 (May '14) | |
org.apache.ws.security:wss4j | WSS4J | 1.6.7 (Jul '12) | 1.6.16 (Jul '14) | 2.0.1 (Jul '14 - new groupId org.apache.wss4j) | The version selected matches the dependency in cxf-rt-ws-security, and is the latest patch version for 1.6 |
com.google.code.findbugs:jsr305 | jsr305 - Annotations for Software Defect Detection | 1.3.9 (Aug '09) | 2.0.3 (Dec '13) | 2.0.3 (Dec '13) | |
org.slf4j:slf4j-api org.slf4j:jcl-over-slf4j org.slf4j:slf4j-log4j12 | slf4j | 1.6.4 (Oct '11) | 1.7.7 (Apr '14) | 1.7.7 (Apr '14) | |
org.codehaus.plexus:plexus-utils | Plexus Utils | 3.0.10 (Nov '12) | 3.0.17 (Jan '14) | 3.0.17 (Jan '14) | |
commons-codec:commons-codec | Commons Codec | 1.6 (Dec '11) | 1.9 (Dec '13) | 1.9 (Dec '13) | |
commons-io:commons-io | Commons IO | 2.1 (Oct '11) | 2.4 (Jun '12) | 2.4 (Jun '12) | |
commons-lang3:commons-lang3 | Commons Lang | 3.2.1 (Jan '14) | 3.3.2 (Apr '14) | 3.3.2 (Apr '14) | |
commons-pool:commons-pool | Commons Pool | 1.5.7 (Dec '11) | 1.6 (Jan '12) | 2.2 (Feb '14 - maven coordinates change to org.apache.commons:commons-pool2) | Commons Pool and DBCP are linked together -- if we are going to commons-dbcp2, we need to go to commons-pool2 as well. |
commons-digester:commons-digester | Commons Digester | 2.0 (Jan '09) | 2.1 (Sep '10) | 3.2 (Dec '11 - maven coordinates change to org.apache.commons:commons-digester3) | |
commons-validator:commons-validator | Commons Validator | 1.3.1 (Dec '06) | 1.4.0 (Jan '12) | 1.4.0 (Jan '12) | |
xalan:xalan xalan:serializer | Xalan | 2.7.1 (Sep '08) | 2.7.2 (Jul '14) | 2.7.2 (Jul '14) | |
xerces:xercesImpl | Xerces | 2.9.1 (Oct '08) | 2.11.0 (Feb '13) | 2.11.0 (Feb '13) | |
org.apache.velocity:velocity | Velocity | 1.6.4 (May '10) | 1.7 (Nov '10) | 1.7 (Nov '10) | Verified with Larry that the impacting changes won't affect KS (http://velocity.apache.org/engine/releases/velocity-1.7/upgrading.html) |
com.google.javascript:closure-compiler | Closure Compiler | v20130603 (Jun '13) | v20140730 (Aug '14) | v20140730 (Aug '14) | |
org.quartz-scheduler:quartz | Quartz | 1.8.4 (Jul '10) | 1.8.6 (Jan '12) | 2.2.1 (Sep '13) | We need to make database changes to get off Quartz 1.8.x |
cglib:cglib-nodep | cglib | 2.2.2 (May '11) | 3.1 (Dec '13) | 3.1 (Dec '13) | |
javax.validation:validation-api | Bean Validation | 1.0.0.GA (Feb '10) | 1.1.0.Final (Apr '13) | 1.1.0.Final (Apr '13) | |
org.aspectj:aspectjrt org.aspectj:aspectjweaver | AspectJ | 1.6.8 (Jan '10) | 1.8.1 (Jun '14) | 1.8.1 (Jun '14) | |
org.glassfish:javax.json | JSON Processing | 1.0.1 (Jun '13) | 1.0.4 (Nov '13) | 1.0.4 (Nov '13) | |
xml-apis:xml-apis | Java API for XML Processing (JAXP) | JDK bundled JAXP | 1.4.01 (Aug '11) | 1.4.01 (Aug '11) | I had to bring this in to get the newer Xerces version to work. The JDK bundled JAXP will vary with the JDK version, see the table near the top of http://en.wikipedia.org/wiki/Java_API_for_XML_Processing |
Rice's dependencies on both cas-client-core
and spring-security-cas
have been removed. The impact of this change is that projects getting these dependencies transitively from Rice will need to add that configuration to their poms, and implementors that use CAS will need to either add those dependencies to their customized Rice poms, or add the needed jars to tomcat/lib
or the equivalent shared library location in their application servers.
It is now possible to edit the fields (input fields including sub-collection input fields) of a line in a collection within a modal dialog. You can specify the edit line dialog's items, but if not provided, it uses the items of the collection by default. Sub-collections in row details group, and sub-collections are also editable when editing the field that the sub-collection belongs to. Again for sub-collections you can specify the edit line dialog's sub-collection items, but if not provided, it uses either, the items of the row details group if that's where the sub-collection is, or, the items of the sub-collection if its in the sub-collections group. A readOnly field or a line with at least 1 unauthorized field in it is not editable.
When you open the page with the edit line enabled, the empty placeholder for each line's dialog is created. When you click on the edit line in dialog button, the dialog contents are retrieved via an ajax call to the server and the dialog is displayed. When you either, save, close (no save), or cancel (no save), the dialog is removed, and dialog data object is cleared. On refresh the empty placeholders are put in place again. The support for look-up bound to an input field is not complete in that once you select the value, the value is populated in the dialog but the dialog then disappears due to the refresh performed from the lookup-view on the parent (see
for more details).2.5.0 to 2.5.1
The property of a dialog group, previously called 'destroyContentsOnClose', has now been renamed to 'destroyDialogOnHidden', which removes the dialog and it's contents.