Release 6.0 – Q2 2022

Important messages

Update 20220516

Improvement – Updated bridge page for JSQRSCANNER

The scanning of QR codes is now done through a new bridge page (these are the pages that are embedded into the corresponding IFRAME holding the jsqr-processing). The page is now supported in iOS devices as well.

The old bridge pages are still part of the delievery!

Bug Fix – FIXGRIDWITHGROUPING – attributes “ATTRIBUTEMACRO” and “REFERENCE” not correctly passed

A couple of attributes, including the ones mentioned in the headline, were not correctly passed into the internally generated FIXGRID / GRDICOL components – and as consequence were not considered by the processing.

Improvement – FIXGRIDWITHRGROUPING – export placeholder “.%.”

When exporting the grids to “.csv”, “.xml” and to the clipboard (tab-separated string) then the merged headline columns were output with a “.%.” placeholder. Now we output with “” - so that the internal placeholder does not show up.

Update 20220509

Improvement – Label/Text pane, posture “italic”, alignment “right”

When the browser writes text into a DIV element then it may happen that some pixels of the text are exceeding the DIV-area. We now added a possibility to fine-control the overflow-management within the style settings.

For style-insiders:

    <class n="risclabel_contentoverflowvisible" extends="risclabel">

        <risc n="_contentOverflow" v="visible"/>

    </class>

Bug Fix – CODEEDITOR (wrapped ACE-Editor)

There was a bug when passing a “true” value as configuration parameter introduced with 20220502.

Bug Fix – Extended calendar

In the CALENDAR component you can pass a “factory calendar” that defines which dates are select-able and which may add comments and colors to the calendar rendering. Since 20220411 this part of the calendar was not working anymore.

Bug Fix – Swing Client

Scrolling with the keyboard inside grids was not possible anymore! (Forum: https://www.captaincasademo.com/forum/posts/list/3335.page).

Update 20220502

Improvement – TABBEDLINE/PANE/LINECONTAINER: additional controls “on the left/right”

All TABBED*-controls now provide the possibility to add components before and after the tab-sequence on the top:

The layout definition for the TABBEDPANE is:

<t:tabbedpane id="g_59" value="#{d.DemoTabbedArea.tabValue}" width="100%">

    <t:tabbedareabegin id="g_82">

        <t:icon id="g_75"

                actionListener="#{d.DemoTabbedArea.onAddNewCarBeforeAction}"

                image="/images/iconssvg/add_16x16.svg"/>                 

    </t:tabbedareabegin>

    <t:tabbedareaend id="g_6">

        <t:icon id="g_83"

                actionListener="#{d.DemoTabbedArea.onAddNewCarAction}"   

                image="/images/iconssvg/add_16x16.svg"/>

    </t:tabbedareaend>

    <t:tabbedpanetab … />

    <t:tabbedpanetab … />

</t:tabbedpane>

 

Inside the TABBEDAREABEGIN and TABBEDAREAEND you can exactly place one component. Of coure this can be a PANE component, internally providing any number of child components.

Take a look into the demo workplace (“News” section).

Improvement – Configuration of CODEEDITOR

By using the attribute CODEEDITORPARAMS you can directly configure the ACE editor instance using its JavaScript API. Up to now you could only set properties in the editor itself and in its session. Now you can access the editor's options, the editor's rendere and the editor's renderer options as well. Please take a look into the corresponding example wihtin the demo workplace.

Improvement – MULTILABEL now supports images

You now may pass images into the MULTILABEL component as well. There is a corresponding property when adding MULTILABELBinding.TextInfo instances.

(The MULTILABEL component represents a sequence of text labels that are output as one block of HTML elements rather than rendering each text individually.)

Update 20220425

Improvement – CaptainCasa Toolset now also available as Spring Boot version

This is “beta”-status still – but we want to share now: as with any application that you build with CaptainCasa the toolset itself can be deployed as Spring Boot application – and that's what we now do.

We provide the Spring Boot version as self-execute-able “.war” file – i.e. you can either directly run it by calling “java -jar eclnteditor_springboot-xxxxxxxx.war” or you can embed into a tomcat or other servlet container of your choice.

The delivery is done by Maven, so from now on, there is a corresponding artifact in our Maven repository that is from now on provided for each version:

group:    org.eclnt
artifact: eclnteditor_springboot

version: 20220425

 

If directly running the .war file, then the settings are:

port: 51000

start-URL: http://localhost:51000/editor

 

You may include the download of the toolset into you Maven build file in the following way:

<plugin>

    <groupId>org.apache.maven.plugins</groupId>

    <artifactId>maven-dependency-plugin</artifactId>

    <executions>

        <execution>

            <id>cctoolset-copy</id>

            <phase>initialize</phase>

            <goals>

                <goal>copy</goal>

            </goals>

            <configuration>

                <artifactItems>

                    <artifactItem>

                        <groupId>org.eclnt</groupId>

                        <artifactId>eclnteditor_springboot</artifactId>

                        <version>${cc.version}</version>

                        <type>war</type>

                        <overWrite>true</overWrite>

                        <outputDirectory>${project.basedir}/cctoolset</outputDirectory>

                        <destFileName>eclnteditor_springboot.war</destFileName>

                    </artifactItem>

                </artifactItems>

            </configuration>

        </execution>

    </executions>

</plugin>

 

By this definition the plugin is downloaded into the “/cctoolset” directory of your project as part of you build process.

Why do we do this?

...because we see that in “grown projects” the toolset is often not used – because the effort for regularly keeping up to date with the setup.exe-installation of the tools is too high. Now you can download the toolset as directly start-able application – using our Maven repository as installation source. Per CaptainCasa version there now will be a corresponding toolset version.

Two last comments:

Of course: any feedback is appreciated!

Bug Fix – Page Bean Component “CCDataGridView2”

The resetting of filters only worked when resetting “all filters” - it did not work when only removing “this filter”.

Update 20220420

Improvement – Creation of Gradle projects

With 20220411 we added the function to directly create Maven projects from the CaptainCasa tool set.

Now we extended this function by also being able to create Gradle projects:

The dialog that shows up after selecting “New Gradle-project” is the same as the one that is used for creating Maven projects, but now providing the selection of the build environment:

After creating the project you need to follow the same steps as with Maven-projects:

Improvement – FIXGRID – notification on export through default dialogs

When starting a grid export by invoking one of the links in the default export dialogs of the gird, then you now can receive a notification on server-side about. To do so, override method “FIXGRIDBinding.notifyDownloadWasTriggered(...)” in your FIXGRIDIList/TreeBinding instance.

Improvement – MULTILABEL component, ARRAYGRID with fast rendering

The MULTILABEL component renders a series of text labels by not individually creating DOM elements but by applying some mass processing for all contained labels.

Up to now the component internally used the HTML-canvas element for rendering. This caused some inaccurate rendering of texts in some situations – because at the end texts are not passed as text into the browser rendering but are rendered as pixel. The inaccurate rendering especially occurred when using different zoom factors than “100%” - but also sometimes occurred with default zoom factor.

We now changed the inner processing of the component to plain DIV and text processing: but the DIVs are not generated by DOM operations but are rendered as one HTML statement into the area which is opened up by the MULTILABEL component. The performance of the component (which is the main reason for having introduced it!) does not differ according to our measuring – and the rendering is always crisp and clear, regardless of any zoom factor.

The MULTILABEL component is internally used within the ARRAYGRID component and is applied by setting attribute ARRAGRID-USEMULTILABEL to “true”.

Improvement – Cookie support in Swing-Client

This is for “Swing client” users only! - We now also provide a way to use the Swing-Client with Cookie-based session management. Please contact us directly if you want to get more details on this. - We do not want to encourage existing Swing scenarios to change, because a change from URL- to COOKIE-based session management requires some deep checking of server-side session access! - We have some scenarios in which authentication protocols on server-side require a COOKIE-based session management – this is the reason for touching the client at all.

Bug Fix – pom.xml version “6.0.0”

Some of our pom.xml files contained the information that their version was “6.0.0” - and not “4.0.0”...

Update 20220411

Improvement - Security: general Client-check based on Cookie: only sent with https- and localhost-scenarios

There was a problem (here: the work “challenge” is maybe really more adequate!...) when including a CaptainCasa page as an IFRAME into another page: if both pages were not loaded from the same origin, then a security error was shown. Reason: in this case the cookies of the inner page (the CaptainCasa page) are ignored by the browser, if they are not marked with http-header-parameter “sameSite” to be “None”. Well, this parameter is only accepted in secure scenarios, i.e. it is only accepted when using “https” as protocol.

Consequences of all this:

Improvement – Creation of Maven projects directly from CaptainCasa tool set

Up to now the creation of Maven projects was done directly in the IDE of your choice (Eclipse, IntelliJ, …) by using Maven-project-archetypes that were (and still are!) provided by CaptainCasa.

Now we also provide the option to directly create these projects from our tool set – after having seen, that the creation through IDE is not really straight forward with all IDEs...

Just call “File > New Maven project...” from the menu of the tool set.

Improvement – Security: Filter for “../”

We added a filter (class “SecurityFilterURLCheck”) that checks the URL-data of certain requests for occurrences of “../” (and “..\” and “/..” and “\..”).

The corresponding configuration in “CCInitializeServlets” (the programmed version of the former web.xml) is:

        initializeFilter(servletContext, SecurityFilterURLCheck.class,

                "/faces/*",

                "*.ccbuffer",

                "/ccbuffer/*",

                "*.ccupload",

                "/cctempfileaccess/*"

                );

 

Why did we do this? We got the message that if using the reference-implementation of JSF it was possible to access e.g. web.xml by corresponding “../” definitions. (There was no problem when using the CaptainCasa-mini-implementation.)

Improvement – XML editors in tool set

We now use our component TEXTAREAWITHCOMMENTS to show line numbers, so that error messages (e.g. XML parsing messages) with reference to line numbers can be easier resolved.

Update 20220404

Improvement – Page Bean Component CCSeparatedFormField

There is a new page bean component which allows the user to edit one string-value within separated fields:

Please check the demo in the demo workplace (section “News”) - there are a couple of configuration options.

Improvement – Editor, Jakarta version, also available as Maven Artifact

The editor's war file can be also loaded from Maven:

JEE version (already existing):

 

        <dependency>

            <groupId>org.eclnt</groupId>

            <artifactId>eclnteditor</artifactId>

        </dependency>

 

Jakarta version (new):

 

        <dependency>

            <groupId>org.eclnt</groupId>

            <artifactId>eclnteditor_jakarta</artifactId>

        </dependency>

Improvement – Size of vertical FIXGRID-scroll-bars independent from zoom level

When zooming the browser then so far the width of the vertical FIXGRID-scroll-bars was also zoomed. Now the size is kept stable (as with other scroll bars e.g. of SCROLLPANE).

Bug Fix – Popup close/maximize icon not following style definitions

Since update 20220314 the popup icons (right top corner icons) were not following the style definition anymore. Instead, default icons were used.

Bug Fix – FIXGRID, with multi-item selection, double-click

In case of a double click the “onRowSelect” event was executed twice on server-side. One time is enough...

Bug Fix – Individual configuration of same-origin-policy was not working

When embedding a CaptainCasa page (.risc) into an IFRAM of another page, then there is some configuration that decides if this allowed. The configuration can be made either “for all pages” or for “individual pages”. When using the “individual pages” then there was some bugging – corresponding pages that by configuration should be embed-able were not embed-able in reality.

<system>

    <riscstarter

        …

        embedableasiframe="sameorigin"         <== for all pages                        

                                                   “sameorigin”/”false”

        …

     >

        <allowiframeembedding page="/aaa/*"/> <== individual    

    </riscstarter>

</system>

 

Release 6.0 – Q1 2022

Update 20220328

Bug Fix – Client error messages

The browser console showed some JavaScript errors with 20220321. Due to this errors the execution of some events was not properly done.

We recommend to upgrade 20220328 due to this reason!

Improvement – Security: general Client-check based on Cookie

We added some general security cookie that prevents access to session related data from outside the client that originated the session. Means: the server-side http session is associated with an internal id (created via secure random algorithm) that is passed to the client browser. All requests entering servlets on server-side that access session-related information are checked, if the cookie-id is available and if it is the one that is associated with the session.

Please find more details in the Developer's Guide: https://www.captaincasa.com/docu/eclnt_risc_developersguide/all.html#usageofhttpsismandatoryforproductionsystems

Improvement – Security: restricting the pages that are call-able by “.risc”-URL

We introduced some general way of checking which pages can be directly called.

Please check: https://www.captaincasa.com/docu/eclnt_risc_developersguide/all.html#definethepagesthatyouwanttobedirectlystartable

The check is only applied for non-localhost scenarios – which means: during development you are not affected, but at runtime the checks are performed.

The general settings are defined in a way that all pages are open to be accessed – in order to be compatible with existing scenarios. The definition of pages is done in the system.xml configuration file. Example:

<system>

     <riscstarter>

        <allowstart page="/*/index.*"/>

        <allowstart page="/*/outest.*"/>

     </riscstarter>

</system>

 

Definitions can be either done in a positive way (“allow!”) and in a negative way (“exclude!”).

Improvement – Spring Boot: application class, deployment as .war into Tomcat (or other container)

The class SBApplication that contains the information how to start up within a Spring Boot environment was updated:

@SpringBootApplication

public class SBApplication extends SpringBootServletInitializer

{

    public static void main(String[] args)

    {

        SpringApplication.run(SBApplication.class, args);

    }

 

    @Override

    protected SpringApplicationBuilder configure(SpringApplicationBuilder application)

    {

        return application.sources(SBApplication.class);

    }

 

As result it is now better deploy-able within external servlet containers with all Spring Boot environment functions.

This class is generated when setting up a Spring Boot project with the corresponding Maven project-archetype. We recommend to update the class for already existing projects correspondingly.

Update 20220321

Info (28.03.2022)

20220321 cause some JavaScript error log output in the browser console – due to runtime errors during the processing of some client events. We recommend not to use 2022031 in productions scenarios!

Improvement – Component BUTTONPOPUPMENU

Usually a popup menu is opened by the user clicking the right mouse button. For touch devices there is no obvious equivalent – and the strategy to use a long-touch event is not really intuitive for users.

The component BUTTONPOPUMENU is a just normal button, that opens up its popup menu when it is clicked. All the internal handling of functions is exactly the same as with the normal popup menu handling – but now available on direct click/touch.

Bug Fix – Sub-classing style “riscslider”

When adding an own style class for the slider, then style parameters were not correctly applied.

Improvement – Scroll pane on iPhone/iPad

We last week did a workaround for crashed on iPhone/iPad devices. This workaround means that internal scrolling of SCROLLPANE instances is taken over by own functions. Now the scrolling of nested SCROLLPANE instances was improved: when scrolling to an end of an inner area and continuing to scroll, then the next outer area is scrolled.

Update 20220314

Improvement - “Same origin policy” for bridge pages

For connecting to external “big” JavaScript frameworks (e.g. open street map, JChart, …) we use HTML-pages (“bridge pages”) that are contained in the local web application (e.g. in “eclnt/risc/ext_jchart”).

These bridge pages so far passed back “sameorigin” as “X-frame-option”. This did not cause any problem at all if directly working with a CaptainCasa page. - If now embedding a CaptainCasa page into another page by IFRAME, then the “sameorigin” policy is not correct anymore, because the browser compares the original URL (from the outest page) with the “nested-nested” URL of the bridge-page to check for the same origin.

Now the “same-origin” management that is controlled in system.xml is also applied for the inner bridge pages.

As reminder: the place where to configure this aspect in system.xml is:

<system>

    <!--

      *************************************************************************

      ...

      embedableasiframe: default "sameorigin"; completely switch off by value

      "deny" or "false"; allow embedding by value "true".

      ...

      *************************************************************************

      -->

     <riscstarter

        ...

        embedableasiframe="true"

        ...

        >

        

     </riscstarter>

</system>

 

In short words: if you define CaptainCasa pages to be include-able as IFRAME, then the inner bridge-pages inside CaptainCasa pages are shown as well!

Improvement – Setting the decoration style for popups

So far you could set the general style of the outest layer of a popup – now you can also set the decoration style:

Modal/ModelessPopup.setStyleseq(...) <== existing method for “outest layer”

Modal/ModelessPopup.setStyleseqdecoration(...) <== new method

 

The style class that you pass must extend the existing style class “riscdialogdecorationall”.

Bug Fix – FIXGRID inside REPEAT

When using a FIXGRID instance inside a REPEAT instance then expressions that were defined directly on GRIDCOL-level were not correctly handled.

Means:

REPEAT

  ROW

    FIXGRID

      GRIDCOL text=”.{someText}” <== was NOT correctly handled

        LABEL text=”.{someName}” <== was correctly handled

 

Now all levels are managed properly.

“Bug Fix”/Improvement – Crashes on iPad/iPhone

It's unbelievable...: in cascading scenarios of arranging SCROLLPANE instances one inside another, it could happen that the browser crashed and restarted the page from the scratch. The level of log information that is available by the Safari-browser is very poor... - so it was a gambling-type of “research” that we had to do. - Result: Safari-browser on iPad/iPhone do not like scroll-able DIV elements inside a page. With a certain level of nesting the browser reacts significantly slower – and suddenly crashes. It seems to follow Apple's wording, that they prefer pages to be scroll-able on top level only (body-level)...

OK – what we now added: SCROLPANE instances (which are srcoll-able DIV elements on technical level) are rendered with “overflow=hidden” internally and the touch-scrolling is taken over by a CaptainCasa function (SCROLPANE-TOUCHSCROLLSUPPORT is switched on by default for these devices).

We have to emphasize that his “behavior” is only present on iPhone/iPad devices. It is not present on Apple-desktops, any other desktops, Android devices. - Please also note: switching from iPad-Safari to iPad-Chrome (or Firefox) will not help in any way: for these devices all browser use (better: have to use) the Safari-rendering-kit internally.

Update 20220307

Improvement – Using lambdas for dynamic content implementation

When creating dynamic content by using the (ROW)DYNAMICCONTENT component, then you now can bind the components that you create directly to lambda expressions.

Example for a dynamic get-implementation: “width” and “align” are directly set – the text is bound to a lambda expression.

LABELNode l = new LABELNode()

    .setWidth("100%")

    .setAlign("center")

    .bindText(new StringDelegationLambda(() -> {return m_result;}));

 

This would be the equivalent to the “tradtional” implementation using expressions:

public String getResult() { return m_result; }

 

LABELNode l = new LABELNode()

    .setWidth("100%")

    .setAlign("center")

    .bindText(pbx(“result”));

 

For attributes that are used into both directions (set and get), you need to pass two lambda expressions:

FIELDNode fn = new FIELDNode()

    .setWidth(300)

    .setAlign("center")

    .bindText(new StringDelegationLambda

     (

         () -> {return m_name;},             // get

         (value) -> {m_name = value;}        // set

     ));

 

There are corresponding *DelegationLamda classes available for all simple data types (StringDelegationLambda, IntegerDelegationLambda, etc.).

Action listeners can also be implemented using lambdas:

BUTTONNode bu = new BUTTONNode()

    .setText("Say hello!")

    .setWidth("200")

    .bindActionListener((event) ->

        {

            if (m_name == null)

                m_result = "No name defined.";

            else

                m_result = "Hello world, " + m_name;

        }

    );

 

Please take a look into the demos within the demo workplace:

General =>

  Dynamic Layout =>

    Direct binding of objects

      Hello world – with expressions

      Hello world – with inner classes

      Hello world – with lambdas

 

Improvement – Interface for updating client literals and country settings

The RISC client requires a certain set of literals and country definitions. Example: for rendering the CALENDAR component it requires the name of the week days and the name of the months – and it requires the country settings for the date format.

These definitions are kept in XML-files that are part of the elcnt/risc/i18n directory within the eclntjsfserver.jar library.

We now have added to interfaces that you can implement in order to update the literal and country settings before they are passed to the client side:

package org.eclnt.jsfserver.util;

public interface IClientI18NLiteralsUpdate

{

    public void updateLiteralInfo(Map<String, LanguageInfo> data);

}

 

AND:

 

package org.eclnt.jsfserver.util;

public interface IClientI18NCountriesUpdate

{

    public void updateCountryInfo(Map<String, CountryInfo> data);

}

 

Implementations of both interfaces are registered in the system.xml file:

    <clienti18n

        clientliteralsupdateclass="...class implementing IClient18NLiteralsUpdate..."

        clientcountriesupdateclass="...class implementing IClient18NCountriesUpdate..."

    />

 

Improvement – PAINTAREALINEITEM: new arrow types

When drawing arrows in the PAINTAREA component then you use the PAINTAREALINEITEM component. This component provides an arrow type definition for the “from” and the “to”-side of the line. Each arrow type has a certain number.

For certain arrows there are now two variants:

What's the difference? All lines are defined with a length of 100 pixels. But: you see that with new arrow types (15,16,17,18,19) the “dot” is positioned with the starting/ending point in its center. Whereas with the existing ones (5,6,7,10,11,12) the “dot” is positioned as part of the line.

Update 20220228

Improvement – PAINTAREALINEITEM with percentage sizing

The PAINTAREALINEITEM so fart could only be positioned in an absolute way:

<t:paintarealineitem … bounds=”10;10;100;100” … />

 

Now it is possible to apply the same sizing rules that you may use for the BOUNDS of PAINTAREA – including percentage sizing and including offsets:

<t:paintarealineitem … bounds=”10%;100%-90;0;90” … />

 

Improvement – Add-on: no flickering in CCMultiLineSchdedule

The component that renders some simple type of Gantt diagram now is rendered with using stable component ids internally. A redrawing of existing content as consequence does not flicker anymore as consequence.

Bug Fix – Status bar modal popup always opened on top

If – on server side – calling “Statsusbar.alert(...)” and afterwards opening a ModalPopup for the application, then the sequence of calls defined the sequence of popups on the client side – and the status bar popup was opened behind the application popup.

Now the status bar popup internally always is opened as last – and does as consequence always open in front of other dialogs.

Bug Fix – MULTILABEL not poperly refreshing (e.g. usage in optimized ARRAYGRID)

The MULTILABEL is a component rendering a couple of label texts “in one chunk”. For performance reasons it does not use DOM elements on client side but directly draws out texts using the HTML-Canvas component.

In some situations the component was not properly cleared when the text was updated – the bottom part of the previous text was preserved.

Update 20220221

Improvement - Simpler customizing of Client Error Pages

When an error occurs on client side then an error screen occurs. The content of this screen currently was only customize-able by using a JavaScript exit.

Now you can properly define the error information that shows up – and embed into some own HTML-text. You can define both a text for “normal” error situations and a special text for “session-timeout” errors. And: for session time-outs you may immediately route the processing to some new URL, that you may prepare before to take over as much as possible context information.

Please check the information in the Developer's Guide:

https://www.captaincasa.com/docu/eclnt_risc_developersguide/all.html#appendixconfigurationofclienterrorpages

(just to add: existing definitions that you may have done via the JavaScript plugin are still valid, of course!)

Improvement – Interface to update layout definition just after reading

We added an interface “ILayoutXMLModifierAfterRead” that allows to you to update a layout definition's XML just after it has been read:

package org.eclnt.jsfserver.util;

 

public interface ILayoutXMLModifierAfterRead

{

    public String updateLayoutXML(String fullPageName, String xml);

}

 

The interface implementation is registerd in system.xml

<system>

   ...

   <layoutxmlmodifierafterread name="...classNameOfImplementation..."/>

   ...

</system>

 

Typical use case: you may as consequence resolve any type of abbreviations that you might do during layout definition.

Improvement – Add-ons: filter removal in CCDataGridView2

If the user defines filter values on top of the columns...

...then a small “delete”-icon is shown. When pressing the icon a menu pops up from which the user can either remove the corresponding filter – or all filter values.

@screenshot: the texts are translated to English as well...

Improvement – Alternative extension instead of “.risc”

We know – the “.risc”-extension is fantastic, but some of you are afraid that end users might mix “risc” with “risk”... So we now provide to use some alternative extension.

<system>

    ...

    <riscstarter

        ...

        alternativeextension=".start"

        ...

    />

    ...

</system>

 

Please pay attention:

Update 20220214

Improvement – Dark Style “default202201darkrisc”

We now deliver an explicit “dark style”:

“default202201darkrisc” is based on “default202201risc” and is based on some dark-gray colorset. We also updated the style of the add-on-components to fit both to “normal” and to “dark” style (eclnt_pbc.jar).

Improvement – Double-tap-zooming on iOS

When double-tapping on a browser page in iOS-environment then the dialogs is zoomed at the point where you double-tap. This should not happen to CatainCasa dialogs (same as two finger zooming)

Bug Fix – Endless scrolling on iOS in FIXGRIDs

If using the little icons for scrolling up/down, then the corresponding FIXGIRD began to scroll infinitely...

Improvement – FIXGRID-Excel-Export: Footer/Header exported as values, not as strings

During the FIXGRID export, header and footer columns were treated as “String-only” columns so far – so that data values (e.g. float, BigDecimal, …) were not passed as numeric values into the Excel processing.

Please pay attention: if having implemented interface “IFixgridInfoProvider”: there are two new methods, that were added. If inheriting your implementation from “DefaultFixgridInfoProvder”, then there are default functions thar are implementd.

Bug Fix – Editor: value help for attribtue STYLESEQ

If having defined an own style and having registered this as default style (sessiondefaults.xml) then an error might have shown up when trying to select a valid value behind the STYLESEQ attribute.

Update 20220207_2

Bug Fix – Layout Editor: preview sometimes not refreshing with .xml layouts

When using “.xml” for stroing layout definitions (see 20220131) then the refresh within the preview are of the layout editor was not working sometimes – so you had to execute twice.

Update 20220207

Improvement – New hover (“rollover”) effects

It's now possible to easily define hover effects, by which the component is resized or moved. Please check the demo in the “News” section:

The base is some style definition via “RISC-values”. Example:

<class n="riscbutton_withhoverresizetopmedium" extends="riscbutton">

    <risc n="_hoverEffectResizeInsets" v="10 10 10 10"/>

</class>

 

The definition defines the extra space that is defined around the control – and that is used in case of hovering. There is also the possibility do define the insets in which the components is transformed to:

<class n="riscbutton_withhoverflymedium" extends="riscbutton">

    <risc n="_hoverEffectResizeInsets" v="10 0 0 0"/>

    <risc n="_hoverEffectResizeInsetsTo" v="0 0 10 0"/>

</class>

 

The result of this definition is:

CaptainCasa provides some default style variants for the BUTTON and the PANE component. Please check the demo for details.

Improvement – Fine-controlling a grid cell's data binding

Up to now there is the GRIDCOL-SORTREFERENCE, which is used for all purposes, in which the grid processing wants to access item values and in which it cannot access the value by analyzing the cell's content.

This SORTREFERENCE was used for two purposes:

Now there is an additional GRIDCOL-EXPORTREFERENCE which is only for the purpose of exporting data. You only need to define it, if the binding that you assigne is not the same as the one that assign with GRIDCOL-SORTREFERENCE.

Please check the demo “Grid > Grids and Trees > Sorting > Explicit sor- and export-value”.

Improvement – CCEE: interface for reading configuration

In the CCEE-library there is a central class “Config.java” which reads the properties defined in e.g. the “ccee_config.properties” file.

Now you can outsource the reading of properties to some own logic using interface:

package org.eclnt.ccee.config;

 

public interface IConfigProvider

{

    public String getConfigValue(String contextName, String key);

}

 

The configuartion to use this interface is done – how else...? - in the “ccee_config.properties” file itself. Example:

# configuration

config_configproviderclassname=test.ConfigProviderImpl

 

# database access

db_url=jdbc:postgresql://localhost/testjobs

db_driver=org.postgresql.Driver

 

When reading a certain property, then the Configuration-logic (Config.java) first asks the IconfigProvider-implementation (if defined at all). If receiving no response (null) then it checks in the normal configuration files.

Bug Fix – Missing “provided” definition in pom.xml

The “pom.xml” definition for the articat “eclntjsfserverRISC” was missing the “provided” defintion withn the dependency to the ESAPI-library.

Bug Fix – LINK-ALIGN “center” did not work

The attribute LINK-ALIGN was not working when using the value “center”. It stayed “left”-aligned.

Improvement – Central redirection to external/internal pages

There are situations in which you want to “get out of your current dialog” to some other dialog. Example: an error occurred, which only can be handled by sending an “oops-screen” to the user.

In this case you can used the components:

Both component are now included as default components in any page automatically. You can call the corresponding processing by some API:

Client.redirectDialogToURL(String url)

Client.redirectDialogToPage(String page, boolean keepSession)

 

Please note: this is NOT a way to do page navigation! This is some way, which is only serving the purpose “get out!”.

Update 20220131

Improvement – Good bye “Open Sans” - welcome “Fira Sans”! New default style “default202201risc”

The change that we applied to our demo workplace style last week is now applied as new default style “default202201risc”. The new style inherits the previous one (“default 202006risc”) and is used for all new projects that you create – either by using the CaptainCasa tool-set or by using the Maven project archetypes.

Main difference to previous style: the font.

Just for info: the “old” font “Open Sans” is still delivered! And of course you do not have to update existing projects – they keep their style as you have assigned it!

Improvement – Good bye “.jsp” - welcome “.xml”

The following change is part of CaptainCasa since 3 months already – and is already used in the demo workplace (maybe some of you have found out...). Now it is applied to all new projects that you create (either by tool-set or by Maven):

Layout definitions used to have by tradition the extension “.jsp”. This was more and more misleading: from the beginning on the layout definitions were pure XML only – no kind of scripting was allowed! - In the meantime “.jsp” is some synonym for a server-side scripting technology which CaptainCasa definitely is NOT... - so we always have to explain that our “.jsp” is some special usage and has nothing to do with traditional “.jsp”.

In the project definition file (“.ccproject”) there is a new attribute...

<project

    ...

    layoutdefinintionssavedasxml="true"

    ... >

 

    ...

    ...

</project>

 

When setting to “true” then in the layout editor “.xml” is proposed as extension for new layout definitions:

You still can use “.jsp” (by selecting the combo box holding the file extension value), of course. And still any usage of “.jsp” is still valid and allowed.

The XML layout content is identical, in the .jsp file it is surrounded by the typical JSP tag library management...

<%@page contentType="text/html"%>

<%@page pageEncoding="UTF-8"%>

 

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>

<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<%@taglib prefix="t" uri="/WEB-INF/eclnt"%>

 

<f:view>

    <h:form>

        <f:subview id="testAsJspg_sv">

            <t:beanprocessing id="g_1" />

            <t:rowtitlebar id="g_2" text="Test" />

            <t:rowheader id="g_3">

                <t:button id="g_6" text="Some button" />

            </t:rowheader>

            <t:rowbodypane id="g_4" />

            <t:pageaddons id="g_pa" />

        </f:subview>

    </h:form>

</f:view>

 

...whereas in the XML representation it is surrounded by corresponding name space definitions:

<?xml version="1.0" encoding="utf-8"?>

<t:layoutdefinition

    xmlns:t="http://www.CaptainCasa.com/controllibrary/t">

    <t:beanprocessing id="g_1" />

    <t:rowtitlebar id="g_2" text="Test" />

    <t:rowheader id="g_3">

        <t:button id="g_6" text="Some button" />

    </t:rowheader>

    <t:rowbodypane id="g_4" />

</t:layoutdefinition>

 

Please do not change name space tag prefixes!

Info – Compressed data transfer

We extended the list of files that are by default compressed when being communicated between client and server so that the list now inclues:

Improvement – Automatic setting of SBVISIBLEAMOUNT in FIXGRID

When defining a FIXGRID with height “100%” and NOT defining a SBVISIBLEAMOUNT, then by default a value of “40” was selected. Now this value is not fix anymore but also takes the screen pixel size into consideration so that the value is increased for larger deskto screens.

Bug Fix – Swing Client: Popup positioning with two screen devices

In the Swing client it could happen that a popup was not opened on the right screen when working with two screens. The situation only rarely occurred.

Update 20220124

Info – New Font used in Demo Workplace

We fell in love with the “Fira Sans” font from Google – and start to use it in out demo workplace as default font:

We plan to use this font as default font for new CaptainCasa projects from next update on - replacing the Google font “Open Sans”. Of course: existing styles will not be touched, so this change will only be applied for new projects.

Bug Fix – Touch input, characters doubled sometimes

Shame on us! The “doubling of characters” during touch input still occurred! We hope this issue is now fixed forever.

What is the background of these errors, after having had the touch components working for years...? We updated the behavior in October, so that the characters are not only activated by a normal click/touch (which means: activation is done on mouse-up), but also is done if the user is clicking/touching the screen for some longer time – i.e. without sending a mouse-up event. There was a bug in the processing of corresponding timer functions.

Improvement – Ignoring FIELD-roundtrip-vetos

If a user keys in some wrong value into a field (e.g. FORMATTEDFIELD: “sdsdh” where an int-value is expected), then the value is reset, a message is output and a roundtrip that is potentially triggered is vetoed – and not executed as consequence.

Reason: imagine you input a form, key in wrong data and press “Save”. In this case the client resets the field to its previous valid value and does not trigger the “Save”-processing, so that the saving is not executed with data which was reset by the client.

Now you can override this behavior by setting the attribute IGNOREROUNDTRIPVETOS to “true”. The attribute is available for the components BUTTON, ICON and MENUITEM at the moment. - And there is a new method “Modeless/ModalPopup.ignoreRoundtripVetosOnClose”.

Please:

Improvement - Font size calculation

Up to now we used one factor per font for calculating the height of e.g. a label component. The font size “12” was multiplied with this factor and rounded afterwards. The factor was calculated dynamically per font that is used.

This led to inaccuracies with some fonts and some font sizes. We now dynamically find the correct height by obtaining the height per font size from the HTML functions.

Improvement – FLUSHAREATIMER attribute

For a container component (e.g. PANE) you can define attribute FLUSHAREA to “true”. If doing this, then any data change that happens inside the container leads to a flush on container level after some duration.

The duration up to now was hard-coded to 1000ms. Now you can influence by using attribute FLUSHAREATIMER, in which you may define the number of milliseconds on your own.

Bug Fix – DOF add on: filter popups always showing String-filter

The filter dialogs that pop up when pressing the filter-icon in the grid headline always showed the filter for String-values. Now they (again) show dialogs that are in sync with the data type of the corresponding property of the column.

Update 20220117

Improvement – SCHEDULEITEM with polygon-drawing

There are pre-configured style variants for the SCHEDULEITEM and SCHEDULTITEMAREA components:

The style variants point to some style class definition which for example is:

<class n="riscscheduleitem_gantt1" extends="riscscheduleitem_gantt">

    <risc n="inset" v="0 0 5 0"/>

    <style n="clip-path" v="polygon(0px 0px, 100% 0px, 100% 100%, calc(100% - 5px) calc(100% - 5px), 5px calc(100% - 5px), 0px 100%, 0px 0px)"/>

</class>

 

You see that you may define the CSS attribute “clip-path” to select by a polygon which part of the component is rendered. This “clip-path” definition can be applied to any style, of course. And of course you can define own style variants with own polygons, too.

Improvement – FORMATTEDFIELD-FORMATMASKDURINGINPUT for number input

This is something interesting...: so for you could define one FORMATMASK with a FORMATTEFIELD, e.g. by defining FORMAT=”bigdecimal” and FORMATMASK=”dec2” you enforced the output and input of a field to he formatted with two decimal digits.

Now you can define a FORMATMASKDURINGINPUT in addition. Example: you may define a normal FORMATMASK=”dec2” and a FORMATMASKDURINGINPUT=”dec8”. The consequence: when the field is not focused then the formatting is done by “dec2”:

When the user focuses the field then the processing internally switches to “dec8” and shows the full number with its full precision:

The internal value is always kept with the definition of “dec8”.

Improvement – COMBOBOX-Item with comments

The hovering was up to now showing that each item consisted out of different internal elements – now it's one hover-effect for the whole item.

Information – Internal switch to CKEditor 4.17.1

We updated the version of CKEditor (optionally used with component SIMPLEHTMLEDITOR) to version 4.17.1. The request originated from a security audit.

Improvement – Hiding the maximize-button of popup dialogs

You can now hide the maximize button of decorated popup dialogs – the same way as you can hide the close-button:

Modeless/MadalPopup p;
...
p.hideMaximizeIcon();

p.hideCloseIcon();

Bug Fix – Page Bean “Component CCWorkpageTitle”

When pressing the icon for isolating the current workpage into an own popup dialog, then it could happen that the wrong page was opened up. The bug only occurred in situations with multiple workpage containers.

Bug Fix – Event “tooltipstarted” and “tooltipended”: flickering popup dialogs

There were situations in which popups that you opene up by “tooltipstarted”-event (BaseActionEventTooltipStarted) are immediately closed after being started. Reason: these dialogs were closed (event BaseActionEventTooltipEnded) when the corresponding client component received a “mouseout” signal. Unfortunately this signal was also sent when the whole screen is overlayed by the waiting-cursor/shading that appears when the client does not receive server-response within 250 ms... We now bypass this situation, so popups are not immediately closed anymore.

Update 20220110

Bug Fix – FORMATTEDFIELD/CALENDARFIELD format advice

When using FORMAT “date” and FORMATMASK “short”, then the format advice (the gray text that is shown if the field is empty) was set to e.g. “mm/dd/yyyy” instead of “mm/dd/yy”. The input of the component was correctly managed – the bug only affected the text.

Improvement – TOUCHSIGNATURE recognizes “dots”

When using the TOUCHSIGNATURE component to record a user's signature on a touch device, then only lines were recognized so far. Simple “dots” were not recognized.

Improvement – FIXGRID default persistence

When assigning a PERSISTID to a FIXGRID then the sequence of columns and the sort status is persisted. The default persistence is using class “DefaultFIXGRIDPersistence”.

In this class there is a new static configuration parameter:

DefaultFIXGRIDPersistence.initAppendNewColumnsToTheEnd(boolean value)

 

When you add new FIXGRID-columns during your development, then these columns are automatically appended to the end of the grid, so that the user recognizes them. If setting the parameter to “false” then the new columns are not automatically appended – but just not visible.

Info – Update of JQuery Version in client

We updated to version 3.6.0. - Just for info: the CaptainCasa client processing itself does not require JQuery – it is just used as part of external libraries that we utilize for special tasks (here: in the TEXTEDITOR component: managing the caret position.

Update 20220103

Security – Dynamic generation of SVG files (.ccsvg)

The color value that is passed with “.ccsvg” image definitions is now checked to be a correct color definition (“#rrggbb” or “#rrggbbtt”). Before it was not checked and there was the risk of JavaScript injection. - Actually this could only happen if image definitions are defined by the user, so the risk was low – but it existed.

Info – Clean up of dependencies in pom.xml of CC-artifcats

The pom.xml of the artifacts “org.eclnt.eclntjsfserver” and “org.eclnt.eclntjsfserverRISC” still contained references to “log4j.jar”. We updated the pom.xml correspondingly.

Just to make sure: the references were defined with scope “provided”, so there was no automatic loading of libraries. And: the pom.xml of the project archetypes were already correctly updated.

In addition we cleaned up non-used references to “commons*” libraries within the pom.xml definitions.

Improvement – Page Bean Component “CCDataGridView2”

There is an updated version of the data grid view, that makes the rendering of a grid of Pojo-beans very simple. The updated page beans class now is “CCDataGridView2”. It is “nearly” compatible with the previous version (which of course is still supported!) “CCDataGridView”.

Main features of the new version: a much more sophisticated management of filters – including the ability to add own column filters by implementing a certain interface.

Please check the demos in the Demo Workplace:

Improvement – New Page Bean Component “Tree by tiles”

The new page bean component “CCTreeByTiles” renders a normal tree definition (FIXGRIDTreeBinding) into a tile layout:

In the top line the currently opened tree hierarchy is shown from the left to the right. In the body area below the children of the currently opened node are shown.

Improvement – HttpSessionAccess.getCurrentClientLocale()

You may now directly access the country/language definition of the client by the method HttpSessionAccess.getCurrentClientLocale().

Please remember: there is a localization of the server application and a localization of the client renderer. The client localization e.g. is responsible for converting dates and number values into properly readable strings. In most cases both localizations are in sync – but you can explicitly define scenarios, in which e.g. the user sees an English application with a Swiss conversion of numbers and dates.

Bug Fix – PAGEBEANINCLUDE

Update 20211217 contained a bug when using component PAGEBEANINCLUDE (not: ROWPAGEBEANINCLUDE!). An additional ROW-component was added on top of the content.

Release 6.0 – Q4 2021

Update 20211217

Bug Fix – Layout Editor, version 20211213: removal of “t:pagebeancomponent” component definitions!

This is a severe bug that we introduced with last update 20211213! When opening a layout definition containg the component PAGEBEANCOMPONENT (in XML “t:pagebeancomponent”) then this was excluded during the parsing and loading of the XML. Even worse: because it was included during loading, it was also not saved when saving the layout.

The “good news”: you immediately find out, because the page does not work anymore after the first saving – and you have to roll back to the previous version of your layout definition (that you hopefully have stored in some GIT/ SVN or whatever repository).

Improvement – COLORFIELD and COLORICON

The style class of the TABBEDPANE that is opened as popup for COLORFIELD and COLORICON is now part of the style of “risccolorfield” and “risccoloricon”. By default it is the normal “risctabbedpane” style – but you can modify on your own.

Improvement – Configuration object loader

The interface “IConfigurationObjectLoader” was not invoked in all cases when configuration objects are loaded. Example: when loading the “IStartUp” implementation that can be defined in system.xml it was not called.

...as information: by default configuration objects are loaded through the class loader. This means: if you e.g. in system.xml define a startup class “xxx.yyy.Startup”, then this class is picked and a corresponding instance is created. The IConfigurationObjectLoader allows you to create the instances on your own – so that you e.g. can use Spring or other services for creating them.

Bug Fix / Improvement – FIXGRIDWITHGROUPING: hiding/showing columns

There was a bug when hiding / showing columns within a grid using component FIXGRIDWITHGROUPING: the grid columns were rendered “messy” in the header area of the grid.

In addition the default popup for arranging columns was updated to fit to the special conditions of grouped columns: in the popup you now cannot arrange the columns sequence anymore because this column sequence is heavily influenced by the grouping of columns. In the popup you can still decide about visibility of columns, of course.

Bug Fix – Loading SVG icons with “.ccsvg”

The dynamic generation of SVG-icons based on typical flat SVG-icons contained an error when applying the color variants. In addition the algorithm for adapting the SVG content to certain colors and sizes is now more flexible – and adapters to more SVG icon definitions.

Update 20211213

Update – Popup for re-arranging grid columns

The popup was adapter to again contain the column headers. Reason: in some scenarios you may want to sort the columns on the left:

Improvement – Canvas resolution doubled for MULTILABEL

The MULTILABEL component is a special component for rendering many texts in one row with high speed. It does not create corresponding HTML elements, but uses the HTML-Canvas element for drawing. It is implicitly used in certain components (ARRAGRD) or Page Bean Component implementations (Simple Pivot).

Up to now the Canvas size internally was set to exactly fit the available space within a certain dialog. Now: we internally double the Canvas size – without increasing the component size – which results in a higher resolution.

In short: when using the browser zoom, the rastering now begins to start at a scale of 100%, where it started before with any size > 100%.

Improvement – Accumulation of DRAGSEND in grid row

If a layout was containing the following...

FIXGRID rwodragsend=”A:A” ...

  GRIDCOL ...

    LABEL text=”...” dragsend=”B:B”

 

...and when starting a drag drop operation from the label, then only the label's DRAGSEND-value was treated in the drop-calculation. Now the DRAGSEND value is accumulated to the grid row level. In the concrete example, the DRAGSEND value is “B:B;A:A” instead of just “A:A”.

(This feature was partially taken over from our good old Java Swing-Client – in which the accumulation was done for all elements on top of the clicked one...)

Update 20211206

Improvement – SMARTLABEL, automatic generation of tool tip texts

If the width of a SMARTLABEL is too small to show all the text content, then a tool tip is shown. Sepcial HTML characters (e.g. “&”) were not translated to plain text when internally setting the tool tip text.

Bug Fix – “Jakarta EE” version: Code Generator created “Java EE” code

When creating actionListener methods in the Code Generator, then the code that was generated still referred back to the “Java EE” version – and not to the “Jakarta EE” version.

In addition we added information about the usage of the “Jakarta EE” version into the Developer's Guidie.

Improvement – SCANFIELD with explicit scan-Event

The SCANFIELD now better separates between a FLUSH event (user input, then leaving the field) and explicit scan input (user having input a value with matching prefix and postfix, or: scan-hot-key activated).

The demo “DemoScanField” was updated accordingly:

    public void onScannedValueAction(javax.faces.event.ActionEvent event)

    {

        if (event instanceof BaseActionEventScan)

        {

            BaseActionEventScan e = (BaseActionEventScan)event;

            Statusbar.outputSuccess("Value was scanned: " + m_scannedValue + "/" + e.getScannedValue());

        }

        else if (event instanceof BaseActionEventFlush)

        {

            Statusbar.outputSuccess("Value was flushed: " + m_scannedValue);

        }

    }

 

Improvement – Usage of “.ccsvg”

Inside the server there is a servlet processing that automatically transfers an existing flat SVGicon definition into a certain color and size variant.

The servlet is addressed in the following way up to now:

Normal image access: /images/abc/def.svg

 

Image with assigning new size:

    /images.abc.def.16x16.svg

 

Image with assigning newcolor and new size:

    /images.abc.def.#FF0000.16x16.svg

 

Image with assigning explicit background color and a new color and a new size:

    /images.abc.def.#FFFFFF.#FF0000.16x16.svg

 

There is the problem, that the character “#” needs to be translated into “%23” if accessing the image by normal URL (e.g. from the browser). So you sometimes have to write “%23” (e.g. in CSS-style-values) in some cases you have to write “#” (e.g. in attribute IMAGE of components).

To harmonize you can use the alternative “_” from now on:

Normal image access: /images/abc/def.svg

 

Image with assigning new size:

    /images.abc.def.16x16.svg

 

Image with assigning newcolor and new size:

    /images.abc.def_FF0000.16x16.svg

 

Image with assigning explicit background color and a new color and a new size:

    /images.abc.def._FFFFFF._FF0000.16x16.svg

 

Now you everywhere can use the same path and do not have to take care about “#” of “%23” anymore.

Bug fix - Writing files, access rights

In update 20211104 we announced that files were not written anymore with option “acces for any” but with “access for owner only”. This change was not considered internally properly, with the result that files were still written with old “access for any” right.

Update 202111291104

Improvement – “X-Frame-Options: sameorigin” set for pages that are internally used

CaptainCasa embeds external frameworks into html bridge pages, that are accessed by <iframe>. Example: chart.js, HTML-editors.

So far we did not explicitly set http-parameters for the requests that load these pages, because the default security policy is “sameorigin” - which is exactly the right one to reach these pages.

In some scenarios we now see that internal proxies within the network of users automatically set the security-policy to “deny” for all pages that do not explicitly set the “X-Frame-Otions” http-repsonse-header-attribute. The filter we added is “SameOriginFilterForHTML” and by default is mapped to URLs to “/eclnt/risc/*”. The filter internally makes sure it only adds the http header parameter for “.html” URLs.

As any filter and/or servlet you can switch off this filter in system.xml.

Improvement – New component SCANFIELD

The SCANFIELD is an extended FIELD – with special functions for being used as field for receiving input of a scanner, that is bound by emulating a keyboard. The special functions are:

Please check the corresponding demo in the demo workplace (“News” section).

Improvement – Conditions with BGPAINT commands

Using the BGPAINT-attribute you can define certain background coloring commands, e.g. drawing a plain color, a mixture of colors and/or images at certain positions. These commands can be combined with conditions so that they are only executed if the condition matches. Example: you may define certain commands to be bound to the condition that the current component is focused.

Please check the corresponding demo page in the demo workplace (“News” section).

Bug Fix – Dialog position of COMBOFIELD enforced

When a popup is opened by a COMBOFIELD then in very seldom constellations it could happen that it was not positioned below the COMBOFIELD – but below the dialog in which the COMBOFIELD is located.

Bug Fix – Long-touch detection sometimes did not work on touch devices

Touching a component without ending the touch causes a “long-touch” internally, which is handled as equivalent to the double-click in the desktop world. This long-touch was not properly detected in some use cases.

Update 20211124

Bug Fix – Sort icons in FIXGRID do not toggle...

Due to the change in 20211122 “Style variables for Sort-up/down icons in the grid” we added a bug: the sort icons do not change anymore when toggling the sort direction.

Improvement – GRIDLAYOUTROW – adding POPUPMENUI

So far you could only add components to the GRIDLAYOUTROW that really come with some visible control, that is embedded into the row. When adding other components (e.g. POPUPMENU) the client ran into exceptions.

Now you can also add components that do not provide a direct control to be embedded.

Update 20211122

Improvement – Adding own control libraries significantly simplified

The number of XML files you need to edit was reduced significantly. A special function in the Toolset creates all the required files. When selecting...

...then a dialog will show up...

...in which you just need to specify the prefix of your library and the package in which the implementation resides. All required files will be generated correspondingly – including JavaScript and CSS files for doing the client file implementation.

The central configuration file is now “cccomponentlibrary.xml” which is located in the root package of your source. By packaging your project as .jar library and applying it into another project the internal registration of the control library is done automatically.

We currently update the Developer's Guide – please take a look there. And: of course the “up to now” way of defining control libraries is and will be still supported!

Improvement – GRIDCOL-COLUMNMOVINGENABLE

You now can disable the function that a grid column is move-able by drag/drop operations in its column header. Set the new attribute GRIDCOL-COLUMNMOVINGENABLED to “false”.

For DOF users: the property was taken over into the DOFPropertyType: please use property set/getMoveableInGrid

Improvement – Style variables for Sort-up/down icons in the grid

In the style definition, icons for a grid column's sort indicator were defined by RISC-style-values “_sortimageup” and “_sortimagedown”. Unfortunately we always used the icons in the opposite way they were named...

So we now corrected this. In order to keep compatibility (maybe someone of you already did own definitions...) we renamed the RISC-style-values to “_sortimageascending” and”_sortimagedescending”. We still read the old values if they are defined, so compatibility is kept.

 

Improvement – AREASELECTOR: server-side setting of selection

You now can set the selected are in the AREASELECTOR by the server-side. Please check the updated demo in the demo workplace.

Improvement – Page bean component CCMultiLanguageField/TextArea

In the multi language dialog now long-text-input is supported when using the TextArea-vairant.

Bug Fix – CCEE – Accessing Oracle tables, case sensitive

When using Oracle as database and when using the case-sensitive variant (dialect “oracle_casesensitive”), then tables with schema were accessed in the way “SCHEMA.tableName” - and not in the way “SCHEMA”.”tableName”.

Update 20211116

Improvement – All configuration objects now loaded by explicit interface

All configuration objects that were referenced in system.xml by their class name were so far directly created by using the current classloader. Now there is an explicit interface:

package org.eclnt.jsfserver.util;

 

public interface IConfigurationObjectLoader

{

    public Object loadInstance(String className, boolean withError);

}

 

You can override the class implementing this interface and add your own configuration loader - which e.g resolves some of the object by using a context manager (Spring, Weld, ...).

Update – Fighting around browser's auto completion

For Chrome browsers we now set the “autocomplete” attribute of normal fields to some generated value (actually it is the counted id of the element) – which seems to be the most reliable way to switch off auto-completion. Auto-completion unfortunately is not standardized throughout the browsers, the value “on”/”off” are interpreted in different ways by the browser.

For password fields we continue to set “autocomplete” to “new-password”.

Update - “dispatcherinfo.xml” vs. “ccdispatcherinfo.xml”

For configuring the “Dispatcher” (the “#{d}”-object) you may define a series of packages and concrete name definitions, for resolving a class name behind a name within an expression. There are two possibilities:

Advantage of the new way: when merging a project out of diversew .jar-libraries, then all occurrences of all “ccdispatcherinfo.xml” are merged as well – you do not have to take over XML-definitions into the central “dispatcherinfo.xml” as before.

We now updated the tooling and the documentation to only follow the “new” way. The “traditional” way of course is and will be still supported.

Bug fix – Layout-Editor: ctrl-drag/drop sometimes not accepted

When dragging/dropping components in the component tree on the left, then sometimes drag/drop operations with pressing the ctrl-key (“drop copy”) were not executed.

Update 20211104

Bug fix – Scroll-bug of 20211102

The show-stopper bug of 20211102 is solved with this update.

Bug fix – NullPointerException in FIXGRID's detail column popup

When using a FIXGRID and when using lazy loading, then it could happen that a NullPointerException occurred when opening the column detail popup.

Update – Writing files

When CaptainCasa writes file into the file system at runtime, then this was so far done in a way, that the file was change-able by any user. We now write the files in a way that change rights are only granted to the user that started the servlet engine.

Update 20211102 – DO NOT USE!

Do not use!

20211102 contained a sever bug: when clicking onto the scroll-up/down icon of a FIXGRID's scroll bar, then the grid continued to scroll infinitely. Please use 20211104.

Improvement – Triple state sorting in FIXGRID

When clicking a column header of a FIXGRID instance, then the grid content is sorted. When continuing to click, then the sort state toggles between “ascending” and “descending”. - Now, there is the possibilities to toggle between the states “ascending”, “descending” and “original sequence”.

Please check the corresponding demo in the demo workplace (“News” section).

Improvement – New component SCHEDULEITEMAREA, a reduced component SCHEDULEITEM

The SCHEDULEITEM by default comes with a high number of features that is only required in “sophisticated” cases – especially the feature to resize the schedule on the left and/or right is only used in certain scenarios.

We now introduced a slim version – which is SCHEDULEITEMAREA. It is just representing a scheduled item inside a SCHEDULE – without text, without resizing. You can put any component inside just as with SCHEDULEITEM. The number of internal components that is required in the SCHEDULEITEMAREA is much lower – so we recommend to use this in scenarios of hundreds of schedule items.

Improvement – Grid export now supports Apache POI 5.*

The grid export was up to now using Apache POI 3.* versions. Now it also is compatible with Apache POI 5.* releases. - The compatibility is managed internally by outsourcing certain functions that are depending on the POI version.

Just to make sure: this message does NOT mean, that you have to upgrade your POI libraries – but just means, that you might now also user POI 5.*.

Bug Fix – Touch input via touch keyboard: character pressed once but registered twice

When clicking/touching two virtual keyboard quickly one after the other, than it could happen that one of the keys was registered twice. Example: a quick input of “1”, “2”, “1”, “2”, ... could end up with a text “12112”.

To make sure: the error occurred with the special JavaScript-based keyboard that comes with components if attribute TOUCHINPUT is set to “true”. - We are not talking about the normal touch input on touch devices.

Improvement CCEE – Support of properties/columns with Enumerations

The DOFW-Mapping functions now support Enumeration values. The id of the corresponding Enumeration-value is stored as String value inside the database.

Update 20211027

Improvement – Resetting grid column sequence/width information

By calling “FIXGRIDBinding.resetPersistentData()” you can reset the current column sequence and width definitions to the default that is defined in the layout definition. This sometimes did not correclty work when the user resized/rearranged the grid columns – and with the same roundtrip called the “resetPersistentData” method.

Same happened when calling the contained methods “setColumnsequence” and “setModcolumnwidths” and passing null.

In addition the method “clearSortInfo()” now also updates/resets the persistent sort data.

Bug Fix – Immediately sorting a grid with shift/control-click

By using shift/control-click you can sort grid data by multiple columns. On top of each column a number of icons is rendered, representing the sort sequence. - When the user started a sorting of a grid with immediately pressing the shift/control key, then the sort sequence started with “2 icons” - instead of “1 icon”. - The sorting itself was correctly done.

Bug Fix – FIXGRID-persistence of colum information with PageBeanComponent implementations

When storing the persistent information of a grid that is part of a page bean component, then there was an error when saving the information to the default file-based stream store: the file name contained a “:”, which is not allowed in file systems.

Improvement – Statusbar-popup without message concatenation

If writing several status bar messages within one roundtrip and when immediately opening a message dialog (e.g. as part of outputAlert(...)-method), then the message popup contained a concatenation of all messages.

By calling the static method...

Statusbar.setAvoidConcatenationOfMessagesInPopup(true);

 

...in the initialization of your system you can avoid this. Only the last message is part of the message dialog as result.

Improvement – Hide close icon in popup dialogs

There is a new method „ModalPopup/ModelessPopup.hideCloseIcon()“.

After calling, the dialog will both not show a close icon anymore and it will not react to ther user pressing escape on the keyboard (which be default closes modal dialogs).

Improvement – Workplace function search: possibility to extend search result

In the workplace function search you can now update the result list. In the default workplace framework this is done by implementing the following interface:

/**

* Extension to workplace function search that allows to add/update

* the items found in the list of results.

* <br><br>

* Please extend your implementation from {@link WorkplaceDefaultFunctionSearchExtension}

* in order to stay compatible in case of interface extensions.

* <br><br>

* The class needs to be registered in the system.xml configuration file. (element "workplace"

* attribute "workplacefunctionsearchextension".

*/

public interface IWorkplaceFunctionSearchExtension

{

    /**

     * @param searchText

     *

     * @param functionTreeHits

     * The hits that were found by the normal function search - searching through the

     * information of the function trees.

     *

     * @return

     */

    public List<Hit> searchWorkplaceFunctions(String searchText, List<Hit> functionTreeHits);

}

 

Please use class “WorkplaceDefaultFunctionSearchExtension” as base of your implementation in order to stay compatible in case of extensions of this interface.

Example implementation , in which a “Hello Hello!” item is added to the list of “normal” hits:

package demostartup;

 

import java.util.ArrayList;

import java.util.List;

 

import org.eclnt.workplace.WorkplaceDefaultFunctionSearchExtension;

import org.eclnt.workplace.WorkplaceFunctionSearchUI.Hit;

 

public class DemoWorkplaceFunctionSearchExtension extends WorkplaceDefaultFunctionSearchExtension

{

 

    @Override

    public List<Hit> searchWorkplaceFunctions(String searchText, List<Hit> functionTreeHits)

    {

        List<Hit> result = new ArrayList<Hit>(functionTreeHits);

        // always add HelloWorld

        {

            WorkpageStartInfo wpsi = new WorkpageStartInfo();

            wpsi.setPageBeanName("DemoHelloWorld");

            wpsi.setText("Hello Hello!");

            wpsi.setOpenMultipleInstances(true);

            Hit h = new Hit();

            h.setHierarchyText("Some nice text");

            h.setWpsi(wpsi);

            result.add(h);

        }

        return result;

    }

 

}

 

Your class needs to be registered in system.xml:

<system>

    ...

    <workplace

        ...                   

        workplacefunctionsearchextension=

          "demostartup.DemoWorkplaceFunctionSearchExtension"

        ...

    />

    ...

</system>

 

For these ones using the explicit page bean Components “CCWorkplaceSearch” and/or “CCWorkplaceSearchViaPopup”: there is a new IListener-method...

        /**

         * Called during a search. By default the list of items is found by searching

         * the function tree for contained texts. But: you can take over the search

         * completely on your own.

         *

         * @return

         * null: the list of hits is produced in the default way. Otherwise: the list

         * of hits to display.

         */

        public List<Hit> reactOnSearch(String searchText);

 

...by which you can take over the search completely on your own.

Bug Fix – Reload of client re-positioned popup dialogs

When explicitly reloading the client content (HttpSessionAcces.reloadClient()) then popup dialogs that are currently opened were re-positioned.

Update 20211019

Improvement – PASSWORD field: CapsLock message

The PASSWORD component now indicates to the user if the CapsLock key is pressed:

Improvement – Sizing of HTML-based tooltip

The dialog showing an HTML based dialog now adapts its size to the tooltip's text content. By default it tries to keep a certain width/height-ration (default: 1.414), which can be modified in the style. You can also pass an explicit with definition as part of the tooltip data.

Improvement – Nicer styling of FIXGRID dialog for arranging columns

We moderately updated the styling of the default dialog for arranging grid columns, which now looks as follows:

Improvement – ValueManager.convertObject2DisplayString

By using this method, you can create a String that converts a value into a display-String – following the format-parameters you pass:

LocalDate ld = LocalDate.of(2000,6,6);

String s =   

    ValueManager.convertObject2DisplayString(ld,"date",”medium”,"LOCAL",true);

 

We now updated the method so that it creates exactly these Strings which are also created on client side, in the client's JavaScript processing. Before the values were created by using default Java formatting.

The method is internally used in CaptainCasa e.g. when exporting grid information to PDF.

If you want to switch back to the old behavior you may do by updating system.xml in the following way:

<system>
   ...

    <valuemanager

        ...

        usejavaclientformatter="false"

        ...

    />
   ...

</system>

Improvement – Duration time of glass pane blocker configure-able

When the client talks to the server, then by default an invisible glass pane is arranged in front of the client's area, which catches all mouse/touch events. The duration that the client wait's for arranging this glass pane is now configure-able by the CLIENTCONFIG component, attribute DURATIONGLASSPANEBLOCKER. It's default is set to 250ms.

You can directly update this duration by using class “Client.java”:

Client.setDurationglasspaneblocker(Integer durationglasspaneblocker)

Improvement – Concatenated expression, null-treatment

If an expression is a concatenated one (e.g. “Hello #{d.Xxxxx.name}!”) then the value “null” was added, if the referenced expression was resolved to null (“Hello null!”). Now an empty string is output (“Hello !”).

Improvement – Style reading with session-reference

When the client requests style information (e.g. the .css file) then this is done by a corresponding URL which is sent to the server-side. This URL by default does not have any session reference.

By setting CLIENTCONFIG-LOADSTYLEWITHSESSIONREFERENCE to “true”, the client will add session information to the requests reading the style information.

Please pay attention:

Why did we add this feature? There is a use case, in which a user-dependent style is read from the stream store, which itself has an own implementation – which reads the style from a database which depends on the current session...

Bug Fix – CALENDARFIELD: change of value with user interaction

When passing a date with non-”000”-milliseconds and when opening the calendar field's calendar popup, then it could happen that the client automatically “rightsized” the milliseconds to “000”. The same happened when pressing “OK” in the calendar popup without having changed the date.

We now fixed the issue and only make “OK” enabled when the user really did some change within the calendar popup.

Update 20211012

Improvement - Same origin: explicit definition by page

When it comes to controlling if a page of an application can be embedded as IFRAME into other pages then so far you could only control on whole application level. Now you can control on page level in system.xml. Example:

<system>

    ...

    <riscstarter

        ...

        embedableasiframe="sameorigin"

        ...>

        ...

        <allowiframeembedding page="/workplace/demohelloworld.jsp"/>

        <allowiframeembedding page="/aaa/bbb.jsp"/>

        ...    

    <riscstarter/>

    ...

</system>

 

In the example all pages can only be included based on same-origin-policy – but the two pages that are explicitly mentioned can be embedded in any case.

Bug Fix – FIELD-INPUTMASK problems with certain mask definitions

In the FIELD-INPUTMASK you may define a pattern like “____:____”. There were problems if a non-”_” character occurred twice, e.g. “____::____”.

Bug Fix – Style management – Certain scenarios in which style inheritance did not properly work (Control variants)

In case of inheriting one style from another it could happen that in the area of “control variants” definitions were not correctly taken over.

Example:

Style: styleA

  Control: t:button

    Variant: default => extends parent tag
            Attributes: -

    Variant: special => extends default

             Attribtues: border “#000000”

Style: styleB extends styleA

    Variant: default => extends parent tag
            Attributes: background “#FF0000”

    Variant: special => extends parent

             Attribtues: -

 

If using “styleB” and variant “special”, then the background-definition of the “default” definition of “styleB” was not taken over – but the “default” variant of “styleA” was referenced.

Bug Fix – Style variant with GRIDLAYOUTPANE and GRIDLAYOUTROW was not considered

...if the style variant was defined as part of a IComponentAdapter-implementation.

Bug Fix – Adapter binding definitions did NOT override style definitions

If for a certain attribute there was a style definition and an adapter binding definition, then the style definition was selected – which was wrong! Now the adapter binding definition is selected.

Bug Fix – FORMATMASK “decmax” did not work properly in German localization

By defining a FORMATMASK “decmax3”, a decimal number will be output with three digits behind the decimal separator maximum. If the number does not have 3 digits then there is no filling with “0” at the end. - This mechanism did only work with US-localization.

Bug Fix – Reload after communication problems

When the client cannot reach the server because of communication problems then it retries. It could happen that during such retry the client was reload from the beginning (e.g. resulting in an application to be reset to the first screen) – instead of staying at the current navigation step.s

Update 20211004

Improvement – CCEE: “autotrim” configuration via interface

The feature “db_autotrim” so far could be configured by using property files (ccee_config.properties). Now it also can be set by implement interface IDBConnectionProvider_autotrim (which is an extension of IDBConnectionProvider).

Bug Fix – Popup menu not appearing in special scenarios

When using the feature POPUPMENULOADTRIP then the server can dynamically assemble a popup menu on right mouse click which is then shown after the processing of the corresponding round trip. This happens when releasing the right mouse button.

In some scenarios there is a first round trip is started when the right mouse key is pressed (i.e. on mouse down), e.g. when using focus sensitive areas (the focus is moved on mouse-down activities). Now it could happen that the showing of the popup menu happened with the response processing of the first round trip – not with the one of the second round trip (which actually belongs to the popup menu processing). Result: no popup was shown or some outdated popup menu was shown.

Bug Fix – Adapter binding with FIXGRID

When using adapter binding with FIXGRID and when setting the attribute STYLEVARIANT by using the adapter binding, then this was not recognized.

Bug Fix – Popup resized after opening in special scenarios

If a popup dialog contained a component that immediately caused the dialog to communicate back to the server (e.g. TIMER, CALLSERVERONTRIGGER, component with focus-sensitivity) and if this communication happened at a point of time when the size of the popup still was animated, then the current animation size was transferred as the current size of the popup dialog to the server side. As result, the server returned a wrong size to the popup dialog, causing this one to resize.

Result: the popup opened up and immediately was resized.

Release 6.0 – Q3 2021

Update 20210927

Bug Fix – Virtual touch keyboard on touch devices (Android/iOS)

We updated the behavior of the virtual touch keyboard (FIELD-TOUCHSUPPORT=”true”) for touch devices. Before the field was internally set to disabled (in order to avoid the original OS-keyboard to show up), now we use the HTML attribute “inputtype” and set to “none”. This means:

Improvement – TEXTWITHLINKS component

Up to now the format of links that you placed into the component need to exactly follow the format “<a href='....'>...</a>”. Any further e.g. style definition was not handled properly. Now the parsing of the link is more sophisticated and you can define any additional attribute (e.g. “<a href='...' style='...'>...</a>”).

Improvement – COMBOBOX items, tooltip

You now define the COMBOBOX as follows:

The result: the value comments are not directly rendered but are shown as tooltip for the COMBOBOX items.

Improvement / Bug Fix – Adapter Binding and attribute STYLEVARIANT

It was not possible up to now to use the concept of adapter binding for the attribute STYLEVARIANT. Not it is possible.

Update 20210920

Improvement – CLIENTCONFIG-truestring/falsestring

The conversion of boolean values “true” and “false” within the LABEL component can now be customized by the CLIENTCONFIG component – using the new attributes “truestring” and “falsestring”.

There is a default CLIENTCONFIG component which is automatically sent to the client, which refers to the definition in the class “Client” - and the corresponding properties “truestring” and “falsestring”. By default the values are taken from the configuration file “system.xml” with the corresponding definitions in the “valuemanager” section.

    <!--

      *************************************************************************

      Value manager.

      

      truestring - the string value that represents a boolean "true"

      falsestring - the string value that represents a boolean "false"      

      truestringexport - the string value that represents a boolean "true" during

      PDF/Excel-export

      falsestringexport - the string value that represents a boolean "false" during

      PDF/Excel-export      

      *************************************************************************

     -->

    <!--

    <valuemanager

        truestring="✔"

        falsestring="✖"

        truestringexport="[X]"

        falsestringexport=""

    />

     -->

 

The system.xml configuration already did exist, but only was used for server-side conversions of boolean values into String-representations. Now it is also used to influence the client side processing.

Bug Fix – Hot deployment by file trigger

You can trigger the hot deployment by updating a file “eclnthotdeploy/.cctrigger” in the deployed system. By changing the content CaptainCasa will find out for new sessions that the hot deployment classloader needs to be restarted. - This mechanism did not correctly work when restarting the hot deployment directly after starting the whole web application – without any user-session in between.

Bug Fix – Long click in virtual keyboards

CaptainCasa provides the capability to open virtual keyboards either as dialogs that are opened on top of the control (e.g. FIELD) or as stable keyboard within some area of the screen. When clicking/touching a long time onto a button of this keyboard then the focus of the currently focused component was moved into another component.

Bug Fix – Swing: File upload problems

When removing the “FileUploadServlet” items from web.xml in the phase of cleaning up the content of web.xml, then the automatic configuration of CaptainCasa via servlet-API was automatically adding the SecurityFilter (preventing session-id high-jacking) for file uploads as well (URL-extension “.ccupload”). This is fine for the RISC-HTML-client because here corresponding security information is sent from the client side – but not fine for the Swing-Client, which is not sending this information. As consequence we updated the SecurityFilter to not search for corresponding content of uploads in case the request is coming from a Swing client.

Update 20210913

Improvement / Bug Fix – WEBSOCKETPOLLING behavior when no connection can be established

The WEBSOCKETPOLLING component tries to set up a corresponding connection to the server side in order to receive server-side notifications. If the component fails to do so then it used to try to re-establish a connection after one second.

Typically this is not a problem if the WEBSOCKETPOLLING component is “actively used”. But in scenarios in which the WEBSOCKETPOLLING component only provides some optional function and in which the network configuration of the environment does not allow web socket connections at all this leads to some massive number of attempts to build-up we socket connections. - Imaging 100 clients to send one web socket connection attempt per second...

We now changes the timing of trying to re-establish the connection so that the duration between the attempts is increase with every failed attempt – and so that there is a stop after 10 failed attempts.

This improvement is especially important because the CaptainCasa client from being of 2021 on automatically builds up one web socket connection for receiving so called blocker-info-messages (please check update Update 20201221 for more information). So far you had to switch off this optional functionality in order to prevent stress scenarios in case of failing web socket connections. Now there is no trouble situation anymore.

(By the way: the same, updated behavior is available with the LONGPOLLING component which does internally opens up a classical http-connection.)

Improvement – Alternative work page selector

In the workplace certain work page container areas are managed, each one typically having one work page selector area below (or on top):

You now can create the selection are completely on your own by implementing a page bean implementing a new interface “IWorkpageSelector” and by registering this page bean in system.xml. Example:

Please check the Developer's Guide, chapter “Developing an own work page selector” for detailed information.

Bug Fix – Touch keyboard

When using virtual touch keyboards then long touch events were interpreted as popup menu requests – causing the focus to move from the touch keyboard input area into the popup menu. Now, there is no popup-menu shown on top of touch keyboards anymore.

Bug Fix – Pretty printed layout XML in demo workplace

In the demo workplace the pretty-printed layout definitions (tab “Layout XML”) contained xml elements always containing a blank space at their end. E.g.:

<f:view >
<h:form >

    ...

      <t:coldistance width=”10” >

 

When copying and pasting this XML, then you may have stumbled upon the fact that the parsing for content of the layout editor only checks for content by searching for “<f:view>” (withou blank).

We now updated the pretty printing of the layout XML so that the unnecessary blank spaces are suppressed...

Update 20210906

Improvement – Globally switching off all “autocomplete/fill” pre-configuration for input fields

Browsers have added a not-yet standardized and sometimes strange way to support the user when keying in fields: they try to keep certain values and offer the user to auto-fill during input. Everyone knows this from user/password-fields with some password-manager being involved – but this also applies for other fields...

CaptainCasa in general tries to switch this behavior off (exception: password fields) and/or to control this behavior by setting corresponding attributes with the HTML-input component. There is a an attribute FIELD-BROWSERAUTOFILL that you can use for fine-controlling the behavior – but due to the missing standardization in this area, we cannot really guarantee that reaction is as you expect. (There are many corresponding discussions e.g. in “stack overflow” on this.

What we now added as attempt to react on certain scenarios...: a global switch to tell CaptainCasa that CaptainCasa by default does “nothing!”. This means: we leave the input-elements of the page (that are internally used for FIELD, PASSWORD, ...) as they are without pre-configuring them in a certain way. To do so CLIENTCONFIG has a new attribute “inputusedefaultbrowserautofill”.

<t:clientconfig ... inputusedefaultbrowserautofill=”true” .../>

 

The value “true” means: use the default (i.e. CaptainCasa does NOT pre-configure), the value “false” means: CaptainCasa does pre-configure. The default value is “false”.

Update 20210831

Improvement – Multi-screen workplace

Thanks for first feed back on last week's introduction of multi-screen workplace. We now extended it in the following way:

Update 20210823

Improvement - Multi-screen workplace

Splitting up functions on multiple browser instances – so that you can position one on your “first” screen and one on your “second” screen: there are bundle of new APIs to do so. For these ones who are interested: we now provide rather technical demos... The more marketing-related demos will follow after.

The basics behind are documented in the Developer's Guide (chapter “Workplace Framework => Multi-screen workplaces”).

The API is very simple and basically is a smart extension of the existing Workplace API.

Bug Fix – IFIXGRIDComponentAdapterBinding – usage with trees

The method “getGrid” was returning a FIXGRIDListBinding-instance but now returns a more generic FIXGRIDBinding-instance. As result you can also use FIXGRIDTREEBinding and other extensions.

Improvement – CCEE-Database-access: INSERT with auto increment

If passing an object to be inserted into the database, then we now pass back the actually generated key for columns with the “autoIncrement”-annotation.

PLEASE: check the log output of your system – reading the generated value as part of the inset-operation is not really standardized on JDBC-level. In case of errors we continue with the processing without updating the corresponding object property – but with doing quite some log output...

Update 20210817

Improvement – Automated “keepAlive” of polling-connections

When using polling (LONGPOLLING, WEBSOCKETPOLLING) then the corresponding connection is always used when calling a corresponding “wakeup”-method.

We already introduced a “keepAlive” method which allows you to use the connection without sending meaningful data – in order to prevent network timeouts between the browser and your server.

Now we introduced some default mechanism to automatically call the “keepAlive” method internally so that you do not have to do this on your own. The “LongPollingMgr” internally starts an observation thread that checks all long polling connections for the timestamp of their last usage. If the duration of not being used exceeds a defined number of seconds, then the “keepAlive” method will be called for the corresponding long polling connection.

You invoke this default function by system.xml. Example:

<system>

    ...

    <longpolling keepaliveduration="180"/>

    ...

</system>

 

In this case connections that are not used for 180 seconds are receiving a “keepAlive”.

The automated “keelAlive” function is only activated if having added the configuration and if having assigned a value higher than “0”.

Improvement – BROWSER: communicating to contained page

The BROWSER component embeds one page via its URL into a CaptainCasa dialog by internally using the an HTML-IFRAME-element.

You now can talk to the contained page by sending messages and by receiving messages. The messages are sent by Browser-message-events (JavaScript: “window.postMessage(...)”.

Please check the example in the demo workplace (“News” section).

Update 20210809

Bug Fix – Popup menu: global hotkey info and text search did not show up

You can define (via CLIENTCONFIG) that there is always a popup menu available showing the current hotkeys and showing an option to copy the text of the current component to the clipboard. This popup menu did not show up anymore, or more precise: the menu items were only shown in 20210802 if there was a surrounding popup menu anyway.

Improvement – IFRAMEINCLUDE: sending one callback-message after the next

Up to now you had to take care about not sending too many callback messages one after the next from some processing inside an include HTML page. Now you can fire callback messages “without limitations”... The messages are properly queued on client side and then communicated to the server message by message.

Improvement – Cascading popup menus and POPUPMENULOADTOUNDTRIP

So far a POPUPMENULAODROUNDTRIP was only recognized if defined on the lowest level of cascaded popup menus. Now the attribute is recognized for the whole chain of menus.

Improvement – Menu items in MENUBAR and BUTTONMENU

The hotkey information is directly shown now inside the menu item – before it was only available as tooltip.

Update 20210802

Improvement – Cascading popup menus

Popup menus are now able to cascade. This means: by default this popup menu shown which is defined on the lowest component level for which a popup menu is defined:

By defining POPUPMENU-CASCADEPARENTMENU as “true” the popup menu will also include the popup menu assignment that is defined on top of the component:

This is especially useful in grids, where the item menu now can always include the complete grid menu – without any extra coding required:

Please check the demo in the demo workplace, section “News”.

Bug Fix – SPLITPANE-ONETOUCHEXPANDABLE not properly working

The quick navigation buttons in the SPLITPANE did not work properly anymore.

Improvement – Calendar-component, touch-field component

For both components you can now set the size of the buttons by style definition.

Update 20210726

Improvement – ESAPI compatibility

Currently we deliver the ESAPI library of version 2.1. When upgrading on your side to some newer library (e.g. 2.3) then you will experience some incompatibility in the library: the configuration of ESAP needs to be adapted.

CaptainCasa now comes with two configurations (package “/esapi/v21” and package “/esapi/v23”) and selects the right configuration path dependent from the version.

In addition you now can configure the ESAPI-resource-directory via system.xml:

    <!--

     **************************************************************************

     ESAPI configuration

     By default the configuration is loaded from the resource esapi/ESAPI.properties

     file. You can override so that ESAPI uses some different file direactory

     to look for resources.

     **************************************************************************

     -->     

    <!--

    <esapi resourcedirectory="...file path..."/>

     →

 

As path you either can define an absolute file path or you can define a resource path for class loading.

Bug Fix – Tools: Style Editor

In the Style Editor there was some bug when extending a default-style-variant of a component: in this case all existing attributes were immediately treated as self-defined attributed – not only the ones that you actually update.

Bug Fix – LONGPOLLING stopped when switching between workpages

If the LONGPOLLING was part of a workpage and if this workpage was hidden by the user and then again shown, then it could happen that the LONGPOLLING did stop.

(Just to make sure: the bug did NOT occur with WEBSOCKETPOLLING.)

Improvement - “Copy text”-popup-menu-item

The automatically generated popup menu item for copying the text of the current component into the clipboard now better checks when to convert HTML text into plain text. E.g. text is transferred into plain text within a TEXTPANE component that is rendering HTML text.

Update 20210719

Improvement – Java EE ==> Jakarta EE 9

We now provide pre-configured installation packages for Windows on our download page.

Improvement – BufferedContentMgr, TempFileManager, UploadContentMgr

When implementing dynamic download or upload processing then you typically use one of these APIs in order to provide a corresponding URL. In each of the managers you register content (e.g. “BufferedContentMgr.add(...)”), which you also have to de-register, if not required anymore.

If content is not explicitly de-registered then so far the content was automatically removed at the end of an http-session. When using Cookies for session-tracking then the duration of an http-session may be quite long, because it may span multiple browser tabs. - So we now remove the content at the end of a dialog session, which represents one browser instance.

Improvement – Export to Excel, FIXGRIDWITHGROUPING

When adding the Apache POI libraries to the server runtime, then there is an export function available, that transfers the data of a grid into an xlsx-file.

For grids with grouped columns the grouping so far was not transferred – now the corresponding column header are transferred into merged cells of the Excel-sheet.

Improvement – COMBOBOX keyboard usage

When hitting some key on the keyboard, then the COMBOBOX will jump to a corresponding item starting with the key. When hitting the key a second time then the COMBOBOX now will jump to the next items starting with the key.

Improvement – Blur effects

We now provide default style variants to use blur effects:

The style variants are:

And there is a new style class for the background of popup dialogs: “riscdialog_popup_blur”.

The corresponding style classes are part of riscstyle.xml. The definitions is quite simple – the following XML shows the definition for the style class of PANE-”ccblur”:

    <var n="@blurStyle@" v="blur(5px)"/>

    <var n="@blurBackground@" v="rgba(0,0,0,0.2)"/>

 

    <class n="riscflextable_blur">

        <risc n="background" v="@blurBackground@"/>

        <style n="backdrop-filter" v="@blurStyle@"/>

        <style n="background" v="@blurBackground@"/>

    </class>

 

You see that CSS backdrop-filters are used together with some shading color.

Please note: backdrop-filters are not yet supported with Firefox – so it is always a good idea to combine them with transparent color definitions, so that there is some at least similar effect with Firefox.

Update 20210712

Improvement – Java EE ==> Jakarta EE 9

CaptainCasa now is available for Jakarta EE 9 – the successor of Java EE (formerly known as J2EE). These ones of you who followed the debates a year ago know that Jakarta EE 9 comes with a dramatic change and incompatibility: core package names of the Enterprise Edition have change from “javax.*” to “jakarta.*”. In the CaptainCasa environment these are the packages:

javax.servlet => servlet processing

javax.xml.bind => JAXB

javax.faces    => Java Server Faces

javax.el       => Expression language

 

We start providing the beta-version of our Jakarta EE 9 version by having additional Maven artifacts:

org.eclnt.eclntjsfserverRISC_jakarta => elcntjsfserver.jar”

org.eclnt.eclntpbc_jakarta           => page bean component addons

org.eclnt.eclntccee_jakarta          => server utilities

 

We took the change and from Jakarta EE 9 on only use our own mini-JSF implementation anymore – and are as consequence now independent from the default Jakarta Server faces.

What does this mean for you?

javax.servlet => jakarta.servlet

javax.xml.bind => Jakarta.xml.bind

javax.el       => jakarta.el

 

javax.faces    => org.eclnt.jsfserver.base.faces

 

All this is some hell of effort – unfortunately. The change to Jakarta EE 9 is something which is really demanding. Please setup contact to us in case of transferring to Jakarta EE 9.

Improvement – COLLINE/ROWLINE

The COLLINE did not provide attribute STYLEVARIANT yet.

Both components now provide the attribute STYLESEQ to explicitly define a background styling. There are two corresponding default styles “risccolline” and “riscrowline”. The default styles are empty (transparent).

Improvement – Check of runtime for two eclntjsfserver*.jar files

We now check the runtime when starting if two different versions of CaptainCasa are active. This might happen if you have two eclntjsfserver*.jar files within your WEB-INF/lib runtime directory.

In case of finding two versions corresponding error is thrown and detailed information is logged in the CaptainCasa server log.

Improvement – TABBEDPANE-MENUICONVISIBLE

This attribute was missing on TABBEDPANE level – it did exist for TABBEDLINE and TABBEDLINECONTAINER...

Bug Fix – Maven artifact org.eclnt.eclntpbc-20210705.jar

The eclntpbc-artifact of the last version did not contain the .class files, but the .java files...

Update 20210705

Improvement – Component Reference

Up to now the demos and the API documentation for CaptainCasa components were located at different locations – the demo workplace on the one hand and the tools on the other. In addition the demo workplace was missing a “by-component-index”.

Now there is a central place to go – the “Component Reference”: you can start it both from the demo workplace...

...and from various locations within the tools...

The “Component Reference” is shwoing the list of components on the left. When selecting a component then the available demos of the demo workplace are listed and invoked on the right side – and you may open the component API documentation as well.

Bug Fix – TABBEDPANE – adding new TABBEDPANETAB-items: value was not respected

In a TABBEDPANE you can controls by attribute VALUE which tab is currently shown to the user. When adding/removing items then the value was not respected anymore but “any” item was shown.

Bug Fix – CCEE-Addon: DOFWSql.queryFunctionGrouped() not propertly working

The method was not working anymore when using function “COUNT” and column name “*”.

Bug Fix – Popup no properly sized when using “setWidthHeightToSizeOfReference()”

By calling “Modal/ModelessPopup.setWidthHeightToSizeOfReference()” you can define that the width/height of a dialog popup is taken from some are of the screen. This function was not working anymore.

Release 6.0 – Q2 2021

Update 20210628

Improvement – Embed-ability as IFRAME, Security

From this update on pages returned by a .risc-URL are returned with http-header parameter “X-Frame-Options” being set to “sameorigin” by default.

This means: .risc-pages are embed-able within an IFRAME by another page, if the embedding page resides in the same domain as the .risc-page. They are NOT embed-able if the other page originates from some different domain.

Background: there is the security risk that someone places a valid page inside an IFRAME of another page, and overlays own invisible components on top of the embedded page. The user may have the impression to e.g. input some password into the embedded page – but actually is doing the input into the page that is layered on top.

You can explicitly control the iframe-policy within system.xml:

<system>

    ...

    ...

    <!--

      *************************************************************************

      Configuration of RISCStarter - the servlet that is responding on .risc

      request.

      ...

      ...

      embedableasiframe: default "sameorigin"; completely switch off by value

      "deny" or "false"; allow embedding by value "true".

      ...

      ...

      *************************************************************************

    -->

    <riscstarter

        ...

        embedableasiframe="sameorigin"

        ...

     />

    ...

    ...

</system>

Improvement – Security when calling with “cc_preview=true”

Up to now pages that were opened in the editor were opened with a query parameter “cc_preview=true”, which notifies the server processing of the application that it is called in the preview mode of the layout editor.

In order to better protect your application for not being called in preview-mode by outside-the-editor URLs, we added some more checks. In particular the editor always calls the page within the context of a generated page (“zz_cceditoraround.jsp”) - which is only generated into the application when the application is running inside the layout editor – and which is not part of your project files.

If this check finds out that the “cc_preview=true” parameter was set without being called from the editor, then the page will return with some error screen.

Improvement – Log directory created automatically

Up to now you had to make sure that the directory for logging CaptainCasa's log messages really did exist. Now it is created automatically.

Bug Fix – Delayed sending of download-action

When using download components (FILEDOWNLOAD*) then you can set attribute WITHCALLBACK to “true”: in this case you receive a notification that the client really started the download.

This notification now is sent with some delay (1.000 ms) because it sometimes was arriving at server side before the actual download URL was opened.

Improvement – FIXGRID-Excel export

The default Excel Export (FIXGRIDExcelExporter) was internally restructured and now allows many more defined exit points for applying modifications.

Improvement – Definition of PDF and Excel-exporter via system.xml

You now can define your own PDF/Excel-Exportere in system.xml – and do not have to override the exporter instances directly in the grid instance.

The configuration is:

<system>

    ...

    <fixgrid

        ...

        ...

        pdfexport="org.eclnt.jsfserver.elements.util.FIXGRIDPDFExporter"

        excelexport="org.eclnt.jsfserver.elements.util.FIXGRIDExcelExporter"

        ...

        ...

    />

    ...

</system>

 

Still you can directly set the instances by calling:

FIXGRIDList/TreeBinding.setPDFExporter(...)

FIXGRIDList/TreeBinding.setExcelExporter(...)

Update 20210621

Improvement – Popups containing SCROLLPANE – auto sizing

There is a new attribute SIZETOCONTENTINPOPUP which is available for SCROLLPANE and ROWBODYPANE (which internally contains some SCROLLPANE). If the attribute is set to “true” then the minimum size of the SCROLLPANE will be calculated by the minimum size of its contained content, when being positioned inside a popup dialog.

This makes it much easier to use SCROLLPANEs inside a popup dialog together with automatic sizing. Please check the demo in the “News” section of the demo workplace:

Improvement – JSHOWURL opening page in own browser instance

So far you could only open up new browser pages as browser tab. Now you can explicitly open pages within a new browser instance. Please either pass “popup” as JSHOWURL-TARGET and/or pass a corresponding definition into the JSHOWURL-WINDOWFEATURES attribute.

There is a demo “General => Client integration => Start Browser” inside the demo workplace.

Bug Fix – Selector title not taken over from workpage start info

When passing an explicit selector title for a workpage using “WorkpageStartInfo”, then this selector title was not taken over.

Bug Fix – Popup menus did not show “Copy text: ...” items

This bug only occurred for popup menus which were loaded by some explicit round trip (attribute POPUPMENULOAD=”true” on the corresponding eleement).

Update 20210615

Improvement - Expression monitoring inside Layout Editor

The Layout Editor now contains a new function – the observation of expressions at runtime:

When opening a page in preview mode then a special expression monitoring is activated. Any time some expression cannot be resolved properly a corresponding log message is recorded. In the Layout Editor you see the recorded messages per request for the last round trips.

In the concrete example of the screenshot you see that two expression could not be resolved. By double clicking onto the expression details are shown in a popup...

...and the component that uses the expression is searched and highlighted in the tree of components on the left.

The monitoring both observes expressions for getting/setting properties and expressions for invoking methods.

In the runtime system the expressions are written into some special logs, which are located in the work directory that is defined per application by the servlet engine. In Tomcat this is “tomcar/work/Catalina/localhost/<nameOfApp>”. Inside there is a new director “log_devlog”. The logged data is automatically truncated when getting too large.

Improvement – SCROLLPANE: events when reaching/leaving top/bottom

The SCROLLPANE now is able to send events to the server-side processing when reaching/leaving its top and/or its bottom position.

Concrete use case 1: when scrolling down, some header area should be shrinked to some minimum.

Concrete use case 2: when reaching the end of scrolled content, then additional data should be loaded.

Please check the example in the demo workplace (“News”-section).

Improvement – Closing of popup-request without blocking client

For special tasks you can tell the client with certain components (e.g. FIELD) that the client processing should not be blocked when a round trip to the server is triggered. This “non-blocking” needs to be handled with greatest care because it potentially can break the consistency of data between client and server processing.

You now can define with popups that the request for closing the popup does not block the client. Use API:

ModalPopup.setSkipBlockingOnClose(true/false)
ModelessPopup.setSkipBlockingOnClose(true/false)

 

Concrete use case: then define a COMBOFIELD that serves as auto-completing field, then the request to close the popup (which is triggered when continuing to key in data) may be executed without blocking the client, so that the user input is not “disturbed” by the round trip processing.

Update 20210607

Bug Fix – Persisting the columns sequence of FIXGRID instances

There was a bug introduced with update 20210503: if a FIXGRID is using the default persistence management then when showing up, all columns are shown in the grid – also these ones which the user decided to not see. The sequence of the columns was correct, but the non-visible columns were appended at the end of the columns.

Improvement – CCMultiValueSelection: selected items to top

The page bean component was extended and now allows a many more configuration options. Including the definition if selected items should be sorted to the top of the list.

Improvement – CAPTUREANIMATOR – animations now built via CSS-transformations

The content based animations of the CAPTUREANIMATOR are now based on CSS-transformations – making them more fluent and faster.

Improvement – AREASELECTOR with enhanced features

There are a couple new features within the AREASELECTOR components:

The features are:

Improvement – CCEE Addon

Two issues:

Improvement – RGRAPH/CHARTJS

You now can define via attribute “withcallbackonfinishedrendering” that the component triggers an action on server side once it is really rendered.

Background: the components are running in some own processing (using 3rd party frameworks). Some of you want to make screenshots of the graphics automatically – and were faced with the problem, that the screen shots were done at an too early point of time.

When setting “withcallbackonfinishedrendering” to “true” then an action event of type “BaseActionEventFinishedRendering” is thrown on server side.

Update 20210531

Improvement – New font in Layout Editor / tooling

Maybe some not really important change, but a visible one: we fell in love with a certain font of Google (“Titillium Web”) and changed the editor to use this font. (Actually, we “stole” this font from one customer project where we saw it the first time...)

Improvement – Enhanced font height calculation

This is something internal, but may be interesting for you:

It is not really simple in the browser client processing to calculate the vertical size a certain text requires as height... Well, basically you create the text with a certain size (“e.g. 20px”) in a e.g. DIV, then ask the height of the DIV and then you know the factor between “20px” and the actual height, which you can re-use for fast calculation afterwards. - Now the “but”s: if you do this calculation right after starting the client, then the font might not be loaded – so the browser does not respond the height of the font that you desire, but the one of a replacement-font... Yes, there is a font-loader-API in JavaScript, but this is not supported by MS Internet Explorer (which we support from IE 10 on...).

As consequence the “font factor calculation” was done in the past by having predefined font factors for each font family. CaptainCasa did a proper calculation and added them to the client for many commonly used fonts. Fonts, that were not included in the list were assumed to have some default factor – resulting in inaccurate font height calculation. Typical result: text (e.g. in buttons) were not correctly centered vertically.

To make the long story short: we now found a way to check the proper font loading and to calculate the “font factor” accurately within the client, so that any font that you include is correctly sized. The need of predefined “font factors” is obsolete.

Improvement – Auto-sizing of popups

When passing either height or width of a popup as “0”, then the size of the popup dialog is calculated automatically.

Up to now there was a problem, when the popup content included components which are sized in a more complex way than “normal” components. “Normal” components (e.g. LABEL, FIELD, BUTTON, nearly all CaptainCasa components...) directly know their minimum width and their minimum height. “Complex” components (e.g. TEXTPANE, adaptive components) cannot tell you about their minimum height, if the do not know their width. Imagine a TEXTPANE with some long text, which is sized to a width of “100%”: only at this point of time, when the layout management really tells the actual width, it knows how to arrange the contained text – and as consequence knows about the actual height it requires.

Dialog popups which contain “complex” components, have not been correctly automatically sized so far. You needed to pass an adequate size of the popup explicitly.

Now, the automatic sizing of popup dialogs also considers these “complex” components.

Please check the corresponding demo in the demo workplace (“News” section).

Improvement – Setting size animation type for popup dialog

Last week we introduced the size animation for popup dialogs – and immediately you gave the feed back: “in addition to the pre-configured scenarios we want to control the size animation directly on our owns...”

You now can do so the calling Modal/ModelessPopup.setSizeAnimationtype(...).

Please check the corresponding example in the demo workplace (“News” section).

Improvement – ResourceManager may now also pass back errors

Up to now the ResourceManager (that you might directly access for reading literals) passed back some generated text if the corresponding literal was not defined.

Now there are extended interfaces with an additional parameter “withError”: if set to true, then the RersourceManager will throw some error instead of passing back some generated text.

Bug Fix – Not really perfect focus sequence in GRIDLAYOUTPANE

The default focus sequence of components arranged in a GRIDLAYOUTPANE was not really perfect for certain scenarios – because it was based on the actual x/y-position of the components. Now it is based on the logical grid position.

Improvement – COMBOBOX popup if no sufficient vertical space

The popup of the COMBOBOX now properly shows up on top of the component if there is no sufficient space below. And: the animation direction is inverted as well.

Improvement – Session check if also applied for file upload

This is something internal: the upload of data is done through a corresponding servlet processing (“UploadContentServlet”). In order to prevent session-id-highjacking we now also applied the mechanism of an additional session security id to this servlet processing. Meaning: even if someone is able to “steel” your session-id and the upload-id, then there is no chance to get into the upload mechanism from outside, because the invisible session security id is not provided. (The security id is an extra generated id per session, that is always part of the post-data of a request. The post-data is the one which is encrypted when using https. More details are available in the Developer's Guide.)

Update 20210525

Improvement – Size animation on popup dialogs

We now use CSS transformations for animating the showing up of a popup dialog. Please check the popup demo (top of the “News”-section) within the demo workplace.

You can fine-control, which type of animation should be used with which kind of dialog – by adding corresponding definitions to the style management. Please find more information in the document “Styling Issues”.

Improvement – Type of focus drawing no define-able on component level

There is some general switches in the style management when it comes to rendering a focused component: you can use additional, typically dashed line elements on top of the component (RISC value: “_focusmgmtAdditionalElements” set to “true”) and/or you can use a background color modifier (RISC value: “_focusmgmtBackgroundModifier” set to “true”).

Up to now you could only define the values on global level (style class: “riscinternal_riscglobal”). Now you can define them on any component level, so that the type of focus drawing can be individually defined.

Bug Fix – Drag/Drop in grouped columns

The drag/drop was not correctly working within the last level of grouped columns.

Bug Fix/Improvement – Using “<p>...</p>” in TEXTGRIDWITHCONTROLS

The component that was introduced last week showed some “strange” behavior when using “<p>...</p>” in the template text: a line break was done before the first child component. - Background: HTML defines “p”-elements as “floating elements” and defines “div”-elements as “block elements”. Once a block element is added into a floating element, then the floating element automatically gets closed, which means: a “</p>” is immediately added in front of the block element.

CaptainCasa elements are DIV-elements, which are block elements – so the behavior exactly matches the HTML definition.

We no replace “p”-elements by “div”-elements. Which works fine in all our examples (including the ones that come from first users).

Bug Fix – Persisted sequence of grid columns

There was a problem if the grid column sequence of a grid was saved – and if the column's sort reference occurred twice in the grid.

Update 20210517

Improvement – New component TEXTWITHCONTROLS

The component TEXTWITHCONTROLS allows you to position CaptainCasa components inside free style HTML text. Take a look onto the following example:

There are 5 components that are arranged inside an HTML text. The way to define is:

<t:row id="g_6">

    <t:textwithcontrols id="g_2" height="100%" popupmenu="TEXT"

        text="<h1>Hello World!</h1><h2>Step 1</h2>Please first input your <b>first name</b> @@firstname@@ then input your <b>last name</b> @@lastname@@.<h2>Step 2</h2>Then press this button: @@hello@@.<h2>Step 3</h2>The result then is output into this label: @@result@@.<br><br>If you want to clear the content of the fields: press this button @@clear@@."

        width="100%">

        <t:field id="firstname" labeltext="First name"

            text="#{d.DemoTextWithControls.firstName}" width="150" />

        <t:field id="lastname" labeltext="Last name"

            text="#{d.DemoTextWithControls.lastName}" width="150" />

        <t:button id="hello"

            actionListener="#{d.DemoTextWithControls.onHelloAction}"

            image="/images/iconssvg/ztest_16x16.svg" text="Say Hello" />

        <t:label id="result" background="#00000030" labeltext="Result"

            text="#{d.DemoTextWithControls.result}" />

        <t:button id="clear"

            actionListener="#{d.DemoTextWithControls.onClearAction}"

            text="Clear fields" />

    </t:textwithcontrols>

</t:row>

 

You see:

At runtime the placeholders will be replaced by the corresponding component.

Please pay attention:

Improvement – FULLSCREENBUTTON automatically disabled

...if the function is not supported by the underlying browser. There are e.g. iOS versions in which the functions is not supported.

Improvement – BROWSER-AVOIDURLENCODING

The BROWSER component by default URL-encodes “strange” characters by escaping them (“%xx”). Now, if you pass a URL which already is encoded, then there is some double-encoding.

You now can switch off the URL-encoding of the component by setting BROWSER-AVOIDURLENCODING to “true”. In this case the URL is taken over into the components exactly as is.

Update 20210510

Improvement – Page Bean Component “Extended Workpage Titlebar”

A new page bean component was added to the “eclnt_pbc” addon-library. This allows to arrange additional elements in the title bar of a work page:

The title bar and its extensions are kept when isolating the work page as popup:

Please check the corresponding demo in the demo workplace (General => Workplace Management => Title bar with extensions”).

Improvement - Registration of Page Bean Components for Layout Editor

Up to now Page Bean Component classes could be registered to be visible in the Layout Editor by implementing interface “IPageBeanComponentInfoService” and registering a service in “META-INF/services”.

Now it's much easier: you just need to define an XML file “ccpagebeancomponentinfo.xml” in your resources:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<pageBeanComponents>

    <pageBeanComponent

        className="org.eclnt.ccaddons.pbc.CCAdaptiveSideContentArea"/>

    <pageBeanComponent

        className="org.eclnt.ccaddons.pbc.CCAdaptiveSideContentAreaButton"/>

    <pageBeanComponent

        className="org.eclnt.ccaddons.pbc.CCAttachments"/>
   ...

    ...

</pageBeanComponents>

 

The layout tools of CaptainCasa will scan all .jar files that are part of the project for this file and will make the corresponding page bean components available in the Layout Editor.

Improvement – Cross references in Style Editor

The cross reference did not show occurrences of global variables (“@...@”) within the attribute value definitions of style variants.

Improvement – true/false characters for PDF export

There are certain situations in which CaptainCasa requires to create a String representation of a true/false value. In system.xml you could influence this String by the definition:

    <valuemanager

        truestring="\u2714"

        falsestring="\u2716"

    />

 

You now can fine-tune this definition by defining different characters that are used for export activities (e.g. PDF export):

    <valuemanager

        truestring="\u2714"

        falsestring="\u2716"

        truestringexport="[X]"

        falsestringexport=""

    />

 

Background: if using a “nice” UTF-8 symbol-character then this may not properly rendered in the PDF that is created as result of exporting the grid to PDF.

Improvement – Clicking on included component in Layout Editor

By default you may click into the preview of the Layout Editor – and the corresponding component will be selected in the tree of components on the left. This did not work for included components (PAGEBEANCOMPONENT, ROWPAGEBEANINCLUDE, PAGEBEANINCLUDE). - Now this is supported, too.

Update 20210503_2

Improvement – Concatenation of POPUPMENU assignments

A component references a popup menu by defining its ID-value in the attribute POPUPMENU. Example:

<t:field ... popupmenu=”FIELDPOPUP” .../>

 

<t:popupmenu id=”FIELDPOPUP”>

  <t:menuitem .../>

  <t:menuitem .../>

  <t:menuitem .../>

</t:popupmenu>

 

You now can define a semicolon separated sequence of popup-menu-ids. The whole popup menu consists out of all contained menus, separated by a line-separator.

<t:field ... popupmenu=”FIELDPOPUP;GENERAL” .../>

 

<t:popupmenu id=”GENERAL”>

  <t:menuitem .../>

  <t:menuitem .../>

  <t:menuitem .../>

</t:popupmenu>

<t:popupmenu id=”FIELDPOPUP”>

  <t:menuitem .../>

  <t:menuitem .../>

  <t:menuitem .../>

</t:popupmenu>

 

This is a quite significant improvement. Example: in the grid processing you as consequence can easily combine the popup menu for the grid-item (FIXGRID-ROWPOPUPMENU) with the menu items of the whole grid (FIXGRID-POPUPMENU).

Improvement – New component SYSTEMICON

The component SYSTEMICON is able to call dedicated client system functions directly. Functions currently include:

Please check the corresponding demo in the demo workplace (“News” area).

Improvement – Page bean component “Pseudo title bar”

The default title bar for a popup dialog provides some text, an icon to minimize/maximize the dialog and an icon to close the dialog. It is bot possible to add additional content.

We now included a new page bean component “CCPopupDialogTitle” into the ccaddons-package (eclnt_pbc.jar) that renders a title bar which looks and behaves identically to the normal title bar but which allows to place additional components inside.

Please check the demo in the demo workplace (“News” area.

Improvement – Layout Editor and Page Bean Components

We continue step by step to integrate Page Bean Components into the Layout Editor as a “first class” type of components.

When clicking a page bean component (with assigned attribute PAGEBEANCLASS), then the attribute PAGEBEANINITDATA which holds a complex string value of type “name:value;name:value;...” is shown in a separated area, in which you can see the individual names and in which you can define the values behind.

You now can also drag/drop expressions from the right into the value area.

Improvement – Automated persistence of FIXGRID-columns

When defining a PERSISTID with a FIXGRID instance then there is an automated function to persist changes to the column sequence, column widths and column visibility. The function behind was improved to now much better handle situations in which a columns does not provide some own SORTREFERENCE and/or PERSISTID. - We now not only store the visible columns but also the non-visible columns, so that we can better mix in new columns which you might add to the grid during development.

Bug Fix – Problem when RENDERED-value changed during (server-side) rendering phase

This was a quite “strange” problem: in the application the value behind a RENDERED attribute did change during the render-phase of the request processing. Because components are arrange a tree, the render phase internally is separated into three steps: “renderBegin”, “renderChildren”, ”renderEnd”. If the RENDERED value (that points to some application expression) was “true” during “renderBegin” and “false” during “renderEnd”, then a problem was output as stack trace on server side.

Improvement – Styling

The style class “rischeaderlabel” was improved by certain RISC-values, so that you now can influence:

The font factor for “Titillium Web” was added to the default.

Bug Fix – CALENDARFIELD – runtime update of TIMEZONE

When changing the TIMEZONE value then the CALENDARFIELD content was not properly updated. In only did update when the concrete date value behind was changed.

Bug Fix – Default SBVISIBLEAMOUNT for grids if height defined in the way “100%;100”

When defining the height as percentage size with some minimum size in addition, then the proposed default SBVISIBLEAMOUNT value was not set to the default, that is normally used for percentage-sized grids (40).

Update 20210426

Bug Fix – PASSWORD/FIELD: auto-fill in Firefox

When using the Firefox Password Manager then values that were auto-filled by the password manager into e.g. password fields sometimes were not registered.

Improvement – PASSWORD-KEEPCHANGEDVALUE

CaptainCasa by default replaces a value in the PASSWORDFIELD by some anonymous value “as fast as possible”. This sometimes is a problem for password managers.

Some password managers check if to update their content at this point of time when the password component disappears. If then the value of a user-input in the meantime was exchanged by an anonymous value, then the anonymous value is the one that is stored in the password manager.

To prevent you can use the new attribute PASSWORD-KEEPCHANGEVALUE and set the value to “true”: in this case a user-changed password will not be anonymized, but the user user-input stays within the password component.

Improvement – Mouse-wheel scrolling in FIXGRID

We so far had some built-in timer function which observed the mouse-wheel events and which accumulated several wheel events to one event (“+1”, “+1”, “+1” ==> “+3”). This function was reducing the traffic between client and server – but on the other side was not very smart from usability point of view.

We now changed and do not accumulate scrolling events anymore by timer. The only accumulation takes place when the server is busy while the user is scrolling.

Result: a much smarter scrolling experience! This is especially true when using two finger mouse-pad scrolling.

Improvement – FIXGRIDWITHGROUPING with additional ROWFOOTER/ROWHEADER

You now can add additional footer and header rows to the FIXGRIDEWITHGROUPING component.

Improvement – CCEE: using view instead of table

In the CCEE persistence management you always could query database views in the same way that you query database tables. Now there is an additional flag in the “@doentity” annotation, by which you can define the class to represent a view. As consequence any attempt to start update operations are causing some error.

Bug Fix – CLIENTCOOKIE: problem when >1 definition

When having defined more than one CLIENTCOOKIE component in one page, then only the last CLIENTCOOKIE actually was active.

Update 20210419

Bug Fix – SCREENGRABBER

The SCREENGRABBER component did not follow contained IFRAME definitions, which are implicitly used when using the BROWSER, CHARTJS, OSMVIEWER and other components. Background: this feature was not available anymore after having upgraded to the newest html2canvas-version internally. We now rolled back to the previously used version.

In general we still treat the SCREENGRABBER component as a “beta-component”: expectations towards this component are high (well: you just want to do some screen shot...) and the way to get there (html2canvas-library) is complex (DOM hierarchy is rendered by Canvas-commands). It is “magic” that it works on its current quality level...! But still you will find situations in which the result will not be a 1:1 representation of the screen, so you need to test your scenario prior to using this component.

Improvement – FIXGRID-PDF-Export follows grouping of header columns

The feature to group header columns is now also available for the PDF generation – and other output formats.

For other output formats (XML, csv, ...) grouped columns are indicated with the String “.%.”. Example:

"All 1";".%.";".%.";".%.";".%.";"All 2";".%."

"Left group";".%.";"Middle Group";".%.";".%.";"Right group";".%."

"Test1";"Test2";"Test3";"Test4";"Test5";"Test6";"Test7"

 

"Test1 0";"Test2 0";"Test3 0";"Test4 0";"Test5 0";"Test6 0";"Test7 0"

"Test1 1";"Test2 1";"Test3 1";"Test4 1";"Test5 1";"Test6 1";"Test7 1"

 

The export follows the current display of the grid: if the user has re-arranged/resized columns then the export follows correspondingly.

Improvement, CCEE – New SQL dialect DIALECT_ORACLE_CASESENSITIVE

The CCEE-addon-library now has a new dialect definition: DIALECT_ORACLE_CASESENSITIVE.

Why? By default Oracle transfers any table and column name into uppercase characters. The statements...

SELECT * from TestTable

SELECT * from TESTTABLE

SELECT * from testtable

 

...all are automatically transferred into:

SELECT * from TESTTABLE

 

But: you may have done all table definitions with explicitly defining case sensitive names, by explicitly using the “-character. In this case you need to strictly keep the “-character also when e.g. selecting:

SELECT * from “TestTable”

 

When using dialog ORACLE_CASESENSITIVE then all table and column names are put into corresponding “-characters.

Update 20210412

Improvement – PageBeanComponents in Layout Editor

A Page Bean Component may define initialization parameters within its
*.config file. These parameters can be defined within the layout definition by setting the attribute PAGEBEANINITDATA. The value is a semicolon separated list: “name:value;name:value;...”.

In the Layout Editor the attribute now is shown in more detail when selecting a page bean component, so that you can directly view and edit the parameters.

At runtime the parameters are passed into the method...

    public void initializePageBean(Map<String, String> initData)

    {
       super.initializePageBean(initData);
       ...

        ...

    }

 

Bug Fix – Positioning of popup dialogs directly at start-up sometimes not correct

When opening a popup dialog directly as first activity of starting an application then it could happen that the dialog was sometimes not correctly positioned (e.g. in the center of the screen). Background: there is a certain latency for reacting on screen size changes – if the response from the server was faster than this latency, then the base sizing was not yet done executed...

Improvement – http/https protocol in tools

You now can define that the application that you develop directly runs using https at development point of time. There is a corresponding configuration inside the project-definition:

Default is http, of course...

Improvement – Selection of style variables in Style Editor

In the style editor the use of variables is a fundament of defining styles in a flexible, adapt-able way. You now can select variable names directly from any field input:

Update 20210406

Improvement – Key variants dialog

The new feature that was introduced one week ago now supports the input of “strange” characters via keyboard: below each character-button there is a number – after keying in the number, the character will be added to the field text:

Improvement – PageBeanComponents in Layout Editor

If a page bean components defines exit areas (in which the user can place own layout) then the exit areas are directly define-able via the right mouse button popup within the tree of controls:

Just to remember: inside a Page Bean (Component) you can define PARENTEXIT-areas – which allow the using dialog to place own content into the corresponding area. Each area has a certain id (EXITID) – which needs to be referenced by the using dialog.

Bug Fix – Unmotivated scrolling in SCROLLPANE-SCALEPANE arrangement

When placing a SCALEPANE inside a SCROLLPANE then operations inside the SCALEPANE sometimes caused some “unmotivated” scrolling of the SCROLLPANE content.

Release 6.0 – Q1 2021

Update 20210331

Improvement – Key variants dialog

The FIELD component now provides the possibility to open up a dialog popup, in which the user can select key variants:

The dialog is sensitive to the character that is currently input in the field. The configuration is done by a server side XML definition that can be updated by your own definition.

Improvement – Client-Id Cookie Management

The definition of the Cookie-settings for the client-id were updated. You now may define in system.xml:

<system>

    ...
   <clientidmanagement

        ...

             cookiesecure="auto"

        ...

    />

    ...
</system>

 

In this case the secure flag will be set to “true” if running in an https-environment. And it will be set to “false” otherwise.

The facade-class HttpSessionAccess was extended as part of this development and now provides the following method:

HttpSessionAccess.checkIfCurrentSessionWasStartedByHttps();

Bug Fix – Client-Id Cookie Management

The expiration time for the Cookie was calculated in a wrong way, so that the Cookie typically expired after some days. Now the default expiration time is calculated correctly as 10.000 days.

Improvement – ThreadData now contains currently processed expression

Every time a request from the client is processed on serve side, a ThreadData instance is attached to the thread processing the request. This ThreadData instance now provides a new method:

public String getCurrentlyProcessedExpression() {...}

 

This method return the expression that is currently “executed” by the CC-environment when setting, getting properties or when invoking methods.

The passing of expressions into the ThreadData instance needs to be explicitly switched on in the system.xml configuration file:

<system>

    ...

    <threadcontext storecurrentexpression="true"/>

    ...

</system>

 

There is a minimal performance overhead for passing the expressions (one map-get per expression).

Bug Fix – Focus management in RADIOBUTTONGROUP

Tabbing through the radio button items of a RADIOBUTTONGROUP was not possible...

Update 20210323

Bug Fix – FIXGRID-ROWDROPRECEIVE/ROWDRAGSEND: setting back to null

When dynamically assigning a value to both of the attributes via expressions, then a null-value was not transferred, once a non-null value was passed.

Improvement – TABBEDPANE/TABBEDLINECONTAINER-TABBEDLINERENDERED

By setting the new attribute you can avoid the rendering of the header line. This may be useful in situations in which only one tab is left and you do not want to show the headline tab area for this tab.

Improvement – Page Bean Component Management

We are just working on improvements in the area of page bean components. Some longer description will follow on short term. Short info on issues contained in this update:

    @Override

    public void initializePageBean(Map<String, String> initData)

    {

        super.initializePageBean(initData);
       ...

    }

 

    @Override

    public void initializePageBeanConfigItems(List<PageBeanConfigItem> configItems)

    {

        super.initializePageBeanConfigItems(configItems);

        for (PageBeanConfigItem ci: configItems)

        {
           ...

        }

    }

    

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<pageBeanConfig>

    <columnComponent>true</columnComponent>

    <paramClass>org.eclnt.ccaddons.pbc.util.datagridview.Configuration</paramClass>

    <subItem>

        <configtype>column</configtype>

        <paramClass>org.eclnt.ccaddons.pbc.util.datagridview.ConfigurationColumn</paramClass>

    </subItem>

</pageBeanConfig>

 

Improvement – SCALEPANE – keeping center position when located in SCROLLPANE

When positioning a SCALEPANE within a SCROLLPANE then by default the scroll position changes when updating the scale. You now can define the SCALEPANE to be re-positioned within the SCROLLPANE after scale operations, so that the center of the visible area is kept stable.

Update 20210315

Improvement – LABELTEXT for CHECKBOX, RADIOBUTTONGROUP, TEXTPANE, LABEL

Up to now the attribute LABELTEXT was only available for FIELD* components. Now it is available for a couple of additional components, too:

Improvement – RADIOBUTTONGROUP

So far, each RADIOBUTTON was an individual component – several RADIOBUTTON instances were “linked” by defining a GROUP-value which was shared.

Now there is an addition a component RADIOBUTTONGROUPD which is based on the normal RADIOBUTTON, of course. The component receives valid values (same as COMBOBOX) and renders one RADIOBUTTON per value.

Improvement – CODEEDITOR-EDITORPARAMS

The CODEEDITOR component is internally based on the ACE-editor (https://github.com/ajaxorg/ace). The ACE-editor provides a couple of properties, directly on editor-level and on editor-session level. You now can define how to set these parameter by using the attribute EDITORPARAMS.

Example: by setting EDITORPARAMS to...

session/useWrapMode:true;theme:ace-builds-master/theme/tomorrow_night.css

 

...you define, that:

Please pay attention: blank spaces in the parameter-string are meaningful!

Bug Fix – CODEEDITOR-FLUSH/FLUSHTIMER

The flushing did not work for the CODEEDITOR component – now it does. Please take care: the flushing is (as with SIMPLEHTMLEDITOR) always based on a timer-based flushing.

Improvement – LONGTEXTFIELD-LAZYLOADING

The LONGTEXTFIELD can be loaded with some “short text” at the beginning. Once the opens the long text dialog popup, then the text is lazily loaded from the server. Please check the example in the demo workplace (Components > Straight Controls > Field Control > Long Text Popup – lazy loading).

Bug Fix – Connected FIXGRID instances, clearing items

If connecting to FIXGRID instances and calling the “getItems().clear()” method with one o the grids, then the selected items were not correctly reset. Or better: they were only reset correctly on one of the grid instances – but not in both instances.

Update 20210310

Improvement – Adapter Binding

The adapter binding still is in the focus of current developments! It is just a smart way to efficiently implement typical form scenarios, in which data input and data validation plays a major role.

IComponentAdapterBinding2

The interface “IComponentAdapterBinding” was extended to interface “IComponentAdapterBinding2”. The new method that was added is:

public interface IComponentAdapterBinding2

    extends IComponentAdapterBinding

{

    /**

     * This method is called when the component processing first time "touches"

     * the component adapter binding instance. By passing the component, the

     * adapter binding can directly react and adapt its behavior.

     * <br><br>

     * Example the edit-able value behind a component is kept in different

     * attributes, dependent on the control (FIELD-TEXT, COMBOFIELD-VALUE,

     * CHECKBOX-SELECTED).

     */

    public void initComponent(IBaseComponent component);

}

 

This is a quite significant improvement because now the using component is registering in the adapter binding, so that this knows if it is e.g. used in a FIELD-component or a COMBOBOX-component.

Pay attention: the registration of the component is done during the render-phase of the request-processing - because this is the point of time when the component-world is built up.

LazyLoadingMap<...>

Adapter instances can – as any other instances – be arranged in Maps. Expressions can access the Map-instance so that a “.”-navigation in the Map-instance is resolved by a “get/put”-call. Example: “#{d.TestUI.adapters.firstName}” - where “adapters” is a Map-instance internally holding adapter-instances.

In many scenarios it is useful to create the data in the map at this point of time, when it is requested – and not earlier. This makes extreme sense when dealing with adapters.

You could implement such “lazy-loading-map” on your own by just extending e.g. HashMap and overriding the get-method. - We now added a default implementation:

public class LazyLoadingMap<VALUECLASS extends Object>

    extends HashMap<String,VALUECLASS>

{

    public interface ILazyLoader<BEANCLASS>

    {

        public BEANCLASS lazyLoad(String key);

    }

 

    public LazyLoadingMap()

    {

        ...

    }

 

    public LazyLoadingMap(ILazyLoader<VALUECLASS> loader)

    {

        ...

    }

 

    public void setLoader(ILazyLoader<VALUECLASS> loader) { m_loader = loader; }

    public ILazyLoader<VALUECLASS> getLoader() { return m_loader; }

 

    ...

}

 

A typical use-case in the are of adapters looks like:

    LazyLoadingMap<PropertyAdapter> m_adapters = new

        LazyLoadingMap<PropertyAdapter>();

    

    public Democabreflection4(IWorkpageDispatcher workpageDispatcher)

    {

        m_adapters.setLoader(new ILazyLoader<PropertyAdapter>()

        {

            @Override

            public PropertyAdapter lazyLoad(String key)

            {

                return new PropertyAdapter(Democabreflection4.this,key);

            }

        });
       ...

 

Adapter Binding in Layout Editor

The adapter binding issues are now positioned in a more prominent way within the Layout Editor:

They are not hidden in the “All”-attributes section but have moved to the “Important”-section.

Info labels variants also for TEXTPANE

The style variants “ccinfolabel*” are now available for TEXTPANE components as well:

Touch popup for keying in “strange characters”

Touch keyboards can now be opened up by defining some TOUCHOPENHOTKEY definition with FIELD and FORMATTEDFIELD components.

You can use touch popups for providing the user special keys that are rarely required and that are not reach-able via normal, “real” keyboards.

Update 20210301

Improvement – Annotation-based Adapter Binding

Instead of implementing component attribute's “one by one” and binding each attribute individually to some expression you may use the “Adapter Binding” concept. In this case the whole component (e.g. a FIELD) binds to a Java-object implement interface “IComponentAdapterBinding” - which then tells which component attributes are implemented and which delivers the values correspondingly.

There are now two nice implementations of “IComponentAdapterBinding” that use annotations for indicating how attributes are implemented.

Please take a look into the Demo Workplace (“News”) in order to see how this concept is used to simplify form processing:

We believe taking a look into this aspect is a “must!”. ;-) At least for these ones of you that operate with data input forms.

Update – Style update for “error()” and “mandatory()”

Due to the “big” height of fields with floating title text, the error/mandatory indicator – which was positioned on the top right before – now was updated:

Both indicators were moved to the bottom right so that they have a clear context to the input line. The error indicator comes with some red-shaded background.

The style changes were done in style “default202006risc” only, so that all the previous styles are not affected. Of course you can overrule the definitions within your own style!

Bug Fix – AUTOCOMPLETE with IAutoCompletProvider3 implementation

...did not work but produced mal-formed XML which was sent to the client component.

Improvement – Page Bean Component “CCDataGridView”

We cleaned up some inner parts so that adding own header-, footer-, column-components in your own extension is easily possible.

Improvement – Page Bean Component “CCWorkplaceFunctions”

If calling “setWithMarkingOpenedNodes(true)” then the nodes that are currently opened as work-pages are marked with bold font.

Bug Fix – Style Editor implicitly copied “@...@” vairables into “Style Values”

Once upon a time it was required that “@...@” variables in the CSS section of the style editor also needed to be available as “Style Values” in the style-variant section. Well, the runtime does not need this anymore since a couple of months, but the editor was still doing it – up to now.

Update 20210222

Improvement – Tooling: Style Editor

In the Style Editor you now immediately see color values of variables, risc-values and style-values:

In addition you see in the CSS area a new icon “cross reference”:

When clicking the icon then a dialog shows up showing the usage of the corresponding element within the current style definition:

...and: control variants can now be filtered – both by control name and by variant name:

Improvement – IFRAMEINCLUDE, SUBPAGE: explicit passing of HTML-attributes for iframe

You now can explicitly set HTML-attributes for the iframe that is implicitly built up within the IFRAMEINCLUDE and the SUBPAGE component.

<t:iframeinclude iframeattributes="sandbox:allow-popups;allow:camera\x3Bmicrophone" width="100%" />

 

The value is a string following the format “name1:value1;name2:value2”. Use “\x3B” for semicolons inside a value definition.

Improvement – FIXGRID: reset persistent data (+ grid)

There is a new method with FIXGRIDBinding:

FIXGRIDBinding.resetPersistentData()

 

This method removes the persisted data (column sequence, column widths) and resets the grid rendering to its original status.

Bug Fix – Focus in grid when scrolling via scroll icons

When scrolling the grid content via the scroll at the top or the bottom of the grid, then the focus moved from the grid to the button and from the button to the grid with each click. Now the focus is kept stable within the grid.

Bug Fix – TABBEDLINECONTAINER lost its images when updating one of the contained tab-texts

When updating a text in a TABBEDLINECONTAINERTAB, then all images were removed inside the corresponding TABBEDLINECONTAINER.

Bug Fix – StreamStoreJDBC – null values not properly managed

When writing a streams with content null then the stream was not properly managed. Result: errors when updating the stream. - The error only occurred with the JDBC variant of the stream store.

Update 20210215

Bug Fix – PASSWORD: flush executed internally with every second key

If having defined the PASSWORD component with FLUSH=”true” then a flush-event was triggered with every second key that was pressed by the user. The bug was added with version 20201207. If using the PASSWORD field with encryption then this of course is a blocker!

Improvement – Mouse-over and mouse-out events

You now can “officially” react on mouse-over and mouse-out events. Before you could do so “in-officially” by implementing a serer side tooltip. The client can tell your component (e.g. PANE) that the user has moved the mouse cursor on top of the component – so there is a certain latency involved in order to send too many events to the server-side. Once the “mouse-over” was sent then the component also sends a “mouse-out” when the user moves the cursor to some different component.

Please check the demo in the demo-workplace (“News” section).

Improvement – SIZETRANSFER without latency

The SIZETRANSFER component can be added to e.g PANEs and transfers the actual size of the PANE to the server side. If you define FLUSH=”true” then the component waits for a certain duration to check if the size is not changing anymore – and then flushes the size. In certain scenarios – especially when using size-categories – it makes sense to fine-control this latency, e.g. by setting it to “0”.

We added an example to the demo workplace (“News”-section), which demonstrates the flexible use of the SIZETRANSFER: dependent on the current size, icons are drawn with different width/height.

Improvement – Light weight “side popups”

It is now possible to position and stick popups to the top/right/bottom/left side of the browser content area.

This can be done with any popup dialog, but the intention is to use this positioning for light weight toolbar and/or info popups. Please check the demo in the demo workplace (“News” section).

Bug Fix – FORMATTEDFIELD-WITHUPDATEDURINGINPUT not working properly for certain country localizations

In certain client localizations the automatic update of e.g. decimal numbers was not working properly and produced numbers which afterwards were not accepted.

Improvement – Status bar, once again

With 20210201 we changed the new status bar so that it is rendered more light weight and so that it shrinks after a certain while. The feed back on this is: the light weight rendering is nice... - ...the shrinking is “too much” and causes too much noise in the bottom area of the screen.

So we kept the light-weight rendering and updated this to be even a bit more light-weight – but removed the automated shrinking:

The status bar is now animated when it is show – it is sliding into the screen from the bottom side.

Thanks a lot to all of you who did send feed back to us!

Improvement – Page bean component CCDataGridView with extended API

The page bean component that renders a grid of data with possibility to filter the content in the head line was extended and now provides many more configuration options and many more “IListeners-exits” so that you can directly influence the filtering.

 

Update 20210208

Improvement – New possibilities to position popup dialogs

You now can position dialog at the top/bottom/left/right of the screen. Use methods:

Modal/ModelessPopup.setLeftTopReferenceScreenLeft(...)

Modal/ModelessPopup.setLeftTopReferenceScreenRight(...);

Modal/ModelessPopup.setLeftTopReferenceScreenBottom(...);

Modal/ModelessPopup.setLeftTopReferenceScreenTop(...);

 

There's one boolean parameter “sticky”: if defining “true” then the dialog will stick to its position when the user resizes the screen. Example: calling “setLeftTopReferenceScreenRight(true)” will open the dialog on the right side and then automatically move when the user updates the browser size.

What we showed with “big dialogs” in this example can also be done with small ones, which e.g. only are “mini-info-areas” that are shown at a certain side of the screen.

Improvement – Lightweight Pivot Page Bean Component

The lightweight Pivot Page Bean Component “CCSimplePivot” was functionally extended and now offers many more APIs to influence the rendering and to react on events.

Please check the demo in the “News” section of the demo workplace:

Bug Fix – NullPointerException below HotDeployManager

When using the “${latest}” feature in the definition of hot deployment directories, then it could happen that a NullPointerException was thrown if no directory that is referenced existed.

Improvement – CLOCK functions

The CLOCK component has some new features:

Improvement – Start up performance

There was one part of the start up procedure (the initialization of the “WebAppDirectoryManager”) which cost quite some time (around 10 seconds) in certain scenarios. It used to read the whole file structure of the web application via interfaces of the ServletContext. Now the directories are only read step by step and only if required.

Improvement – Log configuration SLF4J

There is a new parameter “slf4jplaintext” in logging.xml by which you can define that logging output that is sent to the SLF4J processing is HTML-decoded. By default log output is encoded for security reasons.

Bug Fix – Modal/ModelessPopup.setCloseonmouseexit(..)

...was only working if having set “.setCloseonclickoutside(...)” was called in addition.

Update 20210201

Improvement – STATUSBARASPOPUP at bottom and with automated shrinking

The component now moves the status bar to the very bottom of the screen:

After a defined time (default 2500 ms) the status bar will shrink to some reduced size:

The duration until a shrinking is executed can be customized either by style or by directly assigning the value through the attribute STATUSBARASPOPUP-AUTOSHRINKDURATION.

Improvement – Tree with drawing of vertical lines

By defining the new attribute TREENODE-WITHLINEDRAWING as “true”, the tree will render vertical lines at the left of the nodes:

Improvement – Addons: Page Bean Component “Simple Wizard”

The addons-package now contains a new Page Bean Component “CCSimpleWizard” - which provides some simple Wizard processing around certain Wizard-steps:

Improvement – FIXGRID with click by click selection

When defining a FIXGRID to provide multiple selections (MULTSELECT “true”) and to do selections click by click (MULTISELECTMODE “1”), then the behavior when doing shift-select was different than the behavior with normal grids. Now the shift-select behavior is the same.

Update 20210125

Improvement – MENUPOSITION for BUTTONMENU and BUTTONPOPUP

You now can explicitly define in which direction a menu/popup will open:

The definition is done by using the new attribute MENUPOSITION, the values are “bottom” (default), “top” and “side”.

Improvement – Automatic adding of status bar can be switched off

If a dialog does not have an explicit status bar (i.e. ROWSTATUSBAR or STATUSBARPOPUP is explicit part of layout definitions) then a STATUSBARASPOPUP instance is automatically created for the dialog.

You now can switch off this behavior in the system.xml:

<system>

     ...

     <statusbar autoadd="true"/>

     ...

</system>

 

Bug Fix – Mini-JSF-implementation – Problem with RENDERED inside GRIDCOL

When using the mini JSF implementation of CaptainCasa then the RENDERED attribute was sometimes not properly supported if used inside the cell component of a GRIDCOL of a grid.

Bug Fix – HTML returned by “.risc” page not well-formed

Uuuh – some “<meta...>”-definitions were not properly closed...

“Internal” - Create page layout dump with “ctrl-alt-z”

In some debugging situations it is useful to see the complete layout XML of the dialog that is currently displayed. This is done by pressing “ctrl-alt-z”: then the dump will be output to the JavaScript log.

(If you have defined “ctrl-alt-z” as hotkey of your application: the dump function is executed in parallel and will not disturb your own processing.)

Bug Fix – Attribute WITHFOCUSEVENT, “focusgained” not supported

By using attribute WITHFOCUSEVENT you can notify the server about the user having focused a certain component. The value “focusgained” was not properly supported up to now.

(If you do not know this attribute yet: the notification of being focused is not immediately if the user moves the focus into the corresponding component – but only is done if the user stays inside the component for a certain while.)

Bug Fix – MAXLENGTH and MAXLENGTHAUTOTAB with numbers

When using MAXLENGTH with a FORMATTEDFIELD which is defined with a number format, then the separators of the number are not counted. Example: if defining “4” as MAXLENGTH with an integer field, then the user can input “1234” but also “1.234”.

At same time you can define that the tab is automatically moved into the next component when having reached the maximum length. This mechanism did not consider the separator characters up to now - and the automatic tab-execution was triggered too early.

Release 6.0 – Q4 2020

Update 20210118

Improvement – Easier way to start recording of http-traffic

For analysis purposes there is a function to record all http-traffic between client and server – in order to replay it afterwards without using an actual application server.

So far you had to activate this function by some system.xml (and before: web.xml) configuration. Now you can directly invoke by a Java system parameter.

set JAVA_OPTS= ... -Dcc.responseLoggerActive=true ...

 

catalina ... run

 

Improvement – Client-Id management

The facade class “HttpSessionAccess” now contains a method to directly set the client-id of the current client:

public static void setCurrentClientId(String clientId) ...

 

The client-id is an id that can be assigned to a client instance. The life-cycle of the id is longer than the life-cycle of the current session. It is internally stored as cookie.

Bug Fix – Missing actionListener in SIMPLEHTMLEDITOR

The attribute “actionListener” was not available when editing a SIMPLEHTMLEDITOR instance in the Layout Editor.

Bug Fix – Localization for Swedish language

The translation files were kept with a wrong language id. Now it is “sv”.

Bug Fix – Access to http-session after invalidation

When invalidating an http-session via “session.invalidate()” during the invoke-phase of the request-processing then there were CaptainCasa functions which directly requested a new session from the servlet container. This was no problem at all, because the new session was the one that was immediately used afterwards, but caused problems when using Tomcat parallel deployment – in which the new session was immediately bound to the current server's version context. The new session was not associated with a new context.

Update 20210112

Improvement – Expression check for invalid characters now configure-able

Expressions are checked if they contain invalid characters. By default CaptainCasa does not allow expressions containing brackets - “(“ and “)” - because expressions can also invoke methods – which is not allowed both because it is not properly supported and because it may mean some risk from security point of view.

The characters that are indicators for invalid expressions can now be explicitly defined in elcntjsfserver/system.xml:

...

    <invalidexpressiondetection invalidcharacters="()"/>

...

 

Example: if you want to explicitly allow brackets then define:

...

    <invalidexpressiondetection invalidcharacters=""/>

...

 

Update 20210105

Improvement – Annotation based Spring context management

In the ccee-Spring-addon package we simplified the management of Spring contexts that use annotation based configuration. The documentation was updated as well. - Thanks to a friendly Austrian community member who triggered and supported us here!

Improvement – Tomcat webapp-commands from CaptainCasa toolset

There is a simple administration tool for managing the Tomcat status of a project's web application:

The tool shows the current started/stopped status and allows to explicitly start/ stop/ restart the web application inside Tomcat.

In addition there was a problem so far during “Reload”: if the web application was not started so far, then the reload's internal triggering of a restart of a web application did fail. Now the “Start” is automatically triggered.

Improvement – Little style update in defaul202006risc

All areas that typically contain whole dialogs are not drawn with rounded corners:

These areas are:

Update 20201228 > 20201229

20201229 – Bug Fix – COMBOBOX did not open when clicking icon

Due to the change in the COMBOFIELD-icon with 20201228, COMBOBOX instances did not show their value popup anymore when clicking onto the icon of the COMBOBOX. Because this is a severe bug, we published 20201229. Please do not use 20201228 anymore!

Improvement – Bypass Chrome problem: preview sometimes not rendered in Layout Editor

We already reported in the forum about a problem with Chrome – in which SUBPAGE content was not rendered: the DOM tree was built up correctly, elements are positioned, even the mouse-over effects and the events (e.g. mouse-clicks, keyboard input) are correctly processed – but the result is not rendered. After resizing the screen the rendering immediately started.

The problem was visible in the Layout Editor in which the SUBPAGE component is used.

We now found a way to bypass this problem (basically we cause a resizing after setting the content URL...) and things seem to be OK with this bypass.

Improvement – ROWFOOTER as counter part to ROWHEADER

From 2007 on there is a ROWHEADER component – in which you e.g. place buttons or menus. There never has been a footer component, which e.g. is useful for arranging buttons in a popup dialog. Now there is the ROWFOOTER component – technically the same as the ROWHEADER, but using different style classes, so that the footer can be style in a different way than the header.

Bug Fix – COMBOFIELD-icon not processed if width too wide

If a COMBOFIELD's width was bigger than the scroll area into which a COMBOFIELD was placed, then clicking the COMBOFIELD's icon causes the scroll area to move to the begin of the COMBOFIELD – so that the click was not received on the icon anymore. Consequence: clicking the icon did not open the corresponding valid-values-dialog.

(The situation occurred very rarely - because having COMBOFIELD instances, which are wider than e.g. the current screen size, is not very typical...)

Update 20201222

Bug Fix – Problem when implementing http-session listeners and COOKIE-based session tracking

When implementing some own http-session listener and when running CaptainCasa with COOKIE-based session tracking then it could happen that the cleaning up of the http session in the http-session listener was still going on while new usages of the session within the same http-session were built up. Consequence: the new usages were referencing an http-session which was invalidated already – and the user received some message about a session timeout.

There were two scenarios, in which such timeouts were registered:

The result of our “research” is, that our approach to invalidate the http-session after all CaptainCasa usages are removed is/was not correct. We must not invalidate the session on our owns, but need to wait for the http-session-timeout of the servlet container. We made sure that each usage of the http-session properly is removed the session when the usage is closed.

Update 20201221

Improvement – Progress message output during server processing

It is now “super-simple” to ouput progress information during the processing of long-lasting server-side operations:

The only thing you have to do is: call a Java-API – the progress information will be forwarded to the client screen:

BlockerInfo.sendProgressToClient(text,percentage);

 

Internally a web socket connection is built up by the client to the server which is internally used to transfer the information. This connection is built up automatically – you do not have to do anything.

This drastically reduces the effort for passing messages to the client: before you had to outsource the application processing in some own thread to free up the UI-request-response-thread as fast as possible.

Please check the demo in the “News” section of the demo workplace.

(In the system.xml you can switch off this creation of a web socket connection, please check the section “blockerinfo” in the system.xml_template. Of course then the API will not be functional anymore.)

Improvement – Code Editor

We added the ACE-editor (https://ace.c9.io/) to our control set: there is the new component CODEEDITOR which is able to edit structured text (XML, Java, Javascript and many, many more formats).

Please check the demo in the “News” section of the demo workplace.

Update 20201217

Improvement – Christmas present?

Hmmm – where is it?

...join today's community session at 3pm (German time) and you will find out! ;-)

Bug Fix – Maven Spring-webapp project archetype

In the web.xml the registration of the Spring context listener was not contained:

  <!-- Spring startup -->

  <context-param>

      <param-name>contextConfigLocation</param-name>

      <param-value>classpath:spring_context_webapplication.xml</param-value>

  </context-param>

  <listener>

      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

  </listener>

 

Bug Fix – Style problem with “riscicon_nofill”

...seldomly used (because an icon has transparent background anyway), but: the definition was wrong...

Improvement – Tools: bean browser reads project classes “nicer”

The analysis of project classes now directly works with the directories that are defined in the project. It is now possible to have the “Dispatcher”-class being in a completely different project than the managed bean classes. (At runtime this was always possible, of course – this is/was just a tool issue.)

Improvement – SIMPLEHTMLEDITOR (both CKEditor and Quill)

The editor “always” updated the text when it was passed in and passed out... This meant: without the user having changed any text, the text was sent as updated. We now check if there was really was a user update before sending changes.

Improvement – CCFilteredPickList

...ordering is now: selected items are added to the end of the selection!

Update 20201214

Improvement – Clean up in session listeners

We did some clean up in the area of session listeners:

The corresponding functions in HttpSessionAccess are:

addGlobalHttpSessionListener(...)

removeGlobalHttpSessionListener(...)

 

addHttpSessionCloseReactorForCurrentSession(...)

removeHttpSessionCloseReactorForCurrentSession(...)

 

addGlobalDialogSessionListener(...)
removeGlobalDialogSessionListener(...)

 

addDialogSessionClosedReactorForCurrentSession(...)

removeDialogSessionClosedReactorForCurrentSession(...)

 

The existing functions (e.g. through HttpListenerDelegator) still exist and still are useable – of course we recommend to switch to the new ones.

Improvement – Page Beans with parent exit area: EXITID

Page beans can open up parent areas using the tag PARENTEXIT. So far the using page bean had to define corresponding areas – the sequence of the areas in the using page bean had to exactly match the sequence of areas in the providing page bean.

Now each page bean exit area that is provided has an explicit id, which is defined in the attribute PARENTEXIT-EXITID. The using page bean must define the mapping id in the PANE component that provides the content.

So the sequence-based management was replaces with an EXITID-based management, which makes things much clearer when it comes to adding additional areas.

Improvement – Addons: CCMasterDetail

The concept of parent exit areas is used within a nice page bean component (addon-package) which provides the management of a master-detail area. Please check the demo (Addons => Page Bean Components => Master Detail).

Improvement – Localization added for 80 additional countries

Based on information we found in some GIT projets (date format by country) and Wikipedia (decimal format by country) we now provide the client localization definitions for 80 additional countries...

Improvement – Page Bean Extension Concept

The extension of page beans by defining a “.mod.xml” file is now available both for normal page beans and for page bean components. Before it was only available for page bean components.

Improvement – CCFilteredPickList with keeping the selection order

The page bean component CCFilteredPickList now can keep the selection order. Set the corresponding property “itemOrderingBySelection” to true. In addition there is a new property to control if to render a filter field or not (“withFilterField”).

Bug Fix – Image reduction during upload

The image reduction for JPEG files was internally converting to PNG files – resulting in much bigger images then you were used to. This bug was introduced with 20200817.

Update 20201210

We want to make sure that all issues shown during today's Community Meeting are available for download – that's the reason for providing some “official interim update”...

Improvement – HTML-Editors (CKEditor, Quill) text value, if no change

When passing some HTML text into the SIMPLEHTMLEDITOR, then the text was “always” sent back to the server with changes – because the HTML that you pass into the editors is always converted to HTML elements within the editors and then converted back to HTML – which is very like to create some mini-change...

Now we detect, if the text really was changed in the editor - and do not pass back some changed text, if there was no user action.

Improvement – Style “enrichment”

So far you could create own styles, extending existing styles. In the own styles all inherited artifacts were taken over – and you could create own artifacts (e.g. own style classes) in addition.

Now you can “enrich” exisiting styles by adding style extensions into the resources, that are loaded by classloader.

Example: you can enrich the “defaultrisc” and “defaultlightbluerisc” style by adding the following resources into your code:

eclntjsfser

    styleextensions

        defaultrisc

            riscstyle.xml

            style.xml

        defaullightbluerisc

            riscstyle_defaultlightblue.xml

            style.xml

        

Please pay attention:

Each file contains a fragment of definitions to be added to the style. Example:

eclntjsfserver.stylextensions.defaultrisc.riscstyle.xml:

 

<stylesheet>

    <var c="Demo" n="@demoValue1@" v="Value 1"/>

    <var c="Demo" n="@demoValue2@" v="Value 2"/>

    

    <class n="demobutton" extends="riscbutton">

            <var n="@buttonBackground@" v="#FFE9E9"/>

            <var n="@buttonInsets@" v="10 10 10 10"/>

    </class>

</stylesheet>

 

 

eclntjsfserver.stylextensions.defaultrisc.style.xml:

<style>

    <tag name="button" variant="demobutton">

        <set attribute="styleseq" value="demobutton"/>

    </tag>

</style>

 

When reading a style then CaptainCasa will check in the current classloader for style extensions – and will concatenate these extension to form one merged style.

What is the advantage? If splitting up your project into several CaptainCasa projects, then now each project can throw in its own xml-extensions. Each project only defines these style extensions that are required for the components/page beans of this project.

Improvement – New Page Bean Component “CCMasterDetail”

This page bean component (pbc-addons) demonstrates how to build page beans with contained areas – in order to build “pattern components”.

Improvement – Editor tool “Tools class path”

You now can directly edit the class path that is used within the Bean Browser of the toolset:

Improvement – Client localization for Italy

Thanks to a community member for having sent the translation of client literals into the Italian language to us! Language “it” and country “IT” are now part of the default.

Update 20201207

Bug Fix – Reading configuration files from “class loader”

It is possible to place configuration files (/eclntjsfserver/config/*.xml) into the “Source” part of your project. In this case they are read at runtime by class loader - and are not expected to be part of the web content.

There was a bug when accessing these files through class loader – the files were only accessed if there was a corresponding file in the web content as well...

Improvement – PASSWORD: input is cleared when user starts input

Passwords that are already set are NEVER sent from the server to the client. Instead some dummy password is transferred – and rendered as “***********” in the password field. Whenever this dummy password is shown and the user starts keying a new password, the dummy password now is cleared – so that the user never e.g. can append characters to the dummy password.

Improvement – Cookie “eclnt-id”

For managing a fix id that is identifying a client, you may use the function “HttpSessionAccess.getCurrentClientId()”. This one checks if there is already a Cookie that was sent from the client side containing the id, if not, it generates a UUID and sends this one back to the client.

This function already did exist, the new isse is, that you can set security parameters for this cookie. You either can use the API in HttpSessionAccess...

public static void initClientIdCookieParamHttpOnly(boolean httpOnly) ...

public static void initClientIdCookieParamSecure(boolean secure) ...     

public static void initClientIdCookieParamSameSite(String sameSite) ...

 

...or you may configure in system.xml:

...

    <clientidmanagement

            cookiesecure="false"

            cookiehttponly="true"

            cookiesamesite="Strict"/>

...

 

Bug Fix – CHARTJS did not refresh its content

When updating a chart for the CHARTJS component, it sometimes could happen that the content was not updated. This bug was “introduced” with 20201116.

Improvement – Border color of components when focused

It is now possible to “officially” define the border color of an element which is focused. The border color overrides the current border color (if set through style or directly set) and then is switching back to the original color when moving the focus to the next component.

The definition is done by defining a “risc-value” with the name “_borderColorFocus” in the corresponding style class definition. Example:

...

<class n="riscfieldcontainer">

    ...

    <risc n="_borderColorFocus" v="#800000"/>    

    ...

</class>

...

 

(Do not do this style change in the XML, but better use the style editor...!)

Bug Fix – Resolution of “complex” expressions

When concatenating strings via complex expressions (“#{d.xxx.yyy} Harry #{d.xxx.zzz}”) then it could happen that the expression delivered “true” as value when using the CaptainCasa mini-JSF implementation.

Please note: only certain “complex” expressions are supported! Check the demo workplace “General => General issues => Complex expressions” for details.

Update 20201130

Improvement – New status bar: STATUSBARASPOPUP

By default you use the ROWSTATUSBAR component – rendering a status bar, typically at the bottom of the out-most page of your application.

There is now competition! ;-) A new component STATUSBARASPOPUP can be used instead:

The new component (because it is not occupying any space in the layout...) is positioned in the top BEANPROCESSING component of the layout. When activated it opens up a message area at the bottom of the screen, that overlays any other component (including popup dialogs).

As with the ROWSTATUSBAR it can render multiple messages:

What are the advantages:

We also introduced, that the status bar message will be present for some minimum time (1.5 seconds). There are cases, in which a status bar message is shown – and immediately removed with the next round trip (e.g. status bar message on click – and a round trip initiated by a double-click). There is no flickering of the message anymore.

Improvement – Simplified OVERLAYAREA, new component OVERLAYAREABASEITEM

If defining OVERLAYAREA components, you typically have one area item which forms the “base layer” - occupying the whole space of the OVERLAYAREA and being positioned as area item behind all the other area items.

This area can now be defined by using the component OVERLAYAREABASEITEM:

OVERLAYAREA

    OVERLAYAREABASEITEM

        PANE
           ...

            ...

    OVERLAYAREAITEM X=20 Y=20

        BUTTON

    OVERLAYAREAITEM X=20 Y=40
       ...

Improvement – Hot Deployment triggered by trigger file also resets buffers

When a hot deployment is triggered by a trigger file (“/eclnthotdeploy/.cctrigger”) then the buffers are now reset as well. Background: because layouts may be kept in the code, they need to be reloaded after hot deployment.

Improvement – Toolset: project configuration

In addition to the “naked XML editor” for editing the project configuration there are now also helper dialogs. One helper dialog shows the directory and deploy configuration...

...another dialog shows the selection between “Web content” and “Source”-based resrouces:

Improvement – Popup attribute “alwaysOnTop”

With ModelessPopup-instances you now can set property “alawayOnTop” to true. As consequence the popup will always be shown on top of “everything”.

Improvement – Quill-HTML-Editor without external resources

Some of the resources within the Quill-HTML-Editor were referenced from outside URLs – as consequence the editor was only use-able in scenarios in which the client was connected into the Internet.

Update 20201123

Improvement – Masked FIELD input

You now can define input masks for FIELD components:

Use the new attribute INPUTMASK to define a mask, e.g. “__/__/____”. There is a demo in the “News”-section of the demo workplace.

Improvement – Number input in FORMATTEDFIELD

The input of numbers with automatic adjustment of separators was improved:

Improvement – Size animation of “small popups”

Small popups – like the ones being shown for menus, combo boxes, undecorated application popups, message boxes – are now animated.

Improvement – Comments during style definition

We added some comment sections to the UI for defining own styles. You can add comments for:

Improvement/Bug Fix – KEYBOARD scanner

The treatment of the SCANPOSTFIX was not correct, if the character of SCANPOSTFIX already occurred in the scanned value.

There is a new attribute SCANONLYONPREPOSTFIX. If set to “true” then a scanned value will only be accepted if the pre- and post-fix match.

Improvement – Own mini-JSF-implementation also usable for Swing/FX client

The own JSF implementation (we always repeat: this is not a general JSF implementation but one which is taylored to these aspects which are required by CaptainCasa!) now can also be used by the Swing and the FX client.

Bug Fix – Hot Deployment configuration, resolution of “${latest}”

In the deployment configuration there is the possibility to automatically choose the newest version of a directory by using “${latest}” - which do no fully work...

Bug Fix – Pivot (addons)

The sizer line on the top of the pivot grid was not in sync with the actual columns below when not building totals for certain levels.

Update 20201116

Improvement – FIXGRID with individual ROWHEIGHTs

Well, this is something we did not do for the last 13 years... - because its is not totally simple: allowing the definition of individual content row heights within the FIXGRID processing. The FIXGRID's inner processing is based on server-side data being scrolled through controls in the frontend – rather than scrolling the UI-area of the corresponding component. Reason: 100% flexibility of cell components and ...performance, both when it comes to exchanging data between the server and the client and when it comes to rendering the grid components.

Now we changed this... and size the components either to a defined row height (getRowHeight() in FIXGRIDItem) or to the actual size that the components require on client-side.

Please check the two demos in the demo workplace: “Grids & Trees => Flexible row heights => Row heights by content” and “... => For content rows – by server definition”.

When using the new features: please stay in contact with us in case of questions and/or problems.

Improvement – CLIENTCOOKIE security-related attributes

We added the following attributes to the CLIENTCOOKIE component:

The attributes are directly transferred into the corresponding cookie attributes.

To enable these functions we changed the CLIENTCOOKIE management internally: before it was as client-side component (accessing the cookie from JavaScript), not it is a pure server-side component (accessing the cookie through the servlet-API).

Information – jQuery librayr in client updated to 3.5.1

We ourselves do not require jQuery, but some function which we import in the area of text-area-caret management do. We updated from 3.4.1 to 3.5.1 in order to pass security audits requiring the newest version to be in place.

Improvement – “Classloader info dialogs” in toolset

The toolset of CaptainCasa accesses the server side classes in order to build the class hierarchy shown in the “Bean Browser”. For loading these classes it builds up an own classloader in which .class and .jar-files are collected following the project definition.

Sometimes it is unclear why a certain managed-bean-class is not shown in the Bean Browser – typically because a .jar file that is required for reflecting this class is not available. To help in these cases there are two dialogs that were added to the Bean Browser:

The one dialog shows in which way the directories of the project are scanned for *.class and *.jar files. The other one shows all the .class-directories and all the .jar files that are currently part of the class loader that is used for accessing the project's classes.

Bug Fix/Improvement – DOF framework (addons)

The filter dialog was showing the wrong inner components when using non-String data types.

In the valid-values-selection of fields the current value is now pre-selected and focused.

Bug Fix/Improvement – Pivot grids (addons)

The size of the first column was not properly calculated when n top-totals were shown.

You now can define an alignment for attributes that is used in the field-mode in the left hierarchy part of the pivot table.

Bug Fix – CCFilteredPickList – double-click selection possible despite disabled

When setting the control to disabled then it was still possible to select items by double-clicking.

Improvement – Attribute PASSWORD-BROWSERAUTOFILL

Browsers have functions to automatically propose value which the user already had input. This is especially used in the are of user name and password input. Unfortunately there are no standards to control this, so each browser implementation has its own strategy to check where and how to propose values.

We introduced for the PASSWORD a new attribute BROWSERAUTOFILL – and at least do our best to convince the browser to NOT automatically fill values into empty PASSWORD fields. In case of switching this attribute to “true”, the normal browser auto-fill of values is available.

Update 20201110

Bug Fix – Switch of client style at runtime did not work

When using the CaptainCasa minimal JSF implementation then the switching of styles at runtime was not working. The concrete API that did not work was:

HttpSessionAccess.setCurrentStyle(“...<styleName>...”);

 

(Setting the style via “?ccstyle=...” in the URL always worked.)

Improvement – PAINTAREALINITEM-TEXT now supported in RISC client

Setting the TEXT attribute in PAINTARAREALINEITEM was not supported so far – now it is:

Improvement – Editor: creation of default workplace content files

There are a couple of XML files that build a default workplace configuration. These files were part of the project when creating it through the CaptainCasa toolset – but they were not included in the project when going through Maven.

Now the files can be created in the configuration view of the CaptainCasa toolset:

Bug Fix – Scrolling in FIXGRID by keeping scroll icon pressed

When scrolling multiple lines by keeping the mouse pressed on top of a scroll icon...

...then it sometimes happened that the scrolling jumped over several lines instead of scrolling line by line.

Improvement – Web socket usage in Spring Boot

When using the Spring Boot project archetype and starting the application via Spring Boot then a stack trace appeared in the console, stating that websocket management is not available. We needed to adapt the SBApplication.java to overcome this problem and we had to add the websocket management to the dependencies of the pom.xml.

Existing projects: check the newest archetype's SBApplication.java and pom.xml – and adapt your project.

New projects: just use the up to date project archetype.

Improvement – Editor/Toolset available as Maven-artifact

The .war file of the editor is now available as Maven-artifact as well (war-packaged):

<dependency>

    <groupId>org.eclnt</groupId>

    <artifactId>eclntjsfserverRISC</artifactId>

    <version>${cc.version}</version>

</dependency>

 

The number of the version is the same as everywhere, e.g. “20201110”.

Update 20201103

Improvement – FIXGRIDWITHGROUPING also reacting on removing columns

This is the “raw” grid as defined in the layout definition:

After removing “Test1”, “Test4”, “Test6” the grid looks like:

You see: the column grouping structure was updated correspondingly. If in addition removing “Test7”, then the corresponding grouping will be removed as well:

There is nothing you have to do, the functions come automatically. The interface for e.g. storing columns the sequence and selection of columns is the same as currently used in the normal FIXGRID processing.

Update – New demo for dynamic POPUPMENU per grid row cell

Check the following demo...

...in order to see how to define a ROWPOPUPMENU that is dynamically created per cell – without having to define an individual POPUPMENU on cell component level.

Improvement – Integrating “other” classes/libraries in Hot Deployment

You now can configure the hot deployment to also access other directories than “/eclnthotdeploy/” during runtime. The configuration includes some simple definition of versions, so that you can exchange logic at runtime in a structured way (one directory per version).

Please check the Developer's Guide, chapter “Embedding “other” classes/libraries for Hot Deployment”.

Update – Improved demo on “Closing/Opening pages in workplace”

We updated the demo...

...so that there are clearer examples.

Improvement/Bug Fix – FIXGRID more robust against “wrong” definitions

Example: a grid with 10 columns, but a header of the grid only had 8 controls. This caused some bug before, now there are two empty columns in the header. Same with defining wrong COLSPAN definitions.

Improvement/Bug Fix – Format advice with FORMATTEDFIELD and Internet Explorer

We updated the management of format advises in the FORMATTEDFIELD (these are the little texts shown in the background, e.g. “##” for an integer field) with update 20200907: before they were always shown, now they were shown if the user focuses the field.

Unfortunately IE 10/11 are not able to show placeholder-values when being focused... So we updated the behavior for IE 10/11 – which is now the same as it was before 20200907. For all other browsers the behavior is not rolled back, but the new behavior is active – so that format advises are only shown when focusing a component.

Improvement – Define if to use “Web Content” and/or “Source” by project definition

In the project definition there are two new optional attributes:

<project

  ...

  resourcesinwebcontent=”true/false”

  resourcesinsource=”true/false”

  ...>

    ...

    ...

</project>

 

Dependent on the setting of “true” or “false” the corresponding tab-folders in the tools are visible or invisible. The default is:

When setting...

  resourcesinwebcontent=”false”

  resourcesinsource=”true”

 

...then the project overview looks like:

Bug Fix – Dynamic, content based column sizing in FIXGRID

There were still some bugs: all the grid columns were resized when explicitly resizing one grid column...

Improvement – Directory definitions in .ccproject allow to embed “..”

Up to now there was some central security “feature” which internally restricts our file access to file paths containing a “..”. As result you could not define directories in the project definition containing a “..”-term.

The “..”-term is quite useful when setting up Maven projects with several contained modules. In this case the main directory is holding one sub-directory per module. In one module there might be the CaptainCasa web application, in the other one implementation of pages and page logic...

Update 20201026

Improvement – system.xml control over resource loading

With 20201012_3 we started to deliver the CaptainCasa web resources as part of the eclntjsfserver.jar file – instead of delivering them in parallel as web content resources. What popped up in some of your scenarios: it is now much more difficult (which is good!) to change some CaptainCasa files: before, you just could change them directly on the file system (after installation you could do something in the “webcontentcc” directory...), now these files are “hidden” in a .jar file...

We now allow you to still update some CaptainCasa files – but now “force” you to do this explicitly and to do this clearly in front of CaptainCasa's deliverd resources. (Please never ever unzip the eclntjsfserver.jar and re-build it...!!!)

The way to go is:

<system>

    ...

    <resourceclassloaderaccess
       ...

          <webcontentfirst path="/eclnt/lib/*.jar"/>

          <webcontentfirst path="/eclnt/risc/ext_ckeditor/*"/>

        ...

    />

    ...

</system>

 

In the example you define that all libs (Swing-client...) below “/eclnt/lib/” are loaded from the web content – because you may have signed them with your own signature. - And you define that the whole ext_ckeditor sub-directory is managed by you.

Improvement – Mouse wheel simulation for touch devices

We now internally interpret two-fingers-gestures and make them available as mouse wheel events. You may use this behavior inside the SCALENPANE (if switching WITHUSERSCALING to “true”). We added an example in the demo workplace:

Improvement – SCALEPANE with attributes SCALEMIN, SCALEMAX

You now can define the minimum/maximum of scaling. Before it was hard coded to “0.25” (min) and “2.0” (max).

Improvement – Page Beans with contained area

This is some big improvement!... Up to now page beans always were defined as “last level” of a layout definition. Now you can define page beans also as “interim level” of UI processing, so that the content of a page beans is managed explicitly by the using dialog.

Sounds complex – but isn't. Take a look onto the following example:

There is a page bean that opens up a scale-able area – and provides some slider to scale. This page bean is used in a dialog in the following way:

<t:rowdemobodypane id="g_2" objectbinding="#{d.DemoPBWithExitUser}">

    <t:rowpagebeaninclude id="g_3"

        pagebeanbinding="#{d.DemoPBWithExitUser.content}"

        shownullcontent="true">

        <t:pane id="g_4" padding="0">

            <t:rowheader id="g_5">

                <t:button id="g_6"

                    actionListener="#{d.DemoPBWithExitUser.onAction}"

                    text="Update names" />

            </t:rowheader>

            <t:row id="g_7">

                <t:foldablepane id="g_8" text="Inner pane" width="100%">

                    <t:row id="g_9">

                        <t:field id="g_10" labeltext="Vorname"

                            text="#{d.DemoPBWithExitUser.firstName}" width="100%" />

                    </t:row>

                    <t:row id="g_11">

                        <t:field id="g_12" labeltext="Nachname"

                            text="#{d.DemoPBWithExitUser.lastName}" width="100%" />

                    </t:row>

                </t:foldablepane>

            </t:row>

        </t:pane>

    </t:rowpagebeaninclude>

</t:rowdemobodypane>

 

You see: there are component definitions below the ROWPAGEBEANINCLUDE! The components that are placed into the page bean are running in the full context of the surrounding page.

You may compare to using a FOLDABLEPANE – there it is clear that the content is managed by the layout of the using dialog - and the FOLDABLEPANE is only responsible for some interim layer. The same thinking now can be applied to page beans as well – they are open to be used as interim layout levels as well.

Please check the updated documentation “Developer's Guide”, chapter “Page Beans with contained Areas” for more information.

Bug fix – Update in attribute STYLESEQ was sometimes not processed

When updating the value of the STYLESEQ attribute and when working with style definitions pointing to multiple style classes, then the update was not processed if the first class definition did not change.

Improvement – Extended API for drag and drop in workplace function tree

You now can pass some DROPRECEIVE into all tree nodes of a function tree – and you can listen to events (e.g. drag-drop events...) more easily:

Bug Fix – SPINNER did not flush when EDITABLE was set to “false”

Bug is solved...

Bug Fix – Automated and unwanted column width update in grids using GRIDCOL-DYNAMICWIDTHSIZING

When having defined multiple grid columns with GRIDCOL-DYNAMICWIDTHSIZING set to “true” then changing the width of one column did reset the width of all corresponding columns.

Bug Fix – SCREENGRABBER did not work

...from 20201012_3 on – we did not include the corresponding js-library in the delievery...

Bug Fix – Component node classes did not contain latest attributes

For each component there is a corresponding component node class which is used for dynamically assembling the layout content. E.g. there is FIELDNode class for the FIELD-component. Some of the new attributes were missing (the ones that were added after our change to GIT...).

Improvement – New FIXGRID variant: FIXGRIDWITHGROUPING

The FIXGRIDWITHGROUPING is a grid, in which the column headers can be grouped:

The definition is:

FIXGRIDWITHGROUPING
GRIDCOLGROUP

    GRIDCOLGROUP

      GRIDCOL

      GRIDCOL

    GRIDCOLGROUP
     GRIDCOL

      GRIDCOL

      GRIDCOL

  GRIDCOLGROUP

    GRIDCOLGROUP

      GRIDCOL

      GRIDCOL

 

It internally bases on the possibility to define columns with COLSPAN definition – but all the management of COLSPAN is now internally done. You can drag and drop columns to arrange the column sequence, but a column can never leave its group.

Please pay attention:

Improvement – Hovering over launch pad

The hover-behavior and focus-behavior of the LaunchPad tiles is nicer now (before some inner components were updating their color when hovering in addition to the main area). The page bean components are “CCLaunchPad” and “CCLaunchPadInfoTile”.

Improvement/Change – No implicit setting of TREENODE-TOOLTIP

Why ever we did this once upon a time...: when setting the TEXT of a TREENODE, then the value was passed into the TOOLTIP as well – if you want or not. We took back this behavior, because the TOOLTIP is under your control anyway, and because no other control is doing this.

Information – Documentation

We updated the tech paper “Model View Controller” and based the internal processing on Component Adapters.

We added a new tech paper “Separation of projects by .jar” into the documentation area of http://captaincasa.org/documentation.

Update 20201019

Improvement – Support of ADAPTERBINDING for FIXGRID

The FIXGRID so far did not support the attribute ADAPTERBINDING. Now it does.

Please note: the adapter binding on server side needs to implement interface “IFIXGRIDComponentAdapterBinding”. This interface is automatically implemented with the default adapter binding classes coming from CaptainCasa.

Bug Fix – GRIDLAYOUTPANE, sizing of components with width “100+”

If defining a size of “xxx+” within a row of a GRIDLAYOUTPANE then the corresponding column was sometimes not correctly sized but received 100% of the available space.

Bug Fix – Creation of second page bean instance

In the BEANPROCESSING component of a dialog (which is a folder for arranging components without visual representation below) there is a binding to the page bean that belongs to the page (e.g. “#{d.MyPageBean}”). When using the dialog inside the workplace then a second instance of the “MyPageBean” was created because the expression of the BEANPROCESSING was not correctly processed.

Bug Fix – DRAWAREA sometimes not properly rendered

If passing commands ending with a semicolon (“<command1>;<command2>;”) then the command was sometimes not drawn.

Bug Fix – FIELD-LABELTEXT not updated

When changing the LABELTEXT value of a FIELD (same with “all” FIELD-variants) then the corresponding component was not updated properly – the LABELTEXT kept its initial value.

Bug Fix - Layout Editor: Error when JSP was defined in root-directory of ”Source”

When defining a JSP page in the root package then an error was shown in the Layout Editor.

Bug Fix - Layout Editor: Checker did not read JSPs if defined in “Source”

Layout definitions that you stored in the “Source” (and not in “Web content”) were not read by the “Checker”. The “Checker” is the module that checks JSP-definitions for missing attributes and for other error information – the output of the “Checker” is the list of texts below the preview area.

Update 20201012_3

This update contains some significant inner improvement which is described below. If upgrading an already existing project to this version, we ask you to not use this version for production use without contacting CaptainCasa. - There is no change in the inner logic of CaptainCasa, but there is a restructuring of content that comes with CaptainCasa and that's the reason why we are careful.

Please note: when upgrading to 20201012, then you also have to upgrade the tool side of CaptainCasa! (if you use the tools...)

Improvement – Restructured “webappaddons”/”webcontentcc”: web content read via classloader

There were two types of CaptainCasa artifacts that were added to a project up to now:

The artifacts were part of the directory “webcontentcc” within the default project layout:

<project>

  /webcontent

  /webcontentbuild
/webcontentcc

    /eclnt

      /risc

        *.js

        ...
   /eclntjsfserver

      /popups

      /includes
   /WEB-INF

      /lib

        eclntjsfserver.jar

        *.jar

 

From this update on all CaptainCasa artifacts that formerly were part of the web-content are part of the “eclntjsfserver.jar” library. As consequence the /webcontentcc directory is cleaned up significantly:

<project>

  /webcontent

  /webcontentbuild
/webcontentcc

    /WEB-INF

      /eclntjsfserver/includes/ccaround.jsp

      /lib

        eclntjsfserver.jar

        *.jar

 

There is only one resource left which is outside the eclntjsfserver.jar file: the “ccaround.jsp” dialog definition, which is required as starting page by JSF.

All the other resources were moved into the “eclntjsfserver.jar” library. At runtime they are automatically accessed by a resource loading which uses the classloader to read the resources.

Why did we do this? There are two reasons:

What does this mean for you?

Improvement – Toolset: clean up webcontent directory

At the very beginning of CaptainCasa the web content inside a project was not separated into the content added by your development and the content coming from CaptainCasa. Since 10 years (or longer?) the default project layout does the separate clearly these aspects, by providing three different project directories:

Still there are a couple of “old” project layouts alive...! ;-) And it gets more and more important to clean up the project in order to reduce the amount of old and unused fileds in your application.

We now added a tool “Webcontent clean-up” to the CaptainCasa toolset. This removes from a webcontent directory all content that was – once upon a time.... - inserted by CaptainCasa – so that only your application content remains.

Before removing the content the tool creates a safety copy of the cleaned directory.

Bug Fix – Independent touch keyboard, flush not triggered

When using the independent touch keyboard (component TOUCHVIRTUALKEYBOARD), then the flushing that is based on duration of non-input (FLUSHTIMER attribute) was not triggered correctly.

Bug Fix – Scroll bar in FIXGRID did not resize when changing number of items during scrolling

In a FIXGRID you can reload items during scrolling, so that the list grows when scrolling down. When scrolling by dragging and dropping the scroll bar, then the scroll bar was not correctly sized to the updated number of grid items.

 

Update 20201005

Info – Switch from internal SVN repository to “public” GIT repository

We switched from an internal SVN repository to a GIT repository, that is hosted by a public provider. All participation license owners can now request a user id, so that you can directly view the sources. Please contact us!

Improvement – Arranging content in FOLDABLEPANEHEADERROW

When placing a FOLDABLEPANEHEADERROW into a FOLDABLEPANE then you can additional components into the header area of the FOLDABLEPANE. By default they are sized into the very right area of the header area and do not receive any width from outside.

By setting FOLDABLEPANE-HEADERFULLWIDTH to “true”, the header area that is made available for the additional components gets assigned a width of 100% - so you internally can also full percentage sizing for the components contained in FOLDABLEPANEHEADERROW.

Improvement - “.risc” requests not cached by the browser anymore

The “.risc” requests that internally start a page are not cached by the browser anymore. When being cached then there were problems with the browser's back button, when navigating from one “.risc”-page to another page, and then back to the “.risc”-page.

Bug Fix – Virtual keyboard, slow input when using real keyboard

There was some looping when you used the “normal” keyboard to do some input into the virtual keyboard (touch keyboard).

Release 6.0 – Q3 2020

Update 20200928

Improvement – Integration of “Quill” HTML editor

The Quill Editor (https://quilljs.com) is an open source project providing a flexible to use HTML editor. It is free to use. Please check license conditions directly on the Quill-page.

You can use the editor as alternative to the CKEditor that is embedded by default, but which has certain license issues to pay attention to.

Check the following demo in the demo workplace:

Improvement – Providing own “mini-JSF-implementation” via Maven

You now can receive the “mini-JSF-implementation” of CaptainCasa by the following dependency definition:

        <dependency>

            <groupId>org.eclnt</groupId>

            <artifactId>eclntjsfserver_jsfimpl</artifactId>

            <version>20200928</version>

        </dependency>

 

Improvement – New Maven project type for Spring Boot projects

We added the new Maven project archetype “eclntwebapparchetype_springboot” to our catalog of webapp archetypes. It simplifies the creation of Spring Boot projects significantly.

Improvement – iOS / Android usage

We updated the sizing management of the application to better accommodate to tablet / phone scenarios.

Whenever a virtual keyboard of iOS/Android is coming up, then the application was resized by the browser. This sometimes had the consequence, that the e.g. field, which was selected to be edited was not shown anymore after the screen was resized.

Now the whole application does not change its size when a keyboard comes up, so that the applications is shifted (if required) as whole by the height of the virtual keyboard.

This makes input through the keyboard much nicer than before.

Due to this change we also fixed the problem that the virtual keyboard was sometimes not shown when editing a field, that was contained in a grid.

Tablet/phone users: please test your application with this newest update – Thanks!

Bug fix – Style “defaultdarkrisc”

This style was incorrectly defined during the last updates – actually it showed the style “defaultbluerisc”... We cleaned up.

Improvement - ...(not only?) for Swing users...

There is a new configuration in class BasePopup. When calling...

BasePopup.initializeHeightDeltaDecorated(20);

 

This adds 20 pixels to any absolute height definition that you define for a popup dialog. Background: the styling of a popup dialog's title is done in Swing by the operating system. Due to a change in the OS, the title bar might grow, so that some content now is to be scrolled, which was shown without scroll bars before.

This function clearly is a “repair-function” - and must not be used “strategically”...!

(just FYI: in the RISC-client the decoration of a popup is completely defined by styling and does not depend on the operating system.)

Update 20200922

Improvement/Change – web.xml “clean up”

All servlet and filter definitions were removed and added to the dynamic configuration that uses the Java-API for registering servlets and filters.

Does this mean you have to update your web.xml of existing projects? - No! The existing web.xml definitions are “stronger” than the API definitions. And the web.xml can still be used to add own servlet/filter definitions.

Why did we do this?

Some details:

From CaptainCasa's perspective the web.xml that is required for RISC-projects is quite “thin” now:

<?xml version="1.0" encoding="UTF-8"?>

 

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xmlns="http://java.sun.com/xml/ns/javaee"

         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

         id="WebApp_ID"

         version="3.0">

         

  <display-name>CaptainCasa based application</display-name>

  <welcome-file-list>

    <welcome-file>index.html</welcome-file>

    <welcome-file>index.htm</welcome-file>

    <welcome-file>index.jsp</welcome-file>

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

    <welcome-file>default.jsp</welcome-file>

  </welcome-file-list>

 

  <listener>

    <listener-class>org.eclnt.jsfserver.util.CCServletContextListener</listener-class>

  </listener>

    

  <!-- ********** SESSION MANAGEMENT *************************************** -->

  <session-config>

      <session-timeout>60</session-timeout>

      <tracking-mode>URL</tracking-mode>

  </session-config>

  

</web-app>

 

We updated the “web.xml_template” file correspondingly.

IMPORTANT INFORMATION: existing projects which use the Swing and/or the FX-client must not change their web.xml! It contains some servlet definitions which are only required for these environments and which are not part of the API-based registration.

Improvement – New component CLIENTLOCALSTORAGE

Sometimes you want to store certain information on client side which should stay there “forever” (or, at least much longer than a session...).

Example: you want to store a unique Id of the client so that the client identifies itself when communicating to the server.

Up to now we provided a component CLIENTCOOKIE to do so. This component used the possibility of storing data inside a cookie. Now there is the component CLIENTLOCALSTORAGE which does the same, but uses the client side JavaScipt API to the local storage of the client.

Improvement – BUTTONPOPUP focus

The BUTTONPOPUP component is a button that opens up a popup area when being clicked. Up to now the focus stayed in the button, the user had to explicitly move the focus with the mouse. Now the focus moves into the popup - and is moved back into the button when the popup is closed.

Improvement – JPEG size calculation of “data:image”-URLs

The size of images which were dynamically passed was sometimes not correctly calculated – and the default size of “16x16” was taken as fall back.

Update 20200914

Improvement – Page Bean Component “CCDataGridView”

The page bean component provides a simple way to build up lists with a filter function on top of the columns:

You just need to pass a list of Pojo-objects and a configuration-object (sequence of columns with some parameters) – the rest is done automatically.

The page bean component is build in a way that you can easily extend own, special versions. Please check the code, which is a nice example for “How to write page bean components”. The page bean is part of the page-bean-addon that comes within the resources of a CaptainCasa installation.

Please check the demo workplace (“News” section).

Improvement – Alignment of label text

All components providing a LABELTEXT attribute (FIELD, ...) now provide an additional attribute LABELTEXTALIGN by which you can define the placement of the text. In addition the LABELCONTAINER provides an attribute ALIGN as well.

Update 20200907

Improvement – FORMATTEDFIELD: format advice only shown when user moves focus into field

When defining a FORMAT (e.g. “bigdecimal”) within a FORMATTEDFIELD component, then a “format advice” was arranged as placeholder automatically. This placeholder now only shows up, if the user moves the focus into the component – otherwise it stays empty.

Screens with a lot of empty FORMATTEDFIELD components look much nicer as consequence.

Before...

...now:

Improvement – Layout Editor

Creation of Page Bean Components: the popup for creating the class now proposes a proper class name (same name as layout name) and a correct package.

Improvement – Extended features for VIDEO component

You now can explicitly take over control over the VIDEO component. By default it shows icons for playing or pausing a video. Now the component can be rendered without any inner icons – and you can take over control using TRIGGER-attributes for playing/pausing the video. In addition you receive event notifications about the status of the video.

Take a look into the corresponding demo of the demo workplace:

Improvement – ARRAYGRID-FLUSHCOLUMCHANGES

...the attribute is now automatically set to “true” when using the attribute USEMULTILABEL is set to “true”.

Bug Fix – Input of “@” in COMBOBOX

It was not possible to search for COBOBOX-items starting with “@”. (Same with all characters that are reachable via altgr-key.)

Update 20200831

Improvement – New page bean components for “Country selection” and “International phone number”

Please check the corresponding demo in the “News” area of the demo workplace:

All resources like internationalized texts and flags are part of the component. The components are part of the addons-package (<installdir>/resources/addons/eclnt_pbc.zip or by Maven).

Improvement – Page Bean Components adapted to “new” resource loading

Since 20200825 resources can either be part of the web-content (“traditional” way) or can be located in the sources/classes (“new” way). Page bean components already were components loading their layout-XML from the classloader – we now adapted them, so that they are in sync with the “new” way of resource loading.

This means:

All other issues are the same as before. And: of course the “old” way is still supported!

We updated the documentation in the Developer's Guide accordingly. Please take a look!

Improvement – Own “Mini JSF Implementation” part of delivery

Some of you know already about... - now it gets more and more official: we implemented an own “mini-JSF-implementation” that is exactly taylored for running CaptainCasa within a servlet engine. Our own JSF implementation is NOT a complete implementation of JSF APIs and must not be used as general purpose JSF engine.

What is the purpose behind?

The own implementation is part of the delivery, after installation is is loacted in: <installdir>/resources/addons/eclnt_jsfimpl.zip – The zip file contains two .jar files:

jsf-api.jar

jsf-impl.jar

 

These jar files must be the ones to replace the reference implementation.

In the standard CC project, the name of the libraries exactly matches the ones coming from CaptainCasa – so you may just replace these libraries in the tomcat-runtime (webapp/<app>/WEB-INF/lib) with the ones coming from CaptainCasa.

If you are interested: try it!... and give feedback to us!...

Update 20200827

Bug – No resolution of “index.html”

The updated management of resource-loading had the consequence that the automated resolution of e.g. “index.html” when opening a URL which just addresses a directory level did not properly work anymore.

This bug made us publish this new version.

Bug – COMBOBOX: setting EDITABLE to “true” die override ENABLED “false”

The combination COMBOBOX-EDITABLE “true” and COMBOBOX-ENABLED “false” did switch the combo box to enabled.

Update 20200825

Improvement – Web resource files (including .jsp layout) can be stored in sources/classes

Up to now *.jsp files and other web resource files (images, ...) were stored in the web-content part of your application. Now you can place them into the Java-source part (design time) and in the classes/lib files (runtime).

Consequence: all resources are part of e.g. a .jar-library and need to be distributed separately. This makes it much more simple to work with multiple projects.

Before you had to integrate all content of several projects into one directory, i.e. you had to join the webcontent of all projects. Now you simply have to create one central project, into which all other projects are delivered as pure .jar files.

We added a corresponding chapter to the Developer's Guide: please check the new chapter “Managing Resources”.

The toolset was updated accordingly: in your project overview you now have the option to switch between the “web-content” and the “source” directory of your project:

This is a quite significant extension of the server-side, so we ask you to keep contact to use in case of questions/problems. In case of problems you may switch off the new access to resources by some simple setting in system.xml-configuration file. Details are described in the Developer's Guide.

Bug Fix – CAPTUREANIMATOR: certain animations only worked below PANE

All “*content*” animation was only start-able when the CAPTUREANIMATOR was places below a PANE component. Now you can use them everywhere.

Bug Fix – LIST: attribute FONT not working anymore

When defining some explicit value for attribute FONT, then this definition was not taken over into the component, which stayed on default font.

Bug Fix – Automatically create menu item “Copy text” created twice

When having switched CLIENTCONFIG-POPUPMENUCOPYCLIPBOARD to “true” then a popup menu item is created by default for any component that is holding text. When pressing the menu item then the text of the component is copied into the client's clipboard. In the last update, sometimes two or more of the items were generated.

Update 20200817

Improvement – New page bean component CCScheduleDays

The new component shows schedule items in a week/day view:

The current version does not yet allow to move schedule items – but only allows to show and select items.

Inside the schedule items you may render any page bean of your choice, so you are not limited to a text display but can directly embed functions of your application.

A demo is contained in the “News”-section of the demo workplace.

Bug Fix – LIST: shift-selection did not select bottom item

If selecting a couple of items, then it could happen that the bottom item of the selection was not selected.

Improvement – Grid-selection on grid row border-line

When clicking with the mouse onto a horizontal grid line, then currently the whole grid “of the background” was selected – because the grid line did not belong to the row but to the grid itself. This was sometimes confusing for the user, when e.g. clicking with the right mouse onto the line then the popup menu of the whole grid showed up even though being in the row area.

We updated this behavior, so that now the bottom border line of the row belongs to the row above.

Bug Fix – Minimum size calculation of FIELD with LABELTEXT defined

The LABELTEXT value is now taken into the minimum width calculation of the field, so that it is always fully displayed.

Update 20200810

Improvement – Structured grid header

It is now – much simple than before – to define hierarchically structured grid headers. The new features to do so are:

Please pay attention: grouping of columns by default only makes sense, if re-arrangement of columns is not allowed.

Please check the demo in the demo workplace (section “News”).

Improvement – LABEL and GRIDCOL with abbreviated text

In addition to the normal text you now can add an abbreviated text – which is shown on missing screen space:

Please check the demo in the demo workplace (section “News”).

Improvement – Independent touch keyboard

The touch keyboard now changes its layout dependent on the element that is currently focused:

Please check demo “Components > Touch screen > Stable virtual keyboard”

Improvement – Sub-menus do not disappear immediately

Especially in the layout editor it sometimes was annoying:

When moving the mouse to a sub-menu and only hitting another menu item “a little bit”, then the sub-menu was immediately closed. Now there is some timer that allows the user to move the mouse in a “non-exact way” - without closing the sub-menu.

Improvement – CAMERA component with external trigger

Up to now the taking of a photo with the CAMERA component was only possible by using the built-in icon of the CAMERA component. Now you can configure the component to not show this icon (CAMERA-WITHSNAPICON) and instead trigger the component by using the attribute CAMERA-TRIGGER.

Improvement – TABBEDPANETAB-SELECTIONID

In a tabbed pane the active tab gets transferred to the server-side using the attribute TABBEDPANE-VALUE. The value transferred by default is an integer value (0 for first tab, 1 for second tab, ...). Now you can assign individual SELECTIONID values on TABBEDPANETAB-level. If having done so, not the index is transferred, but the explicitly defined values. This makes it much easier to work with selection within dynamically arranged tabbed panes.

Update 20200803_2

Bug Fix – Internet Explorer, input of “@”

We did not believe that this is possible...: when using IE and only entering “@” as input into a FIELD or TEXTAREA the input was not recognized at all. Typically there are some characters following after (e.g. in case of mail address) – so this situation “never” occurs...

What was the reason: when pressing the “AltGr”-key on the keyboard, then IE internally sends a key event in which it tells that both the “ctrl”-key and the “alt”-key are pressed. (There is no separate indicator for the “AltGr”-key.) Pressing “ctrl” and “alt” with CaptainCasa does switch the client into a selection mode, in which all eventing is disabled to let the user select with the mouse any text from the screen. So this mode was accidentally started when pressing the “AltGr”-key. The mode is switched off with any other key, so that's why the problem did not show up so far.

Bug Fix – GRIDLAYOUTPANE

Some of you directly checked and gave feedback:

Update 20200803

Improvement – New component GRIDLAYOUTPANE

The GRIDLAYOUTPANE arranges its content im some kind of matrix. The sizing of the matrix is depending on the minimum and preferred size of contained children. Content can be spanned across multiple columns – both horizontally (“colspan”) and vertically (“rowspan”).

Although the content internally is managed as x,y-matrix...

... the definition is internally done by row definitions:

<t:gridlayoutpane id="g_66" border="#00000010" coldistance="5"

    padding="10" rowdistance="5" width="100%">

    <t:gridlayoutrow id="g_67">

        <t:label id="g_68" colalignmentx="right" text="Short text" />

        <t:field id="g_69" width="100%;200" />

        <t:button id="g_70" text="Button 1" />

        <t:label id="g_71" align="center" background="#C0FFC0"

            height="100%" rowspan="3" text="Side label" width="100" />

    </t:gridlayoutrow>

    <t:gridlayoutrow id="g_72">

        <t:label id="g_73" colalignmentx="right"

            text="Loooooonnngggg ttteeexttt" />

        <t:field id="g_74" width="100" />

        <t:button id="g_75" text="OK" />

    </t:gridlayoutrow>

    <t:gridlayoutrow id="g_76">

        <t:label id="g_77" align="center" background="#C0FFC0"

            colspan="3" height="50" text="Bottom label" width="100%" />

    </t:gridlayoutrow>

</t:gridlayoutpane>

 

This makes it much easier to re-arrange the layout within the layout editor (e.g. move one row in front of another row) and it is much easier to e.g. remove one row by setting its RENDERING attribute to “false”. - All the matrix coordinates are calculated internally.

Please check the demo in the demo workplace (“News” section).

Improvement – New property “disabledPopupAvailable” for CCMultiLanguageField/TextArea

You now can set the component to disabled by calling “setEnabled(true)” but still can view its multi language content in the dialog popup.

Improvement – Text that can be copied into Clipboard via popup menu

When setting option CLIENTCONFIG-POPUPMENUCOPYCLIPBOARD to “true” then some right mouse button menu item is generated automatically for any component holding text:

Up to now this text contained HTML-formatting when it e.g. was executed on a button with a text that contains HTML. Now the text is cleaned up before being copied to the clipboard.

Bug Fix – Enter-based hot keys not working in TEXTAREA

The TEXTAREA component internally consumed all key events having to do with the “Enter”-key. As consequence it was not possible to invoke “ctrl-Enter” from inside the component.

Update 20200729

Bug Fix – Style for COMBOBOX-items

The items of combo boxes internally are buttons that are rendered with a certain style. Unfortunately in the base style definition (“defaultrisc”-style) the extension from the style class “riscbutton” was missing, so the configure-ability was reduced.

We now changed this and adapter our base styles accordingly.

Please check: In case you have defined own style classes for COMBOBOX-itmes (style class “risccomboboxitem”): please check the rendering of the items after having applied the update.

Bug Fix – ARRAYGRID with MULTILABEL usage, copy-text popup menu

When using the ARRAYGRID with fast MULTILABEL rendering then the popup menu for copying the text of a cell was not properly supported anymore but showed only “MULTILABEL” as text to copy. The bug only occurred when two ARRAYGRID instances were shown at the same point of time.

Improvement – Flickering TREENODE icons

...this was difficult to see, but one user saw it: when closing tree nodes then for a short point of time the “opened”-icon was rendered in the rows that are not rendered anymore.

Improvement – Directly show page in Workplace-Function-Area

You now can directly place pages into the content area of the functions area of a workplace:

Just define a “WorkpageStartInfo”-definition within the top “WorkplaceFunctionTreeInfoNode” definitions.

Improvement – SLIDER label size increased

The label text of slider ticks have been limited to a width of 100 pixels – now the width was increased, so that it may span the whole slider component.

Bug Fix – F1 was not properly treated in touch popups

When pressing F1 in touch popups (the virtual keyboard popping up on top of an e.g. field component), then the browser's general F1 help was shown. Now the proper F1 help of the component, that started the popup is shown.

Update 20200720

Improvement – Style updates in “default202006risc”

Some updated to the new default style that came with update 20200706:

Improvement – Slider: shift of tick numbering

There is a new attribute SLIDER-SHIFTTICKSPACING by which you can shift the slider tick numbering:

In the first slider the shift is applied so that the major ticks are properly positioned, in the second slider there is no shift defined and the major ticks are starting with the minimum value.

<t:row id="g_11" >

    <t:slider id="g_12" flush="true"

              majortickspacing="5" maxvalue="52" minortickspacing="1"

              minvalue="33"

              shifttickspacing="-3" value="#{d.demoSlider.shoeSize}"

              width="200" snaptoticks="true" >

    </t:slider>

</t:row>

<t:row id="g_13" >

    <t:slider id="g_14" flush="true"

              majortickspacing="5" maxvalue="52" minortickspacing="1"

              minvalue="33" value="#{d.demoSlider.shoeSize}"

              width="200" snaptoticks="true" >

    </t:slider>

</t:row>

Improvement – Extending Page Bean Components

It is now much easier to extend page beans components. The layout of page bean component is kept in a corresponding “.xml” file – which by nature of XML definitions in not really extend-able. - You now can define a “.mod.xml” file in which you only describe which components of the original file you want to update for a certain reason. This makes it much easier to adapt page beans to your scenario.

Please check the updated developer's guide for more information on this.

Update 20200714

Due to problems of 20200713 with MacOS we decided to have a second update this week.

Bug Fix – Client problems in MacOS with 20200713

The change we did in 20200713 for detecting the iPad-Safari-browser had negative impact on normal Safari browsers running on MacOS systems – which now were treated as mobile devices, not as desktop devices.

We now improved the detection of browsers so that MacOS is detected as desktop device and iOS is detected as mobile device.

Update 20200713

Do not use Update 20200713 in production use! Please check information in 20200714.

Information – iPad-Version-13 update

When using Safari on iPad and when having upgraded to iOS version 13.1 then some surprise is waiting...: Safari now opens web pages by default in desktop mode – while having opened it in mobile mode before. This means on CaptainCasa side: instead of e.g. using long clicks for selections you have to use double clicks – which is not really nice for touch users. Well, the user may switch to mobile mode by pressing the “aA”-Icon at the beginning of the URL-input-field – but this is not really convenient for most users.

We now reacted internally and identify the iPad-Safari by some additional statements, so that we internally switch to mobile mode in any case, Safari on iPad is used.

Information – Elements are now hidden until they are sized

When updating parts of the screen then – if many elements were affected – you sometimes could see a short flickering in the updated areas. During the flickering elements were first drawn at a default position and then moved to their correct position. To avoid this flickering we not keep the elements in a non-display-mode until they are correctly sized.

This change may have implications for these ones of you who use animations as part of their CSS-definitions. Animations might not be started on elements which are not displayed. In order to adapt there is a new RISC-variable “_displayImmediately” which you can assign to component style definitions that contain animations.

    <class n="...">

        ...

        <risc n="_displayImmediately" v="true"/>

        ...

 

In any case: please contact us in case of problems!

Bug Fix – LABELTEXT in COMBOBOX (rarely) not shown

The LABELTEXT was in very rare situations not shown inside COMBOBOX-components.

Update 20200706

Improvement – Updated default style

The style that is used within the demo workplace and within new projects was updated and now is “default202006risc”. Main updates:

Existing styles are still valid, of course! You may only update your style if you like the updated look and feel.

If you want to check the style with your project then just append “ccstyle=default202006risc” as URL parameter to the .risc-URL that you use for starting your application.

Improvement – Improve workplace API for updating the workplace layout

The function...

getWorkpageContainer().getTileManager().importWorkplaceTileInfo(...)

 

...allows to update the workplace layout at runtime. This function so far closed all workpage instances that were currently started as part of switching the layout.

Now there is a second parameter, by which you can control if you want to close existing work page instances – or not. Please check the following demo (select “News” on the left bottom of the demo workplace):

Btw.: we also added this function on the top left of the demo workplace:

You now can toggle between two layouts – the default demo layout and a reduced one for mobile devices.

Information – Client library “moment.js” updated to version 2.27

We updated the client library moment.js to the newest version available via https://github.com/moment/momentjs.com.

Bug Fix – Cursor-up did not work in special constellations

When pressing cursor-up-key in a grid then the selected row is moved up by one position. If the selected row was the first row of the grid and the grid did not show its full content (so there were empty grid positions though being scrolled to the bottom of the grid), then the cursor-up was not executed.

Improvement – Attribute COMBOBOX-MOUSECLICKAREA

This was an attribute which was not supported yet in the RISC client. You can decide if the mouse click may be done on the whole combo box (default) or only on the icon area to open the combo box popup.

Improvement – DOF-Addon – Own column filter dialogs

We opened up the framework to add own column filter dialogs.

Filter dialogs need to implement interface “IDOFFilterPropertyAreaUI”...

package org.eclnt.ccaddons.dof.pbc;

 

import org.eclnt.ccaddons.dof.DOFObjectFilter;

import org.eclnt.ccaddons.dof.DOFPropertyType;

import org.eclnt.ccaddons.dof.IDOFObjectPersistor;

import org.eclnt.jsfserver.pagebean.IPageBean;

 

/**

* Interface to filter dialogs for properties.

*/

public interface IDOFFilterPropertyAreaUI extends IPageBean

{

 

    public interface IListener

    {

        public void reactOnFilterApplied();

    }

 

    public void prepare(DOFObjectFilter filter,

                        DOFPropertyType propertyType,

                        IDOFObjectPersistor persistorQuery,

                        IListener listener);

}

 

The are registered in the property meta data:

public class DOFPropertyType implements Comparable<DOFPropertyType>

{

    public void setClassNameFilterPropertyAreaUI(String       

                                                 classNameFilterPropertyAreaUI)

    {

        ...

    }

}

 

In the interface the current filter data is part of the DOFObjectFilter-instance that is passed as parameter.

In addition we opened up the method “executeQuery” of class “DOFJdbcPersistor”, so that you can update the creation of the SQL statement for the filtered data on your own. Each filter condition is now added to the SQL string in method “buildPropertyFilterConditionString”:

protected String buildPropertyFilterConditionString(DOFObjectType objectType,

                                                    DOFPropertyType pt,

                                                    DOFObjectFilter filter,

                                                    List<Object> queryValues)

{

    ...

}

 

Please check the JavaDoc for more information – and also take a look into the code (which is part of the addon-package).

Release 6.0 – Q2/2020

Update 20200629

Improvement – LABELCONTAINER-ENABLED

The LABELCONTAINER now has an ENABLED attribute. If setting the attribute to “false” then the container is rendered exactly the same way as FIELD with LABELTEXT definitions are rendered, when being disabled.

Improvement – Drawing of icons in COMBOFIELD with LABELTEXT defined

The icon is now arranged in the vertical center of the input area – and not of the whole component area:

Improvement – Style with underlined fields (Beta)

We are updating our standard style at the moment. Main difference: field components are not rendered as gray area anymore but are rendered with some underlining:

We believe this type of rendering is some more lightweight than the up-to-now style.

The new style's name is “default202006risc”. You may test this style already within your scenarios by appending “ccstyle=default202006risc” to your start-URL and/or by extending your own style definitions from this style. We plan to make “default2020risc” our default style from July on.

Of course all existing other style definitions are kept – you only have to update your style in case you like the new style. And: of course any feed back is appreciated!

Update 20200623

Bug Fix – FIELD with embedded and floating label text

...the label-text-component within the top left corner of the field was in some cases created several times. In case the value of LABELTEXT changed, the previous label component still was rendered...

Improvement – FIELD with new attribute UNITTEXT

Once the label moved into the “field body”, some of you immediately requested to be able to move some other text into the “field body”...: we now provide a new attribute UNITTEXT which is a general purpose text label on the right of the text input. Example:

In the left field of the example the UNITLABEL is used with a FORMATTEFDIELD – really showing the unit of the value that is input. In the right field the UNITLABEL is used to output the text of the entity that is input via it identifier.

Bug – Fix – Color of PLACEHOLDER

The color of the PLACEHOLDER was updated so some wrong value in 20200622 – and was rendered as black in many cases.

Update 20200622

Improvement – FIELD with embedded and floating label text

All FIELD components (FIELD, COMBOFIELD, CALENDARFIELD, COMBOBOX, ...) now provide two new attributes:

When setting the LABELTEXT then the text is shown as part of the FIELD component: if no component value is defined then the text will be shown as placeholder:

If a value is defined then the text will be shown on the left top within the component:

When setting LABELTEXTALWAYSSHOWN to “true” then the text is always shown in the left top area – regardless if there is a component value defined or not.

Improvement – Component LABELCONTAINER for check-boxes and radio buttons

In order to harmonize the look and feel of FIELD components using the LABELTEXT attribute we introduced a new container component, in which you can e.g. arrange CHECKBOX or RADIOBUTTON components:

The sizing of the box is defined in a way that the height of the boxes (when containing CHECKBOX or RADIOBUTTON) equals to the size of a corresponding FIELD component with LABELTEXT defined.

Bug Fix – JavaScript Error Message in special situations

When removing content (e.g. of a REPEAT-able area) and when using the focus management within this area, the following JavaScript message was (seldomly...) shown:

Update 20200618

Improvement – No closing of COMBOFIELD dialog on Shift-click

When using COMBOFIELD with attribute KEEPFOCUS defined as “true” then the keyboard focus stays in the field when opening the value help dialog:

Up to now, just clicking the Shift-key (same with Ctrl-, Alt-) closed the dialog. Now the dialog only closes if there is some “real” key following the Shift-key.

Improvement – DRAWAREA: append “_mouseover” with drawing commands

If appending “_mouseover” to the drawing commands then they only will be executed if the user moves the mouse over the DRAWAREA.

Update 20200609

Bug Fix – Problem with file upload and image reduction

The image reduction during upload (i.e. you can shrink images to a certain width/height before they get uploaded) was invoked also on files, in which the “image-extension” was part of the file name (e.g. “xyz.png.pdf”).

The error only occurred when using the image reduction and when selecting “special” file names.

Info – Missing internal call in ArrayListWithChangeIndex

The method “add(index,item)” was not calling the “updateFinished” callback. There was no mis-behavior inside CaptainCasa due to this – but in case the listener interface was used from your side, you might miss the corresponding call-back.

Update 20200608

Improvement – URL Parameter “ccscale=auto”

When starting a page you can add a parameter to pre-define the scaling of the whole page. Example: “http://..../xyz.risc?ccscale=1.5”. You now can passe the value “ccscale=auto” in this case the scale is calculated based in the client value of “window.devicePixelRatio”. This is a value which defines in a browser environment, how many physical pixels are used to render one CSS-pixel.

We tested this on several devices and came up with the formula...

scale = 1 + (window.devicePixelRatio-1) * 0.125;

 

...so that one and the same screen is properly sized on different devices.

Improvement – New demo application “Stock Overview”

We added a new demo to the demo workplace, which either can be called directly or as part of the “big” demo workplace:

Improvement – SCALEPANE-AUTOSCALE

The SCALE-value of the SCALEPANE can now be automatically calculated, so that the content of the SCALEPANE automatically fits inside:

Improvement – ADATIVESPLITAREA-HIDESECONDSPLIT

There is a new attribute by which you can define that the second split of the ADAPTIVESPLITAREA component is not visible at all. Consequence: there is no splitting at all. This is useful if the seconds split area is only shown after selections done in the first split area.

Bug Fix – Using FIXGRID-scrollbar-buttons on mobile devices

It could (to be honest: very likely) happen that pressing the scroll bar buttons of a FIXGRID within a mobile device resulted in some loop, in which the button was continuously pressed.

Bug Fix – CALENDARFIELD popup with increased size

When using the CALENDARFIELD with FORMAT “time” then the popup for editing the hour/ minute/ second values was too small – and the values were only partially visible.

Bug Fix – COMBOFIELD-KEEPFOCUS focus blocking not released when removed

In general a COMBOFIELD blocks the focus – and e.g. avoids that the focus is moved into a popup-dialog. We now had a special situation in which the COMBOFIELD instance was removed as part of the round-trip that was initiated by the COMBOFIELD itself – and the blocking of the focus positioning (by using REQUESTFOCUS) was not un-blocked.

Update 20200602

Bug Fix – COMBOFIELD with KEEPFOCUS and FLUSHTIMER

When using the COMBOFIELD with KEEPFOCUS=”true” and with a FLUSHTIMER to observer the user input, then user input which was done while the value-dialog was opened did not always open up some updated value-dialog.

In addition the focus was not moved into the dialog when the user pressed the cursor-down-key.

Bug Fix – Focus observation (attribute FOCUSSENSITIVE)

By setting FOCUSSENSITIVE to “true” within a PANE, the PANE will send corresponding events to the server-side when the focus is moved inside. There was NO focus event thrown when the PANE itself was set to FOCUSABLE=”true” and the user clicked the PANE...

Update 20200525

Improvement – New/additional way of drawing the focus

We added a new variant of drawing a component as focused. Up to now this was only possible by adding background modifiers – now it is possible to draw some border-like-elements on top of the existing component.

The element's position, size, insets, colors, line style can be defined flexibly as part of the style definitions.

Because it looks much nicer than the “up to now” way, we completely switched to the new way of drawing the focus. The “up to now”-way is still available, of course can can be simply switched on/off by central style parameters.

If you have set up some own styling of the focus drawing then please check the documentation at: http://www.captaincasa.com/docu/techdoc_styling/

Bug Fix - Problem with SCROLLPANE-ONETOUCHEXPANDABLE, consequences in CCSplitDashboard

Due to a problem that was located in the ONETOUCHEXPANDABLE feature of the SPLITPANE component, the CCSplitDashboard component did not correctly work anymore – only horizontal arrangement of areas was possible.

Bug Fix – MULTILABEL: problems with transparent backgrounds and IE/Edge

Transparent backgrounds were not rendered correctly, but drawn as black background.

Update 20200518

Improvement – Layout Editor: Accelerated Preview

The “Preview”-function within the Layout Editor was accelerated.

Improvement – Styling of LINK component

The LINK component does not show any hover shadow anymore... (it's enough to see that the text is underlined when moving the mouse over the component).

Improvement – ADAPTIVETOOLBAR styling

Applying the style of the ADAPTIVETOOLBAR component was not trivial, because the component internally used some “awesomefont-icon”. Now the component uses some normal button/icon and you can e.g. apply own images much easier.

Bug Fix – Asynchronous File upload: file name in URL-encoded format

When using FILEUPLOADLINKASYNCHRONOUS or FILEUPLOADBUTTONASYNCHRONOUS then the file name was passed in URL encoded format. This means blank spaces were transferred as “%20”. Now some decoding is done before passing the file name to the application processing.

Bug Fix – RADIOBUTTON did not properly update when changing GROUP

When changing the GROUP assignment of a RADIOBUTTON, then it could happen that the update of the RADIOBUTTON did not properly work. Situation, in which you update the GROUP rarely occur: in the concrete case the RADIOBUTTON was part of a grid cell and the GROUP assignment was done individually by grid row.

Update 20200511

Improvement – Usage of MULTILABEL in ARRAYGRID (beta)

Last week we introduced the component MULTILABEL for accelerated rendering of text grids with many columns.

Now we took over the MULTILABEL component into the ARRAYGRID component: by setting ARRAYGRID-USEMULTILABEL to “true”, the internal processing will now use the new component and is much faster as consequence.

The nice things...:

Please pay attention:

Please check the demo workplace (“New Functions”).

Improvement – Special styling of labels as “info-labels”

We added some pre-configured style classes for labels:

Please chech the demo in the “New Functions”-area of the demo workplace.

Improvement – Page Bean “CCSplitDashboard” with extended properties

There are two new properties:

Update 20200504

Improvement – New component AVATARICON

We added the component AVATARICON which is a special icon that either displays a picture or displays a text (typically the initials of a person). The icon is rendered in rounded mode by default, but you can fine-tune of course.

Improvement – New component MULTILABEL (Beta)

We added a new component MULTILABEL. Purpose: render a series of text-labels with “high speed”. In the example that is available in the demo workplace (“New functions”), you see a big grid built with this component:

The grid contains out of rows, each one holding one MULTILABEL component. The number of columns in the example is 100. - The performance of this grid is much faster than rendering the same grid with individual components (e.g. LABELs). The internal rendering of the labels is done by using HTML-Canvas operations.

The MULTILABEL features always will be some level below the features of the normal LABEL. Example: the styling cannot be influenced by CSS-styling. Its clear intention to serve as component for “massive lists of data”.

Improvement – Page Bean Component “CCSimplePivot”

Based on the MULTILBALE component we added as simple version of a pivot table:

The page bean component is available in the ccaddons package. Use it to see the speed of MULTILABEL-usage. Whn expanding the pivot data to the right, then all MULTILABEL components are re-rendered in order to contain new columns of data. The speed of this is dramatically faster then with the up-to-now pivot implementation that you may know from the demos as well...

Improvement – Attribute IMAGE-KEEPRATIONFITMODE, ICON-FITMODE

When scaling images then up to now the scaled result always showed the full image – and some empty space was rendered if the image did not perfectly fit into the available space. This mode is now called “contain” - and still is the default mode when scaling.

When defining mode “cover” then the image will always cover the whole available area – and may cut some parts of the image as consequence.

Information – Usage of JSF 2.3 libraries

We upgraded the JSF-API and JSF-implementation to version 2.3.39.

For Maven users: the dependency that we now use is:

        <dependency>

            <groupId>javax.faces</groupId>

            <artifactId>javax.faces-api</artifactId>

            <version>2.3</version>

        </dependency>

       <dependency>

            <groupId>org.glassfish</groupId>

            <artifactId>javax.faces</artifactId>

            <version>2.3.9</version>

        </dependency>

Update 20200427

Improvement – Style class selection for popup dialog

Up to now you could defined one style for a popup dialog (by using API ModalPopup/ ModelessPopup.setStyleSeq(...)). Now you can establish a sequence of style definitions within the style management – and the right style is chosen dependent on the positioning of the popup. Result:

The styling of the popup can be different, e.g. the popup looks the following way when being positioned below control:

And it looks the following way when being positioned on top of a control:

Please check the demo in the demo workplace (“New Functions”).

Bug Fix – CCEE-Addon, NullPointer when executing DOFWSql method

When starting the CCEE and immediately firing multiple DOFWSql-queries from massive-parallel threads then it could happen, that one of the threads received a NuppPointerException and as consequence an error was thrown. Subsequent requests or parallel requests were not affected.

Bug Fix – CALENDARFIELD-EDITABLE

Setting EDITABLE to “false” was not working – the component was still edit-able.

Bug Fix – FIELD-FLUSHTIMERCONDITION

The attribute was not recognized properly – now it is.

Update 20200420

Improvement – New component RADIAL

The component RADIAL renders some percentage value as circle...

...or as ellipse:

You can define the line size, line color – and many other parameters.

Internally the RADIAL component is combined usage of the DRAWAREA component with some LABEL component on top.

Improvement – Automated column sizing in FIXGRID

This was a feature of the Swing-Client, which we hoped to “bypass” within the RISC-HTML client. Unfortunately some of you constantly reminded us that it was missing – and required.

As you might see from the screenshots the size of the left column increases when scrolling down – because its contained values are occupying more an more space. This is done by setting GRIDCOL-DYNAMICWIDTHSIZING to “true”.

Pleas pay attention:

Improvement – DRAWAREA draws polygon line

The DRAWAREA up to now could draw filled polygons – but could not draw polygon lines. The way to do now is:

<t:drawarea id="g_66"

            border="#c0c0c0"   

drawcommands="polyline(10,10,100%,100%,0,100%,#FF0000,1);polyline(100,10,130,40,90,30,#000000,5);polyline(80,20,100%-20,100%-20,50%,0,100,80%,#0000FF,2)" height="160" width="100%"

/>

 

Each line contains a sequence of [x,y] definitions. The last two paraemters are the color of the line and the size of the line. As in other draw commands of the DRAWAREA, x and y positions can be passed in a flexible way:

Bug Fix – DRAWAREA sizing

When the content of a DRAWAREA was updated (e.g. logic changes the size of contained components), then the DRAWAREA did not pass the update to its owning layers – and did not resize as result.

Update 20200415

Improvement – New page bean component: CCTimeLineVertical

We added a nice new page bean components:

Inside the component you can add any page bean items as content, together with some image definition and some title definition. The page beans are rendered as time line, when clicking the image within the time line then the corresponding area on the right is collapsed so that only the title is shown.

Please take a look into the corresponding demo inside the demo workplace (“New Functions”).

Bug Fix – DRAWAREA

There were two fixes:

Improvement – ARRAYGRID now supports images as column type

The ARRAYGRID is a simplified FIXGRID for output purposes. The column content is restricted by the controls that the ARRAGRID processing defines to be used. We now added the possibility to directly output images in columns. Please check the demo “Grids&Trees => Large Output Lists => Setting of Control Type”:

Update 20200406_2

20200406 => 20200406_2

Due to a severe issue in 20200406 (Backspace key was not working anymore) we published 20200406_2. Please do not use 20200406!

Improvement – Automatically generated popup menu items now sorted

When defining a HOTKEY with a component, then the hot key is automatically added to the popup menu. Same when defining a REQUESTFOCUSHOTKEY. Up to now the sequence of items was not sorted, now it is.

Improvement – Scrolling by “space”-key when using BUTTON, CHECKOX, RADIOBUTTON

There are features in the browser, that we did not know so far – even though having used browser since a couple of years... - When pressing the scroll bar then the page scrolls “a bit”. (Did all of you know this? ;-)...). Result: if a button, checkbox, radio button is positioned in a scroll-able area and the user presses the control, then the page started to scroll. This behavior is switched off now.

Bug Fix – Hotkey's on sub-menus not working

When having added a HOTKEY definition by using POPUPMENU, and when having the positioned the corresponding MENUITEM within a sub-menu, then the hot keys was not activated.

Improvement – Adding html-meta-tags to start page

When opening a URL with extension “.risc” then a corresponding servlet produces an HTML page for starting the web client. We now added the possibility to add additional header-meta-tags into the HTML that is generated, by adding corresponding definitions in configuration files “system.xml”.

<system>

    ...

    <riscclientmetatag name="..." httpequiv="..." content="..."/>

    <riscclientmetatag name="..." httpequiv="..." content="..."/>

    ...

</system>

Bug Fix – Label inside PROGRESSBAR not properly sized

When updating the text of the label on top of the PROGRESSBAR then the text size was sometimes not correctly calculated.

Release 6.0 – Q1/2020

Update 20200330

Improvement – Keyboard support for MENU/MENUITEM

Menus and menu items now support the default cursor operations to navigate through the menu items: cursor up-down for navigating between items and cursor-left/right for opening and closing the next menu level.

Bug Fix – FIELD blocked keys “alt-left” and “alt-right”

Each component defines a certain series of hotkeys that are owned and solely consumed by the component itself. In case of the FIELD (and its derived components) up to now all key combinations with cursor-left/right were declared to be owned by the component. Consequence: a hotkey definition of “alt-left” was not propagated by the component to its parent layer. - We now defined the FIELD-owned keys in a more fine granular way, so that alt-left/right are usable as hotkey.

Improvement – Focused component after closing a popup dialog

Up to now the component that caused a roundtrip top open a popup dialog also was the one which was focused when closing the popup. This is sometimes confusing e.g. when opening a popup due to some hotkey definition on a button (or other component). In this case the button was focused after closing the popup. - We now updated the strategy and check that the component that was focused at the point of time when opening the popup dialog also is the one which is again focused when closing the popup.

Improvement – Memory reduced during (asynchronous) file upload

During the upload of client content via asynchronous upload components the parsing of the uploaded (String) content was done completely in memory. Now the parsing is done by using streams, which significantly reduces the memory load which is required for a short time during upload on server side.

Improvement – SLIDER with no text and not label ticks

The SLIDE component can now be used with diverse options to hide parts of its content:

Please check the corresponding demo in the demo workplace.

We also changed the slide style a bit, so that its grab area is round.

Improvement – Tools: Bean Browser with search for classes

The searching of classes inside the Bean Browser was much improved and now really searches all classes that are reachable. Before it only searched these classes which were already opened inside the tree.

Update 20200323

Improvement – Explicit setting of hotkeys for moving focus

There are two new attributes with nearly any visible component:

By adding hotkey definition to these attributes, you can add own keys for moving the focus to the next/previous component.

We provided some example in the demo workplace (“New Functions”) to demonstrate the possibilities you have to influence the keys to be used for moving the focus:

Improvement – Components with INVOKEEVENT defined show hover effect

For a lot of components (e.g. PANE, IMAGE) you may define an INVOKE-event to allow the user to start certain operations by clicking/touching the component. The components now show a hover effect (as e.g. buttons) to indicate that they are active components.

The hover effect is defined in the style definition, please search for “backgroundModifierHover”. You can individually assign an own hover effect by using the RISC style value “_backgroundModifierHover”.

Improvement – Editor now can hide its left-most column

...some of you were asking this, here it is...: ;-)

Once switched to invisible you may bringt it back by using the menu “Tools => Show toolbar”.

Improvement – Cursor internally set to “inherit” for labels, panes

Label and pane definitions so far included an explicit own cursor definition – the cursor was set to “default”. Now they inherit the cursor from their parent.

You will see the positive effect when e.g. defining an INVOKEEVENT with a PANE. Up to now any contained label did not switch to the “hand” cursor but stayed with their own “default” cursor. - Now they take over the cursor from the PANE.

Improvement – SPINNER with attribute WITHREMOVEICON

The SPINNER component was not providing the attribute WITHREMOVEICON. In order to make the SPINNER component look similar to the e.g. COMBOFIELD component, we updated the with of the icons on the right, so that they are in sync with the width of the icons in the COMBOFIELD. The width is part of the style definition.

Improvement – DefaultBufferedStreamContent now allows to pass a file name

The API setFileName(...) was only available with DefaultBufferedContent – and not with DefaultBufferedStreamContent.

Update 20200316_2

Bug Fix – Field value not transferred after pressing hot key

This was a serious bug in 20200309!

The value of changed fields was sometimes not transferred to the server side when invoking a function via hot key.

Bug Fix – Wrong z-positioning of menu popups

It could (very seldomly...) happen that a popup caused by a BUTTONMENU element was rendered on the wrong l-layer – and as consequence was not visible or only partially visible.

Update 20200309

Due to an error found in this release (see 20200316 – Field value no transferred): please do not use this version for production environments!

Improvement – Position of preview-command-area in Layout Editor

Sometimes the preview-command-area did hide some content of the preview, that you wanted to use... There is now a icon on the right of the area that re-positions the area in the preview area.

Bug Fix – Escape in CALENDARFIELD, COLORFIELD, disabled LONGFIELD

The Escape-key is used by default to close the dialog popups that are created by the components (e.g. CALENDARFIELD opens up calendar dialog). The Escape-key event for closing the popup was also delegated to the hot-key-management – so if there was some function listening to the Escape-key then this was triggered due to closing the dialog.

Bug Fix- FIELD-select-all inconsistently executed

If a user clicks into a FIELD then the current content of the FIELD is selected by default. If the user now clicked another component, and then re-clicked the FIELD, then the selection of the content did not properly work: the selection was lost when releasing the mouse button.

Update 20200302

Bug Fix – Clipboard-copy not working in Firefox and Edge

The clipboard-copy was not working in new versions of Firefox and Edge.

Bug Fix – Ctrl-Select in grid: server-side selection not reflected on client side

Scenario: in a grid with multiple selection the server side logic did de-select items when being selected by the user. Result: the items on client side were still shown as selected, whereas they were not selected from application logic side.

We also added an example to the demo workplace in which this scenario is demonstrated:

Improvement – Button long click

For a BUTTON (same with ICON, LINK) you may set attribute WITHLONGCLICK to “true”. In this case the button is not only activated by normal click, but also by the user clicking the mouse for some time onto the button without releasing.

On server side there is an attribute BaseActionEventInvoke.isLongClick() - if you are interested in the information if the button was clicked by a normal click or by a long click.

In addition there es an attribute WITHLONGCLICKENDEVENT. If you set this to “true” then you also get notified when the user releases the mouse button, after having done a long click.

Please check the demo in the demo workplace (section “New Functions”):

Improvement – Field components with remove icon

Fied controls (FIELD, COMBOFILED, COMBOBOX, …) now provide the attribute WITHREMOVEICON. If set to “true” then an icon is rendered on the right of the field area if there is some field content. When pressing the icon then the content gets removed.

The removal is doing exactly what is normally done by the user when directly working with the field content:

Improvement - Selection of style values in Layout Editor

Within a style definition you may define style values. The style values can be accessed via expression “#{ccstylevalue['<nameOfStyleValue>']}”.

This expression can now be easily selected by pressing the right mouse button onto an attribute value within the Layout Editor:

A dialog comes up in which the available style values are listed – and from which you can select the value by double-click:

Bug Fix – CALENDARFIELD style definition

The style for the CALENDARFIELD was not correct in the default style (“default201812risc”) - it was set to white always.

Update 20200224

Info – HttpSessionAccess.getCurrentRequest/Response

When calling these methods outside the context of the processing of a request then both method internally threw a NullPointer-Exception. Now they return “null”.

Improvement – TempFileManager, cross/no session usage

With the TempFileManager you can store content as file on the server-side which is access-able from a URL. Up to now the one to resolve the URL was forced to get access into the session that created the content. This is normally a completely valid (security) feature, that internal data of the session is not access-able from outside the session.

In some situations you want to publish content which should be explicitly available to other programs – which cannot gain access into the session. For this reason there is a new method...

TempFileManager.saveTempFileCrossSession(...)

 

Improvement – Demo showing download of multiple files

Downloading several files, one after the other is not completely trivial – because the browser is able to download one file at one point of time. Consequence: you need to program some kind of “chaining”, in which one download triggers the next one. A new demo shows how to do this (“New Functions”).

Improvement . Demo showing complex expressions that are supported

By default we advise to use straight expressions only (“#{d.xxx.yyy}”) - so that all logic stays on Java site. We now list these complex expression (e.g. “#[d.xxx.yyy == 0}”) that we officially support. - In principal we stay with the strategy “as minimum flexibility as required” - so there are no plans to open up new functions in this area...

Update 20200220

Due to two stupid bugs we decided to publish a “during-the-week”-update...

Bug – Style: disabled FIELD always with white background

Due to a missing style variable disabled FIELDs were always shown with white background. Any color defined by BACKGROUND was overridden.

Bug – Error message logged during start-up

One language file “language_ru.xm” was delivered with some characters that were not accepted during SAX parsing. Consequence: some ugly log output was generated as consequence.

Update 20200217

Improvement – Style update

The current style (default201812) was updated – a little bit! Disabled field components are not rendered with gray background anymore – but with transparent background.

This makes it easier for the user to differentiate between enabled and disabled components.

Improvement – No inline scripting and inline styling anymore

We were notified by some user (Thanks!) that we had problems when “Content Security Policy” was switched on using corresponding http-header-parameters.

The outest page, which is generated by the “.risc” URL now does not contain any inline JavaScript anymore – all JavaScript is part of the included js-libraries. Before there have been some few lines of bootstrap-JavaScript.

The same with some style statements which were directly done in the outest page – and which are now done via corresponding css classes.

Improvement – Russian and Romanian language added to client

This week's community heroes are located in Austria. Two language files for the client side language management were sent by developers from Egger. Thanks a lot!

Improvement – New Page Bean Component “CCGenericFileSelector”

Sometimes you have to upload files from a server side directory structure. Maybe this is a shared file directory, or an SFTP server.

The component “CCGenericFileSelector” shows the directory structure and lets the user select one or more files to be loaded. The interface to the directory structure is a generic interface, there are implementations for a file server and for an sftp server.

Please check the new demo in the demo workplace.

Update 20200211

Bug Fix – GRIDROWSELECTOR with ACTIONLISTENER

The component was open for e.g. drag-drop, but was missing the possibility to define an “actionListener” as reactor. The attribute was added accordingly.

Bug Fix – Loading of style “null”

When reloading a page from server side then it could happen that the message “Could not load style with name 'null'” was output on client side.

Improvement – Workplace Management: implicit or explicit initialization

When working with the workplace management, then the workplace arrangement, the workplace history and the workplace function tree are loaded from some user-dependent storage.

By default the workplace management internally initializes the workplace automatically when being started, loading all user specific data start-up of the workplace. The user is accessed by interface “IUserAccess”.

In quite some situations you want to load the user-dependent data explicitly, e.g. after the user having passed a logon dialog. In this case call method...

IWorkpageContainer wpc;
wpc = getWorkpageContainer();
wpc.prepareWorkplaceForCurrentUser();

 

Up to now the workplace management always first started implicitly – and then could be updated by calling “ prepareWorkplaceForCurrentUser()”.

Now you can define that the workplace management does NOT start implicitly at the beginning, but starts as empty workplace – which you then can explicitly load later on.

To do so there are two possibilities:

WorkpageContainer.initImplicitLoadingForCurrentUser(false);

 

...e.g. at start-up point of time of the system.

 

or

 

2. Define in /eclntjsfserver/config/system.xml:

 

<system>

     <workplace

          ...

          implicitloadingforcurrentuser="false"
         ...

          />

</system>

 

In case of doing both definitions, the Java-API will overrule the XML definition.

Improvement – Dynamic “.svg” creation via “.ccsvg”

By accessing an svg icon at “/xyz/abc.svg” via “/xyz.sbv.#ffc000.16x16.ccsvg” you can dynamically change the icons fill color and the icons size. This only works for flat icons, because certain string replacements are done, expecting the svg-xml-code to follow a certain structure. - Certain icons were not correctly interpreted because there was no blank space following the “<svg” start-tag.

Update 20200203

Bug Fix – Error in date selection of calendar popup

There was a problem when e.g. selecting the 01st of Feb in the calendar popup – and immediately afterwards selecting the 31st of January. The result did not show the 31st of January but selected the 02nd of February.

Bug Fix – Focus Management in default value selection popups

When using IdTextSelection or IdAttributesSelection then the focus was not moved into the first select-able row with version 20200113 and 20200121.Improvement – Extra style ge for controls inside /eclntjsfserver/popups/griddetails.jsp

This is the popup for selecting the columns of a grid. The grid controls and the label controls now got assigned some explicit style variant so you can easier adapt. The style variants are defined as follows in the default styles:

    <tag name="fixgrid" variant="CCGRIDDETAILS_AVAILABLE" extendstag="fixgrid" extendsvariant="default">

        <set attribute="background" value="#E0E0E0"/>

        <set attribute="bordercolor" value="#00000030"/>

        <set attribute="borderheight" value="1"/>

        <set attribute="borderwidth" value="1"/>

    </tag>

    <tag name="fixgrid" variant="CCGRIDDETAILS_SELECTED" extendstag="fixgrid" extendsvariant="default">

        <set attribute="background" value="#FFFFFF"/>

        <set attribute="bordercolor" value="#00000030"/>

        <set attribute="borderheight" value="1"/>

        <set attribute="borderwidth" value="1"/>

    </tag>

    <tag name="label" variant="CCGRIDDETAILS_GRIDLINE" extendstag="label" extendsvariant="default">

    </tag>

Improvement – FLUSHAREA-events are sent together with inner FLUSH-events on control level

When defining FLUSHAREA on a container as “true” then all the controls within the container are observed for value changes by the user. When a value is changed then a corresponding flush-event is sent to the server side. - If there is a control inside a container, that itself triggered a flush event (e.g. a FIELD with FLUSH defined as “true”), then up to now the flush-event of the control was sent in an extra roundtrip before the event of the area.

Now both events are sent in the same roundtrip.

Improvement – Take part in start-up process on server side

Inside the /eclntjsfserver/config/system.xml configuration file you now can register a class supporting interface “IStartUp”. This class is started as part of the server side start-up processing.

<system>

     <startupclass name="xxx.yyy.zzz.ApplicationStartUp"/>

</system>

 

Please pay attention: all session/request based APIs are not available during start-up! The start-up is processed directly as part of the server-start-up – without any user interaction being involved.

(Of course you can still use other ways of taking part in the start-up process that are part of the J2EE-API-specification.)

Update 20200121

Bug Fix – FOCUSSEQUENCE: not working when values defined by expression

This error only occurred in 20200113.

Improvement – PAINTAREA-RANGESELECTIONREQUIRESKEY

In the PAINTAREA you may use the function that the user can select multiple items by selecting a range with the mouse. This function by default is available be pure mouse selection. You now can define in addition that this function is only available if the user presses the shift- or the control-key.

This function is used if the PAINTAREA e.g. is used within another component (e.g. SCROLLPANE), and the other component also want to react on mouse operations (e.g. due to switching SCROLLPANE-SCROLLBYDRAGDROP to “true”).

Improvement – API for accessing “profile mode”

The server processing of one session can be used with a so called “profile mode”. In this mode all the interfaces between the outside server processing of CaptainCasa and the inside server processing of your application are monitored. Example: each access to a property via expression is monitored.

This monitoring can be started from the Layout Editor (internally a URL parameter “cc_profilemode=true” is appended to the “.risc”-URL).

You now can switch the profile mode on/off by corresponding APIs:

In addition you can access profile data by using the following interfaces:

Improvement – JSF 2.3 ready

We tested our server “against” JSF 2.3.9 and added missing implementations in some classed. The runtime we deliver still is 2.2 by default.

Update 20200113

Improvement – Closign workpages: enhanced interface

For closing workpages in a current workplace environment you now may use two extended methods in IWorkpageContainer...

public void closeWorkpage(IWorkpage workpage,

                          boolean alsoCloseWorkpageWithNoCloseSupported);

 

public void closeWorkpageForced(IWorkpage workpage,

                                boolean alsoCloseWorkpageWithNoCloseSupported);

 

...in addition to the existing ones:

public void closeWorkpage(IWorkpage workpage);

public void closeWorkpageForced(IWorkpage workpage);

 

The difference is the parameter “alsoCloseWorkpageWithNoCloseSupported”. If you set it to “true” then also these workpages can be closed that are defined to no support closing.

Please note: CaptainCasa default functions will never use the “true”, i.e. they will never close a workpage that is defined to not support closing! ...so it's up to special functions on your side to use this parameter!

Improvement – IMAGE: Positioning of hover image

The IMAGE component has some nice functions which is quite useful: if the image is rendered in a shrinked way (by explicitly sizing it) and the user moves the mouse over the image then its full size version is shown as dialog. The dialog automatically disappears when moving the mouse outside the image:

This feature is invoked by setting attribute WITHHOVER to “true”. You even can define some own image to be shown on hovering (attribute HOVERIMAGE).

The positioning of the image dialog was sometimes not optimal if the screen size on the right of the base image could not show the full image dialog. Now it is shown on the left side / top side in case of missing screen space.

Improvement – FIXGRID: scrolling with mouse wheel and keyboard

When scrolling a FIXGRID with the mouse wheel then now automatically the focus is moved into the grid, so that the user can continue to scroll with cursor operations without having to click inside the grid once again.

Improvement – MAILTO without opening second browser instance

Up to now the MAILTO component opened some second browser instance together with the mail client. This second browser instance then was automatically closed after ½ a second. This on the one hand caused some flickering in front of the user, on the other hand there were problems in environments in which the mail client is not directly started but is started by confirming a dialog which pops up (and which also was closed after ½ a seconds...).

Now we use some different JavaScript API to start the client, the opening of a second browser window is not required anymore.

Bug Fix – Start URL-Parameter “ccdesktop=false”

This parameter was ignored due to some sequencing problem in the startup of a page.

What does the parameter do? The client by default checks if it is started in a desktop environment or in tablet/phone environment. As consequence in an e.g. Android environment touch events are used as input, where as click-events are used in an e.g. Windows-desktop environment.

Especially with Window touch laptops (which can be used both as desktop and as touch tablet) we cannot find out on our owns which mode to support – so you may tell us directly by using this parameter (URL would be: “http://xxx/yyy.risc?ccdesktop=false”).

Improvement – Drag-Drop-Information now supports vertical text as well

During drag-drop you may define textual information to be shown when dragging over a component. Example:

Up to now you could pass dedicated own textual information only for horizontal drag-over scenarios, now this was extended to support vertical scenarios as well – as shown in the screen shot.

Improvement – CLIPBOARDSET: copying to client clip board much nicer...

Copying of text information into the client clipboard is now supported with IE, Firefox, Chrome and Safari. In case copying to the clipboard is not supported by the browser (e.g. Edge) the text to be copied is shown as a dialog from which the user then can directly copy/paste using “ctrl-c”.

Release 6.0 – Q4/2019

Update 20191230

Bug Fix – Memory Leak when using WorkpageContainerRendererViaHideablePane

When using class “WorkpageContainerRendererViaHideablePane” for rendering the workplace (this is the renderer which does not remove pages on client side but which pushes them into some hidden area), then a server-side memory leak occurred.

Improvement – CLIPBOARSET

The CLIPBOARDSET component now works on many more browsers than the implementation before. In case a browser does not support the corresponding functions, a dialog will show up, in which the user can copy/paste the text directly.

The component was tested to directly work for: IE11, Firefox, Chrome. For MS Edge the dialog shows up as described.

Update 20191217

Improvement – Adding TRACK information to VIDEO

The VIDEO component now provides the possibility to add TRACK definitions. A TRACK may add textual information, e.g. sub-titles, to the VIDEO.

Please check the demo in the demo workplace (“New Functions”).

Improvement – Definition of DRAG-area in FOLDABLEPANE

When defining a DRAGSEND definition within a FOLDABLEPANE then by default the whole area of the FOLDABLEPANE is sensitive to drag operations.

By setting attribute DRAGTITLEONLY to “true” only the title area is sensitive – and not the whole content area.

Please check the demo in the demo workplace (“New Functions”).

Bug Fix – Extended Calendar Info only accepted if TIMEZONE directly defined with CALENDAR/CALENDARFIELD

The general definition of the time zone by using CLIENTCONFIG and/or by using “sessiondefaults.xml” was not used within the extended calendar processing. Now it is!

Update 20191210

Bug Fix – SPLITPANE-ONETOUCHEXPANDABLE

When using SPLITPANE-ONETOUCHEXAMPLE then little icons are shown inside the SPLITPANE-divider, by which the user can quickly open/close the SPLITPANE-areas. One of the icons (open to the right/bottom) was not correctly working when using SPLITPANE-CUTCONTENT at same point of time.

Bug Fix – FOCUSSEQUENCE sorting

The sorting in a FOCUSSEQUENCE was done lexically – so that “A/11” was sorted in front of “A/2”. Now the sorting is done numerically...

Improvement – DOF List with own columns

In the Data Object Framework (DOF) there is now the possibility to add own columns into a data list. The rendering of these columns and the content of the columns is completely int the responsibility of the implementation of an extension interface. Please take a look into demo “Addons > DOF > Additional Columns in List”.

Update 20191120

Bug Fix – Bug in Date Management 20191031-2019118

3 weeks ago we believed there was a severe bug in the date management. And we did some fixes on this. Now we found out that this bug was/is created due to missing definition of the TIMEZONE when passing date information into the controls, that have to do with dates (CALENDAR, FORMATTEDFIELD, LABEL).

The browser's JavaScript processing just behaves crazy and buggy (see: https://stackoverflow.com/questions/58817774/weird-javascript-timezone-for-early-days-e-g-01-01-1800?noredirect=1#comment103912975_58817774) – when calculating dates in old time ranges.

Luckily, when using the TIMEZONE attribute then we do not use the browser's time management but we use the one of the moment.js library. So all the problems are solved by itself. - Well, unluckily: we added some fix in 20191031 which was based on misunderstanding on our side, and this “fix” needed to be removed now!

We added some explicit chapter “Managing Date/Time Values” to the Developer's Guide in the meantime – which on the one hand points out the importance of a proper date/time strategy and on the other side shows simple ways to pass the time zone information that is required on client side into the client processing.

Please check that someone in your development team seriously takes a look into this chapter!

Improvement – Central definition of client TIMEZONE by “sessiondefaults.xml”

In order to simplify the central passing of the client TIMEZONE definition we now provide the possibility it pass this value within the configuration file “sessiondefaults.xml”:

<sessiondefaults

    ...

    clienttimezone="..."

    ...

/>

 

Typical values are:

Please check the chapter “Managing Date/Time Values” within the “Developer's Guide” documentation.

Update 20191118

Bug Fix – PASSWORDFIELD was not reset to null in special situations

When using the PASSWORDFIELD component and when using HOTKEY-based components somewhere else on the screen (e.g. BUTTON with HOTKEY definition), and when removing the content of the PASSWORDFIELD on server-side – then the removal was not reflected on client side.

Improvement – PageBeanComponent for blocking the screen for long operations

There is a page bean component which blocks the screen for long lasting operations on server-side running in a separated thread:

The operation can output protocol information which is directly transferred to the client-side so that the user see what's going on. Please take a look into the corresponding demo within the demo workplace (section “New functions”).

Bug Fix – SPINNER-EDITABLE not supported

...now it is.

Improvement – Updated Min/Max-value for FORMATTEDFIELD with FORMAT “int”

The min/max-values before were the Java-values – JavaScript has some different ones...

Update 20191112

Bug Fix – Style variable “@baseColorLight@”

Due to a missing definition the style variable could not be loaded in some styles.

Improvement – Layout Editor, definition of query parameters

When previewing pages you may now define query parameters (“name=value&name=value...”) which are appended to the URL that starts the previewed page. The parameters are stored within the layout editor per page.

Update 20191104

Improvement – Extended documentation on Date/Time Management

During talking to users on the problem of 20191031 we found that the important issue of dealing with date/time values quite often is not adequately reflected within quite some application implementations. We now extended the documentation (Developer's Guide) – there is a new chapter “Managing Date/Time values”.

Please check this text also when checking if the problem of 20191031 affects you – or not.

Improvement – More direct access to client configuration

For configuring the client settings (e.g. client-country/language, time zone, scale) you can place a CLIENTCONFIG component into the screen (typically the outest screen of your application).

Now there is a central CLIENTCONFIG component added to any page that is loaded by a “.risc” URL. This CLIETNCONFIG refers to values that you can define in the class “org.eclnt.jsfserver.defaultscreens.Client”. At starting point of a session (e.g. within the dispatcher) you can call this class accordingly:

public class Dispatcher

{

    ...

    public Dispatcher()

    {

        Client.setTimezone(“UTC”);

        Client.setCountry(“DE”);

        Client.setLanguage(“de”);

        ...

    }

    ...

 

Improvement – Layout Editor

There is a new template available for creating adaptive pages. The images of the templates were improved...

Improvement – Spring

We added some items in the area of “Managing Spring”:

Update 20191031

Bug Fix – CALENDARFIELD, FORMATTEDFIELD, LABEL: wrong values for time zone “CET” and other time zones with daylight saving time

>>20.11.2019<< In the meantime we know that the bug that was solved by this “fix” was some different issue/misunderstanding and we know that the “fix” of 20191031 comes with other side effects... See comment of update 20191120. - We do not remove the following text, though – in order to property keep the history of this document!

For explanation we use the component CALENDARFIELD – but the same applies everywhere, where date information is managed, which always means some reference to a time zone which needs to be passed.

Problem, explained for time zone “CET”:

The internal reason for this automated switching to the daylight-saving-time-zone is some behavior in the JavaScript library (moment.js) we use for this purpose. Even though you request for a date in the explicit time zone “CET” the library internally switches to “CEST” if the date is in the daylight-saving period of time. - We point out, that this is some behavior of this library – and do not blame this library for containing a bug! Unfortunately, we got to know about this behavior today by some customer messsage.

Are you affected by this bug?

What are the consequences?

In any case: please re-check with CaptainCasa on detail information, if you are not sure if this bug is relevant for you or not.

With this update 20191031 we first of all fixed the bug.

Update 20191028

Improvement – Some more examples on adaptive design

In the demo workplace we demonstrate the flexibility of the component ROWFLEXLINECONTAINER when it comes to define layouts that automatically adapt to the screen size. Please check the section “New Functions”.

And: each page of the demo workplace is now adaptive as well – the text is either rendered on the right side or – if no sufficient screen space – below the example.

Improvement – Access to web-resources and servlet-temp-directory during JUnit tests

When performing JUnit tests then the servlet container environment typically is available. The class “UsageWihtoutSessionContext” is the one that already exists for long time: by calling...

UsageWithoutSessionContext.initUsageWithoutSessionContext

 

...you tell the CaptainCasa runtime that a lot of functions accessing the servlet environment are not running into some error, but switch to some “mini-mode” so that JUnit tests do not fail.

There are two new functions which you can use for defining you JUnit test environment more precisely:

UsageWithoutSessionContext.setServletTempDirectory(...)
UsageWithoutSessionContext.setWebContenxtDirecotry(...)

 

Bug Fix – FOLDABLEPANEVERTICAL: icon was not updated correctly

When defining IMAGE and IMAGETO with FOLDABLEPANEVERTICAL then the icon did not correctly update if the OPENED value was updated from server-side.

Bug Fix – REPEAT: Usage of attribute RENDERED on top element below REPEAT not working

If setting up some layout like...

REPEAT

  ROW RENDERED=”.{rendered}”

    XXX

    XXX

 

...then the value of the “.{rendered}” was not recognized.

Improvement – Veracode scan “CWE 611”

We already added some issues for passing the static Veracode scan two weeks ago – but these were not yet sufficient. So with this update some more issues are applied. To give some more detail: the SAX parsing is done through a SAXParserFactory which is created in the following way:

s_factory = SAXParserFactory.newInstance();

s_factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING,true);

s_factory.setFeature("http://xml.org/sax/features/namespaces", false);

s_factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);

s_factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);

s_factory.setFeature("http://xerces.apache.org/xerces2-j/features.html#disallow-doctype-decl",true);

s_factory.setFeature("http://xml.org/sax/features/external-general-entities", false);

s_factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);

 

It's always difficult to check, if the scanning is now successfully passed, because Veracode tests need to be triggered asynchronously by some other organization... So any feedback on this is appreciated.

Update 20191021

Improvement – Layout Editor toolset: new tool “Screen Map”

The “Scree Map” allows you to arrange the pages of your project in maps – each page being represented by a box from which you can navigate into the different tools (e.g. Layout Editor).

The functions are:

You can organize your screens in several maps. The maps are internally stored as XML files within the project directory. There is a new sub-directory “.cc/maps”.

Improvement – SLIDER: better value selection by click

Up to now you had to quite carefully hit the slider in order to directly set a slider value with a single mouse click / touch. Now the whole slider area is click/touch-sensitive.

Bug Fix – FIXGRID: sizing with HORIZONTALSCROLLMODE “auto” / “autowithresize”

When using the feature HORIZONTALSCROLLMODE “auto” / “autowithresize” then the grid was drawn with a too big height in many cases.

What's the story behind? - The grid by default always calculates a horizontal scroll bar into its height, so that it does not resize its content when the grid columns exceeds the total width of the grid (and a horizontal scroll bar is shown as consequence). This extra size for the scroll bar should not be calculated if there is no need to show a horizontal scroll bar.

The fix is especially significant if the grid does only have a low number of visible items – because then the full scroll bar height is distributed to some few items only.

Update 20191015

Improvement – Access to XML files protected against “CWE 611”

Even though the files that CaptainCasa accesses itself are configuration files that are only read and not written from application layer's point of view, we protected them to pass static code checks (e.g. VeraCode).

Improvement – ServerImageManager with second lowercase-access to buffered files

The ServerImageManager is the server-siste instance to resolve dynamically created images (e.g. for awesomefont-icons and for text images). You can pass these images by class loader in order to speed up the generation and to prevent the problem, that the resolution of generated images depends on the server-side Java-rendering of images – e.g. Linux based systems quite often render in quite poor quality.

The access to the files within the classloader is done in two steps now: the first access is done just normal, the second is done with all characters being transformed to lowercase. This especially helps, if e.g. fonts icons were transferred into png-icons with passing a color value, which sometimes id referenced as “#FF0000” and sometimes as “#ff0000”.

...we have to add: generating png-icons out of font icons is not really an issue that we push! ;-) We recommend to use SVG icons!

Improvement – CaptainCasa addon “CCEE” available in Maven Repository

The “CCEE”-library – a useful collection of functions and frameworks for developing the business logic below the user interface is now available as Maven-artifact as well. Please download via the following dependency:

    <repositories>

        ...

        <repository>

                <id>org.eclnt</id>

                <url>https://www.captaincasademo.com/mavenrepository</url>

        </repository>

        ...

    </repositories>

 

    <properties>

        <cc.version>20191015</cc.version>

    </properties>

 

    ...

 

    <dependencies>

        ...

        <dependency>

            <groupId>org.eclnt</groupId>

            <artifactId>eclntccee</artifactId>

            <version>${cc.version}</version>

        </dependency>

        ...

    </dependencies>

Bug Fix – JavaFX Client: Hiding/showing of FIXGRID-headers

When hiding a GRIDHEADER and showing it again by using the GRIDHEADER-RENDERED attribute, then the GRIDHEADER was shown at the bottom of the grid.

Update 20191007

Improvement - “Auto/Delayed execution” in FIXGRID

This is some nice issue for all FIXGRID users. Please check the demo “Delayed grid execution” in the “New Functions” section:

The user can quickly navigate through the grid items. Whenever the selection is not changed for some while, then a grid-execute event is automatically triggered. The graphics on the right side (representing some “heavy” reaction on selecting a grid item) is built up by the “onRowExecute” event.

Consequence: the navigation through the grid (e.g. via keyboard) is fast and still and is not burdened with building up the graphics every time the selection changes.

Improvement – DRAWAREA now supports “heximage(....)”

The DRAWAREA component allows to do simple 2D-drawing operations into its area. Drawing is done by using SVG drawing internally. While being useful in general, it is especially useful for transferring BGPAINT commands from the former Swing client into the RISC client. Within the Swing client you could pass hex-image definitions by using “heximage(...)” - which is now supported by the DRAWAREA as well.

Bug Fix – Multiple occurrence of popup menu items for hot keys

We found the “real” reason behind the bug, that popup menus sometimes did containt several menu items, showing the same hot key definition: the hot key definitions were nor propertly removed when being part of a popup and when closing the popup.

Bug Fix – Grid header/footer sometimes did not property react on changes of RENDERED-attribute

It could happen that a GRIDFOOTER line was rendered despite the RENDERED-attribute of the GRIDFOOTER was set to “false”. Same with GRIDHEADER.

Release 6.0 – Q3/2019

Update 20190930

Improvement – Embedding of external CSS files via system.xml

CaptainCasa styles are automatically loaded into the client processing – but sometimes you may want to insert external CSS files as well. Typical example: you want to integrate some different font. Up to now you had to place the corresponding .css file into the style directory of CaptainCasa.

Now it's simplified: you may directly list the files to be included within the system.xml configuration file:

    <!--

      *************************************************************************

      Configuration of additional styles includes in RISC client

      *************************************************************************

     -->

    <!--

    <riscclientstyle src="xxx/yyy/zzzz.css"/>

    <riscclientstyle src="aaa/bbb/ccc.css"/>

     -->

 

    <!--

      *************************************************************************

      Configuration of additional javascript includes in RISC client

      *************************************************************************

     -->

    <!--

    <riscclientscript src="xxx/yyy/zzzz.js" type="text/javascript" />

    <riscclientscript src="aaa/bbb/ccc.js" type="text/javascript"/>

     -->

 

Bug Fix – PASSWORD with TOUCHSUPPORT set to “true”, doing keybaord and touch input in parallel

When doing keyboard input and touch input in parallel then it could happen that the result keyboard input was not taken over properly. This is directly clear to the user in general with normal FIELDs – but with PASSWORD fields the user does not really see the text that is actually written.

Improvement – Drag/Drop from Workplace History into Workplace Favorites

The workplace provides a history of visited dialogs. This history can be shown to the user (see Workplace Demos in Demo Workplace). It is now possible to drag and drop items from this history into any favorite area of the workplace.

Bug Fix – Double occurrence of hot-key-items in popup menus

A popup menu includes a list of hot keys that are available to the user. It could happen that one hotkey definition was shown multiple times.

Update 20190924

Improvement – Runtime Style Definition

Up to now style definitions had to be part of the web content (“.war”-file) that was deployed at customer site. Now style definitions can also be stored in the so called “StreamStore” - where CaptainCasa stores all its persistent information at runtime.

Check the demo “General > Style & Language Management > Define runtime styles”:

The file structure that is shown inside the stream store is exactly the one that you know from normal style management: there is one directory per style containing a style.xml and a riscstyle.xml file. You can directly edit the content of the files within the demo.

The demo internally uses the page bean component “CCRuntimeStyleEditor” which you can embed into your application, too.

In addition there is a new API-class “StyleFileAccess” which you can use to write own files into the corresponding places within the stream store.

StyleFileAccess.writeRuntimeStyleFile(styleName,fileName,content)

 

Please note when working with styles:

Page Bean Component for viewing/editing StreamStore

The Page Bean Component “CCStreamStoreExplorer” allows you to view and edit (if set to enabled) the stream store content.

You may pass a root path as parameter which then is the maximal navigation area that the user can access.

AREASELECTOR with ENABLED-support

You now enabled/disabled the AREASELECTOR.

Update 20190917

Improvement – Explicit definition of focus sequence (“tab order”)

By default the tab order follows the definition of components within the layout definition. Now you can override by using the attribute FOCUSSEQUENCE. Please check the corresponding demo within the demo workplace (“New Functions”):

The definition is simple – and you do not have to define an absolute focus numbering as with pure HTML. Basically you define focus groups by some naming “<group>/<order>”. Within one group the focus is moved according to the order definition.

Improvement – Move focus by using hotkey

There is now an attribute REQUESTFOCUSHOTKEY. If the user presses the corresponding key then the focus is moved directly into the corresponding component. Please check the demo in the demo workplace (“New Functions”):

Bug Fix – PASSWORD component was disabled on touch devices

Uuuuh: when using the PASSWORD component on touch devices then it was disabled by default. The bug was introduced with 20190626.

Improvement – In case of 401 http response: explicit ping request

This is something special...: when the client starts then the first POST-request to the server is introduced by some internal ping request to a static resource of the server. Background: with this ping request, a header attribute is sent to fetch a so called “X-Csrf-Token”, which might be delivered by corresponding security frameworks.

In case of communication ending up with some failure during the runtime of the client, the client tries to re-execute the communication. We now add an explicit ping request also with this re-execution in case the previous communication ended with a 401-response from the server side.

Update 20190911

Improvement – New component AREASELECTOR

You want to cut out (“crop”) an image from an existing image? Or do something else in which you want to select some graphical area on top of some other component?

The AREASELECTOR is the component to use...:

By drag and drop the user can select some area. The information about the selection is passed to the server side and you can there “do what you want” (e.g. cut out some image from an existing image using Java image processing).

Bug Fix – List of valid values not scroll-able

We updated most of the value help popups to be resize-able. The negative impact:

If using the dialog to show valid values without header buttons (which are actually placed at the footer...), then the scroll icon on the bottom was not click-able because it was overlayed by the edge-sizer of the popup-dialog. We now changed the size of the edge-sizer so that it is still big enough to be easily grabbed, but small enough to not cover too big parts of the dialog content.

Improvement – (Beta) Workplace with keeping client side state

The feature to use HIDEABLEAREA-components (see 20190902) for showing/hiding certain regions of a dialog was applied to the workplace framework.

If switching pages in the default workplace then the components of the old page are completely removed from the workpage area and the components of the new page are completely newly created within the workpage area.

Advantage: there is no massive client state if a lot of pages are shown, because only the one that is actually rendered is the one which is loaded.

Disadvantage: in case of big pages (e.g. pages with a lot of grids holding a high number of columns) the pages are constantly built up and removed when the user switches betwenn workpage dialogs.

Now we enabled the workplace to keep the pages. Switching between pages does not mean that they are taken out and in, but that they are switched on and off – keeping their client state.

Advantage: switching is (much) faster. - Disadvantage: more memory is required on client side. We observed memory with our demo workplace's pages, including the one which build up “massive dialogs” and were not yet able to get into areas where memory consumption is too high or is bringing the client into trouble situation.

The following code is the one to be used for enabling the fast switching:

            getWorkpageContainer().setRendererClassName(WorkpageContainerRendererViaHideablePane.class.getName());

getWorkpageContainer().setUpdateOnInnerEventOnly(true);

 

IMPORTANT: the status of this development is “solid beta”. Please talk to us in case you should plan to use this feature in the near future! (!!!)

Update 20190902

Improvement – HIDEABLEAREA-TYPEOFHIDING

The HIDEABLEAREA is quite simple – it hides its content on client side if the boolean value behind HIDEABLEAREA-HIDDEN is set to “true”. The new feature: while normally the hiding is done by removing the content from the client side component tree, the content now can be hidden, by leaving it within the component tree and resizing it to “0,0”.

As consequence the client side status of the content is kept.

Concrete use case: within the content you keep a BROWSER component. If the user navigates within the BROWSER page, then now you can keep this navigation state.

Please check the demo (“New functions”) within the Demo Workplace.

Improvement – Performance improvement in client when removing components

We worked on the performance of destroying whole, big areas within the component model on client side. The removing of client side nodes was done recursively, level by level up to now – and was switched to centrally release central components on a high component tree level.

Bug Fix – FIELD-MAXLENGTHAUTOTAB executed when pressing “end”

When pressing the “end”-key within a FIELD which automatically moves the cursor to the next component when reaching the MAXLENGTH definition, then the focus was moved to the next component – but should stay inside the current FIELD.

Bug Fix – Tab on SPINNER component did not move the focus

This bug is fixed.

Update 20190828

Improvement – Abbreviation of page bean class name in Layout Editor

By default one page is referring exactly one page bean class. This means: most expressions that are defined within the page are following the format: “#{d.<NameOfPageBeanClass>.<property/method>}.

Example: the name of the page bean class is “DemoExtCalendarAssignment”, so the typical attribute value is displayed in the following way:

When opening up “Configuration...” within the Layout Editor...

...there is now the possibility to “abbreviate page bean expression”. When using this function then the expression now looks the following way:

So the abbreviation “#{pb:” is used for the page bean class name. In order to be better aware of the expression behind the current page “#{pb:” there is an extra information on the bottom of the attribute section:

Improvement – Maximize icon in popup dialogs

The icon now changes to a “normal size” icon when the popup is maximized.

Improvement – Style Sheet Editor with value support

The style sheet editor now consistently provides list of valid values during editing.

Update 20190820

Improvement - “Global Hotkeys” are shown as tooltip + as popup menu

When assigning HOTKEY definitions to certain action-components (BUTTON-HOTKEY, ICON-HOTKEY, MENUITEM-HOTKEY) then the hot key information is shown in two ways:

The items are added to the end of the normal popup menu, separated by some line.

In case you do not like this appending of items you can switch off by setting CLIENTCONFIG-POPUPMENUGLOBALHOTKEYS to “false”.

Improvement – Maximize Icon in popup dialogs

If a popup dialog is decorated and if it is size-able then there is a “maximize”-icon shown next to the close icon:

Bug Fix – Flickering hover-dialog

With the IMAGE component you may open up a dialog to show some big image by using IMAGE-WITHHOVER. This dialog is opened whenever the user moves with the mouse pointer over the image. With missing screen space it could happen that the hover-dialog was opened on top of the image component – internally causing some “mouseout” event, which triggered the closing of the dialog... Result: a dialog which was opened, closed, opened, closed, …

The same could happen when using the HTML-tooltip (xxx-TOOLTIP=”<html>.....</html>”).

Improvement – Cursor navigation in POPUPMENU/BUTTONMENU/...

A menu now received the focus when opening up. The user can navigate through the menu items by using cursor keys (or tab key).

Bug Fix – Missing style definition with AWESOMEFONTICON

When using AWESOMEFONTICON with attribute CONTENTAREAFILLED=”false” then there was a missing style class definition (e.g. the cursor was not shown as pointer, etc.).

Update 20190814

Improvement – LABEL-IMAGEPOSITION

There is a new attribute IMAGEPOSITION in the LABEL component: if the width of the LABEL is explicitly defined and if the LABEL receives more width then it requires, then by default the IMAGE of the LABEL is positioned on the very left.

(For better visibility a red background is assigned in this example.)

By setting LABEL-IMAGEPOSITION to “attext”, the image is positioned close to the text:

This feature is used within the ARRAYGRIDBinding-processing now. It was an issue of incompatibility between the Java-Swing-client and the RISC-client.

Bug Fix – TREENODE with contained FIELD, input of “space” in FIELD toggled TREENODE

In the TREENODE you can arrange one sub-component (well, if this is a PANE then any number of components might follow within the PANE-container...). If placing a FIELD then the input of “space” was sometimes processed by the TREENODE as well – with the result of the TREENODE opening/closing its child-content.

Bug Fix – Correct content-type for XLSX download in FIXGRID

Thanks for the input from the community here! So the content-type now is “application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”.

Update 20190813

Improvement – Updated way of installation, option to use JRE11

The installation is now split into two parts:

The reasons behind are:

The JRE11 version that we use is an OpenJDK-based one. We use the JREs that are provided by https://adoptopenjdk.net/.

Improvement – Java 11 Support now “as default”

When using a CaptainCasa application with Java 11 you up to now had to explicitly add some .jar files to the WEB-INF/lib folder. Reason: Java 11 does not contain any JAXB implementation anymore.

We now added the following jar files to our default webcontent (“webappaddons”):

Please make sure that these libraries do not conflict with libraries used on your side.

In case of you using Maven, all dependencies are explicitly defined within your pom.xml definition. When using Java 11 make sure that you have added the following dependency:

         <dependency>

             <groupId>org.glassfish.jaxb</groupId>

             <artifactId>jaxb-runtime</artifactId>

             <version>2.3.1</version>

         </dependency>

 

Bug Fix – Sequence of action-Events in grid different to Swing-Client

In quite special cases the sequence of action events was different between the Swing-Client and the RISC-Client. Concrete: a flush event within a grid cell was executed prior to a row selection event.

Bug Fix – PASSWORD field sometimes did not pass user input

When using the PASSWORD fields without encryption, then it could happen that user input was not correctly transferred. The bug only occurred when editing some existing password value – it did NOT occur when editing some new password – so the bug did not show up in typical logon scenarios.

Bug Fix – FIXGRID-MULTISELECTMODE “1” (click by click...)

When using the MULTISELECTMODE “1” the rendering of selections was sometimes not correctly done: selected items did not show some selection background.

Bug Fix – Menu-Item popups too big, empty menu item

In certain situations (typically if the menu popup is located on the left of the caller due to missing screen space on the right) the menu item popup was rendered too big – some height was added for some potencial scroll bar. The visual impression was that the menu contained an empty item.

Bug Fix – Release of overlaying sub-pages sometimes not done

When executing drag/drop operations (including the drag/drop when scrolling a FIXGRID), then by default all sub-pages (i.e. pages which are embedded by using IFRAME internally) are overlayed by some transparent layer. Background: by doing so, the events for drag/drop-processing are correctly handled also on IFRAME areas. The releasing of the transparent layer was not done in special situations – resulting in the behavior that the embedded pages were not usable.

Improvement – Double click + text selection

In general a double click removes any text selection. Background: by default the browser selects the text under the mouse pointer on double click – sometimes in a quite “wild” way... A typical double click processing e.g. in grids looks quite ugly as consequence, so we added the behavior to remove the text selection.

We now opened up the selection for field controls again, because here the selection is clearly rules (only the text within the field is selected), and because here it is quite convenient for the user to select text by double click.

Bug Fix – Tools: Code Generator did not show action-methods

If action methods were built in the following way...

public void onWhatEverAction(ActionEvent event)

{

    try

    {

        …

    }

    catch (…)

    {

    }

}

 

...then they were not visible in the code generator anymore.

Update 20190805

Change – DRAWAREA now internally uses SVG drawing, not Canvas Drawing

iOS-Safari does not render Canvas properly in some situations – preventing the DRAWAREA to not properly work in some iPad/iPhone scenarios. Luckily the drawing operations of DRAWAREA are very straight forward, so we transferred the HTML5-Canvas-based drawing to SVG-based drawing.

According to our tests the drawing is 100% the same now, it's just a different technology below which is used.

By the way: we did some similar things 2 years ago – when finding out that the rendering performance of HTML5-Canvas is really slow with Canvas-sizes of 10.000 x 10.000 pixels. At this point of time we changed the drawing of PAINTAREALINEITEM-components from HTML5-Canvas to SVG as well – with “perfect” performance results...

Improvement – FIXGRID-SINGLECLICKEXECUTE

This feature was not supported in mobile scenarios up to now. You still had to execute a long touch instead of a short one for executing a grid item. Now the feature is supported.

Bug Fix – TREENODE with contained FIELD, reaction on “space”

Within a tree node you can arrange a sub-component – typically a CHECKBOX or a FIELD-component. It could happen that the reaction on the user pressing “space” on the keyboard not only was managed within the CHECKBOX/FIELD/... - but also was executed within the TREENODE component. Here a “space” opens/closes the tree node.

Update 20190729

Bug Fix – LIST-ENABLED ”false” still editable

When setting attribute ENABLED to “false” then the user was still able to select/deselect items from the list.

Bug Fix – Hover-effects

We now found the “origin problem” behind the problem that was addressed within the last update 20190723 as well (problems with hover-effects and with closing tooltip popups, especially occurring with scaled screens).

Update 20190723

Bug Fix – Hover-effects sometimes “stuck” if browser scale not equals 100%, and: HTML tooltip popups were not removed

When scaling the browser (e.g. by using ctrl-key and mouse wheel) then it could happen, that hover-effects “stuck”. This means: the hover effect (e.g. darkening) was applied when entering the component with the mouse cursor – but it was not removed when moving with the mouse out of the component.

The reason for this is some quite strange event behavior of browsers when components are scaled – our assumption is, that is has to do with “interlacing” two components to one pixel position in case of scaling: a component sends a “mouseover”-event, then sends a “mouseout” event and then, on the last pixel, sends a “mouseover”-event once again, without ever sending a “mouseout” afterwards. This e.g. happens when moving the mouse in an extremely slow way – pixel by pixel.

Anyway, we now help the browser with firing “mouseout” events! ;-)

The same internal problem also caused the “effect” that tooltip popups, when using HTML-tooltips, sometimes were not removed – but continued to wait for some “mouseout” event from the browser, which never was sent...

(By the way: this is/was a nice example of some strange browser processing being solved by some change in the RISC-kernel – in which the eventing is centrally managed.)

Update 20190715

Bug Fix – GRIDCOL-SORTENABLED not updated if bound to expression

The attribute GRIDCOL-SORTENABLED attribute did not react when being updated within some existing grid instance – the enabling/disabling of sorting was following the initial value only.

Bug Fix – CLIENTCONFIG-TABONENTER with implications on TEXTAREA

By setting CLIENTCONFIG-TABONENTER to “true”, you may define, that after pressing the return-key a “tab” is initiated, i.e. the focus is moved to the next component. Of course this does not work for components for which the return-key already is used within the component (e.g. BUTTON). - The TEXTAREA is one of these components, when hitting the return-key within the TEXTAREA, then the user wants to created a new line – and does not intend to focus the next component.

Update 20190711

Bug Fix - Selection in grid was visible twice after server-side selections

The previous two version contained some problem in the grid selection management. In most cases you did not experience this problem at all, but there was the possibility that the user saw two selected rows where he/she should only see one selected row. The problem occurred especially in grids that used the AVOIDROUNDTRIPS feature – but there were also situations in which normal grids were affected.

There was some concrete reason behind the problem which we found and which was related to a change in 20190702. The problem is fixed now and we did a lot of testing. In case there is some confusion with selections in grids within your application: please contact us directly.

Update 20190709

Due to problems in the FIXGRID-selection: please do not use this update in production scenarios!

Improvement – FIXGRID with multiple item selection: keyboard-shift-selection

In grids with attribute MULTISELECT set to “true” the user now can select multiple items with the keyboard as well. Before it was only possible via mouse selection. For selecting the user needs to press the shift-key and then use cursor/page-up/down keys.

Improvement – Beautified default dialogs

The error message dialog and the file upload message dialog were beautified:

Improvement – Scroll-Icons now continuously fire events

The scroll icons (both in the scroll bar of a FIXGRID component and in the right corner of the TABBEDLINE component) now continuously fire scroll events when the user presses the icon for a long time.

Bug Fix – Selection in grid was visible twice after scrolling

In some FIXGRIDs (only these ones with AVOIDROUNDTRIPS being explicitly set to “1” or “2”) it could happen that a selection was visible twice after scrolling.

Bug Fix – No touch popup on PASSWORD

The PASSWORD component did not show any touch popup dialog, though TOUCHSUPPORT being set to value “true”.

Bug Fix – Explicit selection coloring in FIXGRID was sometimes not shown

In the FIXGRID (or ARRAYGRID) you can explicitly define the coloring of selected items (attributes SELECTIONCOLOR1 and SELECTIONCOLOR2). This coloring was not shown in rare cases.

Update 20190702

Due to problems in the FIXGRID-selection: please do not use this update in production scenarios!

Bug Fix – Popup positioning from (BUTTON)MENU – always centered

When calling a popup and when setting an explicit position, then this was ignored if the popup was called from a MENUTITEM. The popup was always centered.

Improvement – Communication between Client and Server: full delta management also on FIXGRID level

When the client talks to the server, then only changes are transferred in both directions. For the FIXGRID processing there was one exception – each grid row was transferred with a minimum set of data with every roundtrip. Now there is a full delta management also on this level.

Bug Fix – Focus management in dialog popups

It could happened that the focus sequence in a popup dialog did not jump back to the first focus-able control when reaching the end of the sequence.

Bug Fix – The parameter “ccscale” did not properly work in 20190626

Setting this scaling-value to something different than “1” did cause errors in the client.

Bug Fix - PASSWORD component, encrypted anonymized password

It could happen that the PASSWORD component encrypted the anonymized representation of a password. There never has been a security risk! The server NEVER sends real password data to the PASSWORD component, but always some anonymized password (“****”).

Bug Fix – Style “defaultrisc201812” contained some red shading

...for disabled combo fields/ combo boxes.

Improvement – Instances of “DefaultScreen”

CaptainCasa internally manages instances of class “DefaultScreen” - one per dialog session. When using COOKIE for session-tracking then this instances were cleaned up at the end of the “big” http-session, but they were not cleaned up at the end of the “small” dialog sessions (browser tab).

Release 6.0 – Q2/2019

Update 20190626

Improvement – PASSWORD with WITHSHOWTEXTICON

The PASSWORD component now provides an attribute WITHSHOWTEXTICON – if set to “true” then the user can view the current password in clear text by clicking an icon within the component.

The icon is only visible during password input.

In general the PASSWORD component never sends a server side password value to the client side! The value of a password is always anonymized into asterisks (“*****”) when it is sent from the server side to the client side.

Improvement – Handling of wrong values within FIELD/FORMATTEDFIELD: server-side roundtrip is suppressed

A FIELD (via regular expressions, REGEX) and a FORMATTEFIELD (via FORMAT) can already check on server side, if a value that a user does input is correct. If the value is incorrect then it is reset to its former value and the user is notified by some error popup.

The popup typically is shown when the user leaves the field (i.e. moves the focus out of the field). - Imagine the following situation: the user defines a wrong value and directtly (with the mouse) presses a button (e.g. “Save”-button).

Up to now the wrong value was replace by its former value, the popup was opened – and the button-action was executed. In case of “Save” this means that the former value of the field is saved, whereas the user wanted to save the new value (though being incorrect). This typically is confusing for the user and might also lead into wrong data being stored on server side.

Now a wrong field input vetoes the roundtrip to the server – i.e. the action behind the button is not called until the user has acknowledged the message popup.

Update 20190618

Some of you were waiting on certain issues, so we decided to publish them as formal update.

Improvement – SCREENGRABBER, new GRABTYPE “dialog”

The SCREENGRABBER component takes some PNG screenshot from the current screen. There are now three possibilities to define the zone which is to be grabbed:

Bug Fix – COMBOBOX last item sometimes hidden by scroll bar

This only occurred if the size of the combo box popup exceeds the width of the available browser window...

Bug Fix – TABBEDLINE styling needed some explicit selection when updating number of contained TABs

When dynamically adding/removing TABBEDLINETAB components within a TABBEDLINE, then it could happen that the styling of added components was not correctly applied. This only happened if no explicit selection was done.

Update 20190617

Bug Fix – Invisible components (e.g. TIMER) failed with JS-Error-message

Last week's version “introduced” some bug, which caused JS errors in the client side processing with invisible components, that triggered serve side actions. Example: TIMER.

This bug is solved with 20190617. Please do update to 20190617 from 20190612!

Improvement - Text Selection in FIELD and TEXTAREA

When editing text in some FIELD or TEXTAREA component, then the text selection can be transferred to the server side application processing in addition to the actual text that is edited. So far the text selection contained the “cartetPosition”, “selectionEnd”- and selectionStart”-position, so that you can find out which text was selected by the user.

Now we added three additional values: the “left”, “top” position of the current caret position – and the “height” of the corresponding character. This information enables you to start a dialog popup directly at the location of the selected text or at the location of the text cursor.

In addition: you can now also set the selection from the server side so that the cursor positioning can be controlled in a fine-granular way.

Please check the corresponding demo in the “New Functions” area of the demo workplace:

Improvement - Opening a dialog “over” a certain component

Modal/ModlessPopup provide a couple of “setLeftTopReference”-methods, which enable you to opene some dialog on top, at the bottom, at the right or left side of some component.

One was missing: the possibility to open a popup at the exact x,y location of some component. This method was added, its name “setLeftTopReferenceComponentIdOver”.

Update 20190612

Update to Maven Project Archetype

The pom.xml now only contains repositories that are connected via “https”. Before the CaptainCasa repository was addressed with “http” only – and there was a second repository, addressed with “http” as well, which was not required anymore at all.

The correct list of repositories is:

    <repositories>

        <repository>

            <id>org.eclnt</id>

            <url>https://www.captaincasademo.com/mavenrepository</url>

        </repository>

    <repository>

       <id>mvnrepository.com</id>

       <url>https://mvnrepository.com/repos/central</url>

    </repository>

        <repository>

            <id>org.outerj</id>

            <url>https://maven.atlassian.com/3rdparty/</url>

        </repository>

    </repositories>

 

Please also adapt existing Maven projects correspondingly in order to avoid some “man in the middle” security attack, when Maven downloads the artifacts.

Styling of points of PAINTAREALINEITEM

The coloring of the line item points are now outsourced in some style values.

    <class n="riscinternal_riscglobal" internal="true">

        ...

        ...

        <!--

        paintarealineitem coloring of interim points

         -->

        <risc n="_paintarealineColorOther" v="#808080"/>

        <risc n="_paintarealineColorMidhorizontal" v="#C0C0C0"/>

        <risc n="_paintarealineColorMidvertical" v="#C0C0C0"/>

        <risc n="_paintarealineColorMidfirst" v="#804040"/>

        <risc n="_paintarealineColorMidlast" v="#804040"/>

        <risc n="_paintarealineColorPoint" v="#808080"/>

        <risc n="_paintarealineColorMid" v="#808080"/>

        ...

        ...

    </class>    

 

Popup opens popup – Improved positioning

By default a dialog popup is opened close to the location of the component which triggered the roundtrip opening the popup. There are cases in which this component is not available anymore when the popup is opened. Typical case: one popup is closed and directly opens the next popup. So the component in the first popup is not available anymore when the second popup is built up.

Now the coordinated of the triggering component are stored in parallel and are available also if the component was removed. Result: smarter positioning of popups for these cases.

Update 20190527

Improvement – Loading of dynamic images

Certain images (e.g. images from text, mirrored images, etc.) are created by server side servlet processing. The URL interface of this servlet made it possible to also operate on non-image files – and this could cause error situations, in which an image was not correctly loaded.

Now the files are checked against a white list of file extensions, which include the “normal” image extensions.

There is also the possibility to configure this list of extensions by adding them into the system.xml configuration file:

     <!--

      *************************************************************************

      Resource path security configuration

      

      Resources that may be potencially read from outside are checked

      against a list of extensions. Example: resources that are read via

      "ccclresource" URL, resources in the area of image management.

      There is a basic list of extensions which is managed in class

      ResourceSecurity and which includes image file name exensions, and

      basic html resources.

      *************************************************************************

     -->

     <!--

     <resourcesecurity additionalextensions="ext1;ext2;ext3"/>

     →

 

Update 20190521

Improvement – Page bean component “Split Dashboard”

A new page bean component for arranging dashboard content was added:

The content is arranged in some nested SPLITPANEs. Content (== page bean instances) can be easily dropped into the dashboard – and moved within the dashboard. The dashboard can be opened in an “enabled”-mode, in which the user can arrange the content – and in some “disabled”-mode, in which the user can only view the content.

Improvement – SPLITPANE-ENABLED

The split pane can now be disabled – in this case the user cannot rearrange the divider location.

Improvement – New http-header-parameter

Any request from the client to the server side now provides a new http-header-parameter “eclnt-timezoneoffset”. The parameter can be accessed by API “HttpSessionAccess.getClientTimeZoneOffset()”, when being called within a request processing context.

Improvement – SCREENGRABBER now also works for dialogs containing images from other servers

The SCREENGRABBER so far did not work when the grabbed area contained some image that way loaded from a server which was not the origin of the dialog.

Update 20190515

Improvement – COLORICON component

The component COLORICON renders an icon which opens up the color selection dialog. In the bottom area of the icon the currently selected color is shown as small horizontal bar.

Bug Fix – Drag/Drop problem in Firefox

There was a drag/drop problem which – rarely! - occurred in Firefox: when using FIXGROD-ROWDROPRECEIVE then the drop event sometimes was not delivered to the item , on top of which the drop was done, but was delivered to the time which was dragged.

Bug Fix – FIXGRID sometimes “flickered” when showing <2 lines

When reducing the size of a FIXGRID with percentage size, it could happen that the content was flickering due to infinite resizing between two positions.

Update 20190506

Bug Fix – FILEUPLOAD*-components: MAX(SINGLE)FILESIZE

The parameter to limit the file size was not considered when also having defined the attribute FILEEXTENSIONS.

Improvement – New Page Bean Component “SplitDashboard”

There is a new page bean component which is part of the addons package (<install>/resources/addons/eclnt_pbc.zip). The class name is “CCSplitDashboard”.

The component manages a dashboard area in which you can drag/drop content. Each content is a page bean that can be implemented without any restrictions on your side. The content is arranged in a series of split panes. The user can drag/drop existing content and by this re-arrange the split panes dynamically.

The structure of the dashboard is either saved implicitly – or the persistence is manages on your side.

Improvement – Tablet/Phone usage: long click starts without releasing finger

So far, a long click (which is the communicated as double-click to the processing) was executed by touching with a finger – and releasing the finger after some longer duration (400ms). Now you do not have to release the finger anymore, the long click is automatically fired.

 

Improvement – iOS usage

Again some improvement for showing the content in iOS browsers (iPad/iPhone).

Bug Fix – CALENDARFIELD - “Today” button

The “Today” button did not take over today's date when the date in the CALENDARFIELD was set to null.

Bug Fix – CALENDAR-EXACTTIME

When setting EXACTTIME to “true” then a day selection is always passing back the start of the day (e.g. when selecting “May, 06th” then “May 06th, 00:00:00” is passed). The definition of EXACTTIME was not considered in the CALENDAR component.

Bug Fix – Right click always triggers grid row selection

If a component within a grid consumed the right click (e.g. by defining a POPUPMENU) then so far the right click was not passed into the grid processing. Now this passing is done automatically.

Update 20190429

Improvement – Directly showing labels in CHARTJS

You now may directly show the values within a CHARTJS diagram – by just setting a dedicated BRIDGEPAGE within the component definition:

Improvement – iOS usage

Due to the fact that the iOS browser (Safari) does not follow the default viewport settings when it comes to scaling a web page...

<meta name="viewport" content="width=device-width,height=device-height,user-scalable=no" />

 

...we did introduce some special reaction on scaling activities of the user. It is now ensured that – if the user scales with a two-fingers-gesture or if the user moves the whole browser window with a one-finger-gesture – the content screen is always correctly positioned and sized into the available browser window space.

Update 20190423

Improvement – Multiple FIXGRIDs: synchronized horizontal scrolling

To be honest: the number of use cases is not too high... - but there are some! When moving the horizontal scroll bar of one grid, then the other one is scrolled as well:

Our (customer) use case: two plans – one showing the availability of persons for a week, the other one showing the orders to be fulfilled at which point of time. When scrolling the one grid then the other one needs to be scrolled as well.

Bug Fix – SELECTALLWHENFOCUSSED with FORMATTEDFIELD, CALENDARFIELD

The functions was not working (especially: the “false” case).

Improvement – Default popup menu item, allowing to copy and paste the text of the component

By using CLIENTCONFIG-POPUPMENUCOPYCLIPBOARD you can automatically provide a popup menu for components containing text. From the menu you can copy the text of the component to the clipboard.

You now have three possibilities of defining the behavior:

Improvement - FIELD* Components: CONVERTEMPTYSTRINGTONULL

If setting this attribute to “true” then empty input values (“”) are converted to null at server side.

Improvement - FIELD*-Components: TRIM

If setting the TRIM attribute to “true” then automatically blank spaces at the begin and at the end of a text that the user did input are cut.

Update 20190408

Improvement – FIELD-MAXLENGTHAUTOTAB

There is a new function and attribute with FIELD controls: by setting MAXLENGTHAUTOTAB to “true”, the focus will automatically move to the next field when reaching the maximum input length of the FIELD. Please note: the auto-tabbing will only be executed if the current text cursor position is at the end of the field.

Improvement – (Beta) New component POOLEDBROWSER

When embedding a (normal) BROWSER component on the screen there may be one problem: the navigation state of the browser is lost, when e.g. hiding the browser and re-opening it or when moving it from one screen location to the next.

To overcome this there now is a new component POOLEDBROWSER. In principal this component is used like a normal BROWSER but in addition has a POOLID - which must only be used once at one point of time. The POOLEDBROWSER actually is not rendered directly in the component area of the component but is rendered centrally and is layered on top of the component's area using the z-index of component positioning.

Whenever the component itself is resized or moved, then the sizing is also applied to the browser on top, so that it fits on top of the component's area. As consequence, hiding and moving the component does not mean that the pooled browser instance is closed (== taken out of the DOM tree), but it is kept alive as invisible component in the background.

Bug Fix – FIXGRID-GRIDCOL, second component: no keyboard input

When using a second component in the GRIDCOL, then this component is rendered into the headline of the grid column:

FIXGRID

  GRIDCOL

    LABEL    <== this is the cell component

    FIELD    <== this component is rendered into the grid column header

 

When using e.g. a FIELD (e.g. for filtering the column content) then there was some blocking of key input within the FIELD component...

Bug Fix – FIXGRID-scrolling on iPad/iPhone

There was some problem with scrolling FIXGRIDs on iPad/iPhone devices: sliding an item to the top/bottom not only moved this item but also moved the whole browser screen.

Update 20190401

Improvement – Extended Drag&Drop features

It is now possible to...

By using attribute DROPRASTERTEXT you can output text on the left top side of the shape representing the dragged component:

There are certain pre-defined possibilities:

By using attribute DROPSHAPE you can add some additional shape when dragging over a component. In the previous example (“schedule”) you see, that a line is output on the left of the dragged component – in addition to the shape of the component.

Please check the demo within the demo workplace (“New Functions”).

Improvement – Demo “Fix grid columns with trees”

A new demo shows how to set up a scenario in which a tree is rendered with fix columns “on the left”:

 

Release 6.0 – Q1/2019

Update 20190325

Bug Fix – File upload components

There were two inconveniences:

Improvement – ROUNDING also supported for FOLDABLEPANE

The ROUNDING attribute is now applied to the FOLDABLEPANE, too.

Update 20190318

Improvement – Missing libraries for Java11 added to resources

There is a new directory “resources/java11usage”. This directory contains the JAXB libraries which were removed from the Java SDK (and runtime) from Java 11 on. The installation guide was updated and now contains details about the installation with Java 11, too.

Improvement – Resources directory of delivery/ies

All deliveries (.exe, .zip) now consistently provide a resources directory in which the appropriate resources are made available.

Bug Fix – Drag&Drop now also starts immediately if dragging component is “drop-able”

When dragging a component from a parent which at same point of time is a component to drop onto, then you before had to move dragged component out of the area of the drop-able component and back in. Now the drop can be done immediately...

Bug Fix – JavaFX – Implicit conversion of “_” in buttons

There was an implicit conversion of characters that is part of the JavaFX button, which we switched off.

Update 20190311

Bug fix – FILEUPLOAD* components

The check if selected files match the extensions that are expected was case-sensitive. As result e.g. “.png” files were accepted for upload, but “.PNG” files were not.

Improvement – New component SCREENGRABBER

The new component grabs the pixels of either a part of the dialog – or of the whole dialog. Please check the demo in the demo workplace (“New Functions”).

When being triggered the component uses the framework “html2canvas” (https://github.com/niklasvh/html2canvas) to transfer the browser's DOM elements into some canvas drawing. As next the canvas content is converted to a png-file on client side, and the file is sent to the server as part of an event.

It's astonishing, what “html2canvas” is doing – and it's astonishing how well it transfers the DOM tree into some drawing. However there are always lacks, so that certain elements are not transferred 100% properly. Result: check the component and the use cases that you want to use it for prior to using this component.

We tested the “convas2html” with all browsers. In Firefox the performance was quite weak for big screens.

Update 20190305

Information – New library esapi.jar

We added the library “esapi.jar” which provides acknowledged function to write e.g. to logs and output streams in a secure way. The library is developed within the context of the OWASP group.

For those ones using Maven, the additional library needs to be embedded by adding the following dependency:

dependency>

    <groupId>org.owasp.esapi</groupId>

    <artifactId>esapi</artifactId>

    <version>2.1.0.1</version>

</dependency>

 

Please note: users of the addon libraries (eclnt_pbc.jar and/or eclnt_ccee.jar):

Information – JSF updated from 2.2.14 to 2.2.18

We updated to the newest 2.2 JSF release. The dependency we now internally use is:

<dependency>

    <groupId>com.sun.faces</groupId>

    <artifactId>jsf-api</artifactId>

    <version>2.2.18</version>

</dependency>

<dependency>

    <groupId>org.glassfish</groupId>

    <artifactId>javax.faces</artifactId>

    <version>2.2.18</version>

</dependency>


You may take over into your Maven configuration – or continue to work with 2.2.14. The reason for updating was to be on the newest current version when being passed through security audits. There was no actual bug or problem that made us upgrade.

By the way: we also tested with the current 2.3 version (2.3.8) and could not find any problems with our projects.

Improvement – Updated version of addons

The addons packages required some update due to the fact that CLog-Logger now refers to funtions of the ESAP-library.

Update 20190301

Improvement – Focus Management in case of removing components

The focus management was updated to better manage the situation in which a component that holds the focus is removed from the screen. Example: you toggle between two buttons, always one of them being visible (e.g. controlled by RENDER flag).

The behavior before was: when a component holding the focus was removed then the focus was automatically set to the browser scope, which is outside the scope of the components within the browser. Result: globally defined hot keys were not reachable any more.

Now the focus is moved to the first focus-able component within the browser content – which then is ready to accept and process hotkeys.

Of course...: you can set the focus on your own to a component of your choice after removing a component! So what was described is just the default behavior, if you do not do anything special.

Improvement – File Upload does not allow upload of files with wrong extension

When explicitly defining a set of extensions to be valid for the upload processing of files, then now these definitions are checked and an upload of files which do not correspond to the definition is not possible. The check is also executed when dragging/dropping files onto the upload components from the file system.

Bug Fix – Drag/Drop problems in Firefox

In certain scenarios the Drop-part did not properly work in Firefox – the component you dragged over was not feeding back to the user that you could drop data.

Improvement – Double-Click and text selection

It's sometimes not easy to decide what to do in the area of text selection. On the one hand it is nice that you can select texts in the browser by double-clicking (in this case the word below the cursor is double clicked). On the other hand it is annoying and it just looks ugly if you double-click an item of a grid in order to select the iem, and then the text where you clicked is selected... We up to now followed the strategy “double-click” does not select the text. Some of you seem to prefer the selection of text. So: if we cannot decide, you are the ones: there is new configuration parameter CLIENTCONFIG-DOUBLECLICKCLEARSTEXTSELECTION. By default it is “true”, you may set to “false”...

Update 20190218

Improvement – Animations with preserved content

Any PANE component can be animated by using the CAPTUREANIMATOR component inside. Up to now it was only possible to define animations in which some e.g. shadowed area was added on top of the PANE, which then was moved or faded out. Now it's possible to define animations that take some snapshot of the current screen content and move/resize this in some direction.

The CAPTUREANIMATOR component provides an attribute ANIMATIONTYPE, which now can be set to:

The CAPTUREANIMATOR is triggered by a server side trigger (attribute TRIGGER). The nice thing: the preserving of the PANE's content is done before changes to the PANE's content are executed on client side. This means: when updating the content of a PANE and triggering the animation, then the animation will happen on the “old” PANE content, not on the updated one. As result, the animation moves the old content out, and the new one gets visible.

Please check the following demos of the demo workplace:

An overview about all animation types is available at: “Components => Animation & Graphic & Sounds => Image Capturer & Animator (1)”.

Finally we added the new animation feature to a workplace configuration screen, in which you can define the animation type that is used when content is updated within a workpage container.

The updated animations are extremely simple to use and are extremely (but not only!) useful in mobile scenarios.

Improvement – BUTTON-ActionEventInvoke with “clickDuration”

The duration between the mouse-down and the mouse-up is now transferred to the server side as property “clickDuration” of BaseActionEventInvoke. It is currently only transferred with clicks from BUTTON controls (including inherited LINK and ICON).

Improvement – Demo on TempFileManager

Providing dynamic download content (or any other content that needs to be made available by URL) is much easier with the “TempFileManager” than with “BufferedContent”. And: the content of the file to download is not kept in the memory of the server but is kept in a working directory (provided by the servlet container) within the file system. This directory is cleaned up as part of closing a session.

We now added an example demonstrating the usage:

Bug Fix – Menu popup with copying component's text

When setting CLIENTCONFIG-POPUPMENUCLIPBOARD to “true” then automatically right mouse button menus (popup menus) are available by which you can copy the text of the clicked component to the clipboard. In certain situations (modal popup and having no own POPUPMENU-definition), this popup menu was not shown.

Bug Fix – Error in sizing dynamically created GIF-image

When using the GIF-format inside dynamically created images then the calculation of the image's size was wrong. The bug affected e.g. the HEXIMAGE component – and the normal IMAGE component when using the pseudo-URL “/hex(238adc27388...)”.

Bug Fix – WEBSOCKETPOLLING only tried to start up 2 times

The WEBSOCKETPOLLING component is some invisible component which sets up a web socket connection to the server, by which events on server side are synchronously transferred to the client side.

If the component is not able to establish a web socket connection then it will retry periodically. This re-trying was only done two times – now it is done for the whole life cycle of the component.

Update 20190211

Improvement – Direct binding within (ROW)DYNAMICCONTENT

So far the creation of dynamic content areas was 100% the same as the direct creation of layout definitions: you define controls via ComponentNode-classes, you assemble them and you assign attribute values. When assigning attribute values you can either pass direct, fix values or you can pass expression values.

While being very straight and direct from concept point of view, the management of expressions is sometimes quite challenging when following this approach. As consequence there is now an alternative that you may use: you can now bind values and processing directly as attribute values – all expression management is done internally.

Please check the example in the demo workplace, section “New Functions”:

In the example you see a grid that is generated as dynamic content. When looking into the Java program you find:

m_grid = new FIXGRIDListBinding<GridItem>(); // create the object which is bound

...

FIXGRIDNode fg = new FIXGRIDNode()

        .bindObjectbinding(m_grid)

        .setWidth("100%")

        .setSbvisibleamount(10);

 

Please note that the grid is NOT made available via a get-ter method (“getGrid()”) but is made available implicitly by using the bind-method.

You also find the processing of buttons being directly bound:

BUTTONNode b = new BUTTONNode()

        .setText("Create new item")

        .setWidth("100+")

        .bindActionListener(new IActionListenerDelegation()

        {

            @Override

            public void onAction(ActionEvent event)

            {

                createNewItem();

            }

        });

 

The listener is directly added – there is no necessity to create some get-able object with some “onActionXxx” method and there is no necessity of explicitly binding this method to the action listener.

How are the expressions generated internally? Basically it is quite simple: the ROWDYNAMICCONTENTBinding object now not only contains the visual layout that you create but it also holds a list of bound objects. The ROWDYNAMICCONTENTBinding object is bound by the dialog processing anyway, so it's quite simple to also make the bound objects available via some expression – which is managed internally.

There are certain possibilities to bind objects:

We believe that this direct binding is some significant simplification for implementing dynamic scenarios. - It is, of course, 100% compatible with the “trdaditional” way of creating dynamic scenarios. Both methodologies (assigning expression values to attributes and direct binding of objects) can be used in parallel.

The documentation (Developer's Guide) will be updated short term.

Bug Fix – Calculation of GIF image sizes was wrong

When using GIF images in dynamic images (HEXIMAGE, IMAGE with “/hex(...)” definition) then the client side calculation of the image size was wrong – and the image was always rendered with size 16x16.

Improvement – ARRAYGRIDListBinding with set/getTitlebackgrounds and set/getTitleforegrounds

You now can directly control the coloring of the column headers.

Improvement – TempFileManager now allows passing of content type

When passing content into the TempFileManager for making at available as URL to the client, then so far the mime type was automatically derived from the name you assigned to the content. Now you can pass the mime type directly. Example: you pass some “.pdf” content, but you want to make it available as directly download-able content via mime type “application/octet”.

Update 20190205

Improvement – New mobile demo in Demo Workplace

Please take a look onto our new demo for mobile applications:

The application is embedded into the demo workplace, but can also be directly called. In the online demo workplace it is available here:

https://www.captaincasademo.com/ccdemos/appvisitor.index.risc

Improvement – New component ROLLINGCONTAINERAREA

There is a new component which is typically used in the context of mobile devices: the ROLLINGCONTAINERAREA (and its contained ROLLINGCONTAINER):

When scrolling vertically then the title of the currently visible area is always kept on top position of the screen. In addition to the textual title you may add icons on the left and on the right.

Improvement – Virtual touch keyboard

The stable virtual touch keyboard which allows to enter text information into any fields comes back to life... (in Swing/FX it was already available...). Please check the following demo:

Improvement – Explicitly setting the focus

We fine-tuned the focus management when it comes to requesting the focus – so that now explicit focus requests by the application (setting the REQUESTFOCUS attribute with an new value from RequestFocusManager) are executed with higher priority than “creation”-focus requests within a dialog definition (REQUESTFOCUS=”creation”).

Bug Fix – Swing Client: text copied to clipboard for TEXTWITHLINKS, TEXTPANE component

When using the feature "popupmenucopyclipboard=true” then the text that you can copy into the clipboard contained one carriage return at the very beginning for some components (TEXTPANE with type “text/html”, TEXTWITHLINKS).

Update 20190122

Improvement – Servlet 2.5 Container Support

With 20190107 we used a servlet 3.0 feature which allows to add servlets by API (and not by web.xml definition). There are certain changes in this update to ensure the compatibility for servelt 2.5 containers.

  <context-param>

    <param-name>org.eclnt.explicitlyManageAllServletsInWebXml</param-name>

    <param-value>true</param-value>

  </context-param>

 

  <!-- ********** Servlets that are registered via API ********************* -->

  <!-- When having switched context parameter "org.eclnt.explicitlyManageAllServletsInWebXml"

       to true, then all servlets need to be registered in the web.xml.

       The following is the list of servelts that are by default registered

       vai servlet-3.0-API. Only uncomment/use if having set the context

       parameter to "true". -->

  <!--

      <servlet id="StyleReaderServlet">

        <servlet-name>StyleReaderServlet</servlet-name>

        <servlet-class>org.eclnt.jsfserver.util.StyleReaderServlet</servlet-class>

        <load-on-startup>1</load-on-startup>

      </servlet>

      <servlet-mapping>

        <servlet-name>StyleReaderServlet</servlet-name>

        <url-pattern>/eclntjsfserver/styles/*</url-pattern>

      </servlet-mapping>

  -->

  <!--

      <servlet id="ClientI18NReaderServlet">

        <servlet-name>ClientI18NReaderServlet</servlet-name>

        <servlet-class>org.eclnt.jsfserver.util.ClientI18NReaderServlet</servlet-class>

        <load-on-startup>1</load-on-startup>

      </servlet>

      <servlet-mapping>

        <servlet-name>ClientI18NReaderServlet</servlet-name>

        <url-pattern>/clientlocalization.i18n</url-pattern>

      </servlet-mapping>

  →

 

  <listener>

    ...

    <listener-class>org.eclnt.jsfserver.util.CCServletContextListener</listener-class>

    ...

  </listener>

 

Improvement – Project setup: speed up copying during “Hot Deploy”

In the project definition (.ccproject-file within your project directory) there are XML-definitions that define how to copy the design time from the project into the runtime of the servlet container (Tomcat) environment. One of the XML-definitions is the “deploycopyinfo”:

    <deploycopyinfo fromdir="${project}/webcontentbuild"

                    todir="${projectdeploy}"/>

    <deploycopyinfo fromdir="${project}/webcontentcc"

                    todir="${projectdeploy}"

                    skipduringhotdeploy="true"/>

 

You now can add the attribute “skipduringhotdeploy” in order to indicate that the corresponding copying of a directory is NOT executed during hot deployment. In the example you see that the “webcontentcc” is NOT copied – because this is a directory which does not change, if not applying a new CaptainCasa version.

Improvement – New attribute “DRAGROUNDTRIP”

All graphical components do support drag/drop by defining a DRAGSEND on the dragging side and a DROPRECEIVE on the receiving side. Now there is a new attribute DRAGROUNDTRIP – if setting it to “true” then an event of type “BaseActionEventDragStarted” is sent to the server side. Part of the event data is the DRAGSEND value of the dragged component – as consequence you e.g. can control the DROPRECEIVE values of receiving components in a fine-granular way.

Improvement – FIXGRID: resizing of percentage columns

The resizing of columns with percentage size definitions is now smarter: if there are several columns with percentage size definitions then these ones which are left of the resized column are not following the percentage size anymore, but receive the actual width they currently have. Consequence: only one column is resized anymore – and not several in parallel as before.

Bug Fix – CAMERA component did not show camera...

Uuuuh – do not tell anyone...: the CAMERA component only worked on devices with two cameras installed.

Improvement – DRAWAREA now supports “polygon” drawing as well

The DRAWAREA allows the drawing of certain shapes. The drawing is executed using an internal HTML5 canvas component. Now the “polygon” statement is supported as well, so you can pass commands like “polygon(x,y,x,y,x,y,x,y,x,y,x,y,x,y,x,y,x,y,color1,color2,vertical/horizontal)”.

The DRAWAREA is often used when transferring complex BGPAINT statements from the former Swing client, so this is a further level of BGPAINT compatibility.

Update 20190114, Update 20190109

Improvement – New adaptive component “ROWMATRIXAREA”

The ROWMATRIXAREA arranges its content components within a matrix:

The width of the matrix cells is defined by the smallest minimum width of the contained components. In the example above this is the 6th component, holding the “First”/”Second” tabbed pane. This width is the one that is used for all components.

In the same way the height of the components that are positioned in one row is defined by the highest minimum height – and is applied to all other components of the row.

When resizing then the matrix is re-calculated...

...and re-calculated...

… and re-calculated:

Fix – pom.xml adapted for Maven-users

The pom.xml was missing a new dependency, which is now included.

        <dependency>

            <groupId>com.google.code.gson</groupId>

            <artifactId>gson</artifactId>

            <version>2.8.5</version>

        </dependency>

Improvement – Code Generator now uses new parser

The tool “Code Generator” within the “Layout Editor” up to now used some “old” Apache code parser which had problems with parsing Java >= 1.8 statements (e.g. lambdas). We now exchanged the parser and now are using “JavaParser” (http://javaparser.org/) - which supports all Java releases.

Improvement – ImageIO-usage

For internal purposes we use the Java-class “ImageIO” - e.g. for calculating the size of an image. What we did not know so far: this class sometimes uses the file system! The class writes certain cache information into the temp directory. If this temp directory now is not write-able then some error is thrown.

Concrete consequence: the image size is not calculated properly. - You for example see images which should be sized properly, but which are actually sized with “16x16”.

Now we explicitly set the cache-directory to the ImageIO-class. The directory we use is the temp directory which is granted by the servlet container. For Tomcat this is the “tomcat/work/Catalina/localhost/<webapp>” directory.

Fix – Style class was overridden when using COMBOFIELD-EDITABLE

When defining some own style class for a COMBOFIELD then this style class was overridden when using the EDITABLE attribute. Same with COMBOBOX.

"Update 20190107

Improvement – Style management, no generation required anymore

A CaptainCasa style consists out of 2 XML files – one for the CSS style class definitions and one for attribute-preset-definitions. Both were used to generate a “.css” and a “.js” file, which were the compiled results of the style definitions.

This explicit compilation is not required anymore: both the “.css” and the “.js” file are now generated dynamically. Or to be more precise: the “.js” file is not generated anymore, but an equivalent JSON-String is now generated which is accessed by the client side processing.

When changing the style (e.g. by using the CaptainCasa Style Editor) at development time then please do not forget...:

Improvement – Style management, runtime change of style

Based on the dynamic management of style information it is now possible to change the style at runtime. Please check the corresponding example in the demo workplace (section “New Functions”).

Improvement – Text selection via mouse-cursor

By default the selection only was enabled for FIELD- and TEXTAREA-components. We now opened up for LABEL and TEXTPANE as well – and added some functions to bypass the negative consequences of text selection (e.g. during drag/drop operations).

Improvement – Focus management

The focus management was improved in different areas. Example: when closing a popup dialog then the focus management by default moved the focus into the component which opened the dialoge. Now this only happens if no other component requested for the focus.

Improvement – Client Internationalization

The I18N aspects of the client were moved out of the direct JavaScript processing into configuration files on server side. Take a look into webcontentcc/eclnt/risc/i18n and you will see the definitions of country and language settings.

In addition there is now a server side API (class ClientI18NReader) which provides functions to get all known client side locales.

Improvement – Grid cell border rendering

By default the BORDER of a component within a grid cell is overridden by the border processing of the grid. You now can set attribute GRIDCOL-KEEPCELLBORDER to “true”: as consequence there is NO overriding of any border.

Improvement – Component-INVOKEEVENT with value “mousedown”

When assigning an INVOKEVENT to a component, then the component will react on mouse clicks by calling its actionListener. We now added value “mousedown” as new value. Typical usage scenario: you want the actionListener to be executed directly on mouse down, e.g. before any drag/drop operation is executed.

Improvement – Layout Editor: Bean Browser does not lock jar files anymore

The Bean Browser tool introspects classes of your development project in order to show a tree of available managed bean classes. To do so it internally creates a class loader in which all the .class/.jar files are added. This class loader so far locked the corresponding .jar files on file system level. - Now the class loader does not access the original files but creates a copied version within the servlet temp directory (with Tomcat: tomcatserver/work/Catalina/localhost/editor). As consequence the original files are not locked, but the locks are applied to the files which were copied from the original files.

Release 6.0 – Q4/2018

Update 20181217

Bug Fix – RADIOBUTTON style lost when assigning CLIENTNAME

...when assigning a CLIENTNAME to a RADIOBUTTON then its style got completely lost.

Improvement – Rendering of FONTICONs (Firefox)

When using FONTICONs (or there concrete implementation AWESOMEFONTICON) then some icons were shifted vertically by one pixel in Friefox browser.

Bug Fix – Focus coloring was kept when switching to ENABLED=”false”

When focusing a component (e.g. a FIELD) and when causing a round trip (e.g. by a function key or by TIMER event) and when changing the component enabled status from “enabled” to “disabled”, then the focus coloring in the component was kept – even if leaving the component.

Improvement – IWorkpageLifecycleListener.reactOnReselectedInContentArea()

The workpage life cycle listener now provides a new method, which:

    /**

     * The page already was shown in content area, but the user re-selected

     * the page (e.g. by pressing a second time onto the workpage-selector.

     */

    public void reactOnReselectedInContentArea();

 

Before there was no specific event thrown when the user re-selected a workpage.

Improvement – Security issues in servlet processing

The servlet processing in the area of

was improved: the servlets are not usable outside some session context. In addition the servlets (e.g. UploadContentServlet) check earlier than before if they are called in some valid context. With DynamicImageServlet it is not possible anymore to create “stupid” requests (e.g. create a dynamic image representation of a text with font size 10.000...) which may block the server and communication processing for some while.

Thanks to some Austrian community heroes who gave some great feedback on this.

Update 20181210

Improvement – CAMERA component with switch of back/front camera

In case there is more than one camera component available with your device (e.g. back/front camera of mobile device), there is now a button to toggle through the cameras that are available.

Bug Fix – CAMERA deactivated after switching tabs

When positioning the CAMERA component within a tab component (e.g. TABBEDPANE) then it could happen that the CAMERA was not re-activated when switching between the tabs.

Bug Fix – SCROLLPANE-SCROLLPOSITION sometimes not applied

When actively setting the scroll position of a SCROLLPANE, then it was sometimes not correctly applied on client side, esp. if the dialog within the SCROLLPANE contained a lot of TEXTPANE elements.

Improvement – French Localization

Some Swiss community heroes passed the French translation of client literals to us. Thanks a lot!!!

Improvement – FULLSCREENBUTTON now toggles

The button now toggles between full screen and normal screen. Thanks to Roland Heinrichs for sending the code to me on this issue!!!

Update 20181203

Improvement – Update default style “default201812risc”

Up to now the default style was “defaultlightbluerisc” - now it is “default201812risc”. The updated style bases on the previous style, of course but has some core differences:

Of course the “old” style(s) are still available and supported!

Improvement – Take a photo via built in camera

The new CAMERA component allows to take a photo via the built in camera of your device. Please check the corresponding demo in the demo workplace (“New functions”).

The component requires some activation approval by the user – and is not supported on IE 10/11.

Improvement – Find current geo location

The component GEOLOCATION transfers the current geo location of the browser to the server side:

The component requires some activation approval by the user – and is not supported on IE 10/11.

Improvement – Switch to full screen

The component FULLSCREENBUTTON is a button that switches the current content to be displayed in full screen mode.

This is especially useful in mobile scenarios, where the default header area of the browser does take quite some space.

Update 20181126

Improvement – Focus Management

When clicking into a non-focus-able area (e.g. somewhere on the screen) the focus was moved to the top component internally (the one that directly is placed into the browser window). When the user then pressed “tab” then the focus sequence started from the very beginning, typically moving the focus to the top left component.

Now the focus management keeps in mind the last click, and the component it was executed on. So the next “tab” of the user will not start at the very beginning, but close to the area of the last click.

Improvement – Focus Management

When requesting the focus e.g. for a FIELD within a TABBEDPANETAB or within a FOLDABLEPANE, the focus-ing only worked, if the FIELD was currently visible. Now the focus request automatically opens the right tab-page in the TABBEDPANE component, and it opens up the FOLDABLEPANE it is closed and the focus is requested inside.

Bug Fix – TABBEDLINETAB with close icon – wrong tab closed

When clicking onto the (optional) close-icon of TABBEDLINETAB component, then always the currently selected tab was closed – not the one that was clicked. The bug e.g. occurred within the workplace processing where the TABBEDLINETAB is internally used for selecting/managing workpages.

Bug Fix – Scroll bar in FIXGRID showed wrong scroll position after scrolling with mouse wheel

...now the position always is correct...

Improvement – SCHEDULEITEM-VALIGN

The text in SCHEDULEITEM component can now be aligned vertically as well.

Update 20181119

Improvement – New component QRCODEREADERJSQR

We embedded the JSQR framework as component into our standard component library:

Result: you can scan QR codes as part of your application.

Information about the JSQR framework is available via https://github.com/cozmo/jsQR. The framework's license is the “Apache 2.0” license.

Improvement – Column resizing in FIXGRID: only the currently sized column is transferred into a pixel size

When the user resized one column of a grid then up to now the sizes of all grid columns were transferred into their actual pixel values. Now this only happens with the actually sized column – the other columns keep their original size. The advantage: if a column's size is defined as e.g. percentage value (“100%”), then this value is not replaced by a pixel value. This makes resizing much “smoother”.

Example: the user resized the “Region” column:

...all the percentage definitions of the other columns are kept – the grid is “filled”.

Please note: it's good practice to always define a minimum size value for a percentage column size: “100%;100” means that the column should take all remaining available size, but never should get smaller than 100 pixels.

Bug Fix – Text in buttons was cut when using vertical text positioning

With 2018112 we delivered some bug, in which the text of buttons – if not placed on top or below the button image was cut by some pixels.

Bug Fix – (ROW)DYNAMICCONTENT in grid item that itself contains (ROW)DYNAMICCONTENT

The (ROW)DYNAMICCONTENT component allows to define dynamic dialog content within a dedicated area of a layout definition. To make it more complex, you may also nest (ROW)DYNAMICCONTENT components – so that dynamic content is created that internally again contains dynamic content. - If the result is really understand-able in an easy way, that's your choice! ;-)

When doing this nesting inside a grid cell (i.e. below some GRIDCOL definition), then the nested (ROW)DYNAMICCONTENT did not received the grid information that is required to transfer relative “.{...}”-expressions into real expressions. Result: the binding in the nested (ROW)DYNAMICCONTENT components did not properly work.

FX Client, Improvement – CLIENTCONFIG-SHOWFOOTERLINE

You now can dynamically switch on/off the footer line of the client. The footer line is the one showing performance information on the bottom right of the window.

Update 20181114

We published some quick update because of update functions some of you were waiting for. There is no e.g. reason like “severe bug” that is the motivation behind!

Improvement – PASSWORD-DELETEONFOCUS

There is a new attribute PASSWORD-DELETEONFOCUS. When switching to true then the password value is removed every time the user tabs in – e.g. by clicking the field and/or by navigating into the field.

Improvement – PageBeanComponent “CCMultiValueSelection”

The component now provides some type of filter. If setting propert “availableFilterBar” to true (i.e. calling the corresponding set-ter), then the component shows some search field. The items that correspond to the filter text are sorted to the top and are drawn with some darker background color.

Improvement/Bug Fix – BUTTONMENU with icon

There are two improvements:

Improvement - Chinese touch keyboard now also supported “pinyin”

We extended the configuration of the Chinese keyboard. Please check the corresponding demo (“New Functions”). We are still pointing out that the Chinese keyboard is in “beta mode” and appreciate the feedback that some community members are passing to us!

Improvement – AUTOCOMPLET-DRAWODDEVENROWS

The attribute is now supported.

Bug Fix – OVERLAYAREAITEM-X/Y not shown in Layout Editor

In the Layout Editor the X and Y attribute were not visible anymore, due to some “too ambitious filtering” that we defined...

Update 20181112

Improvement – Some security issues

During some audit some flaws were detected by some static scanner. None of them was categorized as being critical. - This is the summary of reactions on your side.

Improvement - Popup style “riscdialogpopup_transparent”

The style class “riscdialogpopup_transparent” can be assigned to some modal/modeless popup dialog. As result there is no background coloring at all within the popup.

Please check the example in the demo workplace (“New Functions”).

Improvement – Caching of CSS and JS files

Maybe you have noticed: a “.risc” page internally references its “.css” and “.js” files by using a URL containing a version stamp (“http://..../xyz.risc?version=20181112”). This stamp ensures that the corresponding files are reloaded when e.g. changing the server version.

We not introduced a “CacheFilter” which adds corresponding header information so that these files are cached within the browser. This especially speeds up the “preview performance” within the Layout Editor.

The CacheFileter is part of new projects automatically, you may take over into your existing project by editing web.xml and adding:

  <filter>

    <filter-name>org.eclnt.jsfserver.util.CacheFilter</filter-name>

    <filter-class>org.eclnt.jsfserver.util.CacheFilter</filter-class>

  </filter>

  <filter-mapping>

    <filter-name>org.eclnt.jsfserver.util.CacheFilter</filter-name>

    <url-pattern>*.js</url-pattern>

  </filter-mapping>

  <filter-mapping>

    <filter-name>org.eclnt.jsfserver.util.CacheFilter</filter-name>

    <url-pattern>*.css</url-pattern>

  </filter-mapping>

 

Improvement – IBufferedContent / IBufferedStreamContent: possibilty to write data to http response header

The interfaces were enhanced and now provide the following method:

    /**

     * This methods is called at the very beginning of the response processing.

     * It allows to e.g. set http-header parameters within the response.

     */

    public void preProcessResponse(HttpServletResponse response);

 

The default implementation in “DefaultBuffered(Stream)Content” is:

    /**

     * In the default implementation the header parameter "x-frame-options" is set

     * to "sameorigin" so that the buffered content is not embed-able into pages

     * coming from some different host. You may override this behavior.

     */

    public void preProcessResponse(HttpServletResponse response)

    {

        response.setHeader("x-frame-options","sameorigin");

    }

 

Improvement – Item Detail popup in FIXGRID processing

By using function “FIXGRIDList/TreeBinding.getRowDataUI().onOpenRowDataPopup” you can open a default detail dialog for grid items:

You now can fine control the width/height by accessing corresponding methods in “FIXGRIDList/TreeBinding.getRowDataUI()”.

Update 20181106

Improvement – Setting SHADOW of components

You now can explicitly define the shadow of a component using the SHADOW attribute. Please check the corresponding demo in the demo workplace.

Improvement – Finding the size of an image

CaptainCasa provides a server side function to calculate the size of an image. This function reads the image and calculate its size. For reading the image by default the web application context is accessed, so that the image is read through a function provided by the servlet container.

You now can extend this reading of the image by some own logic, by implementing interface “IimageReader”:

package org.eclnt.util.image;

 

/**

* Interface to read am image within the server side image processin (which is

* e.g used when image sizes are calculated on server side).

* <br><br>

* The implementation may return null if it cannot read the image on its own - then

* the default way of reading the image is used. The implementation class should

* check the image name, if it's applicable for own read-processing and then either return

* null (if not applicable) or return the image bytes.

* <br><br>

* The class is registered in eclntjsfserver/config/system.xml.

*/

public interface IImageReader

{

    /**

     * @param image

     * The path to the image: either a path like "/xxx/yyy/abc.png" or a

     * URL like "http://...."

     *

     * @return

     * If null is returned then the default way of reading the image is used.

     */

    public byte[] readImage(String image);

}

 

The implementation needs to be registered in system.xml. There is a corresponding section in system.xml_template, which you can use to copy/paste from:

    <!--

      *************************************************************************

      Server image manager.

      *************************************************************************

     -->

     <serverimagemanager

        imagereaderclassname="...implementation class of IImageReader..."

     />

 

 

Improvement/Bug Fix – Stamping of .js files that are generated for each style

When loading a .risc page then all “.js” and “.css” resources are read via a URL containing some “stamp”. This stamp by default is the version number of the CaptainCasa release. For own styles the stamp is (or better: should be) a unique number. - Unfortunately this unique number was not used for reading the “.js” file that comes with a custom style definition.

In addition you may take over the stamping completely on your own. For this purpose there is a new interface “IVersionStamp” - you may implement some own algorithm and register your implementation within system.xml configuration file. Please use the template system.xml_template to copy/paste from.

Bug Fix – Slider did not update text values

When defining a slider with explicit labels then the labels were not updated when changing their value.

Update 20181029

Improvement – Sizing of external images

Up to now you had to explicitly size external images (i.e. images that are not part of your local web application but that have some explicit URL, pointing to some other server). Now the sizing is automatically done for these images as well.

Bug Fix – “focused” style class set on wrong level for COMBO* compoo components

The “focused” style class that is added to components that receive the focus (introduced with the update of the previous week) was set on the wrong level for COMBO* components. (E.g. COMBOFIELD, COMBOBOX,...).

Bug Fix – Sequence of lines in TOUCH-keyboard wrong in IE/Edge

The sequence of the lines were not following the definition in the touchlayouts.xml file in IE and Edge.

Improvement – Java-Swing Client: number of sockets from client to server

The number of sockets that are opened when the Java client communicates to the server-side was up to now not customizable – the default is 5. We now had examples (with quite some usage of long polling) when this number was not sufficient. The parameter name is "httpmaxconnections”.

Update 20181022

Improvement – RISC Style Management “focused”

The style class “focused” is now added to any element that receives the focus. You can as consequence define combined style classes like “xyzcontrolclass.focused” which then update the style of the corresponding control.

Improvement – Chinese touch keyboard (Beta!)

We added a Chinese “cangjie”-style touch keyboard to the demo workplace. Please take a look into the corresponding definition in “/demos/eclntjsfserver/touchlayouts.xml”, where you can find the rules for translating such types of keyboards.

Please pay attention: this part of the system has a beta-status. We appreciate to receive feedback on this!

Improvement – CLIENTNAME attribute

Base on the community feedback of an active user we added CLIENTNAME processing to some of the controls where it was not available right now: ROWTABBEDPANE, ROWTABBEDPANETAB, ROWTABBEDLINECONTAINER, ROWTABBEDLINECONTAINERTAB, OUTLOOKBAR, OUTLOOKBARCONTENT, OUTLOOKBARITEM.

The CLIENTNAME value is the one that is passed into the component as “independent” identification that is used for e.g. test tools, to recognize client components.

Bug Fix – SCHEDULEITEM-TOOLTIP

It could happen that the tooltip was not shown – if the text of the SCHEDULEITEM exceeded its available space. Instead the text was shown as tooltip.

Improvement – OSMVIEWERWAYPOINT

The way points are now rendered at their 0,0-position. Before the were rendered at their center position.

Bug Fix- CALENDARFIELD did not pass its value on Android/iOS

Updates to the date were not passed into the application.

Update 20181007

Bug Fix – Resolution of style values

Since update 20180924 you can re-use “@...@” parameters of the “CSS style” in the style.xml definitions of the “component style” definition. There was a bug in the inheritance management – consequence: the style took over the value of parameters of the parent style where it should use own definitions.

Improvement – OSMVIEWERWAYPOINT, new attribute MARKERIMAGEWIDTH/HEIGHT

The OpenLayer library that is used internally for rendering OSM maps by default renders way point images with a size of 20x20. You now can explicitly define the size by two attributes MARKERIMAGEWIDTH and MARKERIMAGEHEIGHT.

Improvement – Test-ability with PageBeans

All visual controls provide a CLIENTNAME attribute which is passed to the client so that test tools have some stable name for identifying components. If using PageBeans and especially if re-using the same PageBean-class many times in a page, then it was not simple up to now to really assign different CLIENTNAMEs to the different contained components of the PageBean instances.

Now it's much easier: you can assign a CLIENTNAME to all “including” components: ROWINCLUDE, ROWPAGEBEANINCLUDE, PAGEBEANINCLUDE and PAGEBEANCOMPONENT. The value of the CLIENTNAME is prepended to all CLIENTNAME values which are contained in the page bean. So if you define ROWPAGEBEANINCLUDE-CLIENTNAME as “address” and id the page bean itself contains a FIELD with FIELD-CLIENTNAME “street”, then the whole client name which is passed to the visual component is “address.street”.

This prepending of client names also works in nested scenarios, i.e. one page bean containing another page bean, containing another page bean, etc.

Update 20181001

Improvement – Client performance increase due to switching off logging

Our this week's community heroes are the developers from Prologistik! They informed use about their observations that switching off the client side logging gives some significant performance increase. We ourselves knew that logging costs performance if having the developer view of the browser switched on, because then logging is really output – but we did not expect that it has some runtime aspect as well, when having the developer view switched off.

The performance increase is in a range of 15-20% in general, but there are also scenarios in which it is higher.

By default the logging is now switched off on client side (JavaScript). You can switch on in two ways:

Improvement – New animation type “shake”

...this is something nice! ;-) If animating an area then the area vibrates for a short duration of time. Please check by opening the corresponding demo in the demo workplace (“New Functions”).

Improvement – Animation applied to opening a popup

You now can define an animation that is executed when opening a popup dialog. Use method “ModalPopup/ModelessPopup.setAnimationType(...)”. By default (style.xml in defaultrisc-style) we added animation “fogdark”. You may override or switch off by setting value “noanimation”. Please check the corresponding demo in the demo workplace:

Improvement – Default grid popup for “export”

Up to now there were two default popup dialogs within the grid processing:

We now separated the “export” as additional, own popup as well:

The corresponding method to bind e.g. to button's ACTIONLISTENER is “FIXGRIDList/TreeBinding.onOpenGridExportFunctions(...)”.

Release 6.0 – Q3/2018

Update 20180924

Bug Fix – Shift Selection with noisy “beeps”

In certain scenarios it could happen that while doing shift-click selections in the FIXGRID-component there was a constant “beep”-sound. The sound was triggered by the blocking screen and by the shift-key periodically sending shift-keydown events.

Improvement – Client localization

The following client localizations were added:

Improvement – Shift-click selections in IE10 without text selection

When doing shift-click selections (e.g. in the FIXGRID) then in IE10/11 the browser text selection was activated, so that certain parts of the screen text were marked. Now there is no text selection anymore.

Improvement - “@...@” variables/style values can be directly used also in style.xml value definitions

If defining variables with the name “@...@” within the style processing (both in the CSS stlye definition and in the style.xml definition) then the variable can be directly used within the style.xml value definitions.

Update 20180919

Improvement – Access CSS XML variable values

The CSS XML variables (“@xxx@”) are now both usable as normal “style.xml”-style-values as well. Please check the corresponding demo in the Demo Workplace (“New Functions”).

Improvement – Demo Workplace with Grid Performance Check

Grid components are multiplying out controls row by row. (Please do not mix “row” with “grid item”: the “row” is limited by the “sbsvisibleamount” value – while the number of “item”s can be unlimited!).

Bug Fix – FIXGRID not scrolling at right position

There were certain (special) situations, in which the scroll bar did not represent the actual scrolling status in the FIXGRID processing.

Improvement – Translations

We received Chinese literals for the the RISC client – thanks a lot to the FORCAM development team! We also received updated Spain translations for the – thanks to the Egger development team!

Improvement – One touch navigation within the SPLITPANE

The SPLITPANE now supports the attribute ONETOUCHNAVIGATION:

When setting to “true” then little navigation items are rendered into the divider area.

Bug Fix – AUTOCOMPLETE-FLUSH

The FLUSH event was triggered when opening the AUTOCOMPLETE value selection already. Now it is triggered when the value was selected from the list of proposals and/or when the user leaves the component (and having changed the value).

Update 20180903

Improvement – Easy way to store files that are reachable by the client via URL

The problem: you want to create content on server side (e.g. a generated HTML or PDF page) and this content should be loaded into the client via a URL.

There is a sophisticated way that is provided in CaptainCasa – the “BufferedContentMgr”... - and now there is a “cheap” variant: you just copy the data to a so called “TempFileManager” and receive back the URL. The TempFileManager internally stores the data within the temp directory of the servlet container – and ensures that you are only able to access the content within the context of your session. The files are removed from the temp directory when the session is closed.

    public String getUrl() { return m_url; }

 

    public void onCreateFileAction(javax.faces.event.ActionEvent event)

    {

        byte[] bytes = m_html.getBytes("UTF-8");

        String path = "demo.html";

        m_url = TempFileManager.saveTempFile(path,bytes);

    }

 

Please check the demo in the demo workplace (“New Functions”).

Bug Fix – CLIENTNAME not passed into popup dialogs

The attribute CLIENTNAME (e.g. used by testing tools to identify content) was not passed into popup dialogs. In addition a couple of default dialogs (e.g. Combobox-popup, calendar-popup, …) received some default client name.

Improvement – OSMVIEWERWAYPOINT

If you did not pass a text with a way point then it was not possible to receive the selection event of the way point because the selection was bound to the text popup showing up. Now the selection is independent from this popup.

Bug Fix – File upload of files containing a “&” in their name

There was a problem if the file name of the uploaded file itself contained a “&”.

Update 20180827_2

Due to a bug in 20180827 we delivered update 20180827_2. With 20180827 there was a problem starting the RISC client with IE – the newly introduced start image did not disappear.

Update 20180827

ATTENTION – JAVA CLIENT USERS: NEW CERTIFICATE

Our certificate expired on 20180824 – so we now user our new certificate, which is valid for the next 4 years... - It is again a certificate which is granted by Comodo.

For these ones of you that use some own certificate (which is the definitely recommended way): no change at all, you are doing it the right way!

For these ones of you that somehow bypassed using some own certificate and that are distributing the CatpainCasa Swing Client with CaptainCasa's version: there is the risk that old Java versions may not accept this certificate because the root authority is not registered in the corresponding Java version.

The root certificates that the CaptainCasa certifcate is based on were added to Java 8.51 (see: https://www.oracle.com/technetwork/java/javase/8u51-relnotes-2587590.html). This means: the certificate will appear as “unknown/self signed” certificate for all Java versions < Java 8.51.

Java 8.51 was published at July 14th 2015, which is three years ago – so we assume most of the users should have adapted (and should have adapted due to security vulnerabilities of previous released).

Please contact us in case of questions!

Improvement – Some optical issues

We did some beautifications...

All issues are configured within the style. This means: please update your styles when not using the default ones.

Bug Fix – Sizing of images loaded with BufferedContent

If images were dynamically loaded via BufferedContent then there default size was not calculated properly.

Improvement – Nicer message if client does not support cookies

If using mode “COOKIE” for session management and if a client does not support cookies, then there is a corresponding error message, that exactly tells what's going on.

Update 20180820

Improvement – Menus with scroll bar

Menus now show scroll bars if they contain too many items:

Improvement – Calendar selection by double-click

When opening the CALENDARFIELD popup and when showing both date and time, then the take over of the selected date/time now is done by double-clicking a calendar day as well. So you do not have to use th OK button all the time.

Improvement – FORMATTEDFIELD with MINVALUE and MAXVALUE

You now can assign a MINVALUE and MAXVALUE to the FORMATTEDFIELD to pass the range of numeric values that can be defined by the user. (Please note: when using data type “date” then you still have to use FROMDATE and TODATE...)

Bug Fix – Missing pixel with “g” character

We could not believe (and could not reproduce it at the beginning...). In special constellations (browser Mozilla, scale of 130%) some bottom pixels were missing with the “g” character. Finall we found some rounding problem on our side, which caused this...

Bug Fix – FIXGRID scrolling activated by cursor keys in footer

When pressing up/down in some footer line of the grid, then the scrolling of the content was triggered. Now the scrolling only is triggered if the cursor keys are pressed inside the scroll-able grid content.

Update 20180813

Improvement – TEXTPANE-WORDWRAP

There is a new attribute on TEXTPANE level: if setting WORDWRAP to “true” then long words of a text will be broken if the width for the text is not sufficient:

Improvement/ Bug-Fix – USERHINT

The user hint popup was not showing up with certain components (e.g. CALENDARFIELD).

The user hint did not update when it was shown and changed due to a server round trip.

And finally: the user hint was up to now shown below a component, now it is on top. Reason: there is no conflict with dialogs showing up with a combo box, calendar field etc.

Improvement – Explicit ANIMATIONTYPE “noanimation”

Some components provide some animation, and allow to customize this animation via an attribute ANIMATIONTYPE. The animation type “noanimation” now is consistently supported throughout all these components.

Bug Fix – CCEE-Addon: java.util.Date, wrong mapping

Properties of type “java.util.Date” were mapped to “java.sql.Date” when writing data. Now the mapping is correct – “java.util.Date” is mappend to “java.sql.Timestamp”.

Update 20180807

Improvement – Mini focus animation in FIELD/RADIOBUTTON/CHECKBOX controls

When tabbing into certain controls then a certain animation is started – the bottom area of the control is highlighted and the highlighting is fading out.

Is this “animation for no serious purpose”? ;-) We do not believe so: especially when quickly tabbing through dialogs or through lists, then it is now much easier to follow where the current focus is located.

The animation is part of the styling – and you can switch off or change it within your own style definition.

Please note:

Improvement – ROW-CASACADERENDEREDFALS: Casacading “rendered=false” also for row

With container components there was already the attribute CASDACDERENDEREDFALSE, which means: if all content components of a container are not rendered, then the container is not rendered as well.

This property is now also supported for the ROW component: if the row content components are not rendered then the ROW itself also will not be rendered. - Please check the corresponding demo in the demo workplace (“New Functions”).

Improvement – New TIMER mode

The TIMER component sends events from the client to the server. It is configured by a DURATION and a DURATIONTYPE.

So far the following usage modes were supported:

Now there is a new timer mode:

What's a good use case for this new timer mode:

Bug Fix – SHIFTCONTAINER buttons not shown

If initializing the VALUE of the SHIFTCONTAINER component to a number different than “0”, then the SHIFTCONTAINER showed the correct content, but the navigation buttons were not correctly drawn (typically: the left/top navigation button was missing).

Improvement – Java Swing Client: management of scale

In the Swing client there is a dialog that is showing up if the user presses the ctrl-key and the user spins the mouse wheel. In this dialog there is a slider for defining the scale of the dialog.

This dialog can now be switched off by setting the new client parameter “showsizingdialog” to “false”.

In addition the actual client scale is sent to the server side with http-header-parameter “eclnt-scale”.

 

Update 20180730

Improvement – SLIDER component now supports FLUSHTIMER

After a certain time of inactivity the slider sends out its value change without the user releasing the mouse button.

Improvement - “<html>...</html>” in GRIDCOL-TEXT

You now can directly pass HTML content in the GRIDCOL component as well.

Bug Fix – CALENDARFIELD/FORMATTEDFIELD: problem with fast input of date

In the calendar components you can key in short versions of the date e.g. “010112” for the 1st of January 2012. The short version with 8 characters (“01011912” for 1st of January 1912) did not properly work.

Bug Fix – MENU/MENUITEM/POPUPMENU

The item that was selected once was shown as focused item when re-opening the menu.

Improvement – CCEE-Addon

Please check the CCEE-docu for detailed information.

Update 20180723

Improvement – Automated adaptation of date/number fields after client-localization update

By using CLIENTCONFIG-COUNTRY/LANGUAGE you can update the client internationalization settings. Up to now, it was required to trigger the client to reload its content in order to re-initialize the controls.

This is not required anymore – the update of the internationalization is immediately down – without any special action being required.

Improvement – SLIDER now shows a value label when being moved

When the user moves the slider with the mouse then the current value is output next to the slider grabber. If you do not like this, then you can switch off by setting SLIDER-SHOWCURRENTVALUE to false.

Improvement – CCEE Framework added in “resources” folder

During various projects we developed some simple framework for covering the most important requirements on application processing side:

We saw that this framework was highly appreciated by these ones who know about – and now added it to the standard delivery - together with its code, with documentation (JavaDoc + pdf).

Please check “<installdir>/resources/eclnt_ccee.zip”.

...of course: you may use the framework, change it, copy it, whatever! The framework is an addon to CaptanCasa, so does not belong to CaptainCasa's Enterprise Client from service, support and warranty point of view.

Any feedback on CCEE is appreciated!

Update 20180716

Improvement – Language “Norwegian” was added to the client languages

Thanks a lot to Nexus Group for providing the translation information!

Improvement – WEBSOCKETLONGPOLLING for long polling that is based on web socket communication

The new components listens to server side events by setting up a web socket communication. The usage is the same as you are used to from the LONGPOLLING component: on server side you have to use an instance of “DefaultLongPollingWebSocket” and register this in the “LongPollingMgr”. The interface for waking up the client side (“ILongPolling”) is also the same.

Please check the example in the demo workplace.

JSP:

<%@page contentType="text/html"%>

<%@page pageEncoding="UTF-8"%>

 

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>

<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

 

<%@taglib prefix="t" uri="/WEB-INF/eclnt"%>

<%@taglib prefix="demo" uri="/WEB-INF/democontrols"%>

<%@taglib prefix="ccaddons" uri="/WEB-INF/ccaddons"%>

 

 

<!-- ========== CONTENT BEGIN ========== -->

<f:view>

    <h:form>

        <f:subview id="workplace_demowebsocketpollingg_sv">

            <t:beanprocessing id="g_1">

                <t:websocketpolling id="g_2"

                    actionListener="#{d.DemoWebSocketPolling.onWebSocketAction}"

                    duration="100"

                    websocketurl="#{d.DemoWebSocketPolling.webSocketUrl}" />

            </t:beanprocessing>

            <t:rowbodypane id="g_3" rowdistance="5">

                <t:row id="g_4">

                    <t:label id="g_5" text="URL" width="100" />

                    <t:label id="g_6" cutwidth="true"

                        text="#{d.DemoWebSocketPolling.webSocketUrl}" width="100%" />

                </t:row>

                <t:row id="g_7">

                    <t:coldistance id="g_8" width="100" />

                    <t:button id="g_9"

                        actionListener="#{d.DemoWebSocketPolling.onStopAction}"

                        text="Stop thread processing" />

                    <t:coldistance id="g_10" width="5" />

                    <t:button id="g_11"

                        actionListener="#{d.DemoWebSocketPolling.onRestartAction}"

                        text="Restart thread processing" width="100+" />

                </t:row>

                <t:row id="g_12">

                    <t:textarea id="g_13" height="100%"

                        text="#{d.DemoWebSocketPolling.protocol}" width="100%" />

                </t:row>

            </t:rowbodypane>

            <t:pageaddons id="g_pa" />

        </f:subview>

    </h:form>

</f:view>

<!-- ========== CONTENT END ========== -->

Code:

package workplace;

 

import java.io.Serializable;

 

import org.eclnt.editor.annotations.CCGenClass;

import org.eclnt.jsfserver.elements.util.Trigger;

import org.eclnt.jsfserver.polling.LongPollingMgr;

import org.eclnt.jsfserver.polling.websocket.DefaultLongPollingWebSocket;

import org.eclnt.workplace.IWorkpageDispatcher;

import org.eclnt.workplace.WorkpageDefaultLifecycleListener;

import org.eclnt.workplace.WorkpageDispatchedPageBean;

 

@CCGenClass (expressionBase="#{d.DemoWebSocketPolling}")

 

public class DemoWebSocketPolling

    extends WorkpageDispatchedPageBean

    implements Serializable

{

    // ------------------------------------------------------------------------

    // inner classes

    // ------------------------------------------------------------------------

 

    public class MyThread extends Thread

    {

        boolean i_threadStop = false;

        @Override

        public void run()

        {

            for (int i=0; i<100; i++)

            {

                try { Thread.sleep(500); } catch (Throwable t) {}

                if (i_threadStop == true) break;

                m_counter++;

                m_longPollingWebSocket.wakeup(true);

            }

            if (m_thread == this) m_thread = null;

        }

    }

    

    // ------------------------------------------------------------------------

    // members

    // ------------------------------------------------------------------------

    

    DefaultLongPollingWebSocket m_longPollingWebSocket;

    MyThread m_thread;

    int m_counter = 0;

    String m_protocol = "Protocol:\n";

 

    // ------------------------------------------------------------------------

    // constructors & initialization

    // ------------------------------------------------------------------------

 

    public DemoWebSocketPolling(IWorkpageDispatcher workpageDispatcher)

    {

        super(workpageDispatcher);        

        m_longPollingWebSocket = new DefaultLongPollingWebSocket();

        LongPollingMgr.add(m_longPollingWebSocket);

        getWorkpage().addLifecycleListener(new WorkpageDefaultLifecycleListener()

        {

            @Override

            public void reactOnDestroyed()

            {

                if (m_thread != null)

                    m_thread.i_threadStop = true;

                LongPollingMgr.remove(m_longPollingWebSocket);

            }

        });

        m_thread = new MyThread();

        m_thread.start();

    }

 

    public String getPageName() { return "/workplace/demowebsocketpolling.jsp"; }

    public String getRootExpressionUsedInPage() { return "#{d.DemoWebSocketPolling}"; }

 

    // ------------------------------------------------------------------------

    // public usage

    // ------------------------------------------------------------------------

    

    public String getWebSocketUrl() { return m_longPollingWebSocket.getURL(); }

    public String getProtocol() { return m_protocol; }

    public void setProtocol(String value) { this.m_protocol = value; }

 

    public void onWebSocketAction(javax.faces.event.ActionEvent event)

    {

        m_protocol += "\nCurrent counter: " + m_counter;

    }

 

    public void onStopAction(javax.faces.event.ActionEvent event)

    {

        if (m_thread != null)

            m_thread.i_threadStop = true;

        m_thread = null;

    }

 

    public void onRestartAction(javax.faces.event.ActionEvent event)

    {

        if (m_thread != null)

            return;

        m_thread = new MyThread();

        m_thread.start();

    }

}

 

Improvement – Dialogs open with full screen now really take the space of the fully screen

...before there was some padding left to the sides.

Update 20180710

Bug Fix – Problem with “/awesomefont(...)” images in 20180709

“/awesomefont(...)”-images were not loaded correctly.

Update 20180709

Bug Fix – COMBOBOX-POPUP horizontal scroll bar

In case of a horizontal scroll bar being shown in the combo box popup, it could happen that the scroll bar did hide parts of the last item. The item still could be selected, but the visibility was poor...

Improvement – PAINTAREAITEM-WITHANGESELECTION with improved drag/drop selection

It is now also possible to start the range selection on top of a PAINTAREAITEM instance. Before the user had to start the selection at some empty space within the PAINTAREA.

Bug Fix – PAINTAREALINEITEM: last interim point sometimes drawn with edged line

When using the feature PAINTAREALINEITEM-FIXINTERIMPOINTEND then the last section of the line was drawn in edged mode always.

Improvement – Drag/Drop passed through in IFRAMEINCLUDE

The IFRAMEINCLUDE component now allows to also pass drag/drop operations from the CaptainCasa level down to the level of the included page. The demo page (eclnt/risc/ext_iframeinclude_example) was adapted accordingly:

/*

* Optional implementation of drag/drop interface: if DROPRECEIVE is defined then

* the following methods are called - if they are implemented.

*/

function ccNotifyDragOver(x,y,dragInfo) { document.getElementById("SOMEOUTPUT").innerHTML = "DRAGOVER: " + x + "/" + y + "/" + dragInfo; }

function ccNotifyDragLeave() { document.getElementById("SOMEOUTPUT").innerHTML = "DRAGLEAVE: -"; }

function ccNotifyDragEnd() { document.getElementById("SOMEOUTPUT").innerHTML = "DRAGEND: -"; }

function ccNotifyDrop() { document.getElementById("SOMEOUTPUT").innerHTML = "DROP: -"; }

 

Update 20180702

This is an interim update and should only be used if you want to use the latest features! All functions will be included in the next official update.

Bug Fix – COLSYNCHEDPANE: column spanning with problems

When using COLSYNCHEDPANE/COLSYNCHEDROW then the COLSPAN attribute was not properly supported. Result: the components were not properly arranged/sized.

Improvement – FILEDOWNLOAD*-CALLBACK supported

When setting FILEDOWNLOAD*-CALLBACK to “true” then the client will send some notification if the download was initiated on client side. - For Swing users: there is a difference between the RISC function and the Swing function: while in Swing the notification is sent after the download of the file, the RISC client sends the notification when triggering the download. There is no way to find out in the browser that a file was successfully downloaded.

Improvement – CLOCK-CLOCKFORMAT

So far you could only pass “timeShort/Medium/Long” and “dateShort/Medium/Long”. Now you can pass:

Improvement – FILEUPLOAD* “slicing”

During upload files are not uploaded in one “chunk”, but are “sliced”. The size so far has been 100kBytes and now was increased to 300kBytes in order to reduce the number of requests.

Improvement – PAINTAREALINE with editable lines: improvements

The editing of interim points is simpler now and was adapted to the way interim points can be edited e.g. in Microsoft Visio diagrams.

By using attribute FIXINTERIMPOINTSTART/END you can define that the first/last interim point can not be changed by the user. This is quite useful if having lines that always start with some distance from the shape they belong to.

Improvement – Setting POPUPMENU “CCBROWSER”

By setting component-POPUPMENU to “CCBROWSER” the component will show the default browser popup menu. This is extremely useful e.g. in TEXTAREA instances because there the browser menu contains spell checking hints.

Improvement – COMBOBOX-ALIGN also applied in value popup

The alignment of the COMBOBOX is also taken over into the list of select-able values that is shown when the user opens the COMBOBOX.

Bug Fix – SPINNER-FOREGROUND was not applied

...bug is fixed now.

Release 6.0 – Q2/2018

Update 20180625

Improvement – SPLITPANE-CUTCONTENT

In the SPLITPANE you now can decide if the contained content is cut by moving the slide – or if its minimum size always is respected:

Please check the demo in the demo workplace (“New Functions”).

Improvement – SCHEDULE-PADDING

For the SCHEDULE component you now can now define the padding both for the top (left) and for the bottom (right) side:

Please check the demo in the demo workplace (“New Functions”).

Improvement – Page bean component for multi value selection

There is now the PageBeanComponent CCMultiValueSelection which is part of the page bean components addon.

The addons are contained in the resources folder of your installation. Add “eclnt_pbc.jar” (contained in eclnt_pbc.zip) to your <webcontent>/WEB-INF/lib in order to use.

Bug Fix – CLOCK always started at 00.00.0000 / 00:00:00

Due to the “improvements” of last week's update 20180618 there was a bug in the CLOCK processing which is now fixed.

Improvement – Double click processing with BUTTON and FIXGRID

For BUTTONs you now can suppress double click processing by setting BUTTON-DOUBLECLICKENABLED to “false”.

For FIXGRIDs the double-click processing is automatically disabled if having set FIXGRID-SINGLECLICKEXECUTE to “true”.

Update 20180618

Improvement – Re-Design of default dialog popups

It took as 11 years to re-design our standard dialog popups:


In addition we also updated the sound that comes with errors:

Usage of HTML in button, label, ...

BUTTON and LABEL now allow to directly pass HTML text.

Before any HTML was “escaped” so that it was output character by character. Now you may pass the text in the format “<html>...</html>” to trigger the interpretation as HTML text.

Before being rendered the HTML content is sanitized.

This of course takes some time – but is definitely required to avoid XSS (cross site scripting) attacks. It also means that certain attributes are sanitized, e.g. also the src-attribute of “<img src='...'>”, because it is possible to execute JavaScript in this attribute.

In general: only use “<html>...</html>” in case you really want to render HTML – otherwise continue to use plain text, which is significantly faster!

A lot of components internally are based on button and label – e.g. TABBEDLINE, TABBEDPANE, … You may use as consequence the html-format also for the text of these controls.

Improvement – FIXGRID avoid double-click processing ig SINGLECLICKEXECUTE is set to “true”

In order to avoid potential problems with double-click processing, it was remove for FIXGRIDs with SINGLECLICKEXECUTE being set to “true”.

Improvement – CLOCK now supports count-up and count-down

The CLOCK component by default shows the current time – and refreshed its content automatically on client side. You now can pass a start value (attribute STARTAT) and a direction (attribute STARTATCOUNTDOWN) so that it e.g. counts from “0” on upwards, or e.g. from a given time downwards.

Typical use case:

Please check the corresponding example in the demo workplace:

Bug Fix – SPLITPANE now takes minimum size of content into consideration

When re-positioning the divider of a split pane, then the minimum size of the contained content was not respected.

Bug Fix – OUTLOOKBAR not fitting into the screen

When an OUTLOOKBAR did not fit into one screen (e.g. too many items) then it was cut. Now it calculates its minimum size correctly.

The sizing of the content pane now also follows the minimum size of the content. Example:

OUTLOOKBAR
OUTLOOKBARITEM
OUTLOOKBARITEM
OUTLOOKBARITEM
OUTLOOKBARITEM
OUTLOOKBARCONTENT
   ROW
     PANE height=”100%;400”

 

The content will be sized with 400px as minimum height.

Improvement – Using different version of CKEditor for SIMPLEHTMLEDUTIR component

The documentation “Developer's Guide RISC addons” now contains corresponding information.

Bug Fix – Layout Editor had problems with Maven projects

Since last week's update the Layout Editor reads all information of a project in a much more decoupled way from its own runtime than before.

The “proof”...: in the Layout Editor the default tag library for CaptainCasa components was not ready anymore – and resulted in some error message when opening layouts.

We now fixed this bug. The good new now: you just have to upgrade the editor – and you do not have to upgrade your projects as a consequence of this! ;-)

Update 20180611

Improvement – Decoupling of CaptainCasa tool installation from project versions

This is something internal, but the (positive) consequences are and will be visible for you as well: when installing a new CaptainCasa version we asked you to both install the newest version of the tools – and to upgrade the versions within your project.

We now updated the tools so that there is a maximum independence between the tools and the application project, what means: you may work in the tools of version “x” and edit applications of version “y”.

Example: you now can upgrade your application project to a new CaptainCasa version – but you do not have to upgrade the tools. This makes the distribution of centrally managed CaptainCasa versions much easier.

You may wonder, where the inter-dependency between the tool and an application project has been so far. - The inter-dependency was in the area of the tag library. The tool (as it is a CaptainCasa application itself) loaded the tag library of CaptainCasa controls itself in its class loader. When the tool accessed the project's class library it loaded the project artifacts within an own classloader – which was a parent of the tool classloader. As consequence certain information (e.g. the tag library definition “eclnt.tld” was not read from the project, because it was read in the tool classloader already.

Bug Fix – Popup dialogs wrongly positioned after FIXGRID-popup-menu

When using FIXGRID-ROWPOPUPMENU and when reacting on a menu selection by opening a dialog, then the dialog was opened below the grid – and not below the line, on top of which the user pressed the right mouse button.

Update 20180604

Improvement – SHIFTCONTAINER: with orientation, with “point navigation”, with mouse wheel support

The SHIFTCONTANER was improved. Main issue: the attribute ORIENTATION, that decides if the content scrolls horizontally or vertically.

In addition: the scrolling can now be executed by using the mouse wheel and there is “point navigation” that indicates the number of content pages and the active page.

The new functions are used in the demo workplace's background page, where you can now scroll between 3 different content areas:

Improvement – FIXGRID scrolling with high latency

The scrolling in the FIXGRID with high latency times is “smarter” now. Before it could happen that the scroll bar moved one additional time after releasing it – which was 100% correct from positioning point of view, but which caused some flickering scroll bar for the user.

Improvement – TREENODE cursor

Only a mini-issue, but some of you waited for this: the cursor in the TREENODE component now only shows a pointer (handy) on the toggle icons if it is some interim node. It is a default cursor for leaf nodes.

Update 20180528

Improvement – OSMVIEWER performance with many way points

The performance of the OSMVIEWER component was drastically increased. Before it was a problem to render many way points – now e.g. 100 way points are no problem anymore.

Improvement – OSMVIEWERWAYPOINT-HIDEINFOPOPUP, OSMVIEWERWAYPOINT-MARKERIMAGE

Up to now the info popup showing the text information for a way point was shown immediately. Now you can hide it by setting the attribute HIDEINPUTPOPUP to “true”. This is useful in situations in which you show many way points.

You can also now update the image of the marker by using attribute MARKERIMAGE.

Bug Fix – RADIOBUTTON-/CHECKBOX-FOREGROUND was not taken over

The FOREGROUND definition was not taken over – the text of the components always showed up with the color defined in the style.

Improvement – PAINTAREALINEITEM

The selection of a line item is now much nicer than before – especially for short lines the selection area was much too big before.

In addition the selection is only executed if there was not selection on PAINTARAREAITEM – before it could happen that one click of the user both selected a PAINTAREAITEM and a PAINTAREALINEITEM instance.

Bug Fix – LABEL with IMAGE and ALIGNMENT “right”: text was cut

The text was some times cut when defining an IMAGE with the LABEL.

Improvement – FIXGRID: positioning of dialog popups on row selection and row execution

Before the popup was opened below the grid – now it is opened below the line which the user selected.

Improvement – PAINTAREAITEM: focus behavior with Internet Explorer

Internet Explorer moves complex components to their very left/top position within a scroll-able area when being focused. This is OK with e.g. field/text components, but it is not nice with graphical components such as the PAINTAREAITEM. We now make sure that the scroll position is kept when focusing PAINTAREAITEM instances (which are switched to FOCUSABLE “true”).

Update 20180522

Improvement – SIMPLEHTMLEDITOR uses latest CKEditor Version 4.9.2

In case you want to use the old version: please set the attribute SIMPLEHTMLEDITOR-BRIDGEPAGE to the old bridge page “eclnt/risc/ext_ckeditor/ext_ckeditor.html”.

Improvement – SIMPLEHTMLEDITOR with HTML sanitizing
WARNING: POTENTIAL INCOMPATIBILITY

The HTML that is sent into the SIMPLEHTMLEDITOR was so far transferred “as defined” by your server side application. We now added the same HTML-sanitizing that we apply e.g. within the TEXTPANE processing. This means, suspicious statements (JavaScript statements and others) are removed prior to rendering the content.

This means: the text is sanitized (and this means: potentially changed) before being processed in the editor. The sanitizing is done by a Google algorithm using an HTML 4 positive list of elements/attributes.

In case you want to explicitly NOT sanitize the text then switch attribute SIMPLEHTMLEDITOR-AVOIDSANITIZING to “true”.

Bug Fix – FIXGRID-Column sizing

There were very special situations in which the columns were not correctly sized.

Improvement – Popup with definition of Popup-Style-Class

The server side classes Modal/ModelessPopup now provide a method “setStyleSeq(...)” with which you can define the background style sequence.

There is a corresponding demo in the demo workplace:

Bug Fix – Popup called with “setCloseOnMouseActivity()” did not close in Firefox

...when moving the mouse - now it does!

Improvement – LONGTEXTFIELD-MAXLENGTH

The MAXLENGTH is now applied to the text editor dialog that is shown when the user clicks onto the icon of the LONGTEXTFIELD component.

Improvement – SIMPLEHTMLEDITOR-FLUSH/FLUSHTIMER

The SIMPLEHTMLEDITOR now supports a FLUSH/FLUSHTIMER as well. Important: the flush is only activate-able via the FLUSHTIMER – there is no flushing based on the user leaving the component.

Improvement – CLIENTFONFIG-CONNECTIONPROBLEMPOPUP/MESSAGE

Both parameters are now provided in the RISC client: in case of connection problems during a running session, the user may receive a popup after certain attempts of communication. The text of the popup can be influenced by the attribute CONNECTIONPROBLEMMESSAGE.

The text is both used in the popup, and it is used in the subsequent error screen:

You may use the text as general purpose info message to be added to the error dialog.

Update 20180514

Improvement – Menus are opened by mouse-over

The menus – POPUPMENU, MENUBAR, BUTTONMENU – are now opened if the user moves the mouse on top of the corresponding menu element.

A similar issue was added to BUTTONPOPUP. If defining the attribute ACTIVATEONMOUSEOVER as “true” then also the component's dialog is opened on mouse over.

Improvement – Files resizing before upload

The new feature of 20180503 was optimized:

Improvement – IMAGE component: image sizing

If only defining a WIDTH (and no HEIGHT) or if only defining a HEIGHT (and no WIDTH) means that the not-defined attribute is calculated automatically – if KEEPRATION is set to “true” (which is default). - The same is done if defining IMAGEWIDTH/IMAGEHEIGHT.

Bug Fix – Http 404 errors when relaoding page

There were certain problems with 404 messages sometimes showing up when:

The problems occurred with 20180409 and were un-detected since then.

Improvement – Support of cyrillic and greek characters

The default font Google's “Open Sans” was so far loaded without cyrillic and greek characters. We now load the font including these characters. (Of course you always can use own fonts by updating the style definitions.)

Update 20180503

Improvement – File resizing before upload

In the upload components (e.g. FILEUPLOADBUTTON) there is an attribute IMAGEREDUCTION. Here you can pass a semicolon separated information, how to shrink images before being uploaded.

Example: “200;100” means that an image is shrinked to the size of 200 pixels * 100 pixels before being uploaded.

The resizing is executed for png, jpg and gif files – itentified by the file extensions “jpg, jpeg, gif, giff, png”. The resizing is done in several steps in order to keep a certain quality level in the resized image.

Improvement – Copy text of components to clipboard via right mouse button

By setting the attribute CLIENTCONFIG-POPUPMENUCOPYCLIPBOARD to “true” a popup menu will be shown below every component containing text information.

After invoking the menu item the text will be copied into the client clipboard. Dependent on the browser this is directly executed – or an explicit popup dialog is opened, from which the user can easily copy/paste the text.

Improvement – New component: Vertical text pane

The component TEXTPANEVERTICAL allows to render multi line text vertically. It is the vertical equivalent of the TEXTPANE component.


In the demo the text is defined within a TEXTEAREA on the right – and is copied into the TEXTPANEVERTICAL component on the left.

Bug Fix – Grid columns size was lost after column resizing

When having scaled the browser (e.g. to “125%”) and having resized columns it could happen, that the column's size was reset to “0”.

Improvement – Focus coloring of COMBO* fields

The focus coloring is now spanning the whole control's background – not only the background of the contained filed component.

Improvement – Information about embedding CaptainCasa into SSO (single sign on) scenarios

The documentation “Developer's Guid – RISC add-ons” contains some information about how to integrate CaptainCasa applications into SSO environments. It's part of the central documentation page: http://captaincasa.org/documentation

Update 20180423

Improvement – Extended Calendar API with multi language capabilities

Via the interface “IextCalendarMgr” you may pass additional definitions into the calendar (such as textual tooltip information). The interface now was improved to allow to add textual definitions in several languages. The inner class “ExtCalendarInfo” now contains a method “addCommentTranslation(String language, String comment)”.

Bug Fix – Header parameter “eclnt-originalurl” back to “old” value

There is one header parameter “eclnt-originalurl” that is sent with every http-post from the client to the server. This contains the original URL that triggered the RISC-processing. The value of the parameter did not contain any protocol/server information since 20180409 – now it does again.

Update 20180416

Improvement – Using cookies for session management

This is some really important improvement – especially for these ones who integrated their CaptainCasa application with other frameworks, e.g. SSO (singel sign on) frameworks, portal frameworks, cloud frameworks:

Up to now the session management of CaptainCasa based on URL-encoding. This was the way to ensure that each browser instance (browser tab) was bound to one corresponding http session on server side.

Now we introduced an alternative solution: a cookie based session management, in which several browser instances (browser tabs) belong to one session cookie – and each instance/tab is separated by some “gateway” which is an internal part of the server side expression resolver.

The setup to switch from URL-based to COOKIE-based session management is very simple. Please find detailed information within the Developer's Guide, there is a new chapter “Session Management”.

Improvement – Reliable loading of JavaScript / CSS files after update

When applying new versions of CaptainCasa then there was the problem that depending on the local browser cache configuration JavaScript and style resources were kept in the local cache – and not picked from the server side.

Now, the access to the resources is done with some appending including the CaptainCasa version number. This means: resources are reliable re-read after some change of version.

Thanks from our side to the Swiss Xpert-users for the constructive discussion on this! ...so this week's “community hero award” is directed to them! ;-)

Update 20180409

Improvement - Arranging CC-application behind some proxy/router

In update 20180326 we updated the way URLs are internally built so that they are much more tolerant (“maximal tolerant”) to positioning the web application behind any routing mechanism.

The updated way took the “.risc” part of the URL and calculated the relative URL out of this. Now we had scenarios in which there were routing rules that included the “.risc” part... ;-). E.g. the name “http://host/demos/start” routed to “http://host/demos/pages.start.risc”. So the internal mechanism were extended: if there is no “.risc” file included in the page then the base directory is the one with the last occurance of “/” in the URL. Example: with “http://host/demos/start” the base URL would be “http://host/demos”.

Improvement – Update in Maven-SpringBoot-Archtetype

In the archetype we updated the CCApplication sources – so that the servlet configuration is done via Spring Registration Beans. Thanks to the community contribution on this!

Update 20180403

Improvement – New feature: controls showing up on mouse over

If moving the mouse over a certain content area, then some more content is shown:

The definition is rather simple – but flexible!...:

<t:overlayarea id="g_26" background="#FFFFFF" border="#c0c0c0"

    height="80" width="150">

    <t:overlayareaitem id="g_27" height="100%" width="100%" x="0"

        y="0" zindex="0">

        <t:label id="g_28" align="center" font="weight:bold"

            text="Some content" valign="top" />

    </t:overlayareaitem>

    <t:overlayareaitem id="g_29" height="100%"

        showonareamouseoveronly="true" width="100%" x="0" y="0"

        zindex="1">

        <t:pane id="g_30" padding="2">

            <t:rowdistance id="g_31" height="20" />

            <t:row id="g_32">

                <t:textpane id="g_33" align="center" font="size:10"

                    foreground="#A0A0A0" height="100%"

                    text="Some more explanation on this item." width="100%" />

            </t:row>

            <t:row id="g_34">

                <t:coldistance id="g_35" width="100%" />

                <t:icon id="g_36"

                    image="/images.iconssvg.save.#606060.16x16.ccsvg" />

                <t:icon id="g_37"

                    image="/images.iconssvg.heartbeat.#606060.16x16.ccsvg" />

            </t:row>

        </t:pane>

    </t:overlayareaitem>

</t:overlayarea>

 

Inside a layered area (OVERLAYAREA) you just set the flag SHOWAREAMOUSEOVERONLY to “true”. As result, this item is only shown if the user moves the mouse in top of the area.

Please take a look onto the example provided in the “New Functions” section of the demo workplace.

Improvement – Drag&drop: Indication of ctrl-key being pressed

There was no corresponding indication right now – now the user sees some “+” icon on top of the moved component.

Improvement – All sub-framework integrated by “bridging page”

There are some components that integrated other frameworks:

All these components are structured in the same way:

This bridging page so far was addressed in an hard-coded way. Now you can directly set the bridging page. This means: you can set up some own bridging page, in which you may e.g. reference a different version of the framework.

Update – CHARTJS component now uses version Chart.js version 2.7.1

...just some update of the version. If you still want to use the previous version: there is a bridging page for each of the versions. Check the directory /eclnt/risc/ext_chartjs.

Bug Fix – Disabled buttons still were part of tab-sequence

Now they aren't anymore...

Release 6.0 – Q1/2018

Update 20180326

Improvement – Arranging CC-application behind some proxy/router

When arranging a CaptainCasa web application behind a proxy/router then not all name-routing-rules were supported.

What this means: imagine you have an Apache web server in front of the Tomcat to host the web application. In Apache you can set up that the url “http://apacheServer/greatapps/manufacturing/pp/startpage.risc” is routed to “http://tomcatServer:8080/productionplanning/startpage.risc”. - Up to now the options you had for defining naming rules to work with CaptainCasa were a bit limited (you basically had to follow the pattern “http://server/<webapp>/<page.risc>”) - now they are “unlimited”.

Improvement – Localization for Poland added to RISC client

...many thanks to our this week's community heroes from Geis Logistics for passing us the corresponding information!

Improvement – Combobox popup shows horizontal scroll bar

If defining a POPUPWIDTH and if the size of the combobox items exceeded the width that you passed, then there was no scroll bar shown – now there is one!

Bug Fix - Support of “X-Csrf-Token”

Well, basically the request that was added in the previous week was not really done as initial request, but as second request – which was wrong. Now it is really the first (post-) request.

Bug Fix – Text selection in FIELDs within a grid

There was a problem to select single characters of a text within a FIELD control when it was part of a grid.

Update 20180319

Bug Fix – Style Generation could cause JavaScript Errors

When working with own styles then it could happen that the JS-part which is generated contained some JS-error. This happened for example when having updated parameters in the style class “riscinternal_riscglobal”.

Improvement – FORMATTEFIELD “int”/”long”

The data formats “Int” and “long” now process a check against the lowest/highest value during input – so that the server side always receives valid int/long values.

Improvement – Support of “X-Csrf-Token”

There are certain communication scenarios in which a so called “X-Csrf-Token” token needs to be fetched and send as http header parameter to the server side. This parameter is now picked when the client started and is then sent as header part of subsequent requests.

Improvement – Integration of CaptainCasa dialogs into other HTML pages

There is now a framework available how to integrate CaptainCasa dialogs into other HTML pages and how to interact on JavaScript level between both parts. Please check the “Developer's Guide – RISC Addons” for more information.

Update 20180312

Improvement – SVG Image Management

There are new nice functions available to dynamically load SVG icons from the server side. “Dynamically” means that size and color of the images are defined through the URL so that you do not have to save one and the same icon in different colors and sizes.

Example: by defining the URL “/images.iconssvg.cake.#008000.48x48.ccsvg” the image “/images/iconssvg/cake.svg” is loaded – in color “#008000” and with a size of “48 x 48”.

Please check the demo in the “New Functions” area of the demo workplace:

Please note: you need to update the web.xml (add servlet pattern “.ccsvg”) in order to use the new functions.

Improvement – TREENODE-content can now be sized with HEIGHT=”100%”

Before the TREENODE always received its minimum size.

Bug Fix – Problem with TREENODE-STATUSIMAGE

The STATUSIMAGE sometimes was not correctly updated – when setting it explicitly from server side.

Bug Fix – Problem with input of lonnnng decimal numbers

There was a rounding/accuracy problem with long decimal numbers like “12.213.231.232,00002932893”. Accuracy problems occurred when reaching the limits of double precision.

Improvement – IE 10/11: F1 key does not open default help

The F1 key is now only processed on CaptainCasa client side – and does not bring up the default dialog of IE anymore.

Update 20180226

Improvement – RISC-HTML-Client: FORMATTEDFIELD – Handling of “bigdecimal/double/float”

Up to now the handling of numbers (e.g. rounding) was internally managed by using the default number-representation of JavaScript: a number is represented by a 4 byte double value. As result there was a problem when the user keyed in very long numbers (“12632183612873681231287.128362187368276336723846324”), which out-ranged the precision of 4-byte-double numbers.

We now switched the number processing for FORMATTEDFIELD (and for LABEL when using LABEL-FORMAT, LABEL-FORMATMASK) to some internal representation which allows the input of any number.

Of course, the server side will now drive the precision! - If the counter part of a very long number on server-side is a float-property then of course the precision is limited by your server side application. So using FORMAT “bigdecimal”/”float”/”double” in a FORMATTEDFIELD and using object type “BigDecimal” on backend side is the only approach that guarantees infinite precision.

Improvement – RISC-HTML-Client: BUTTONVERTICAL

Well, the button by default is rendered horizontally – now there is a vertical variant with the control name BUTTONVERTICAL.

Improvement – RISC-HTML-Client: FIELD-TEXTSELECTIONINFO

The FIELD component and the TEXTAREA component now can pass back their selection information (cursor position, begin/end of selection) to the backend processing. This function may be used in order to e.g. insert text on server side at a specific position within some text.

Please check the corresponding demo within the demo workplace, section “New Functions”.

Bug Fix – RISC-HTML-Client: FIELD/TEXTAREA/...: Problems in IE: with value changed/focusing

Uuuuh: there was a quite “nice” problem that occurred under Internet Explorer 10 and 11: internal updates to the content of the FIELD (or TEXTAREA, or COMBOFIELD, …) were processed internally as changes by the user. The consequences were: FIELDs, in which the value of the server side is automatically transferred (e.g. by defining UPPERCASE to be “true”, or by rounding in a FORMATTEDFIELD), triggered some value update even though there was no user activity.

Consequences: the client did not send only data changes by the user, but also internal data changed of the components. And: in some cases this lead to scenarios in which the focus was moved automatically – without user input.

Improvement – RISC-HTML-Client: OUTLOOKBARITEM-HORIZONTALTEXTPOSITION

You now can use the explicit definition of the horizontal text position in an outlookbar item as well: if setting it to “left” then the icon of the item will not be rendered in front of the text, but it will be rendered behind the text.

Bug Fix – JavaFX-Client

The following fixes were applied:

Update 20180219

Improvement – RISC-HTML-Client: Tool for editing style sheets

The CaptainCasa tooling now also contains an editor for defining style sheets with reference to multiple inherited style sheets:

 

In the editor you may override existing style definitions or you may create new ones, based on existing style classes. While editing you see inherited values as gray background, and you may override them with your values. In addition you always see the complete class structure (e.g. a component uses several style classes for its inside structure).

Improvement – RISC-HTML-Client: ROWADAPTIVEAREA update

There are a couple of improvements:

Bug Fix – RISC-HTML-Client: FORMATTEDFIELD switching to scientific numeric notation

It could happen, that numbers were rendered in scientific format like “0.23545345e13”. This only happened in rare cases (e.g. if operating with format definitions with e.g. 10 decimal digits).

Improvement – RISC-HTML-Client: SPLITPLANE – only rendering one part

With a SPLITPANE you now can explicitly to NOT render one of the contained areas. In case of not rendering, then also the divider between both parts will not be rendered. Please check the corresponding demo in the demo workplace (section “New Functions”).

Improvement – RISC-HTML-Client: FOLDABLE animation also triggered when updating the OPENED-attribute

Up to now the animation within the FOLDABLEPANE component was only triggered when the user opened/closed the component. Now it is also activated if the FOLDABLEPANE is opened/closed by the value behind the OPENED-attribute.

Update – RISC-HTML-Client: the Rgraph library within the RGRAPH component was updated

...the component is now using Rgraph 4.65. Please check for more information here: https://www.rgraph.net

Bug Fix – RISC-HTML-Client: Problem in calendar (CALENDARFIELD, CALENDAR)

When switching between months then it could happened that the selection a date was pointing to the wrong month.

Bug Fix – RISC-HTML-Client: Internet Explorer: Changes were sent by FORMATTEDFIELD even though no user input was done

Well, the corresponding “oninput” event is triggered in IE 10/11 also in cases in which the value of the field is changed without user interaction (which internally happened when e.g. converting a numeric number to its display format) - we found a way to bypass.

Update 20180213

Improvement – RISC-HTML-Client: VIDEO-POSTERIMAGE

Via the new attribute you can pass so called poster images for videos: these are preview images that are shown before the user explicitly starts the video.

Bug Fix – RISC-HTML-Client: FORMATTEDFIELD with FORMAT=”long”

Sometimes “long” was not interpreted as a number display format.

Improvement – RISC-HTML-Client: FIXGRID, explicit odd-even-coloring

The FIXGRID now also supports the direct setting of odd/even colors via FIXGRID-attributes (FIXGRID-DRAWODDEVENBACKGROUNDODD and FIXGRID- DRAWODDEVENBACKGROUNDEVEN).

Bug Fix – RISC-HTML-Client: Right mouse click to open popup menu removed multiple selections

If the user selected several items of a FIXGRID by ctrl-/shift-select and then pressed the right mouse button on one of the items, then all previously selected items were de-selected.

Bug Fix – Java-Swing-Client: problems with Polish date

When using localization “pl/PL” then there was a problem with editing dates. Background: the Java representation of the date in short format is “dd.mm.yy”, while it is “yyyy-mm-dd” and “dd-mm-yyyy” in the long format. The internal management of “day-month-year” sequence did not properly handle situations in which the sequence is different between the different display variants.

Update 20180206

Improvement – Access the XML layout definition from a PageBean

The central PageBean class was improved by now providing a method “readPageLayoutXML()” - which returns the layout definition of the page that is assigned to the page bean.

As consequence it is possible to parse the XML and to directly interpret meta data that you may place into the page. This is a very strong feature that can be flexibly used!

Internally the reading of the XML is done through the interface of class “PageReader”, which you may access also on your own – outside the context of a page bean.

Improvement – RISC-HTML-Client: Improved style management in FIXGRID/ARRAYGRID

There are now more styles that are used within the default grid processing:

Improvement – RISC-HTML-Client: TABBEDLINECONTAINER-MENUICONVISIBLE

...is now supported.

Bug Fix – RISC-HTML-Client: PAINTAREAITEM – Flickering during movement

When changing the position of a PAINTAREAITEM and when using the default animation, then there may have been some flickering during the animation.

Bug Fix – RISC-HTML-Client: COMBOFIELD without right padding if disabled

When defining the content to be right-aligned then the content directly ended at the very right end of the component if the component was switched to disabled.

Bug Fix – RISC-HTML-Client: Touch dialogs, focus management

The focus in touch fields was positioned to the begin of the touch field when during touch operations.

Bug Fix – Swing-Client: Focus directly set in workplace popup dialogs

When opening a workpage as popup and when directly requesting the focus into the popup dialog, then with a quite high probability the requesting for the focus was not successful.

Update 20180130

Bug Fix – RISC-HTML-Client: AUTOCOMPLETE

There were several issues:

Bug Fix – RISC-HTML-Client: Focus in TOUCHFIELD/NUMERICTOUCHFIELD

The focus management caused a change in the cursor position. While entering text via the touch keyboard the focus jumped to the first position of the corresponding input field.

Improvement – RISC-HTML-Client: COMBOBOX-WITHVALUECOMMENT

You can explicitly switch on the rendering of comments for the list of values. This was a switch which was available in the Java-clients and which now is also available in the RISC-client.

Improvement – RISC-HTML-Client: SCHEDULEITEM text positioning

The text is now positioned on the left top of the component and it automatically switches to multi-line text, if the text exceed the size of the SCHEDULEITEM component.

Improvement - RISC-HTML-Client: COMBOBOX-COMBOPOPUPHEIGHT

You now can explicitly define the height of the COMBOBOX popup, containing the list of valid values.

Bug Fix – RISC-HTML-Client: TABBEDPANETAB-TOOLTIP now shown on top of the “tab”

...before it was shown in the container area of the “tab”.

Improvement – Error management in FileUplaod-implementations

Certain errors (e.g. OutOfMemory) were not transferred back to the client side properly. Now they are transferred and the user receives a corresponding message during file upload.

Update 20180122

Improvement – RISC-HTML-Client: Consistent Usage of SVG Icons

We now switched from PNG icons to SVG icons. Of course the scaling behavior of these icons is much better than with PNG:


100% rendering


150% rendering

We kept all original icons sizes, so there is no change to any layout due to the update.

Improvement – RISC-HTML-Client: Layout Editor with tool for SVG icon management

When working on SVG icons on our owns, we wrote some tool to browse existing SVG images on your local disk and to change their color and set their site. We made the tool available within the Layout Editor, press Icon “SVG Icons” within the left toolbar.

Improvement – RISC-HTML-Client: SVG support in HEXIMAGE and in pseudo image-URL “hex(...)”

You now can pass dyamically created / loaded SVG into the client by either using the HEXIMAGE component or by using the pseudo-URL “hex(...)” for any image. Please take a look onto the demo “Components > Straight Controls > Dynamic SVG Content”.

Bug Fix – RISC-HTML-Client: CLIPBOARDSET did not pop up dialog

The setting of the client CLIPBOARD did not pop up a dialog with the text content to be passed into the clipboard.

Improvement – RISC-HTML-Client: CALENDAR, CALENDARFIELD – Today-indicator

The calendar selection now indicates the today-day with a gray border. To be consistent we updated the rendering of the currently selected date: before the background was highlighted, now a border is drawn around the selected date:

Bug Fix – RISC-HTML-Client: FIXGRID-RESELECTABLE was not supported

...now it is!

Improvement – RISC-HTML-Client: LINK with style variant “alwaysunderline”

By default the LINK component only is underlined if the user moves the mouse over the component. Now there is a style variant to always show the line below the text.

Update 20180115

Improvement – RISC-HTML-Client: explicit setting of focus on right mouse button

When clicking a component with the left mouse button, then there is an explicit focusing of the component. We added this behavior to the right mouse button as well.

Update 20180108

Improvement – RISC-HTML-Client: new component SCENEJS

Scene.js is a nice framework that utilizes WebGL for rendering 3D-graphs. We now built up some basic integration to this framework so that the scene graph can be built on server side (as JSON representation) and is applied to the client side rendering.

There are couple of open source WebGL-Frameworks available – we took a look at scene.js because it is a very easy one to use and it's very clear from its architecture point of view. Find more details at http://scenejs.org/

Improvement – RISC-HTML-Client: IFRAMEINCLUDE component with eventing from inner content to CaptainCasa

The IFRAMEINCLUDE component allows to embed a non-CaptainCasa-framework into an IFRAME – and so far only allowed passing data into this IFRAME-processing. Now you can also send events from the IFRAME-processing to the CaptainCasa server-side processing.

Please take a look at the example in:     webcontentcc/eclnt/risc/ext_iframeinclude_ccexample

Improvement – RISC-HTML-Client/Swing-Client: component size part of Flush-Event

The BaseActionEventFlush-object now also provides the current actual size of the component that triggered the flush.

Update 20180102

Improvement – RISC-HTML-Client: Simplified Maven Project Creation

We updated the way to create a Maven project – ...significantly!

So the procedure of now setting up a Maven project is: create the project using the new archetype, import the project into the CaptainCasa toolset – finished! - We updated the corresponding documentation “Setting up a Maven project” correspondingly.

Improvement – Layout-Editor: Selection of directories

The selection of directories when creating a project or when importing a project now is done by a corresponding helper dialog:

Improvement – Addons: Page Bean Components for selecting server side files

The editor internally uses two new Page Bean Components that are new parts of the addons-package:

Of course, pay attention: these components show the server side file structure. They are NOT showing the client side file structure! So only use in part of the application where the user really needs to see this structure, e.g. in administrative parts of the application! Please check security risks before using this component! (!!!)

Improvement – RISC-HTML-Client: COMBOBOX with definition of selection-variant

The COMBOBOX now has a new attribute COMBOBOX-DIRECTSELECTMODE.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CaptainCasa GmbH

Hindemithweg 13
69245 Bammental

Tel +49 6223 484147

http://www.CaptainCasa.com
info@CaptainCasa.com