Blog Posts

Blog Posts: 26
Items per page
Statistics: Blogs: 2 Blog Posts: 26  

TeamDev has released QuipuKit version 1.5, a commercial library of advanced JSF components. This version has been tested and is now compatible with the latest browser releases: Mozilla Firefox 3.0 and Opera 9.5.

 

The major features of QuipuKit 1.5 release include:

  • A new GraphicText component that allows displaying rotated text.

  • Interactive column resizing feature for DataTable and TreeTable components.

  • Support for multiple headers and footers with column grouping in DataTable and TreeTable components.

  • Various sorting enhancements for DataTable and TreeTable components.

 

The release also includes a number of fixes for issues reported by QuipuKit users. Please see the What's New page for a full list of enhancements and fixes in this release.

 

The new distribution package of QuipuKit 1.5 is available here.

 

For any questions or feedback related to QuipuKit, visit the forum or e-mail us directly at quipukit-support@teamdev.com.

0 Comments Permalink

Introduction

The quality and speed of building a Java-based graphic user interface (GUI) have always been high on the agenda. It is no secret that the development of a graphical interface using Swing requires quite a plenty of time. But it's not critical if the developer doesn't have a very deep knowledge of a GUI building. He just needs to write large amounts of code for the creation and adjustment of any graphical component. Sometimes this process becomes quite monotonous and boring and it's great when you can delegate this routine work with component adjustment to anybody else...

 

Swing Application Framework library is designed to help with the development of desktop applications that contain GUI. It's a small set of Java classes, aka "the framework", that provides a ready-to-use infrastructure for most desktop applications. The use of this library allows to make an application architecture more obvious, and the code "lighter" for understanding and further support. Besides this framework undertakes all the routine operations with the configuration of graphical components, and lets the developer to concentrate on other aspects of application development (realization of business logic etc.).

 

For each of our products we create a demo application to highlight its major features. For our new product, JxCapture, we also made a small demo application which in fact represents a simple screen capture solution. It's a common Swing application. The functionality of the application is enabled through a menu accessible through a tray icon, providing settings and an image viewer for a captured image.

 

Initially, we implemented the demo application using a standard Java Swing library. However, we are always on the look for new ways and technologies that can help us make our products better. Keeping track of the development of the Swing Application Framework, that is designed to help with the desktop application development, we decided to try it out and re-write the existing Swing-based application. The purpose of this "experiment" was to research the capabilities of the framework and possibly to further use it in the development of Java-based desktop applications.

 

So we had a Swing-based application and decided to write exactly the same one but with the Swing Application Framework.

 

Application Lifecyсle

When we started working we noticed at once how convenient application lifecyсle was realized. Swing Application Framework provides a very convenient mechanism for tracking of such events like starting and shutting down an application. For application start we realized all the necessary operations, such as reading of application settings from a configuration file, registration of various listeners, adjustment of graphical components of an application etc.

 

At application shutdown we carry out all necessary operations required for a correct shutdown: releasingof unused resources, closing streams, removing listeners, saving settings into configuration file.

 

To launch our application we just needed to inherit the main class of an application from the SingleFrameApplication and to call Application.launch function in the main method. We had no need to wrap the code that launches the application into Event Dispatch Thread. This functionality was already realized in the function Application.launch.

 public static void main(String[] args) *throws* Exception {
    launch(JxCaptureDemo.class, args);
}

 

We were pleasantly surprised that the default look and feel was system-dependant.

 

Resources

The application framework supports automatically initializing the properties of named components from ResourceBundle resources. That is using "resource injection" we can adjust many parameters of the component simply by naming it! All other parameters that are defined in the appropriate resource file will be set automatically.

 

We used this mechanism when configuring all graphical components of our application. For example in the dialog "About" we used "resource injection" to adjust most of the components of this dialog. Parameter values for components reside in a special resource file - AboutDialog.properties. This approach is especially convenient for a mixed-language interface. Besides all the data for the graphical components is stored in one place what simplifies the search and replacement of any parameters.

 

Resources can be used for initialization of class fields as well as for adjustment of component parameters. We just needed to mark required fields with annotation @Resource and to set values in the properties file for these fields. After the command ResourceMap.injectFields was executed all the marked fields were initialized automatically. In most cases the fields were of a simple type (String, int etc.). But in the class ApplicationSettings we used this approach for initialization of fields that represent string arrays. For this purpose we only needed to determine in the properties file the following content:

ApplicationSettings.imageFormats[0] = png
ApplicationSettings.imageFormats[1] = jpeg
ApplicationSettings.imageFormats[2] = bmp
ApplicationSettings.imageFormats[3] = gif

 

And in the class ApplicationSettings we also needed to make initialization that had the following look:

public final class ApplicationSettings {
    @Resource
    private String[] imageFormats;
 
    // ...
 
    private ApplicationSettings() {
        ApplicationContext context = Application.getInstance().getContext();
        ResourceMap resourceMap = context.getResourceMap(ApplicationSettings.class);
        Integer length = resourceMap.getInteger("ApplicationSettings.imageFormats.length")
        imageFormats = new String[length];
        resourceMap.injectFields(this);
    }
 
    // ...
}

 

As you can see we had to allot memory for the field imageFormats before initializing this field. It's a little bit unhandy, because we have to know the exact number of array components. In our case we decided to store the array length in the resource called "ApplicationSettings.imageFormats.length". Hopefully developers will make memory allotment as a part of the field injection in the future.

 

Actions

Every desktop application is based on an event model. Using the annotation @Action in SAF we can mark a method that's intended to serve as the implementation of an Action's actionPerformed method. The ApplicationContext getActionMap method creates an ActionMap that contains one Action object for each @Action defined by some class. The annotation @Action in our code lets us make it more obvious and easy for perception. So, for example, the realization of events in the class TrayPopupMenu with SAF has the following look:

public class TrayPopupMenu extends JPopupMenu {
    private ApplicationSettings settings = ApplicationSettings.getInstance();
    private CaptureOperations operations = CaptureOperations.getInstance();
    private boolean captureOperationEnabled = true;
 
    // ...
 
    public boolean isCaptureOperationEnabled() {
        return captureOperationEnabled;
    }
 
    public void setCaptureOperationEnabled(boolean captureOperationEnabled) {
        boolean oldValue = this.captureOperationEnabled;
        this.captureOperationEnabled = captureOperationEnabled;
        firePropertyChange("captureOperationEnabled", oldValue, this.captureOperationEnabled);
    }
 
    @Action (enabledProperty = "captureOperationEnabled")
    public void activeWindowCapture() {
        operations.activeWindowCapture();
    }
 
    @Action (enabledProperty = "captureOperationEnabled")
    public void objectCapture() {
        operations.objectCapture();
    }
 
    // ...
}

 

The realization of the same class using a standard approach requires 30% more code lines! The parameters for each event we described in the appropriate properties file:

activeWindowCapture.Action.text = Capture active window
activeWindowCapture.Action.icon = images/act_window.png
activeWindowCapture.Action.accelerator = control shift A
 
objectCapture.Action.text = Capture window / object
objectCapture.Action.icon = images/win_obj.png
objectCapture.Action.accelerator = control shift W
...

 

These @Actions also introduces the enabledProperty annotation parameter which binds the enabled state of the @Action to the current value of a property. Our application settings allow to set assignable delay before capture operation, so that the user could take some actions before this operation takes place, for example he can open/close some windows. It's advisable to restrict the for the user from performing other operations during this delay. It can be realized for example by disabling them. In our example we have just that case.

 

The parameter captureOperationEnabled checks if any operation is currently launched. Thanks to the entry @Action (enabledProperty = "captureOperationEnabled") we bind the state of the variable captureOperationEnabled to the state of an event (in our case to the state of all the events that should be disabled when there is already one operation running). It's very convenient and easy!

 

Unfortunately it's possible to define only the method that determines the realization of Action's actionPerformed method so far. It would be very convenient if we could define parameterized events using annotations. And until then we have only one solution for such cases - to use standard Swing approach which is based on creation of a class that will describe the required event.

 

Summary

In our application we had no need to use other features of this framework, such as:

  • Persistent session state: support for automatically and selectively saving GUI state, like top level window geometry, from one run of an application to the next.

  • Actions that swap background tasks.

 

But I'm sure these features will be useful in most desktop applications. This framework is certainly worth using in development of large applications. In most cases Swing Application Framework contains everything that experienced developers may need for their complex applications (application lifecycle, task service or resource management). And even if there's missing something here, you can always use standard approach.

 

In whole in spite of some shortcomings mentioned above (or peculiarities if we can say so ), it was very interesting and easy to re-write with Swing Application Framework an application primarily written using Swing. This framework has a lot of really convenient and practical things. Sometimes its approaches seem to be so obvious that it's strange that nobody has implemented it earlier. So, long live developers of this framework! They managed to enhance the development process for desktop applications in Java and to make it more interesting and convenient.

 

Useful Links

 

0 Comments Permalink

We are pleased to announce a release of QuipuKit 1.4.3, a commercial component library for JSF. In this maintenance release we have resolved the known issue of using JBoss Seam's link and button components inside of QuipuKit DataTable component. This release also contains bug fixes and resolutions for requests we received from our customers. The full list of fixes is available at What's New page.

 

The new version of QuipuKit is available on the Download page.

 

For any questions or feedback related to QuipuKit, visit forum or e-mail us directly.

0 Comments 237 References Permalink

We are pleased to announce release of QuipuKit 1.4.2, a commercial component library for JSF. This maintenance release mainly includes resolutions for requests we received from our customers. The full list of fixes is available at What's New page. The new version of QuipuKit is available on the Download page. For any questions or feedback related to QuipuKit, visit forum or e-mail us directly.

0 Comments 65 References Permalink

TeamDev has released QuipuKit 1.4.1, a commercial component library for JSF. This maintenance release includes fixes for keyboard support in Opera and Safari, and other fixes for the DataTable and TreeTable components. For a complete list of fixes, please visit the What's New page. The new version of QuipuKit is available on the Download page. For any questions or feedback related to QuipuKit, visit forum or e-mail us directly at quipukit-support@teamdev.com.

0 Comments 197 References Permalink

TeamDev has released QuipuKit version 1.4, a commercial library of advanced JSF components.

 

The major features of QuipuKit 1.4 release include:

  • The ability to merge cells in the DataTable and TreeTable components

  • Extended customization for individual rows/cells in the DataTable and TreeTable components

  • Support for dynamic columns in the DataTable and TreeTable components

  • Added an ability to handle session expiration during Ajax request

  • Improved Ajax errors handling

  • Removed dependency on a modified version of JFreeChart. QuipuKit can now be used with the latest version of JFreeChart

  • Added a new LoadBundle component that can be used with Ajax-enabled components

 

This release also includes a number of fixes for different QuipuKit components. For the whole list of improvements and fixes, please see the What's New page. The new distribution package of QuipuKit 1.4 is available here. For any questions or feedback related to QuipuKit, visit the forum or e-mail us directly.

0 Comments 160 References Permalink

We are happy to release a preview of QuipuKit version 1.4 to let its users try the new features before the official release is announced.

 

The major features of this release include:

 

  • An ability to merge cells in the DataTable and TreeTable components

  • Extended customization for individual rows/cells in the DataTable and TreeTable components

  • Support for dynamic columns in the DataTable and TreeTable components

  • Added an ability to handle session expiration during Ajax request

  • Improved Ajax errors handling

  • Removed dependency on a modified version of JFreeChart. QuipuKit can now be used with the latest version of JFreeChart

  • Added a new LoadBundle component that can be used with Ajax-enabled components

 

This release also includes a number of fixes in different QuipuKit components. For the whole list of improvements and fixes, please see the EAP page. The new distribution package of QuipuKit 1.4 EAP1 is available here. This build is bundled with a built-in evaluation license which expires February, 15, 2008. Our plans is to release 1.4 in the end of January, 2008. Please note that because this is a pre-release version, QuipuKit functionality and stability may appear below the quality standards you would normally expect of beta versions. We encourage you to share your ideas, problems and experience with us. Visit our forum or e-mail us at quipukit-support@teamdev.com.

0 Comments 56 References Permalink

QuipuKit 1.3.2, a component library for JSF, has been released today. This maintenance release includes fixes to the problems with compatibility of QuipuKit with Ajax4jsf framework found in version 1.3. For a list of fixes, please see the What's New page. You can get the new version of QuipuKit on the Download page. For any questions or feedback related to QuipuKit, visit forum or e-mail us directly.

0 Comments 48 References Permalink

TeamDev has released QuipuKit 1.3.1, a component library for JSF. This maintenance release includes hot-fixes to the problems found in version 1.3. For a list of fixes, please see the What's New page. The new version of QuipuKit is available on the Download page. For any questions or feedback related to QuipuKit, visit forum or e-mail us directly.

0 Comments 70 References Permalink

The release of QuipuKit 1.3 is finally announced. This release features compatibility with JBoss Seam 2.0, MyFaces 1.2, MyFaces 1.1.5, Facelets 1.1.13 as well as improvements for Ajax support and DataTable and TreeTable components. As usual, there are also numerous bug fixes to the requests reported by QuipuKit customers.

 

Check out the full list of changes on the What's New page. You can get the new version of QuipuKit on the Download page. For any questions or feedback related to QuipuKit, visit the forum or e-mail us directly.

0 Comments 213 References Permalink

TeamDev is pleased to announce availability of QuipuKit 1.2.2, a commercial component library for JSF. This release provides improved internationalization support and performance improvements for the DataTable and TreeTable components. QuipuKit 1.2.2 also contains various bug fixes to the problems reported by QuipuKit customers. For a complete list of changes in version 1.2.2, please see the What's New page. The new version of QuipuKit is available on Download page. For feedback or any questions related to QuipuKit, visit forum or e-mail us directly.

0 Comments 65 References Permalink

We are happy to announce availability of QuipuKit 1.2.1. This maintenance release includes hot-fixes to the problems found in version 1.2. For a complete list of fixes, please see the What's New page. To get the new version of QuipuKit, go to the Download page. For any questions or feedback related to QuipuKit, visit forum or e-mail us directly.

0 Comments 48 References Permalink

TeamDev is pleased to announce a much-anticipated release of QuipuKit 1.2. The major features of this release include the SuggestionField component, and greatly enhanced DropDownField component, and compatibility support for JBoss Seam framework and WebSphere Application Server. There are also numerous improvements in the DataTable, TreeTable and other QuipuKit components.

 

The SuggestionField component allows developers to display a list of suggestions based on user input as well as to complete user input right in the input field. The suggestion feature can be configured to work either on the client side or using Ajax. The suggestion and auto-completion features have been also added to the DropDownField component. Other improvements of the DropDownField component include the ability to scroll a drop-down list, support for multi-column lists, and many more.

 

Of course, the new release comes with a considerable number of fixes to the issues reported by our customers. To see all the changes made in QuipuKit 1.2, go to the What's New page. Download the new version of QuipuKit to try it out free for 30 days or explore its new amazing features in the online demo. For feedback or any questions related to QuipuKit, visit our forum or e-mail us to quipukit-support@teamdev.com.

0 Comments 82 References Permalink

Today we are pleased to announce release 1.1.3 of QuipuKit library for JSF. This maintenance release includes various bug fixes for the issues reported by QuipuKit customers. For a detailed list of fixes, please see the What's New page. To get the new version of QuipuKit, go to the Download page. For any questions or feedback related to QuipuKit, visit forum or e-mail us directly.

0 Comments 174 References Permalink

Fresh maintenance release of QuipuKit is now available for download. It mainly addresses the problems reported by our customers and also brings improvements to the validation framework. Detailed information on what has been done in QuipuKit 1.1.2. is found at the What's New page. You can get the new version of QuipuKit at the Download page. For any questions or feedback related to QuipuKit, go to forum or e-mail us.

0 Comments 211 References Permalink

We are pleased to announce the release of QuipuKit 1.1.1. This version provides full compatibility with JSF 1.2 and resolutions for requests we received from our customers. For a detailed list of fixes and improvements, please see the What's New page. Get new version of QuipuKit at the Download page. For feedback or any questions related to QuipuKit, visit our forum or e-mail us.

0 Comments 0 References Permalink

We are excited to announce a long-awaited release of QuipuKit 1.1. This release comes with compatibility of QuipuKit with JSR 168 Portlets. The list of supported portals includes:

 

  • JBoss Enterprise Portal

  • Liferay Enterprise Portal

  • Jetspeed-2 Portal

 

Another major feature of QuipuKit 1.1 is compatibility with Ajax4jsf. Now you can use this framework together with QuipuKit to bring even richer Ajax functionality to your Web applications.

 

We've also enhanced built-in Ajax support for DataTable and TreeTable components, making it possible to refresh them entirely without page reload. Other improvements include various bug fixes.

 

To learn more about all the changes in QuipuKit 1.1, please see the What's New page. Download the new version of QuipuKit to try it free for 30 days or explore its features in the online demo. For feedback or any questions related to QuipuKit, visit our forum or e-mail us to quipukit-support@teamdev.com.

0 Comments 35 References Permalink

Today TeamDev has released QuipuKit 1.1 EAP3. This EAP build is mainly a bug fix release. For more details, please visit the EAP page. The new distribution package of QuipuKit is available at quipukit-1.1.eap3.zip. As always, we encourage you to contribute your ideas to QuipuKit development. For feedback or any questions related to QuipuKit, visit our forums or e-mail us to quipukit-support@teamdev.com.

0 Comments 205 References Permalink

Today TeamDev has released QuipuKit 1.1 EAP 2.

 

This EAP build is mainly a bug fix release. WeÂ’ve fixed a lot of regression issues, in particular those related to styling. As part of our effort to ensure full compatibility of QuipuKit with Portlets, weÂ’ve added basic validation and Ajax support. Testing of QuipuKit under the JetSpeed Portal and JBoss Portal servers revealed no serious issues. However, there is a known issue under JBoss Portal server and server-side state saving mode: Ajax works properly only if all components have their IDs specified. The new distribution package of QuipuKit is available at quipukit-1.1.eap2.zip. This build is bundled with a built-in evaluation license which expires February 18, 2007. QuipuKit version 1.1 is planned for the beginning of February, 2007. For the instructions on using QuipuKit in various environments, please see the EAP1 announcement. As always, we encourage you to contribute your ideas to QuipuKit development. For feedback or any questions related to QuipuKit, visit our forums or e-mail us to quipukit-support@teamdev.com.

NOTE: This is a pre-release version of QuipuKit and its functionality and stability may be below the quality standards you would normally expect of beta versions.

0 Comments 0 References Permalink

We are happy to release a preview of QuipuKit version 1.1 to let its users try the new features before the official release is announced.

 

This release mainly concerns compatibility with Portlets (JSR 168), Ajax4jsf and JBoss Seam. To get your hands on it, please download the distribution package here: http://www.teamdev.com/downloads/quipukit/quipukit-1.1.eap1.zip

 

This build is bundled with a built-in evaluation license which expires January, 20, 2007.

Our plans is to release 1.1 at the beginning of January, 2007.

 

New in this version:

 

  • Portlets compatibility

  • Ajax4jsf compatibility

  • JBoss Seam compatibility

  • JavaScript function for refreshing DataTable/TreeTable using Ajax (see "Using Dynamic Loading" section in the DataTable and TreeTable documentation)

  • Various bug fixes

 

Known issues:

 

  • Client-side validation doesn't work in Portlets so far.

  • When used in Portlets, Ajax-enabled loading modes don't work in QuipuKit components.

  • Client-side validation doesn't work inside components reloaded with Ajax.

  • Problems when using Ajax4jsf version 1.0.5. These appear occasionally resulting in "A4J is undefined" JavaScript error. As a temporary solution, we recommend using Ajax4jsf version 1.0.3.

 

Usage instructions:

 

No additional configuration is required to ensure compatibility of QuipuKit with the mentioned frameworks. However, the following should be noted:

 

  • For Portlets: To ensure that default styles of QuipuKit components are correctly applied, you should specify the following CSS reference in the page before specifying any other CSS files:

 

<link rel='stylesheet' type='text/css' id='main_css'
      href='/<AppName>/teamdev/internalResource/teamdev/jsf/renderkit/default.css'/>

      where is a Portlet context path.

   

  • For Ajax4jsf: To reload some components using Ajax4jsf, it's necessary to wrap them into the <a4j:outputPanel> tag. The exact list that requires such wrappers is not yet known as the testing process is still in progress. For example,

 

<a4j:outputPanel id="tableWrapper">
<q:dataTable>....</q:dataTable>
</a4j:outputPanel>

Please note that because this is a pre-release version, QuipuKit functionality and stability may appear below the quality standards you would normally expect of beta versions.

 

We encourage you to share your ideas, problems and experience with us. Visit our forum at http://support.teamdev.com/quipukit or e-mail to quipukit-support@teamdev.com.

0 Comments 0 References Permalink