CUBA Platform is a high level framework for enterprise applications development

Overview

CUBA Platform

Java RAD framework for enterprise web applications

license Build Status

CUBA Platform is a high level framework for rapid development of enterprise applications with rich web interface.

The simplest way to start using the platform is to download CUBA Studio and create a new project in it. A released version of the platform will be downloaded automatically from the artifact repository.

You can also build a snapshot version of the platform from the source code and use it in your project.

To contribute, first refer to Contributing Code for general instructions and requirements for contributing code to the platform.

Building from Source

In order to build the platform from source, you need to install the following:

Let's assume that you have cloned CUBA Gradle Plugin and CUBA into the following directories:

work/
    cuba/
    cuba-gradle-plugin/

Open terminal in the work directory and run the following command to build and install the plugin into your local Maven repository (~/.m2):

cd cuba-gradle-plugin
gradlew install

After that, go to the CUBA directory and build and install it with the same command:

cd ../cuba
gradlew install

Using Snapshot Version

Edit the build.gradle file of your project. Change the ext.cubaVersion property and add mavenLocal() to the repositories section, for example:

buildscript {
    ext.cubaVersion = '7.3-SNAPSHOT'
    repositories {
        mavenLocal()
        maven { ...

That's all. Now you can build and deploy your application based on the snapshot version of the platform from your local repository:

gradlew deploy

Third-party dependencies

The platform uses a number of forked third-party libraries. They can be found in the following source code repositories:

All dependencies are also located in our artifacts repository, so you don't have to build them from sources in order to build and use the platform.

Comments
  • URL browser history and navigation

    URL browser history and navigation

    We should provide first-class support for URLs and parameters that should replace LinkHandler completely and bring new functionality.

    Please note that we should permit both authorized and non-authorized access to URLs, for instance public pages of web application, such as Terms of use, Help, Registration and so on.

    See forum:

    Issues to be addressed:

    • [x] Screen links: /login, /main, /help, etc
    • [x] Sub paths: /main/users, /main/users/<base64_id>, /main/users/add (the last one should be explicitly defined by user-developer)
    • [x] UrlParamsChangedEvent
    • [x] New API for URL changing (route, params)
    • [x] Handle 404
    • [x] Screen navigation access check

    Original issue: https://youtrack.haulmont.com/issue/PL-8076

    type: enhancement severity: major ver: 7.0.0 
    opened by haulmont-git 20
  • Built-in mechanism for declarative linking of data components

    Built-in mechanism for declarative linking of data components

    Environment

    • Platform version: 7.0

    Description of the bug or enhancement

    Now linking of data loaders with data containers and components requires too much boilerplate code.

    type: enhancement state: fixed ver: 7.1.0 ver: 7.2.0 
    opened by knstvk 16
  • Provide replacement for havana theme with similar visual look and feel

    Provide replacement for havana theme with similar visual look and feel

    Variables already described in: Migration from Havana to feature-rich Halo theme

    https://doc.cuba-platform.com/manual-6.9/web_theme_extension.html#web_theme_migration

    Improve the following aspects:

    • hover color for Table rows
    • editable / non-editable fields differences: #522
    • disable all animations

    Changes

    Reworked following styles:

    • DataGrid, TreeDataGrid
    • Table
    • Notification
    • Dialog window
    • Menu Bar
    • Tab Sheet in Main window
    • Login window

    Migrated almost all png icons in components. Following components use FontAwesome:

    • LookupField, PopupButton and other with dropdown list: image.png
    • DateField image.png
    • Table column with ascending and descending sorts image.png
    • Tree image.png
    • Dialog window icons: image.png
    • Close icon in the Tab: image.png
    • ResizableTextArea: image

    SCSS variables

    Table

    • $c-table-selected-row-cell-border-color - cell border color of selected row;
    • $c-table-header-background-color - background of header cell in table
    • $c-table-header-hover-background-color - hover background of header cell in table

    DataGrid

    • $c-datagrid-selected-row-cell-border-color - cell border color of selected row
    • $c-datagrid-header-cell-background-color - header cell background color
    • $c-datagrid-header-cell-hover-background-color - header cell hover background color

    Table and DataGrid

    • $c-row-selection-background-color - Table and DataGrid selection row color
    • $c-row-selection-text-color - Table and DataGrid selection row text color

    Window

    • $c-window-header-background-color - Window header background color

    Notifications

    • $c-notification-border-radius - notification border radius

    MenuBar

    • $c-menubar-submenu-outline-color - outline color of submenu
    • $c-main-menu-popup-text-color - text color of main popup menu

    Main Window

    • $c-main-tabsheet-tab-caption-text-color - caption color of tab in main tabSheet
    • $c-tabsheet-tab-close-text-color-hover - hover color of close font-icon
    • $c-tabsheet-tab-close-text-color - close font-icon color of tab in tabSheet
    • $c-app-workarea-background - background color of application work area
    type: enhancement severity: minor state: fixed ver: 7.0.0 
    opened by jreznot 12
  • Support 12 hours format for TimeField

    Support 12 hours format for TimeField

    https://www.cuba-platform.com/discuss/t/localtime-illegalargumentexception/9811

    Description of the bug or enhancement

    Currently hh:mm a time format doesn't work. Let's implement support for 12 hours format with AM/PM part represented as a separate combo box.

    Upd: Provide a separate attribute with a type such as FORMAT_12_H, FORMAT_24_H.

    Upd2: DateField should support 12 hours format either.

    Updates

    12h time mode is supported for DateField and TimeField components. This mode is supported as additional dropdown next to inputs and automatic conversion 24h time values into 12h format.

    image.png

    Declarative settings

    The time mode can be set in XML screen descriptor via new timeMode attribute:

    <dateField timeMode="H_12"/>
    
    <!-- default value -->
    <timeField timeMode="H_24">
    

    API

    New pair of methods getTimeMode / setTimeMode is added for DateField and TimeField components:

    TimeField.TimeMode timeMode = dateField.getTimeMode();
    
    timeField.setTimeMode(TimeField.TimeMode.H_12);
    

    Demo project

    https://github.com/cuba-labs/cuba-timefield-ampm-demo

    QA

    Check that:

    • [x] TimeMode switching is done correctly - components display correctly converted value
    • [x] 24h time value are correctly converted into 12h format
    • [x] Components have correct value while conversions
    type: enhancement state: fixed ver: 7.2.0 
    opened by andreysubbotin 10
  • Support for JSR-310 date/time APIs in entities

    Support for JSR-310 date/time APIs in entities

    Hi, I'm evaluating CUBA and its Studio app, but I'm wondering if it can deal with entity attributes using Java 8 date/time types. I successfully used them in another project using Spring Data Rest and Hibernate, without any issue, but I don't know if your infrastructure is ready to support them OOB.. I'd prefer avoid using the old & awkward Date/Time types in my codebase.

    Thanks! P.

    PS: To clarify, I mean using the LocalDate, LocalTime and LocalDateTime types to store UTC-only values (so "without timezone"), alongside a ZoneId associated to a user to make date/time calculations or displaying in the UI..

    opened by pfurini 9
  • Ubuntu 20.04 cuba 7.2.1 Hotkey (ctrl+tab)

    Ubuntu 20.04 cuba 7.2.1 Hotkey (ctrl+tab)

    Environment

    • Platform version: 7.2.1
    • Client type: Portal
    • Browser: Chrome, etc.
    • Database: PostgreSQL
    • Operating system: Ubuntu 20.04 Linux

    Description of the bug or enhancement

    Добрый день. При использовании cuba plugin idea jetbrains в ОС Ubuntu 20.04 происходит отключение клавиатуры после использовании переключения между вкладками открытых файлов (ctr+tab). В ранних версиях ubuntu такой проблемы нет (19.10).

    100_sys_log.txt

    opened by aosivt 8
  • Use own database connection pool

    Use own database connection pool

    • By default, use own database connection pool configurable via app properties
    • Optionally use a pool provided by app server
    • For backward compatibility, current datasource settings should work as is
    type: enhancement state: fixed ver: 7.2.0 
    opened by knstvk 8
  • Email local part validation problems

    Email local part validation problems

    A topic on support forum: link.

    Description of the bug or enhancement

    • Minimal reproducible example

    Try to validate the following emails:

    1. [email protected]
    2. [email protected]
    • Expected behavior
    1. The first email should be rejected
    2. The second should be accepted
    • Actual behavior
    1. The first email is accepted
    2. The second email is rejected

    Updates

    Hibernate EmailValidator is used now instead of custom regular expressions. It has less strict check so some cases can be considered as correct. It's intended to decrease false negative cases.

    QA

    Make sure that EmailValidator doesn't reject correct emails.

    type: bug state: fixed ver: 7.0.0 ver: 6.10.2 
    opened by dtsaryov 8
  • Collapse mode in side menu

    Collapse mode in side menu

    Updates

    Collapse Mode is supported for side menu main layout:

    sidemenu-collapse-mode.gif

    Styling

    There are few SCSS variables that enabled to manage behavior of layout:

    • $cuba-sidemenu-layout-collapse-enabled - Defines whether SideMenu layout is collapsible

    • $cuba-sidemenu-layout-collapsed-width - The width of collapsed SideMenu panel.

    • $cuba-sidemenu-layout-expanded-width - The width of expanded SideMenu panel

    • $cuba-sidemenu-layout-collapse-animation-time - The time of SideMenu panel animation in seconds

    When the $cuba-sidemenu-layout-collapse-enabled variable is set to false the "Collapse" button is hidden

    User Indicator Changes

    Now the user indicator component uses user name property instead of default instance name. If user name is empty, instance name is used.

    Studio Migration Issue

    YouTrack

    QA

    Check extending main screen with different templates

    type: enhancement breaking-changes state: fixed ver: 7.2.0 important ver: 7.3.0 
    opened by web-devel 7
  • Non-visual components in screen XML

    Non-visual components in screen XML

    Environment

    • Platform version: 7+
    • Client type: Web

    Description of the bug or enhancement

    Provide new XML element - <facets> that can be used to define non-visual objects in a screen in a generic way. For instance, timers, UI component extensions, additional declarative objects, etc.

    Introduced 2 new facets:

    • timer
    • clipboardTrigger

    Facets are available in XSD only for new screens and fragments.

    Examples

    Timer:

    <window xmlns="http://schemas.haulmont.com/cuba/screen/window.xsd">
        <facets>
            <timer id="testTimer" delay="2000" autostart="true" repeating="true"/>
        </facets>
    
        <layout>
        </layout>
    </window>
    

    ClipboardTrigger - Client-side component that connects a Button and TextField / TextArea input. Copies the text content to the clipboard on button click.

    <window xmlns="http://schemas.haulmont.com/cuba/screen/window.xsd">
        <facets>
            <clipboardTrigger id="copyTrigger"
                              input="textField"
                              button="copyButton"/>
        </facets>
    
        <layout>
            <textField id="textField"/>
            <button id="copyButton"/>
        </layout>
    </window>
    

    We assume that facets should be used as declarative way to provide some features.

    Facets support dependency injection to screens (using @Inject) and event handling (using @Subscribe). @Install also supported, but current facets do not have such properties.

    Example:

    @UiController
    @UiDescriptor("screen-with-timer.xml")
    public class ScreenWithTimer extends Screen {
        @Inject
        private Timer testTimer;
    
        @Subscribe("testTimer")
        private void onTimerTick(Timer.TimerActionEvent event) {
        }
    
        @Subscribe("testTimer")
        private void onTimerStop(Timer.TimerStopEvent event) {
        }
    

    Application components may provide additional facets. They should implement FacetProvider interface in a Spring Bean and provide the corresponding XSD for screens.

    Minimal example:

    @Component("cuba_ClipboardTriggerFacetProvider")
    public class ClipboardTriggerFacetProvider implements FacetProvider<ClipboardTrigger> {
        @Override
        public Class<ClipboardTrigger> getFacetClass() {
            return ClipboardTrigger.class;
        }
    
        @Override
        public ClipboardTrigger create() {
            return new WebClipboardTrigger();
        }
    
        @Override
        public String getFacetTag() {
            return "clipboardTrigger";
        }
    
        @Override
        public void loadFromXml(ClipboardTrigger facet, Element element, ComponentContext context) {
            String id = element.attributeValue("id");
            if (isNotEmpty(id)) {
                facet.setId(id);
            }
        }
    }
    
    type: enhancement severity: major state: fixed ver: 7.1.0 ver: 7.2.0 
    opened by jreznot 7
  • Usability degradation of 'IN' filter in CUBA 6.8.13

    Usability degradation of 'IN' filter in CUBA 6.8.13

    Environment

    • Platform version: 6.8.13
    • Client type: Web, Desktop

    Description of the bug or enhancement

    In Cuba 5.6 it was possible to enter several values separated by commas into string filter with 'IN' condition and it used to work perfectly: image

    In Cuba 6.8.13 new list editor has been added for such filters that just do not support adding several values at once and you have to enter each value separately. It makes using this filter very difficult in case you have the list of such values:

    image

    type: enhancement state: fixed ver: 7.2.0 comp: filter 
    opened by Quicksy 7
  • The deleted entity is restored during import JSON

    The deleted entity is restored during import JSON

    Environment

    CUBA Platform version: 7.2-SNAPSHOT CUBA Studio plugin version: 15.10-213 IntelliJ version: IntelliJ IDEA 2022.2.3 (Community Edition)

    Description of the bug

    The deleted entity is restored during import json

    TC

    1. run project customers.zip
    2. Open Entity inspector Set Entity Type = Customer
    3. Click "Import" file: Customer (new + del str).json

    AR: Entity 32550248-6bef-c5dc-a6ac-19ab225ea6cb has been restored. Item appeared in the list of addresses. Attribute deleteTs was not restored. image

    ER : The entity instance must be restored with all attributes

    json file.zip Contains:

    1. Customer (new).json - unaltered list
    2. Customer (new + del str).json - the file contains the deleted entity Address
    type: bug 
    opened by rusiaikinat 0
  • SQLSyntaxErrorException: ORA-00904:

    SQLSyntaxErrorException: ORA-00904: "DELETE_TS": invalid identifier

    Hi,

    I having an issue after I opening the screen in a Cuba portal.

    Despite of having the 'Delete_TS' in respective table column this error is occuring.

    I've checked the logs for this issue in the cuba portal. In the log there call happening to a SQL query which I've never used in my project In that Query this Delete_Ts column in present. The query I'm mentioning below.

    SELECT * FROM (SELECT a.*, ROWNUM rnum FROM (SELECT ID AS a1, "ATTRIBUTE1" AS a2, "ATTRIBUTE2" AS a3, BU AS a4, DELETE_TS AS a5, DELETED_BY AS a6, DESCRIPTION AS a7, FLAG AS a8, LOGDATE AS a9, PLANID AS a10, RUNDATE AS a11, VERSION AS a12 FROM COST_PLANID_MASTER WHERE (DELETE_TS IS NULL)) a WHERE ROWNUM <= ?) WHERE rnum > ?

    I don't understand from where this query coming from?

    If having Idea about this issue. Your help is needful.

    opened by vinodhkumar8991 0
  • Datagrid horizontal scrollbar is not visible on win 11 with firefox browser

    Datagrid horizontal scrollbar is not visible on win 11 with firefox browser

    https://forum.cuba-platform.com/t/datagrid-horizontal-scrollbar-visibility/16530/4

    Environment

    VM: WinDev2209Eval (win11 reproduced only here) Platform version: cuba 7.2.19 FireFox: 105.0.1

    Steps:

    Open cuba-petclinic project Open screen descriptor pet-browse.xml Replace groupTable with DataGrid

    <dataGrid id="petsTable" dataContainer="petsDc" width="100%">
                <actions>
                    <action id="create" type="create"/>
                    <action id="edit" type="edit"/>
                    <action id="remove" type="remove"/>
                    <action id="excel" type="excel"/>
                    <action id="clearFilter"
                            caption="msg://clearFilter"
                            icon="ERASER"/>
                </actions>
                <columns>
                    <column id="name" property="name"/>
                    <column id="identificationNumber" property="identificationNumber"/>
                    <column id="birthDate" property="birthDate"/>
                    <column id="owner" property="owner"/>
                    <column id="type" property="type"/>
                    <column id="type2" property="type"/>
                    <column id="type3" property="type"/>
                    <column id="type4" property="type"/>
                    <column id="type5" property="type"/>
                    <column id="type6" property="type"/>
                    <column id="type7" property="type"/>
                    <column id="type8" property="type"/>
                    <column id="type9" property="type"/>
                    <column id="type10" property="type"/>
                    <column id="type11" property="type"/>
                    <column id="type12" property="type"/>
                    <column id="type13" property="type"/>
                    <column id="type14" property="type"/>
                    <column id="type15" property="type"/>
                </columns>
                <rowsCount/>
                <buttonsPanel id="buttonsPanel" alwaysVisible="true">
                    <button id="createBtn" action="petsTable.create"/>
                    <button id="editBtn" action="petsTable.edit"/>
                    <button id="removeBtn" action="petsTable.remove" stylename="danger"/>
                    <button id="excelBtn" action="petsTable.excel" stylename="friendly"/>
                </buttonsPanel>
                <rows/>
            </dataGrid>
    
    

    Run project Open firefox browser and open the screen Pets in the running project Not all columns are visible on the screen image

    AR: datagrid horizontal scrollbar not visible ER: datagrid horizontal scrollbar is visible

    type: bug 
    opened by rusiaikinat 0
  • Use Query Cache for separate loading queries during entity fetching

    Use Query Cache for separate loading queries during entity fetching

    • Platform version: 7.2.X

    See forum topic to find reproducible case.

    Problem

    Separate loading of collection attribute (org.eclipse.persistence.internal.indirection.QueryBasedValueHolder#instantiate(...):147) does not use Query Cache. When entity loaded with cached query, and further loading occurs during fetching according to view, nested entities loaded by not cached queries. It leads to repetitive loadings of entity graphs for each cached query if they are not subsequent.

    Proposition

    Investigate the possibility of "cached" property propagation for "nested" (fetching) queries in value holders. Or rework fetching mechanism for cached queries to perform "nested" queries manually with "cached" flag, but not through QueryBasedValueHolder

    opened by dtaimanov 0
  • [GroupTable] Grouping on link column breaks IconProvider

    [GroupTable] Grouping on link column breaks IconProvider

    Environment

    • Platform version: 7.2.19

    Description of the bug or enhancement

    • Minimal reproducible example

    grouptable-icon-link-error.zip

    • Expected behavior Icons are shown as for regular column grouping, e.g.:

    image

    • Actual behavior

    image

    type: bug 
    opened by glebfox 0
  • Insert script in System Information window doesn't wrap LocalDate values in quotes

    Insert script in System Information window doesn't wrap LocalDate values in quotes

    Platform version: 7.2.19

    1. Create an entity with a field of LocalDate type
    2. Run the application, create entity instance.
    3. In the entity browse screen right click in the line and select the "System information" context action
    4. Click the "Script for Insert" button

    AR: value for field with LocalDate datatype will not be wrapped into quotes, while values of Date datatype are wrapped

    Screenshot 2022-09-12 at 13 18 23

    Screenshot 2022-09-12 at 13 18 37

    Forum topic

    type: bug 
    opened by gorbunkov 0
Releases(7.2.9)
Owner
CUBA Platform
A high level open source Java web framework for enterprise applications
CUBA Platform
Firefly is an asynchronous web framework for rapid development of high-performance web application.

What is Firefly? Firefly framework is an asynchronous Java web framework. It helps you create a web application Easy and Quickly. It provides asynchro

Alvin Qiu 289 Dec 18, 2022
Scalable, easily deployable Hello World designed for enterprise

HelloWorldEnterprise Scalable, easily deployable Hello World designed for enterprise. Features Built to work with Maven (hand-coded 1000k lines of XML

abi 7 Mar 25, 2022
crnk.io - Crank up the development of RESTful applications

crnk.io - Crank up the development of RESTful applications! release on jcenter latest in private repository What is Crnk? Crnk is an implementation of

null 272 Nov 28, 2022
A web MVC action-based framework, on top of CDI, for fast and maintainable Java development.

A web MVC action-based framework, on top of CDI, for fast and maintainable Java development. Downloading For a quick start, you can use this snippet i

Caelum 347 Nov 15, 2022
An Intuitive, Lightweight, High Performance Full Stack Java Web Framework.

mangoo I/O mangoo I/O is a Modern, Intuitive, Lightweight, High Performance Full Stack Java Web Framework. It is a classic MVC-Framework. The foundati

Sven Kubiak 52 Oct 31, 2022
Vaadin 6, 7, 8 is a Java framework for modern Java web applications.

Vaadin Framework Vaadin allows you to build modern web apps efficiently in plain Java, without touching low level web technologies. This repository co

Vaadin 1.7k Jan 5, 2023
A Java Framework for Building Bots on Facebook's Messenger Platform.

Racter A Java Framework for Building Bots on Facebook's Messenger Platform. Documentation Installation To add a dependency using Maven, use the follow

Ahmed 18 Dec 19, 2022
Development Driven Testing (DDT) lets you generate unit tests from a running application. Reproduce a bug, generate a properly mocked test

DDTJ: It kills bugs DDT is the flip side of TDD (Test-driven development). It stands for "Development Driven Tests". Notice that it doesn’t contradict

null 4 Dec 30, 2021
RESTKit is a powerful toolkit for restful services development

RESTKit is a powerful toolkit for restful services development. This plugin is committed to enhancing development efficiency with useful

Mr.Hu 25 Dec 22, 2022
An evolving set of open source web components for building mobile and desktop web applications in modern browsers.

Vaadin components Vaadin components is an evolving set of high-quality user interface web components commonly needed in modern mobile and desktop busi

Vaadin 519 Dec 31, 2022
RESTEasy is a JBoss project that provides various frameworks to help you build RESTful Web Services and RESTful Java applications

RESTEasy RESTEasy is a JBoss.org project aimed at providing productivity frameworks for developing client and server RESTful applications and services

RESTEasy 1k Dec 23, 2022
Bootique is a minimally opinionated platform for modern runnable Java apps.

Bootique is a minimally opinionated java launcher and integration technology. It is intended for building container-less runnable Java applications. W

Bootique Project 1.4k Dec 29, 2022
Spring Framework

Spring Framework This is the home of the Spring Framework: the foundation for all Spring projects. Collectively the Spring Framework and the family of

Spring 50.4k Jan 9, 2023
Play Framework

Play Framework - The High Velocity Web Framework The Play Framework combines productivity and performance making it easy to build scalable web applica

Play Framework 12.3k Dec 29, 2022
:rocket: Lightning fast and elegant mvc framework for Java8

Based on Java8 + Netty4 to create a lightweight, high-performance, simple and elegant Web framework ?? Spend 1 hour to learn it to do something intere

Blade Framework 5.7k Dec 28, 2022
The Grails Web Application Framework

Build Status Slack Signup Slack Signup Grails Grails is a framework used to build web applications with the Groovy programming language. The core fram

grails 2.7k Jan 5, 2023
Ninja is a full stack web framework for Java. Rock solid, fast and super productive.

_______ .___ _______ ____. _____ \ \ | |\ \ | | / _ \ / | \| |/ | \ | |/ /_\ \ / | \

Ninja Web Framework 1.9k Jan 5, 2023
The modular web framework for Java and Kotlin

∞ do more, more easily Jooby is a modern, performant and easy to use web framework for Java and Kotlin built on top of your favorite web server. Java:

jooby 1.5k Dec 16, 2022