diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c7b184c1334..c2baa5c0347 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,9 +2,9 @@ name: CI on: push: - branches: [ "releases/26.1" ] + branches: [ "releases/26.2" ] pull_request: - branches: [ "releases/26.1" ] + branches: [ "releases/26.2" ] jobs: build: diff --git a/README.md b/README.md index eecb8fcc5cf..c4d402aede7 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ This repository contains the source code of the runtime components, the actual f If you are completely new and wondering what Eclipse Scout is, please visit our [website](https://eclipse.dev/scout/). -To get started with Scout, follow our [Get Started Guide](https://eclipsescout.github.io/scout-docs/26.1/getstarted/getstarted.html). +To get started with Scout, follow our [Get Started Guide](https://eclipsescout.github.io/scout-docs/26.2/getstarted/getstarted.html). ## Documentation diff --git a/eclipse-scout-chart/README.md b/eclipse-scout-chart/README.md index 7bd7f50d650..60e9b4fb474 100644 --- a/eclipse-scout-chart/README.md +++ b/eclipse-scout-chart/README.md @@ -3,8 +3,8 @@

- Jenkins - Jenkins tests + Jenkins + Jenkins tests npm NPM npm (scoped) diff --git a/eclipse-scout-chart/package.json b/eclipse-scout-chart/package.json index 16802215cdc..ef6ac919464 100644 --- a/eclipse-scout-chart/package.json +++ b/eclipse-scout-chart/package.json @@ -1,6 +1,6 @@ { "name": "@eclipse-scout/chart", - "version": "26.1.0-snapshot", + "version": "26.2.0-snapshot", "description": "Eclipse Scout chart", "author": "BSI Business Systems Integration AG", "homepage": "https://eclipse.dev/scout/", @@ -57,7 +57,7 @@ "version:release": "releng-scripts version:release" }, "devDependencies": { - "@eclipse-scout/cli": ">=26.1.0-snapshot <26.1.0", + "@eclipse-scout/cli": ">=26.2.0-snapshot <26.2.0", "@eclipse-scout/releng": "^26.1.0", "jasmine-core": "5.13.0", "jasmine-jquery": "2.1.1", @@ -67,7 +67,7 @@ "@types/jasmine-jquery": "1.5.37" }, "dependencies": { - "@eclipse-scout/core": ">=26.1.0-snapshot <26.1.0", + "@eclipse-scout/core": ">=26.2.0-snapshot <26.2.0", "jquery": "3.7.1", "chart.js": "4.5.1", "chartjs-plugin-datalabels": "2.2.0" diff --git a/eclipse-scout-chart/pom.xml b/eclipse-scout-chart/pom.xml index 9a2d98bb677..b1f89fd9db0 100644 --- a/eclipse-scout-chart/pom.xml +++ b/eclipse-scout-chart/pom.xml @@ -16,7 +16,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/eclipse-scout-cli/README.md b/eclipse-scout-cli/README.md index 372c5df9cca..4f52691629f 100644 --- a/eclipse-scout-cli/README.md +++ b/eclipse-scout-cli/README.md @@ -3,8 +3,8 @@

- Jenkins - Jenkins tests + Jenkins + Jenkins tests npm NPM npm (scoped) diff --git a/eclipse-scout-cli/package.json b/eclipse-scout-cli/package.json index a6e810e2126..7cf12f553de 100644 --- a/eclipse-scout-cli/package.json +++ b/eclipse-scout-cli/package.json @@ -1,6 +1,6 @@ { "name": "@eclipse-scout/cli", - "version": "26.1.0-snapshot", + "version": "26.2.0-snapshot", "description": "CLI for Eclipse Scout", "author": "BSI Business Systems Integration AG", "homepage": "https://eclipse.dev/scout/", @@ -53,8 +53,8 @@ "karma-jasmine": "5.1.0", "karma-jasmine-ajax": "0.1.13", "@metahub/karma-jasmine-jquery": "4.0.1", - "@eclipse-scout/karma-jasmine-scout": ">=26.1.0-snapshot <26.1.0", - "@eclipse-scout/tsconfig": ">=26.1.0-snapshot <26.1.0", + "@eclipse-scout/karma-jasmine-scout": ">=26.2.0-snapshot <26.2.0", + "@eclipse-scout/tsconfig": ">=26.2.0-snapshot <26.2.0", "karma-jasmine-html-reporter": "2.1.0", "karma-junit-reporter": "2.0.1", "karma-webpack": "5.0.1", diff --git a/eclipse-scout-cli/pom.xml b/eclipse-scout-cli/pom.xml index 7f158dbc495..ccbd64edf0c 100644 --- a/eclipse-scout-cli/pom.xml +++ b/eclipse-scout-cli/pom.xml @@ -16,7 +16,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/eclipse-scout-core/README.md b/eclipse-scout-core/README.md index 46dfbffed4c..0ee65a5d1ca 100644 --- a/eclipse-scout-core/README.md +++ b/eclipse-scout-core/README.md @@ -3,8 +3,8 @@

- Jenkins - Jenkins tests + Jenkins + Jenkins tests npm NPM npm (scoped) @@ -22,7 +22,7 @@ This module contains the web runtime components running in the browser. If you are completely new and wondering what Eclipse Scout is, please visit our [website](https://eclipse.dev/scout/). -To get started with Scout, follow our [Get Started Guide](https://eclipsescout.github.io/scout-docs/26.1/getstarted/getstarted.html). +To get started with Scout, follow our [Get Started Guide](https://eclipsescout.github.io/scout-docs/26.2/getstarted/getstarted.html). ## Documentation diff --git a/eclipse-scout-core/package.json b/eclipse-scout-core/package.json index 0976f61257c..4010bee24fa 100644 --- a/eclipse-scout-core/package.json +++ b/eclipse-scout-core/package.json @@ -1,6 +1,6 @@ { "name": "@eclipse-scout/core", - "version": "26.1.0-snapshot", + "version": "26.2.0-snapshot", "description": "Eclipse Scout runtime", "author": "BSI Business Systems Integration AG", "homepage": "https://eclipse.dev/scout/", @@ -63,7 +63,7 @@ "version:release": "releng-scripts version:release" }, "devDependencies": { - "@eclipse-scout/cli": ">=26.1.0-snapshot <26.1.0", + "@eclipse-scout/cli": ">=26.2.0-snapshot <26.2.0", "@eclipse-scout/releng": "^26.1.0", "jasmine-core": "5.13.0", "jasmine-ajax": "4.0.0", diff --git a/eclipse-scout-core/pom.xml b/eclipse-scout-core/pom.xml index 131d9db8f9a..39af30ec336 100644 --- a/eclipse-scout-core/pom.xml +++ b/eclipse-scout-core/pom.xml @@ -16,7 +16,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/eclipse-scout-core/src/bookmark/BookmarkDoBuilder.ts b/eclipse-scout-core/src/bookmark/BookmarkDoBuilder.ts index 8c95cbfd707..af8dff46b0d 100644 --- a/eclipse-scout-core/src/bookmark/BookmarkDoBuilder.ts +++ b/eclipse-scout-core/src/bookmark/BookmarkDoBuilder.ts @@ -8,9 +8,8 @@ * SPDX-License-Identifier: EPL-2.0 */ import { - arrays, BaseDoEntity, BookmarkDo, BookmarkDoBuilderModel, BookmarkSupport, BookmarkTableRowIdentifierDo, ChartTableControlConfigHelper, Desktop, Form, IBookmarkDefinitionDo, IBookmarkDo, IBookmarkPageDo, IChartTableControlConfigDo, - InitModelOf, NodeBookmarkPageDo, objects, ObjectWithType, OutlineBookmarkDefinitionDo, Page, PageBookmarkDefinitionDo, PageWithTable, scout, Session, strings, TableBookmarkPageDo, TableClientUiPreferencesDo, TableUiPreferences, - tableUiPreferences + arrays, BookmarkDo, BookmarkDoBuilderModel, BookmarkSupport, BookmarkTableRowIdentifierDo, ChartTableControlConfigHelper, Desktop, Form, IBookmarkDefinitionDo, IBookmarkDo, IBookmarkPageDo, IChartTableControlConfigDo, InitModelOf, + NodeBookmarkPageDo, ObjectWithType, OutlineBookmarkDefinitionDo, Page, PageBookmarkDefinitionDo, PageWithTable, scout, Session, strings, TableBookmarkPageDo, TableClientUiPreferencesDo, TableUiPreferences, tableUiPreferences } from '../index'; export class BookmarkDoBuilder implements ObjectWithType, BookmarkDoBuilderModel { @@ -36,6 +35,9 @@ export class BookmarkDoBuilder implements ObjectWithType, BookmarkDoBuilderModel createTablePreferences: boolean; createTableRowSelections: boolean; + // Map to store texts computed by _tablePageToTableBookmarkPage() for later use in _createBookmarkDescription() + protected _searchFilterTexts = new Map(); + // -------------------------------------- constructor() { @@ -163,7 +165,7 @@ export class BookmarkDoBuilder implements ObjectWithType, BookmarkDoBuilderModel throw BookmarkDoBuilder.ERROR_MISSING_ROW_BOOKMARK_IDENTIFIER; } - return scout.create(TableBookmarkPageDo, { + let bookmarkPage = scout.create(TableBookmarkPageDo, { pageParam: page.pageParam, displayText: page.getDisplayText(), expandedChildRow: expandedChildRowIdentifier, @@ -173,6 +175,16 @@ export class BookmarkDoBuilder implements ObjectWithType, BookmarkDoBuilderModel tablePreferences: tablePreferences, chartTableControlConfig: chartTableControlConfig }); + + // Compute search filter text and put it into a map for later use in _createBookmarkDescription() + if (this.createDescription && searchData) { + let searchFilterText = await page.getSearchFilterText(); + if (searchFilterText) { + this._searchFilterTexts.set(bookmarkPage, searchFilterText); + } + } + + return bookmarkPage; } protected _createExpandedTableRowIdentifier(page: PageWithTable, childPage: Page): BookmarkTableRowIdentifierDo { @@ -275,18 +287,19 @@ export class BookmarkDoBuilder implements ObjectWithType, BookmarkDoBuilderModel let lines = []; pagePath.forEach((bookmarkPage, index) => { - let prefix = strings.repeat(' ', index); + let indent = ' '; + let prefix = strings.repeat(indent, index); let displayText = bookmarkPage.displayText || this.session.text('Node'); lines.push(prefix + displayText); - if (bookmarkPage instanceof TableBookmarkPageDo && bookmarkPage.searchData) { - let searchData = bookmarkPage.searchData instanceof BaseDoEntity ? bookmarkPage.searchData.toPojo() : bookmarkPage.searchData; - Object.keys(searchData) - .filter(key => !strings.startsWith(key, '_')) - .filter(key => !objects.isNullOrUndefinedOrEmpty(searchData[key])) - .map(key => key + ': ' + JSON.stringify((searchData)[key])) - .forEach(searchLine => lines.push(prefix + ' ' + searchLine)); + if (bookmarkPage instanceof TableBookmarkPageDo) { + // Get search filter text added by _tablePageToTableBookmarkPage() + let searchFilterText = this._searchFilterTexts.get(bookmarkPage); + // Split search filter text into lines and add them to the description (with additional indentation) + if (searchFilterText) { + lines.push(...searchFilterText.split('\n').map(s => prefix + indent + s)); + } } }); return lines.join('\n'); diff --git a/eclipse-scout-core/src/form/Form.ts b/eclipse-scout-core/src/form/Form.ts index a88b6660d84..b46331c7a9a 100644 --- a/eclipse-scout-core/src/form/Form.ts +++ b/eclipse-scout-core/src/form/Form.ts @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2025 BSI Business Systems Integration AG + * Copyright (c) 2010, 2026 BSI Business Systems Integration AG * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -8,10 +8,10 @@ * SPDX-License-Identifier: EPL-2.0 */ import { - AbortKeyStroke, App, aria, AriaLabelledByInsertPosition, arrays, BusyIndicatorOptions, Button, ButtonSystemType, DialogLayout, DisabledStyle, DisplayParent, DisplayViewId, EnumObject, ErrorHandler, Event, EventHandler, FileChooser, - FileChooserController, FocusRule, FormController, FormEventMap, FormGrid, FormInvalidEvent, FormLayout, FormLifecycle, FormModel, FormRevealInvalidFieldEvent, GlassPaneRenderer, GroupBox, HtmlComponent, InitModelOf, KeyStroke, - KeyStrokeContext, MessageBox, MessageBoxController, MessageBoxes, NotificationBadgeStatus, ObjectOrChildModel, objects, Point, PopupWindow, PropertyChangeEvent, Rectangle, scout, Status, StatusOrModel, strings, tooltips, TreeVisitResult, - ValidationResult, webstorage, Widget, WrappedFormField + AbortKeyStroke, App, aria, AriaLabelledByInsertPosition, arrays, BusyIndicatorOptions, Button, ButtonSystemType, ChildModelOf, DialogLayout, DisabledStyle, DisplayParent, DisplayViewId, EnumObject, ErrorHandler, Event, EventHandler, + FileChooser, FileChooserController, FocusRule, FormController, FormEventMap, FormGrid, FormInvalidEvent, FormLayout, FormLifecycle, FormModel, FormRevealInvalidFieldEvent, GlassPaneRenderer, GroupBox, HtmlComponent, InitModelOf, + KeyStroke, KeyStrokeContext, MessageBox, MessageBoxController, MessageBoxes, ModelOf, NotificationBadgeStatus, ObjectOrChildModel, objects, Point, PopupWindow, PropertyChangeEvent, Rectangle, scout, Status, StatusOrModel, strings, + tooltips, TreeVisitResult, ValidationResult, webstorage, Widget, WrappedFormField } from '../index'; import $ from 'jquery'; @@ -321,13 +321,40 @@ export class Form extends Widget implements FormModel, DisplayParent { } protected _createLifecycle(): FormLifecycle { - return scout.create(FormLifecycle, { - widget: this, + // already created + if (this.lifecycle instanceof FormLifecycle) { + return this.lifecycle; + } + + const defaultModel: ModelOf = { askIfNeedSave: this.askIfNeedSave, + askIfNeedSaveText: this.askIfNeedSaveText, emptyMandatoryElementsText: this.emptyMandatoryElementsText, invalidElementsErrorText: this.invalidElementsErrorText, - invalidElementsWarningText: this.invalidElementsWarningText, - askIfNeedSaveText: this.askIfNeedSaveText + invalidElementsWarningText: this.invalidElementsWarningText + }; + + // object type + if (typeof this.lifecycle === 'string' || typeof this.lifecycle === 'function') { + return scout.create(this.lifecycle, { + ...defaultModel, + widget: this + }); + } + + // child model + if (objects.isPojo(this.lifecycle)) { + return scout.create({ + objectType: FormLifecycle, + ...defaultModel, + ...this.lifecycle as ChildModelOf, + widget: this + }) as FormLifecycle; + } + + return scout.create(FormLifecycle, { + ...defaultModel, + widget: this }); } diff --git a/eclipse-scout-core/src/form/FormModel.ts b/eclipse-scout-core/src/form/FormModel.ts index c479487d88f..1e6336807c9 100644 --- a/eclipse-scout-core/src/form/FormModel.ts +++ b/eclipse-scout-core/src/form/FormModel.ts @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2024 BSI Business Systems Integration AG + * Copyright (c) 2010, 2026 BSI Business Systems Integration AG * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -7,7 +7,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -import {DisplayHint, DisplayParent, DisplayParentModel, DisplayViewId, Form, FormValidator, GroupBox, ObjectOrChildModel, StatusOrModel, Widget, WidgetModel} from '../index'; +import {ChildModelOf, DisplayHint, DisplayParent, DisplayParentModel, DisplayViewId, Form, FormLifecycle, FormValidator, GroupBox, ObjectOrChildModel, ObjectType, StatusOrModel, Widget, WidgetModel} from '../index'; export interface FormModel extends WidgetModel, DisplayParentModel { /** @@ -230,4 +230,8 @@ export interface FormModel extends WidgetModel, DisplayParentModel { * By default, the list is empty. */ validators?: FormValidator[]; + /** + * Defines the {@link FormLifecycle} for this form. + */ + lifecycle?: ObjectType | ChildModelOf; } diff --git a/eclipse-scout-core/src/status/NotificationBadgeStatus.ts b/eclipse-scout-core/src/status/NotificationBadgeStatus.ts index 176fe470c95..8178d4dc43b 100644 --- a/eclipse-scout-core/src/status/NotificationBadgeStatus.ts +++ b/eclipse-scout-core/src/status/NotificationBadgeStatus.ts @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2024 BSI Business Systems Integration AG + * Copyright (c) 2010, 2026 BSI Business Systems Integration AG * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -19,19 +19,4 @@ export class NotificationBadgeStatus extends Status { override cssClass(): string { return strings.join(' ', Status.cssClassForSeverity(this.severity), 'notification-badge'); } - - /** - * @returns {NotificationBadgeStatus} a clone of this Status instance. - */ - override clone(): Status { - let modelClone = $.extend({}, this); - return new NotificationBadgeStatus(modelClone); - } - - override equals(o: any): boolean { - if (!(o instanceof NotificationBadgeStatus)) { - return false; - } - return super.equals(o); - } } diff --git a/eclipse-scout-core/src/status/Status.ts b/eclipse-scout-core/src/status/Status.ts index 55fc5ca0d8d..8a8b1a02618 100644 --- a/eclipse-scout-core/src/status/Status.ts +++ b/eclipse-scout-core/src/status/Status.ts @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2023 BSI Business Systems Integration AG + * Copyright (c) 2010, 2026 BSI Business Systems Integration AG * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -7,7 +7,9 @@ * * SPDX-License-Identifier: EPL-2.0 */ -import {arrays, DefaultStatus, EnumObject, FullModelOf, InitModelOf, NotificationBadgeStatus, ObjectOrModel, objects, ObjectWithType, ParsingFailedStatus, Predicate, scout, StatusModel, strings, ValidationFailedStatus} from '../index'; +import { + arrays, Constructor, DefaultStatus, EnumObject, FullModelOf, InitModelOf, NotificationBadgeStatus, ObjectOrModel, objects, ObjectWithType, ParsingFailedStatus, Predicate, scout, StatusModel, strings, ValidationFailedStatus +} from '../index'; import $ from 'jquery'; export class Status implements StatusModel, ObjectWithType { @@ -87,21 +89,20 @@ export class Status implements StatusModel, ObjectWithType { } /** - * @returns a clone of this Status instance. + * @returns a deep clone of this Status instance. */ - clone(): Status { - let modelClone = $.extend({}, this); - return new Status(modelClone); + clone(): this { + return objects.copyPropertiesRecursive(this, new (this.constructor as Constructor)()); } equals(o: any): boolean { - if (!(o instanceof Status)) { + if (this.constructor !== o?.constructor) { return false; } if (!objects.equalsRecursive(this.children, o.children)) { return false; } - return objects.propertiesEquals(this, o, ['severity', 'message', 'invalidDate', 'invalidTime']); + return objects.propertiesEquals(this, o, ['severity', 'message', 'invalidDate'/* used by DateField */, 'invalidTime'/* used by DateField */]); } /** diff --git a/eclipse-scout-core/src/table/TableHeader.ts b/eclipse-scout-core/src/table/TableHeader.ts index d78ff759fad..87f9e8f8bca 100644 --- a/eclipse-scout-core/src/table/TableHeader.ts +++ b/eclipse-scout-core/src/table/TableHeader.ts @@ -670,6 +670,7 @@ export class TableHeader extends Widget implements TableHeaderModel { if (scout.isOneOf(event.which, keys.ENTER, keys.SPACE)) { this._doHeaderItemAction($(event.currentTarget)); event.stopPropagation(); + event.preventDefault(); // Don't scroll when pressing space } } diff --git a/eclipse-scout-core/src/tile/fields/tablefield/TileTableField.less b/eclipse-scout-core/src/tile/fields/tablefield/TileTableField.less index 19c53bd2a4d..dbaa956f8ce 100644 --- a/eclipse-scout-core/src/tile/fields/tablefield/TileTableField.less +++ b/eclipse-scout-core/src/tile/fields/tablefield/TileTableField.less @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2024 BSI Business Systems Integration AG + * Copyright (c) 2010, 2026 BSI Business Systems Integration AG * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -42,9 +42,8 @@ border-radius: 0; background-color: transparent; - &:focus, - &.focused { - box-shadow: none; + &:has(.table-data:is(:focus, .focused)) { + box-shadow: none !important; } & > .table-header { @@ -86,21 +85,21 @@ } } - &:not(:focus):not(.focused) > .table-data > .table-row.selected { - /* No selection color for non-focused table tiles */ - background-color: transparent; - - &::after { - border: 0; - } - } - & > .table-data { & + .scroll-shadow { .scroll-shadow.gradient(); --scroll-shadow-color: var(--tile-background-color); } + &:not(:is(:focus, .focused)) > .table-row.selected { + /* No selection color for non-focused table tiles */ + background-color: transparent; + + &::after { + border: 0; + } + } + & > .table-row { & > .table-cell, & > .table-cell > .font-icon { diff --git a/eclipse-scout-core/src/tile/fields/tablefield/TileTableField.ts b/eclipse-scout-core/src/tile/fields/tablefield/TileTableField.ts index ea9a8930fcc..6e7f1dad97f 100644 --- a/eclipse-scout-core/src/tile/fields/tablefield/TileTableField.ts +++ b/eclipse-scout-core/src/tile/fields/tablefield/TileTableField.ts @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2023 BSI Business Systems Integration AG + * Copyright (c) 2010, 2026 BSI Business Systems Integration AG * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -7,29 +7,35 @@ * * SPDX-License-Identifier: EPL-2.0 */ -import {EventHandler, FormFieldTile, MenuBar, PropertyChangeEvent, TableField} from '../../../index'; +import {EventHandler, focusUtils, FormFieldTile, MenuBar, PropertyChangeEvent, TableField} from '../../../index'; import $ from 'jquery'; export class TileTableField extends TableField { - protected _tableBlurHandler: (event: JQuery.BlurEvent) => void; - protected _tableFocusHandler: (event: JQuery.FocusEvent) => void; protected _menuBarPropertyChangeHandler: EventHandler>; protected _documentMouseDownHandler: (event: MouseEvent) => void; constructor() { super(); - this._tableBlurHandler = this._onTableBlur.bind(this); - this._tableFocusHandler = this._onTableFocus.bind(this); this._menuBarPropertyChangeHandler = this._onMenuBarPropertyChange.bind(this); this._documentMouseDownHandler = this._onDocumentMouseDown.bind(this); } protected override _render() { super._render(); + if ((this.parent as FormFieldTile).displayStyle !== FormFieldTile.DisplayStyle.DASHBOARD) { + return; + } + if (!this.session.focusManager.restrictedFocusGain) { this.$container.document(true).addEventListener('mousedown', this._documentMouseDownHandler, true); } + this.$container + .on('focusout', this._onTileFocusOut.bind(this)) + .on('focusin', this._onTileFocusIn.bind(this)); + if (!focusUtils.isOrHasActiveElement(this.$container)) { + this._hideMenuBar(true); + } } protected override _remove() { @@ -43,14 +49,8 @@ export class TileTableField extends TableField { return; } if (this.table) { - this.table.$container - .on('blur', this._tableBlurHandler) - .on('focus', this._tableFocusHandler); this.table.menuBar.on('propertyChange', this._menuBarPropertyChangeHandler); this._toggleHasMenuBar(); - if (document.activeElement !== this.table.$container[0]) { - this._hideMenuBar(true); - } } } @@ -59,28 +59,39 @@ export class TileTableField extends TableField { return; } if (this.table) { - this.table.$container - .off('blur', this._tableBlurHandler) - .off('focus', this._tableFocusHandler); this.table.menuBar.off('propertyChange', this._menuBarPropertyChangeHandler); } super._removeTable(); } - protected _onTableBlur(event: JQuery.BlurEvent) { + protected _onTileFocusOut(event: JQuery.FocusOutEvent) { + if (this.$container.isOrHas(event.relatedTarget as Element)) { + // If focus stays in tile, don't remove menubar + return; + } let popup = $('.popup').data('widget'); - // hide menu bar if context menu popup is not attached to TileTableField - if (!this.has(popup)) { - this._hideMenuBar(true); - } + // Hide menu bar when focus leaves tile, but only if there is no popup open that belongs to the table (e.g. context menu or table header popup) + // If a popup is open, the focus is on the popup but the menubar should still be visible + requestAnimationFrame(() => { + if (!this.rendered) { + return; + } + + if (!this.has(popup)) { + this._hideMenuBar(true); + } + }); } - protected _onTableFocus(event: JQuery.FocusEvent) { + protected _onTileFocusIn(event: JQuery.FocusInEvent) { this._hideMenuBar(false); } protected _hideMenuBar(hiddenByUi: boolean) { + if (!this.table) { + return; + } this.table.menuBar.hiddenByUi = hiddenByUi; this.table.menuBar.updateVisibility(); } diff --git a/eclipse-scout-core/src/util/objects.ts b/eclipse-scout-core/src/util/objects.ts index 8f6c70caaf0..709358e3637 100644 --- a/eclipse-scout-core/src/util/objects.ts +++ b/eclipse-scout-core/src/util/objects.ts @@ -217,6 +217,7 @@ export const objects = { * * All objects (except Widget) having a `clone` function (expected to create a deep clone without taking any arguments). These are classes like `BaseDoEntity`, `Dimension`, `GridData`, `Insets`, `Point`, `Status`, `URL`, ... * @param val The value to deep clone. * @returns The deep clone if supported, the input value otherwise. + * @throws Error if the given value cannot be cloned. */ valueCopy(val: T): T { if (objects.isPojo(val)) { @@ -225,6 +226,9 @@ export const objects = { if (objects.isArray(val)) { return val.map(e => objects.valueCopy(e)) as T; } + if (!objects.isObject(val)) { + return val; // primitives, null, undefined + } return deepCloneClass(val); // handles all class types }, @@ -234,6 +238,7 @@ export const objects = { * All properties are recursively cloned using {@link objects#valueCopy}. Therefore, only properties of types supported by {@link objects#valueCopy} must be present. * @param source Where to get the properties to copy. * @param destination Where to store the cloned properties. + * @throws Error if a property cannot be cloned (see {@link objects#valueCopy} for details). */ copyPropertiesRecursive(source: T, destination: T): T { for (const [k, v] of Object.entries(source)) { @@ -900,7 +905,7 @@ function deepCloneClass(val: any): any { } } - return val; + throw new Error(val.constructor + ' is not cloneable'); // clone not supported: a widget or no 'clone' function available } function equalsImpl(objA: any, objB: any, useEqualsFunc = true): boolean | null { diff --git a/eclipse-scout-core/src/util/strings.ts b/eclipse-scout-core/src/util/strings.ts index 891b5083401..ef80cf7bf29 100644 --- a/eclipse-scout-core/src/util/strings.ts +++ b/eclipse-scout-core/src/util/strings.ts @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2025 BSI Business Systems Integration AG + * Copyright (c) 2010, 2026 BSI Business Systems Integration AG * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -128,9 +128,11 @@ export const strings = { }, /** - * Returns the HTML encoded text. Example: 'Foo
Bar' returns 'Foo&lt;br&gt;Bar'. - * If the argument is or undefined, the same value is returned. - * @param text plain text to encode + * Returns the HTML encoded text. If the text is falsy, the input value is returned. + * + * Example: 'Foo<br>Bar' returns 'Foo&lt;br&gt;Bar'. + * + * @param text text to encode * @returns HTML encoded text */ encode(text: string): string { diff --git a/eclipse-scout-core/src/widget/WidgetModel.ts b/eclipse-scout-core/src/widget/WidgetModel.ts index c437574085d..4bfceb08925 100644 --- a/eclipse-scout-core/src/widget/WidgetModel.ts +++ b/eclipse-scout-core/src/widget/WidgetModel.ts @@ -20,7 +20,7 @@ export interface WidgetModel extends ObjectModelWithUuid, ObjectModelWit * *Example*: {@link ViewMenuPopup} uses the {@link ViewButton}s as menu items. These view buttons are owned by the desktop and must therefore not be destroyed * when the popup closes, otherwise they could not be reused the second time the popup opens. * - * @see https://eclipsescout.github.io/scout-docs/26.1/technical-guide/user-interface/widget.html#parent-and-owner + * @see https://eclipsescout.github.io/scout-docs/26.2/technical-guide/user-interface/widget.html#parent-and-owner */ parent?: Widget; /** @@ -29,7 +29,7 @@ export interface WidgetModel extends ObjectModelWithUuid, ObjectModelWit * * By default, the owner is derived from the {@link parent}, so it does not need to be set explicitly. * - * @see https://eclipsescout.github.io/scout-docs/26.1/technical-guide/user-interface/widget.html#parent-and-owner + * @see https://eclipsescout.github.io/scout-docs/26.2/technical-guide/user-interface/widget.html#parent-and-owner */ owner?: Widget; /** diff --git a/eclipse-scout-core/test/bookmark/BookmarkSupportSpec.ts b/eclipse-scout-core/test/bookmark/BookmarkSupportSpec.ts index 02a63c481cd..ea79dc69c69 100644 --- a/eclipse-scout-core/test/bookmark/BookmarkSupportSpec.ts +++ b/eclipse-scout-core/test/bookmark/BookmarkSupportSpec.ts @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2025 BSI Business Systems Integration AG + * Copyright (c) 2010, 2026 BSI Business Systems Integration AG * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -9,7 +9,7 @@ */ import { - ActivateBookmarkPathParam, BaseDoEntity, BookmarkDo, BookmarkDoBuilder, BookmarkSupport, BookmarkTableRowIdentifierDo, BookmarkTableRowIdentifierStringComponentDo, BooleanColumn, Column, Desktop, NodeBookmarkPageDo, NumberColumn, + ActivateBookmarkPathParam, BaseDoEntity, BookmarkDo, BookmarkDoBuilder, BookmarkSupport, BookmarkTableRowIdentifierDo, BookmarkTableRowIdentifierStringComponentDo, BooleanColumn, Column, dates, Desktop, NodeBookmarkPageDo, NumberColumn, NumberColumnUserFilter, NumberColumnUserFilterStateDo, Outline, OutlineBookmarkDefinitionDo, PageBookmarkDefinitionDo, PageIdDummyPageParamDo, ResetMenu, scout, SearchMenu, Table, TableBookmarkPageDo, TableClientUiPreferenceProfileDo, TableClientUiPreferencesDo, TableColumnClientUiPreferenceDo, TableTextUserFilter, TableTextUserFilterStateDo, TableUiPreferences, UuidPool } from '../../src/index'; @@ -33,6 +33,9 @@ describe('BookmarkSupport', () => { }); desktop = session.desktop; bookmarkSupport = BookmarkSupport.get(session); + + session.textMap.add('Yes', 'Yes'); + session.textMap.add('No', 'No'); }); // --------------------------------------------------------------- @@ -187,7 +190,7 @@ describe('BookmarkSupport', () => { expect(bookmark).toBeInstanceOf(BookmarkDo); expect(bookmark.id).toBeUndefined(); expect(bookmark.title).toBe('Outline 1 - Table Page 3'); - expect(bookmark.description).toBe('Table Page 3\n text: "n"'); + expect(bookmark.description).toBe('Table Page 3\n Text: n\n Show hidden values: No'); expect(bookmark.definition).toBeInstanceOf(OutlineBookmarkDefinitionDo); let bookmarkDefinition = bookmark.definition as OutlineBookmarkDefinitionDo; expect(bookmarkDefinition.outlineId).toBe(SPEC_OUTLINE_1_UUID); @@ -198,7 +201,9 @@ describe('BookmarkSupport', () => { expect(bookmarkedPage.pageParam).toBeInstanceOf(PageIdDummyPageParamDo); expect((bookmarkedPage.pageParam as PageIdDummyPageParamDo).pageId).toBe(SPEC_TABLE_PAGE_3_UUID); expect(bookmarkedPage.searchData).toBeInstanceOf(BaseDoEntity); - expect((bookmarkedPage.searchData as BaseDoEntity).toPojo()).toEqual(scout.create(SpecSearchDo, {text: 'n'}).toPojo()); + expect((bookmarkedPage.searchData as BaseDoEntity).toPojo()).toEqual(scout.create(SpecSearchDo, { + text: 'n', showHiddenValues: false, languages: [], creationDate: null + }).toPojo()); expect(bookmarkedPage.tablePreferences).toBeTruthy(); expect(bookmarkedPage.tablePreferences.tableId).toBe(`${SPEC_TABLE_PAGE_3_TABLE_UUID}|${SPEC_TABLE_PAGE_3_UUID}`); @@ -322,7 +327,7 @@ describe('BookmarkSupport', () => { outline.drillDown(page2); await page2.ensureLoadChildren(); expect(page2.detailTable.rows.length).toBe(5); - page2.setSearchFilter(scout.create(SpecSearchDo, {text: 'i'})); // Matches 'Pineapple' and 'Kiwi' + page2.setSearchFilter(scout.create(SpecSearchDo, {text: 'i', showHiddenValues: true})); // Matches 'Pineapple' and 'Kiwi' page2.reloadPage(); await page2.ensureLoadChildren(); expect(page2.detailTable.rows.length).toBe(2); @@ -355,7 +360,10 @@ describe('BookmarkSupport', () => { outline.drillDown(page4); await page4.ensureLoadChildren(); expect(page4.detailTable.rows.length).toBe(5); - page4.setSearchFilter(scout.create(SpecSearchDo, {text: 'n'})); // Matches 'Banana', 'Pineapple' and 'Lemon' + jasmine.clock().install(); + page4.setSearchFilter(scout.create(SpecSearchDo, {text: 'n', languages: [100, 300], creationDate: dates.create('1999-12-31')})); // Matches 'Banana', 'Pineapple' and 'Lemon' + jasmine.clock().tick(300); // wait for list box update the display text + jasmine.clock().uninstall(); page4.reloadPage(); await page4.ensureLoadChildren(); expect(page4.detailTable.rows.length).toBe(3); @@ -372,7 +380,17 @@ describe('BookmarkSupport', () => { expect(bookmark).toBeInstanceOf(BookmarkDo); expect(bookmark.id).toBeUndefined(); expect(bookmark.title).toBe('Outline 2 - Node Page 3 - Table Page 2 - Kiwi - Table Page 2'); - expect(bookmark.description).toBe('Node Page 3\n Table Page 2\n text: "i"\n Kiwi\n Table Page 2\n text: "n"'); + expect(bookmark.description).toBe('' + + 'Node Page 3\n' + + ' Table Page 2\n' + + ' Text: i\n' + + ' Show hidden values: Yes\n' + + ' Kiwi\n' + + ' Table Page 2\n' + + ' Text: n\n' + + ' Show hidden values: No\n' + + ' Languages: English, Italian\n' + + ' Creation date: 31.12.1999'); expect(bookmark.definition).toBeInstanceOf(OutlineBookmarkDefinitionDo); let bookmarkDefinition = bookmark.definition as OutlineBookmarkDefinitionDo; expect(bookmarkDefinition.outlineId).toBe(SPEC_OUTLINE_2_UUID); @@ -390,7 +408,9 @@ describe('BookmarkSupport', () => { expect((pagePathElement2.pageParam as PageIdDummyPageParamDo).pageId).toBe(SPEC_TABLE_PAGE_2_UUID); expect(pagePathElement2.searchFilterComplete).toBe(true); expect(pagePathElement2.searchData).toBeInstanceOf(BaseDoEntity); - expect((pagePathElement2.searchData as BaseDoEntity).toPojo()).toEqual(scout.create(SpecSearchDo, {text: 'i'}).toPojo()); + expect((pagePathElement2.searchData as BaseDoEntity).toPojo()).toEqual(scout.create(SpecSearchDo, { + text: 'i', showHiddenValues: true, languages: [], creationDate: null + }).toPojo()); expect(pagePathElement2.expandedChildRow).toBeInstanceOf(BookmarkTableRowIdentifierDo); expect(pagePathElement2.expandedChildRow.toPojo()).toEqual(scout.create(BookmarkTableRowIdentifierDo, { keyComponents: [scout.create(BookmarkTableRowIdentifierStringComponentDo, {key: FRUIT_5_KEY})] @@ -408,7 +428,9 @@ describe('BookmarkSupport', () => { expect(bookmarkedPage.pageParam).toBeInstanceOf(PageIdDummyPageParamDo); expect((bookmarkedPage.pageParam as PageIdDummyPageParamDo).pageId).toBe(SPEC_TABLE_PAGE_2_UUID); expect(bookmarkedPage.searchData).toBeInstanceOf(BaseDoEntity); - expect((bookmarkedPage.searchData as BaseDoEntity).toPojo()).toEqual(scout.create(SpecSearchDo, {text: 'n'}).toPojo()); + expect((bookmarkedPage.searchData as BaseDoEntity).toPojo()).toEqual(scout.create(SpecSearchDo, { + text: 'n', showHiddenValues: false, languages: [100, 300], creationDate: dates.create('1999-12-31') + }).toPojo()); expect(bookmarkedPage.expandedChildRow).toBe(null); expect(bookmarkedPage.selectedChildRows.length).toBe(0); // selected rows are not exported by default }); @@ -482,7 +504,7 @@ describe('BookmarkSupport', () => { expect(bookmark).toBeInstanceOf(BookmarkDo); expect(bookmark.id).toBeUndefined(); expect(bookmark.title).toBe('Outline 3 - Table Page 2 - Kiwi'); - expect(bookmark.description).toBe('Table Page 2\n text: "i"\n Kiwi'); + expect(bookmark.description).toBe('Table Page 2\n Text: i\n Show hidden values: No\n Kiwi'); expect(bookmark.definition).toBeInstanceOf(OutlineBookmarkDefinitionDo); let bookmarkDefinition = bookmark.definition as OutlineBookmarkDefinitionDo; expect(bookmarkDefinition.outlineId).toBe(SPEC_OUTLINE_3_UUID); @@ -495,7 +517,9 @@ describe('BookmarkSupport', () => { expect((pagePathElement1.pageParam as PageIdDummyPageParamDo).pageId).toBe(SPEC_TABLE_PAGE_2_UUID); expect(pagePathElement1.searchFilterComplete).toBe(true); expect(pagePathElement1.searchData).toBeInstanceOf(BaseDoEntity); - expect((pagePathElement1.searchData as BaseDoEntity).toPojo()).toEqual(scout.create(SpecSearchDo, {text: 'i'}).toPojo()); + expect((pagePathElement1.searchData as BaseDoEntity).toPojo()).toEqual(scout.create(SpecSearchDo, { + text: 'i', showHiddenValues: false, languages: [], creationDate: null + }).toPojo()); expect(pagePathElement1.expandedChildRow).toBeInstanceOf(BookmarkTableRowIdentifierDo); expect(pagePathElement1.expandedChildRow.toPojo()).toEqual(scout.create(BookmarkTableRowIdentifierDo, { keyComponents: [scout.create(BookmarkTableRowIdentifierStringComponentDo, {key: FRUIT_5_KEY})] diff --git a/eclipse-scout-core/test/bookmark/bookmark-fixtures.ts b/eclipse-scout-core/test/bookmark/bookmark-fixtures.ts index 0f93877bd2a..7c3292998dd 100644 --- a/eclipse-scout-core/test/bookmark/bookmark-fixtures.ts +++ b/eclipse-scout-core/test/bookmark/bookmark-fixtures.ts @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2025 BSI Business Systems Integration AG + * Copyright (c) 2010, 2026 BSI Business Systems Integration AG * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -8,9 +8,10 @@ * SPDX-License-Identifier: EPL-2.0 */ import { - BaseDoEntity, BooleanColumn, Column, Desktop, DesktopModel, Form, FormModel, GroupBox, NumberColumn, ObjectOrModel, Outline, OutlineViewButton, Page, PageParamDo, PageWithNodes, PageWithTable, ResetMenu, scout, SearchFormTableControl, - SearchMenu, StringField, strings, Table, TableRow, Tree, typeName + BaseDoEntity, BooleanColumn, CheckBoxField, Column, DateField, Desktop, DesktopModel, Form, FormModel, GroupBox, ListBox, NumberColumn, ObjectOrModel, Outline, OutlineViewButton, Page, PageParamDo, PageWithNodes, PageWithTable, ResetMenu, + scout, SearchFormTableControl, SearchMenu, StringField, strings, Table, TableRow, Tree, typeName } from '../../src'; +import {LanguageDummyLookupCall} from '../../src/testing'; // --------------------------------------------------------------- // @@ -146,6 +147,9 @@ export class SpecPageParamDo extends PageParamDo { @typeName('SpecSearch') export class SpecSearchDo extends BaseDoEntity { text: string; + showHiddenValues: boolean; + languages: number[]; + creationDate: Date; } export class SpecNodePage1 extends PageWithNodes { @@ -422,6 +426,9 @@ export class SpecSearchForm extends Form { declare data: SpecSearchDo; declare widgetMap: { 'TextField': StringField; + 'ShowHiddenValuesField': CheckBoxField; + 'LanguagesField': ListBox; + 'CreationDateField': DateField; 'SearchMenu': SearchMenu; 'ResetMenu': ResetMenu; }; @@ -435,6 +442,19 @@ export class SpecSearchForm extends Form { id: 'TextField', objectType: StringField, label: 'Text' + }, { + id: 'ShowHiddenValuesField', + objectType: CheckBoxField, + label: 'Show hidden values' + }, { + id: 'LanguagesField', + objectType: ListBox, + label: 'Languages', + lookupCall: LanguageDummyLookupCall + }, { + id: 'CreationDateField', + objectType: DateField, + label: 'Creation date' }], menus: [{ id: 'SearchMenu', @@ -452,11 +472,17 @@ export class SpecSearchForm extends Form { return; } this.widget('TextField').setValue(this.data.text); + this.widget('ShowHiddenValuesField').setValue(this.data.showHiddenValues); + this.widget('LanguagesField').setValue(this.data.languages); + this.widget('CreationDateField').setValue(this.data.creationDate); } override exportData(): any { return scout.create(SpecSearchDo, { - text: this.widget('TextField').value + text: this.widget('TextField').value, + showHiddenValues: this.widget('ShowHiddenValuesField').value, + languages: this.widget('LanguagesField').value, + creationDate: this.widget('CreationDateField').value }); } } diff --git a/eclipse-scout-core/test/form/FormSpec.ts b/eclipse-scout-core/test/form/FormSpec.ts index a74e0dea4d6..c2914a3ac52 100644 --- a/eclipse-scout-core/test/form/FormSpec.ts +++ b/eclipse-scout-core/test/form/FormSpec.ts @@ -9,8 +9,8 @@ */ import {FormSpecHelper, OutlineSpecHelper, SpecForm} from '../../src/testing/index'; import { - App, CancelMenu, CloseMenu, Dimension, fields, FileChooser, Form, FormFieldMenu, FormModel, InitModelOf, MessageBox, NotificationBadgeStatus, NullWidget, NumberField, ObjectFactory, OkMenu, Outline, Page, Popup, PopupBlockerHandler, - Rectangle, ResetMenu, SaveMenu, scout, SearchMenu, SequenceBox, Session, SplitBox, Status, StringField, strings, TabBox, TabItem, webstorage, WidgetModel, WrappedFormField + App, CancelMenu, CloseMenu, Dimension, fields, FileChooser, Form, FormFieldMenu, FormLifecycle, FormModel, InitModelOf, MessageBox, NotificationBadgeStatus, NullWidget, NumberField, ObjectFactory, OkMenu, Outline, Page, Popup, + PopupBlockerHandler, Rectangle, ResetMenu, SaveMenu, scout, SearchMenu, SequenceBox, Session, SplitBox, Status, StringField, strings, TabBox, TabItem, webstorage, WidgetModel, WrappedFormField } from '../../src/index'; import {DateField, GroupBox} from '../../src'; @@ -32,6 +32,10 @@ describe('Form', () => { helper = new FormSpecHelper(session); outlineHelper = new OutlineSpecHelper(session); uninstallUnloadHandlers(session); + session.textMap.add('FormSaveChangesQuestion', 'Do you want to save the changes?'); + session.textMap.add('FormEmptyMandatoryFieldsMessage', 'The following fields must be filled in:'); + session.textMap.add('FormInvalidFieldsMessage', 'The following fields are invalid:'); + session.textMap.add('FormInvalidFieldsWarningMessage', 'The following fields have a warning:'); }); afterEach(() => { @@ -2519,4 +2523,109 @@ describe('Form', () => { expect(numberField.value).toBe(null); }); }); + + describe('lifecycle', () => { + + it('is a FormLifecycle by default', () => { + let form = scout.create(Form, {parent: session.desktop}); + + expect(form.lifecycle).toBeInstanceOf(FormLifecycle); + expect(form.lifecycle.widget).toBe(form); + expect(form.lifecycle.askIfNeedSave).toBeTrue(); + expect(form.lifecycle.askIfNeedSaveText).toBe('Do you want to save the changes?'); + expect(form.lifecycle.emptyMandatoryElementsText).toBe('The following fields must be filled in:'); + expect(form.lifecycle.invalidElementsErrorText).toBe('The following fields are invalid:'); + expect(form.lifecycle.invalidElementsWarningText).toBe('The following fields have a warning:'); + + form = scout.create(Form, { + parent: session.desktop, + askIfNeedSave: false, + askIfNeedSaveText: 'lorem', + emptyMandatoryElementsText: 'ipsum', + invalidElementsErrorText: 'dolor', + invalidElementsWarningText: 'sit' + }); + + expect(form.lifecycle).toBeInstanceOf(FormLifecycle); + expect(form.lifecycle.widget).toBe(form); + expect(form.lifecycle.askIfNeedSave).toBeFalse(); + expect(form.lifecycle.askIfNeedSaveText).toBe('lorem'); + expect(form.lifecycle.emptyMandatoryElementsText).toBe('ipsum'); + expect(form.lifecycle.invalidElementsErrorText).toBe('dolor'); + expect(form.lifecycle.invalidElementsWarningText).toBe('sit'); + }); + + it('can be passed in model as objectType', () => { + let form = scout.create(Form, { + parent: session.desktop, + lifecycle: SpecLifecycle + }); + + expect(form.lifecycle).toBeInstanceOf(SpecLifecycle); + expect(form.lifecycle.widget).toBe(form); + expect(form.lifecycle.askIfNeedSave).toBeTrue(); + expect(form.lifecycle.askIfNeedSaveText).toBe('Do you want to save the changes?'); + expect(form.lifecycle.emptyMandatoryElementsText).toBe('The following fields must be filled in:'); + expect(form.lifecycle.invalidElementsErrorText).toBe('The following fields are invalid:'); + expect(form.lifecycle.invalidElementsWarningText).toBe('The following fields have a warning:'); + + form = scout.create(Form, { + parent: session.desktop, + lifecycle: SpecLifecycle, + askIfNeedSave: false, + askIfNeedSaveText: 'lorem', + emptyMandatoryElementsText: 'ipsum', + invalidElementsErrorText: 'dolor', + invalidElementsWarningText: 'sit' + }); + + expect(form.lifecycle).toBeInstanceOf(SpecLifecycle); + expect(form.lifecycle.widget).toBe(form); + expect(form.lifecycle.askIfNeedSave).toBeFalse(); + expect(form.lifecycle.askIfNeedSaveText).toBe('lorem'); + expect(form.lifecycle.emptyMandatoryElementsText).toBe('ipsum'); + expect(form.lifecycle.invalidElementsErrorText).toBe('dolor'); + expect(form.lifecycle.invalidElementsWarningText).toBe('sit'); + }); + + it('can be passed in model as child model', () => { + let form = scout.create(Form, { + parent: session.desktop, + lifecycle: { + objectType: SpecLifecycle + } + }); + + expect(form.lifecycle).toBeInstanceOf(SpecLifecycle); + expect(form.lifecycle.widget).toBe(form); + expect(form.lifecycle.askIfNeedSave).toBeTrue(); + expect(form.lifecycle.askIfNeedSaveText).toBe('Do you want to save the changes?'); + expect(form.lifecycle.emptyMandatoryElementsText).toBe('The following fields must be filled in:'); + expect(form.lifecycle.invalidElementsErrorText).toBe('The following fields are invalid:'); + expect(form.lifecycle.invalidElementsWarningText).toBe('The following fields have a warning:'); + + form = scout.create(Form, { + parent: session.desktop, + lifecycle: { + objectType: SpecLifecycle, + askIfNeedSave: false, + askIfNeedSaveText: 'lorem', + emptyMandatoryElementsText: 'ipsum', + invalidElementsErrorText: 'dolor', + invalidElementsWarningText: 'sit' + } + }); + + expect(form.lifecycle).toBeInstanceOf(SpecLifecycle); + expect(form.lifecycle.widget).toBe(form); + expect(form.lifecycle.askIfNeedSave).toBeFalse(); + expect(form.lifecycle.askIfNeedSaveText).toBe('lorem'); + expect(form.lifecycle.emptyMandatoryElementsText).toBe('ipsum'); + expect(form.lifecycle.invalidElementsErrorText).toBe('dolor'); + expect(form.lifecycle.invalidElementsWarningText).toBe('sit'); + }); + }); + + class SpecLifecycle extends FormLifecycle { + } }); diff --git a/eclipse-scout-core/test/util/StatusSpec.ts b/eclipse-scout-core/test/util/StatusSpec.ts index 82f446c2b8e..12622f5e5a4 100644 --- a/eclipse-scout-core/test/util/StatusSpec.ts +++ b/eclipse-scout-core/test/util/StatusSpec.ts @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2024 BSI Business Systems Integration AG + * Copyright (c) 2010, 2026 BSI Business Systems Integration AG * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -7,10 +7,48 @@ * * SPDX-License-Identifier: EPL-2.0 */ -import {DefaultStatus, NotificationBadgeStatus, ParsingFailedStatus, Status} from '../../src/index'; +import {DefaultStatus, NotificationBadgeStatus, ParsingFailedStatus, scout, Status, ValidationFailedStatus} from '../../src/index'; describe('Status', () => { + describe('clone', () => { + it('creates the correct instance', () => { + const orig = scout.create(NotificationBadgeStatus, { + severity: Status.Severity.WARNING, + message: 'test' + }); + const copy = orig.clone(); + expect(copy).not.toBe(orig); + expect(copy).toBeInstanceOf(NotificationBadgeStatus); + expect(copy.severity).toEqual(Status.Severity.WARNING); + expect(copy.message).toEqual('test'); + }); + + it('creates a deep copy', () => { + const orig = scout.create({ + objectType: ValidationFailedStatus, + severity: Status.Severity.WARNING, + message: 'deep-test' + }); + orig.children = [scout.create(ParsingFailedStatus, {severity: Status.Severity.INFO, message: 'nested-test'})]; + expect(orig).toBeInstanceOf(ValidationFailedStatus); + expect(orig.children[0]).toBeInstanceOf(ParsingFailedStatus); + + const copy = orig.clone(); + expect(copy).not.toBe(orig); + expect(copy).toBeInstanceOf(ValidationFailedStatus); + + const childCopy = copy.children[0]; + expect(childCopy).toBeInstanceOf(ParsingFailedStatus); + expect(childCopy.severity).toBe(Status.Severity.INFO); + expect(childCopy.message).toBe('nested-test'); + + childCopy.severity = Status.Severity.WARNING; + expect(orig.children[0].severity).toBe(Status.Severity.INFO); + expect(copy.children[0].severity).toBe(Status.Severity.WARNING); + }); + }); + describe('convenience functions', () => { it('create valid status objects', () => { diff --git a/eclipse-scout-core/test/util/objectsSpec.ts b/eclipse-scout-core/test/util/objectsSpec.ts index cc0d6e9646b..42178f43552 100644 --- a/eclipse-scout-core/test/util/objectsSpec.ts +++ b/eclipse-scout-core/test/util/objectsSpec.ts @@ -196,9 +196,8 @@ describe('objects', () => { expect(objects.valueCopy(false)).toBeFalse(); }); - it('returns the input if class cannot be copied', () => { - const toClone = new NullLayout(); - expect(objects.valueCopy(toClone)).toBe(toClone); + it('throws if class cannot be copied', () => { + expect(() => objects.valueCopy(new NullLayout())).toThrow(); }); it('deep copies arrays', () => { diff --git a/eclipse-scout-migrate/README.md b/eclipse-scout-migrate/README.md index 0f9534c92a6..d0ca63cdc72 100644 --- a/eclipse-scout-migrate/README.md +++ b/eclipse-scout-migrate/README.md @@ -3,8 +3,8 @@

- Jenkins - Jenkins tests + Jenkins + Jenkins tests npm NPM npm (scoped) @@ -29,7 +29,7 @@ To set up the tool, do the following: ```json { "devDependencies": { - "@eclipse-scout/migrate": "~26.1.0" + "@eclipse-scout/migrate": "~26.2.0" } } ``` @@ -45,7 +45,7 @@ Some migrations require a `tsconfig.json`. You can add it as follows (do it only ```json { "devDependencies": { - "@eclipse-scout/tsconfig": "~26.1.0" + "@eclipse-scout/tsconfig": "~26.2.0" } } ``` @@ -138,7 +138,7 @@ In order to run the TypeScript migration, do the following: In your widget, implement the model interface and declare a model variable. - To create the event maps, you can run the `event-maps` script from below and copy the result into a separate event maps file. - If you use third party libraries, you may want to check if they provide types and add them to the `devDependencies` of your `package.json` (e.g. @types/jquery). - See also [Project Setup for TypeScript](https://eclipsescout.github.io/scout-docs/26.1/technical-guide/user-interface/typescript.html#project-setup-for-typescript) + See also [Project Setup for TypeScript](https://eclipsescout.github.io/scout-docs/26.2/technical-guide/user-interface/typescript.html#project-setup-for-typescript) - Remove the added `scripts`, `overrides` and dependency to `@eclipse-scout/migrate`. ```json diff --git a/eclipse-scout-migrate/package.json b/eclipse-scout-migrate/package.json index b9488806f8e..758747aeb51 100644 --- a/eclipse-scout-migrate/package.json +++ b/eclipse-scout-migrate/package.json @@ -1,6 +1,6 @@ { "name": "@eclipse-scout/migrate", - "version": "26.1.0-snapshot", + "version": "26.2.0-snapshot", "description": "TypeScript migration module", "author": "BSI Business Systems Integration AG", "homepage": "https://eclipse.dev/scout/", @@ -46,6 +46,6 @@ "jest": "30.2.0", "@babel/preset-env": "7.28.5", "@babel/core": "7.28.5", - "@eclipse-scout/tsconfig": ">=26.1.0-snapshot <26.1.0" + "@eclipse-scout/tsconfig": ">=26.2.0-snapshot <26.2.0" } } diff --git a/eclipse-scout-migrate/pom.xml b/eclipse-scout-migrate/pom.xml index d64415da86c..865b9bd8205 100644 --- a/eclipse-scout-migrate/pom.xml +++ b/eclipse-scout-migrate/pom.xml @@ -16,7 +16,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/eclipse-scout-releng/README.md b/eclipse-scout-releng/README.md index 228d685218f..7f2999186c8 100644 --- a/eclipse-scout-releng/README.md +++ b/eclipse-scout-releng/README.md @@ -3,8 +3,8 @@

- Jenkins - Jenkins tests + Jenkins + Jenkins tests npm NPM npm (scoped) diff --git a/eclipse-scout-releng/pom.xml b/eclipse-scout-releng/pom.xml index 55f5f661553..5824dc51436 100644 --- a/eclipse-scout-releng/pom.xml +++ b/eclipse-scout-releng/pom.xml @@ -16,7 +16,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/eclipse-scout-tsconfig/README.md b/eclipse-scout-tsconfig/README.md index fdbde8d3043..fa794a42914 100644 --- a/eclipse-scout-tsconfig/README.md +++ b/eclipse-scout-tsconfig/README.md @@ -3,8 +3,8 @@

- Jenkins - Jenkins tests + Jenkins + Jenkins tests npm NPM npm (scoped) diff --git a/eclipse-scout-tsconfig/package.json b/eclipse-scout-tsconfig/package.json index 106f30cb34b..65453671bc6 100644 --- a/eclipse-scout-tsconfig/package.json +++ b/eclipse-scout-tsconfig/package.json @@ -1,6 +1,6 @@ { "name": "@eclipse-scout/tsconfig", - "version": "26.1.0-snapshot", + "version": "26.2.0-snapshot", "description": "TSConfig for scout projects", "author": "BSI Business Systems Integration AG", "homepage": "https://eclipse.dev/scout/", diff --git a/eclipse-scout-tsconfig/pom.xml b/eclipse-scout-tsconfig/pom.xml index 4ffde2e39fb..ddce522606a 100644 --- a/eclipse-scout-tsconfig/pom.xml +++ b/eclipse-scout-tsconfig/pom.xml @@ -16,7 +16,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/eslint-config/README.md b/eslint-config/README.md index 2fd3fbeef0e..63616646348 100644 --- a/eslint-config/README.md +++ b/eslint-config/README.md @@ -3,8 +3,8 @@

- Jenkins - Jenkins tests + Jenkins + Jenkins tests npm NPM npm (scoped) diff --git a/eslint-config/package.json b/eslint-config/package.json index 7994f1b0277..e443339165a 100644 --- a/eslint-config/package.json +++ b/eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@eclipse-scout/eslint-config", - "version": "26.1.0-snapshot", + "version": "26.2.0-snapshot", "description": "ESLint shareable config for the Scout style", "author": "BSI Business Systems Integration AG", "homepage": "https://eclipse.dev/scout/", diff --git a/eslint-config/pom.xml b/eslint-config/pom.xml index fa4f77c9d54..6346ecde6e9 100644 --- a/eslint-config/pom.xml +++ b/eslint-config/pom.xml @@ -16,7 +16,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/karma-jasmine-scout/README.md b/karma-jasmine-scout/README.md index c19acc6de86..4d2a943680b 100644 --- a/karma-jasmine-scout/README.md +++ b/karma-jasmine-scout/README.md @@ -3,8 +3,8 @@

- Jenkins - Jenkins tests + Jenkins + Jenkins tests npm NPM npm (scoped) diff --git a/karma-jasmine-scout/package.json b/karma-jasmine-scout/package.json index ae4e2ebc72f..185f79ea8cf 100644 --- a/karma-jasmine-scout/package.json +++ b/karma-jasmine-scout/package.json @@ -1,6 +1,6 @@ { "name": "@eclipse-scout/karma-jasmine-scout", - "version": "26.1.0-snapshot", + "version": "26.2.0-snapshot", "description": "Scout plugin for Jasmine in Karma", "author": "BSI Business Systems Integration AG", "homepage": "https://eclipse.dev/scout/", diff --git a/karma-jasmine-scout/pom.xml b/karma-jasmine-scout/pom.xml index 8ad3fb14e35..98325cb1f14 100644 --- a/karma-jasmine-scout/pom.xml +++ b/karma-jasmine-scout/pom.xml @@ -16,7 +16,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.jaxws.apt/pom.xml b/org.eclipse.scout.jaxws.apt/pom.xml index 1433b671993..1ea7274ad1d 100644 --- a/org.eclipse.scout.jaxws.apt/pom.xml +++ b/org.eclipse.scout.jaxws.apt/pom.xml @@ -16,7 +16,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.json/pom.xml b/org.eclipse.scout.json/pom.xml index 32206a242a5..4a043b0b7ab 100644 --- a/org.eclipse.scout.json/pom.xml +++ b/org.eclipse.scout.json/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.api.data/pom.xml b/org.eclipse.scout.rt.api.data/pom.xml index ad941ed1b7d..9b27a49e30f 100644 --- a/org.eclipse.scout.rt.api.data/pom.xml +++ b/org.eclipse.scout.rt.api.data/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.api/pom.xml b/org.eclipse.scout.rt.api/pom.xml index c0c24fe03af..f6df3b1948d 100644 --- a/org.eclipse.scout.rt.api/pom.xml +++ b/org.eclipse.scout.rt.api/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.app/pom.xml b/org.eclipse.scout.rt.app/pom.xml index 22dbf19e163..bc18126b8be 100644 --- a/org.eclipse.scout.rt.app/pom.xml +++ b/org.eclipse.scout.rt.app/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.charsetdetect/pom.xml b/org.eclipse.scout.rt.charsetdetect/pom.xml index bd0a61fc2a3..4564631bd5e 100644 --- a/org.eclipse.scout.rt.charsetdetect/pom.xml +++ b/org.eclipse.scout.rt.charsetdetect/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.chart.client/pom.xml b/org.eclipse.scout.rt.chart.client/pom.xml index fea18bf701b..591b57b72ac 100644 --- a/org.eclipse.scout.rt.chart.client/pom.xml +++ b/org.eclipse.scout.rt.chart.client/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.chart.shared/pom.xml b/org.eclipse.scout.rt.chart.shared/pom.xml index a55e9d56eff..a3eb7a7f13a 100644 --- a/org.eclipse.scout.rt.chart.shared/pom.xml +++ b/org.eclipse.scout.rt.chart.shared/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.chart.ui.html/pom.xml b/org.eclipse.scout.rt.chart.ui.html/pom.xml index be95172f340..707134fc48b 100644 --- a/org.eclipse.scout.rt.chart.ui.html/pom.xml +++ b/org.eclipse.scout.rt.chart.ui.html/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.client.test/pom.xml b/org.eclipse.scout.rt.client.test/pom.xml index 51422d91800..d509959166a 100644 --- a/org.eclipse.scout.rt.client.test/pom.xml +++ b/org.eclipse.scout.rt.client.test/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.client.test/src/test/java/org/eclipse/scout/rt/client/MultiSessionCookieStoreTest.java b/org.eclipse.scout.rt.client.test/src/test/java/org/eclipse/scout/rt/client/MultiSessionCookieStoreTest.java index c6be0b1bd43..26fd6fc4c38 100644 --- a/org.eclipse.scout.rt.client.test/src/test/java/org/eclipse/scout/rt/client/MultiSessionCookieStoreTest.java +++ b/org.eclipse.scout.rt.client.test/src/test/java/org/eclipse/scout/rt/client/MultiSessionCookieStoreTest.java @@ -26,7 +26,7 @@ import org.junit.Test; /** - * Test class for {@link MultiClientSessionCookieStore} + * Test class for {@link MultiSessionCookieStore} */ public class MultiSessionCookieStoreTest { diff --git a/org.eclipse.scout.rt.client.test/src/test/java/org/eclipse/scout/rt/client/clientnotification/ClientNotificationDispatcherTest.java b/org.eclipse.scout.rt.client.test/src/test/java/org/eclipse/scout/rt/client/clientnotification/ClientNotificationDispatcherTest.java index 9666522376c..96a71f3503e 100644 --- a/org.eclipse.scout.rt.client.test/src/test/java/org/eclipse/scout/rt/client/clientnotification/ClientNotificationDispatcherTest.java +++ b/org.eclipse.scout.rt.client.test/src/test/java/org/eclipse/scout/rt/client/clientnotification/ClientNotificationDispatcherTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2023 BSI Business Systems Integration AG + * Copyright (c) 2010, 2026 BSI Business Systems Integration AG * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -16,7 +16,7 @@ import org.eclipse.scout.rt.client.context.ClientRunContexts; import org.eclipse.scout.rt.client.job.ModelJobs; import org.eclipse.scout.rt.platform.IgnoreBean; -import org.eclipse.scout.rt.shared.session.Sessions; +import org.eclipse.scout.rt.shared.session.SessionId; import org.eclipse.scout.rt.testing.platform.runner.PlatformTestRunner; import org.eclipse.scout.rt.testing.platform.runner.RunWithSubject; import org.junit.Test; @@ -28,7 +28,7 @@ public class ClientNotificationDispatcherTest { @Test public void testIsSessionValid() { ClientNotificationDispatcher dispatcher = new ClientNotificationDispatcher(); - String sid = Sessions.randomSessionId(); + String sid = SessionId.randomSessionId(); assertFalse(dispatcher.isSessionValid(null, sid)); // session not found diff --git a/org.eclipse.scout.rt.client/pom.xml b/org.eclipse.scout.rt.client/pom.xml index da358a3d45b..e943fdf4b53 100644 --- a/org.eclipse.scout.rt.client/pom.xml +++ b/org.eclipse.scout.rt.client/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt @@ -34,6 +34,11 @@ org.eclipse.scout.rt.shared + + org.eclipse.scout.rt + org.eclipse.scout.rt.shared.session + + org.eclipse.scout.rt org.eclipse.scout.rt.rest diff --git a/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/session/ClientSessionProvider.java b/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/session/ClientSessionProvider.java index a0a3a5a9057..5343cdeb1e5 100644 --- a/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/session/ClientSessionProvider.java +++ b/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/session/ClientSessionProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2023 BSI Business Systems Integration AG + * Copyright (c) 2010, 2026 BSI Business Systems Integration AG * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -18,6 +18,7 @@ import org.eclipse.scout.rt.client.job.ModelJobs; import org.eclipse.scout.rt.platform.ApplicationScoped; import org.eclipse.scout.rt.platform.BEANS; +import org.eclipse.scout.rt.shared.session.SessionId; import org.eclipse.scout.rt.shared.session.Sessions; /** @@ -56,7 +57,7 @@ public SESSION provide(final ClientRunContext c * if session creation failed. */ public SESSION provide(final String sessionId, final ClientRunContext clientRunContext) { - final String sid = sessionId != null ? sessionId : Sessions.randomSessionId(); + final String sid = sessionId != null ? sessionId : SessionId.randomSessionId(); // Create the session with the given context applied. return clientRunContext.call(() -> { diff --git a/org.eclipse.scout.rt.dataformat/pom.xml b/org.eclipse.scout.rt.dataformat/pom.xml index 528e2704fa1..e6df0cc2f07 100644 --- a/org.eclipse.scout.rt.dataformat/pom.xml +++ b/org.eclipse.scout.rt.dataformat/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.datamodel.client/pom.xml b/org.eclipse.scout.rt.datamodel.client/pom.xml index 313a6e4438c..1ef99c1cd3b 100644 --- a/org.eclipse.scout.rt.datamodel.client/pom.xml +++ b/org.eclipse.scout.rt.datamodel.client/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.datamodel.server/pom.xml b/org.eclipse.scout.rt.datamodel.server/pom.xml index e573375950e..a6448a680a5 100644 --- a/org.eclipse.scout.rt.datamodel.server/pom.xml +++ b/org.eclipse.scout.rt.datamodel.server/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.datamodel.shared/pom.xml b/org.eclipse.scout.rt.datamodel.shared/pom.xml index cef65f252a0..447c4bfc1fd 100644 --- a/org.eclipse.scout.rt.datamodel.shared/pom.xml +++ b/org.eclipse.scout.rt.datamodel.shared/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.datamodel.ui.html/pom.xml b/org.eclipse.scout.rt.datamodel.ui.html/pom.xml index d5adae89cb3..62760384e9e 100644 --- a/org.eclipse.scout.rt.datamodel.ui.html/pom.xml +++ b/org.eclipse.scout.rt.datamodel.ui.html/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.dataobject.test/pom.xml b/org.eclipse.scout.rt.dataobject.test/pom.xml index dfe265fbb47..73b425c3b52 100644 --- a/org.eclipse.scout.rt.dataobject.test/pom.xml +++ b/org.eclipse.scout.rt.dataobject.test/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.dataobject/pom.xml b/org.eclipse.scout.rt.dataobject/pom.xml index 40e2b661162..1775aaec2b6 100644 --- a/org.eclipse.scout.rt.dataobject/pom.xml +++ b/org.eclipse.scout.rt.dataobject/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.jackson.test/pom.xml b/org.eclipse.scout.rt.jackson.test/pom.xml index 19b51d411cf..d94dd2989ca 100644 --- a/org.eclipse.scout.rt.jackson.test/pom.xml +++ b/org.eclipse.scout.rt.jackson.test/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.jackson/pom.xml b/org.eclipse.scout.rt.jackson/pom.xml index 466e6d8d533..3ffe1e74fc5 100644 --- a/org.eclipse.scout.rt.jackson/pom.xml +++ b/org.eclipse.scout.rt.jackson/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.jetty/pom.xml b/org.eclipse.scout.rt.jetty/pom.xml index f2b9500f982..b09fcd2706f 100644 --- a/org.eclipse.scout.rt.jetty/pom.xml +++ b/org.eclipse.scout.rt.jetty/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.mail.test/pom.xml b/org.eclipse.scout.rt.mail.test/pom.xml index e79dd745025..5163f2f02c5 100644 --- a/org.eclipse.scout.rt.mail.test/pom.xml +++ b/org.eclipse.scout.rt.mail.test/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.mail/pom.xml b/org.eclipse.scout.rt.mail/pom.xml index 44da21036c1..41995d9a645 100644 --- a/org.eclipse.scout.rt.mail/pom.xml +++ b/org.eclipse.scout.rt.mail/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.mom.api.test/pom.xml b/org.eclipse.scout.rt.mom.api.test/pom.xml index 219dc1bea04..42a919e3ce8 100644 --- a/org.eclipse.scout.rt.mom.api.test/pom.xml +++ b/org.eclipse.scout.rt.mom.api.test/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.mom.api/pom.xml b/org.eclipse.scout.rt.mom.api/pom.xml index 4e7d048d791..9849305743a 100644 --- a/org.eclipse.scout.rt.mom.api/pom.xml +++ b/org.eclipse.scout.rt.mom.api/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.mom.jms.test/pom.xml b/org.eclipse.scout.rt.mom.jms.test/pom.xml index 02df8064aa4..3552578ddf8 100644 --- a/org.eclipse.scout.rt.mom.jms.test/pom.xml +++ b/org.eclipse.scout.rt.mom.jms.test/pom.xml @@ -15,7 +15,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.mom.jms/pom.xml b/org.eclipse.scout.rt.mom.jms/pom.xml index c66c2f8f4c6..297d19c5d83 100644 --- a/org.eclipse.scout.rt.mom.jms/pom.xml +++ b/org.eclipse.scout.rt.mom.jms/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.nls/pom.xml b/org.eclipse.scout.rt.nls/pom.xml index 7fc0f768c84..0a16c0250db 100644 --- a/org.eclipse.scout.rt.nls/pom.xml +++ b/org.eclipse.scout.rt.nls/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.oauth2/pom.xml b/org.eclipse.scout.rt.oauth2/pom.xml index 972d484915d..f5d7f7dae9d 100644 --- a/org.eclipse.scout.rt.oauth2/pom.xml +++ b/org.eclipse.scout.rt.oauth2/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.opentelemetry.sdk/pom.xml b/org.eclipse.scout.rt.opentelemetry.sdk/pom.xml index d8c60bfcaa4..672252dffd4 100644 --- a/org.eclipse.scout.rt.opentelemetry.sdk/pom.xml +++ b/org.eclipse.scout.rt.opentelemetry.sdk/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.platform.test/pom.xml b/org.eclipse.scout.rt.platform.test/pom.xml index 1ad9c768c0f..0b334b9e977 100644 --- a/org.eclipse.scout.rt.platform.test/pom.xml +++ b/org.eclipse.scout.rt.platform.test/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.platform/pom.xml b/org.eclipse.scout.rt.platform/pom.xml index d0b06b594d6..447fb9dc15c 100644 --- a/org.eclipse.scout.rt.platform/pom.xml +++ b/org.eclipse.scout.rt.platform/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.rest.jackson/pom.xml b/org.eclipse.scout.rt.rest.jackson/pom.xml index 82516ddf6c3..8a02fef6b16 100644 --- a/org.eclipse.scout.rt.rest.jackson/pom.xml +++ b/org.eclipse.scout.rt.rest.jackson/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.rest.jersey.client/README.md b/org.eclipse.scout.rt.rest.jersey.client/README.md index 8301412d64d..298bd6c25ab 100644 --- a/org.eclipse.scout.rt.rest.jersey.client/README.md +++ b/org.eclipse.scout.rt.rest.jersey.client/README.md @@ -6,7 +6,7 @@ for a Jersey REST `Client`. By default, Jersey creates a new unbounded `java.util.concurrent.ExecutorService` to submit tasks for asynchronous REST calls (see [DefaultClientAsyncExecutorProvider](https://github.com/eclipse-ee4j/jersey/blob/master/core-client/src/main/java/org/glassfish/jersey/client/DefaultClientAsyncExecutorProvider.java)). -When running jobs in a Scout platform, the [JobManager](https://eclipsescout.github.io/scout-docs/26.1/technical-guide/common-concepts/job-manager.html) +When running jobs in a Scout platform, the [JobManager](https://eclipsescout.github.io/scout-docs/26.2/technical-guide/common-concepts/job-manager.html) uses a single `ExecutorService` instance that can be easily configured using system properties. By including this module in the dependencies of your project, all asynchronous REST calls made via an `IRestClientHelper` bean will be submitted to the same executor service. diff --git a/org.eclipse.scout.rt.rest.jersey.client/pom.xml b/org.eclipse.scout.rt.rest.jersey.client/pom.xml index d71d49647d8..a2af48792df 100644 --- a/org.eclipse.scout.rt.rest.jersey.client/pom.xml +++ b/org.eclipse.scout.rt.rest.jersey.client/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.rest.jersey.server/pom.xml b/org.eclipse.scout.rt.rest.jersey.server/pom.xml index 4c02f839668..69b07c1329b 100644 --- a/org.eclipse.scout.rt.rest.jersey.server/pom.xml +++ b/org.eclipse.scout.rt.rest.jersey.server/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.rest.jersey.test/pom.xml b/org.eclipse.scout.rt.rest.jersey.test/pom.xml index b33c7f08421..70416896836 100644 --- a/org.eclipse.scout.rt.rest.jersey.test/pom.xml +++ b/org.eclipse.scout.rt.rest.jersey.test/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.rest.test/pom.xml b/org.eclipse.scout.rt.rest.test/pom.xml index 2ee961ed903..adcc3340868 100644 --- a/org.eclipse.scout.rt.rest.test/pom.xml +++ b/org.eclipse.scout.rt.rest.test/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.rest/pom.xml b/org.eclipse.scout.rt.rest/pom.xml index 627aa25a03a..d22041d06e4 100644 --- a/org.eclipse.scout.rt.rest/pom.xml +++ b/org.eclipse.scout.rt.rest/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.security.test/pom.xml b/org.eclipse.scout.rt.security.test/pom.xml index b5258eb6db0..09c5e32a6bb 100644 --- a/org.eclipse.scout.rt.security.test/pom.xml +++ b/org.eclipse.scout.rt.security.test/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.security/pom.xml b/org.eclipse.scout.rt.security/pom.xml index 38aef74988b..48b3d8fdede 100644 --- a/org.eclipse.scout.rt.security/pom.xml +++ b/org.eclipse.scout.rt.security/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.server.app/pom.xml b/org.eclipse.scout.rt.server.app/pom.xml index ed884ba2ca3..2680fa6513b 100644 --- a/org.eclipse.scout.rt.server.app/pom.xml +++ b/org.eclipse.scout.rt.server.app/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.server.commons.test/pom.xml b/org.eclipse.scout.rt.server.commons.test/pom.xml index ae18cfbf8b0..c8b8f354e28 100644 --- a/org.eclipse.scout.rt.server.commons.test/pom.xml +++ b/org.eclipse.scout.rt.server.commons.test/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.server.commons.test/src/test/java/org/eclipse/scout/rt/server/commons/servlet/HttpProxyTest.java b/org.eclipse.scout.rt.server.commons.test/src/test/java/org/eclipse/scout/rt/server/commons/servlet/HttpProxyTest.java index fd99a7eb5bb..473735987c3 100644 --- a/org.eclipse.scout.rt.server.commons.test/src/test/java/org/eclipse/scout/rt/server/commons/servlet/HttpProxyTest.java +++ b/org.eclipse.scout.rt.server.commons.test/src/test/java/org/eclipse/scout/rt/server/commons/servlet/HttpProxyTest.java @@ -34,7 +34,6 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import org.apache.hc.client5.http.cookie.CookieStore; import org.apache.hc.core5.concurrent.FutureCallback; import org.apache.hc.core5.http.ConnectionClosedException; import org.apache.hc.core5.http.ContentType; @@ -50,7 +49,6 @@ import org.apache.hc.core5.http.nio.support.classic.AbstractClassicEntityConsumer; import org.apache.hc.core5.http.protocol.HttpContext; import org.apache.hc.core5.http.support.BasicRequestBuilder; -import org.eclipse.jetty.http.HttpCookie; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http2.server.HTTP2CServerConnectionFactory; import org.eclipse.jetty.server.Connector; @@ -64,9 +62,7 @@ import org.eclipse.jetty.util.Callback; import org.eclipse.scout.rt.platform.BEANS; import org.eclipse.scout.rt.platform.BeanMetaData; -import org.eclipse.scout.rt.platform.IgnoreBean; import org.eclipse.scout.rt.platform.context.CorrelationId; -import org.eclipse.scout.rt.platform.context.RunContexts; import org.eclipse.scout.rt.platform.exception.ExceptionHandler; import org.eclipse.scout.rt.platform.internal.BeanInstanceUtil; import org.eclipse.scout.rt.platform.util.EnumerationUtility; @@ -75,21 +71,17 @@ import org.eclipse.scout.rt.platform.util.SleepUtil; import org.eclipse.scout.rt.platform.util.StringUtility; import org.eclipse.scout.rt.server.commons.BufferedServletOutputStream; -import org.eclipse.scout.rt.shared.ISession; -import org.eclipse.scout.rt.shared.http.ApacheMultiSessionCookieStore; import org.eclipse.scout.rt.shared.http.async.AbstractAsyncHttpClientManager; import org.eclipse.scout.rt.shared.http.async.DefaultAsyncHttpClientManager; import org.eclipse.scout.rt.shared.http.async.ForceHttp2DefaultAsyncHttpClientManager; import org.eclipse.scout.rt.shared.http.async.H2AsyncHttpClientManager; import org.eclipse.scout.rt.testing.platform.BeanTestingHelper; -import org.eclipse.scout.rt.testing.platform.mock.RegisterBeanTestRule; import org.eclipse.scout.rt.testing.platform.runner.JUnitExceptionHandler; import org.eclipse.scout.rt.testing.platform.runner.parameterized.IScoutTestParameter; import org.eclipse.scout.rt.testing.platform.runner.parameterized.NonParameterized; import org.eclipse.scout.rt.testing.platform.runner.parameterized.ParameterizedPlatformTestRunner; import org.junit.After; import org.junit.Before; -import org.junit.ClassRule; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -106,10 +98,12 @@ public class HttpProxyTest { private HttpProxyTestParameter m_httpProxyTestParameter; - private static final TestApacheMultiSessionCookieStore COOKIE_STORE = spy(new TestApacheMultiSessionCookieStore()); + // FIXME PBZ SESSION Split into session / no-session part - @ClassRule // use a fixed cookie store for all tests (with accessible default cookie store) - public static final RegisterBeanTestRule COOKIE_STORE_REGISTER_BEAN_TEST_RULE = new RegisterBeanTestRule<>(ApacheMultiSessionCookieStore.class, COOKIE_STORE); +// private static final TestApacheMultiSessionCookieStore COOKIE_STORE = spy(new TestApacheMultiSessionCookieStore()); + +// @ClassRule // use a fixed cookie store for all tests (with accessible default cookie store) +// public static final RegisterBeanTestRule COOKIE_STORE_REGISTER_BEAN_TEST_RULE = new RegisterBeanTestRule<>(ApacheMultiSessionCookieStore.class, COOKIE_STORE); @Parameters public static List getParameters() { @@ -132,8 +126,8 @@ public void before() { } // we use a static spy mocked bean, therefore reset it for each test - reset(COOKIE_STORE); - COOKIE_STORE.m_defaultCookieStore.clear(); +// reset(COOKIE_STORE); +// COOKIE_STORE.m_defaultCookieStore.clear(); } @Before @@ -577,43 +571,43 @@ public boolean handle(Request request, Response response, Callback callback) { assertArrayEquals(expectedContent, ((BufferedServletOutputStream) resp.getOutputStream()).getContent()); } - @Test - public void testProxyRequest_cookiesSessionBasedCookieStore() { - RunContexts.copyCurrent(true) - .withThreadLocal(ISession.CURRENT, mock(ISession.class)) - .run(() -> testProxyRequest_cookiesInternal(false)); - } - - @Test - public void testProxyRequest_cookiesDefaultCookieStore() { - testProxyRequest_cookiesInternal(true); - } - - protected void testProxyRequest_cookiesInternal(boolean expectDefaultCookieStore) { - CookieStore defaultCookieStore = COOKIE_STORE.m_defaultCookieStore; - int previousDefaultCount = defaultCookieStore.getCookies().size(); - - Handler.Abstract handler = new Handler.Abstract() { - @Override - public boolean handle(Request request, Response response, Callback callback) { - Response.addCookie(response, HttpCookie.from("snickers", "bar")); - response.write(true, null, callback); // flush buffer - return true; - } - }; - - // call the request - testProxyRequestInternal(handler, 1, "/"); - - // one cookie should have been added, check expectations - ArgumentCaptor cookieCaptor = ArgumentCaptor.forClass(org.apache.hc.client5.http.cookie.Cookie.class); - verify(COOKIE_STORE, times(1)).addCookie(cookieCaptor.capture()); - assertEquals("snickers", cookieCaptor.getValue().getName()); - assertEquals("bar", cookieCaptor.getValue().getValue()); - - // never-ever add a cookie to the default store (session specific should have been used) - assertEquals(previousDefaultCount + (expectDefaultCookieStore ? 1 : 0), defaultCookieStore.getCookies().size()); - } +// @Test +// public void testProxyRequest_cookiesSessionBasedCookieStore() { +// RunContexts.copyCurrent(true) +// .withThreadLocal(ISession.CURRENT, mock(ISession.class)) +// .run(() -> testProxyRequest_cookiesInternal(false)); +// } +// +// @Test +// public void testProxyRequest_cookiesDefaultCookieStore() { +// testProxyRequest_cookiesInternal(true); +// } +// +// protected void testProxyRequest_cookiesInternal(boolean expectDefaultCookieStore) { +// CookieStore defaultCookieStore = COOKIE_STORE.m_defaultCookieStore; +// int previousDefaultCount = defaultCookieStore.getCookies().size(); +// +// Handler.Abstract handler = new Handler.Abstract() { +// @Override +// public boolean handle(Request request, Response response, Callback callback) { +// Response.addCookie(response, HttpCookie.from("snickers", "bar")); +// response.write(true, null, callback); // flush buffer +// return true; +// } +// }; +// +// // call the request +// testProxyRequestInternal(handler, 1, "/"); +// +// // one cookie should have been added, check expectations +// ArgumentCaptor cookieCaptor = ArgumentCaptor.forClass(org.apache.hc.client5.http.cookie.Cookie.class); +// verify(COOKIE_STORE, times(1)).addCookie(cookieCaptor.capture()); +// assertEquals("snickers", cookieCaptor.getValue().getName()); +// assertEquals("bar", cookieCaptor.getValue().getValue()); +// +// // never-ever add a cookie to the default store (session specific should have been used) +// assertEquals(previousDefaultCount + (expectDefaultCookieStore ? 1 : 0), defaultCookieStore.getCookies().size()); +// } @Ignore // do not run this (long) test on CI (at least as long as we do not run tests in parallel), however can be used for testing locally @Test @@ -789,19 +783,19 @@ public String getName() { } } - @IgnoreBean - public static class TestApacheMultiSessionCookieStore extends ApacheMultiSessionCookieStore { - - private CookieStore m_defaultCookieStore; - - @Override - protected CookieStore createDefaultCookieStore() { - m_defaultCookieStore = super.createDefaultCookieStore(); - return m_defaultCookieStore; - } - - public CookieStore getDefaultCookieStore() { - return m_defaultCookieStore; - } - } +// @IgnoreBean +// public static class TestApacheMultiSessionCookieStore extends ApacheMultiSessionCookieStore { +// +// private CookieStore m_defaultCookieStore; +// +// @Override +// protected CookieStore createDefaultCookieStore() { +// m_defaultCookieStore = super.createDefaultCookieStore(); +// return m_defaultCookieStore; +// } +// +// public CookieStore getDefaultCookieStore() { +// return m_defaultCookieStore; +// } +// } } diff --git a/org.eclipse.scout.rt.server.commons/pom.xml b/org.eclipse.scout.rt.server.commons/pom.xml index da99f8b37aa..c5d042e4b7a 100644 --- a/org.eclipse.scout.rt.server.commons/pom.xml +++ b/org.eclipse.scout.rt.server.commons/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt diff --git a/org.eclipse.scout.rt.server.commons/src/main/java/org/eclipse/scout/rt/server/commons/servlet/HttpProxy.java b/org.eclipse.scout.rt.server.commons/src/main/java/org/eclipse/scout/rt/server/commons/servlet/HttpProxy.java index a6a6f062ce3..4844f11ba07 100644 --- a/org.eclipse.scout.rt.server.commons/src/main/java/org/eclipse/scout/rt/server/commons/servlet/HttpProxy.java +++ b/org.eclipse.scout.rt.server.commons/src/main/java/org/eclipse/scout/rt/server/commons/servlet/HttpProxy.java @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.Date; import java.util.Enumeration; import java.util.HashSet; import java.util.List; @@ -30,7 +29,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import java.util.concurrent.Callable; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; @@ -47,7 +45,6 @@ import jakarta.servlet.http.HttpServletResponse; import org.apache.hc.client5.http.ContextBuilder; -import org.apache.hc.client5.http.cookie.Cookie; import org.apache.hc.client5.http.cookie.CookieStore; import org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient; import org.apache.hc.client5.http.protocol.HttpClientContext; @@ -72,7 +69,6 @@ import org.eclipse.scout.rt.platform.config.CONFIG; import org.eclipse.scout.rt.platform.context.CorrelationId; import org.eclipse.scout.rt.platform.context.CorrelationIdContextValueProvider; -import org.eclipse.scout.rt.platform.context.RunContexts; import org.eclipse.scout.rt.platform.exception.ExceptionHandler; import org.eclipse.scout.rt.platform.job.internal.JobManager; import org.eclipse.scout.rt.platform.util.CollectionUtility; @@ -81,10 +77,9 @@ import org.eclipse.scout.rt.platform.util.LazyValue; import org.eclipse.scout.rt.platform.util.ObjectUtility; import org.eclipse.scout.rt.platform.util.StringUtility; -import org.eclipse.scout.rt.platform.util.concurrent.IRunnable; import org.eclipse.scout.rt.server.commons.servlet.HttpProxyConfigProperties.HttpProxyAsyncHttpClientManagerConfigProperty; import org.eclipse.scout.rt.server.commons.servlet.HttpProxyConfigProperties.HttpProxyAsyncTimeoutConfigProperty; -import org.eclipse.scout.rt.shared.ISession; +import org.eclipse.scout.rt.shared.http.ICookieStoreProvider; import org.eclipse.scout.rt.shared.http.async.AbstractAsyncHttpClientManager; import org.eclipse.scout.rt.shared.http.async.DefaultAsyncHttpClientManager; import org.slf4j.Logger; @@ -173,13 +168,6 @@ protected CookieStore initializeDefaultCookieStore() { return m_httpClientManager.getCookieStore(); } - /** - * @see SpecificSessionCookieStore - */ - protected CookieStore createSpecificSessionCookieStore(ISession session) { - return new SpecificSessionCookieStore(session); - } - protected ExecutorService createBlockingOperationExecutor() { return BEANS.get(JobManager.class).getExecutor(); } @@ -275,16 +263,9 @@ protected HttpContext createHttpContext() { ContextBuilder contextBuilder = ContextBuilder.create(); // cookie store - ISession currentSession = ISession.CURRENT.get(); - CookieStore defaultCookieStore = getDefaultCookieStore(); - if (defaultCookieStore != null) { - if (currentSession != null) { - contextBuilder.useCookieStore(createSpecificSessionCookieStore(currentSession)); - } - else { - contextBuilder.useCookieStore(defaultCookieStore); - } - } + BEANS.optional(ICookieStoreProvider.class) + .map(ICookieStoreProvider::provideSessionSpecific) + .ifPresent(contextBuilder::useCookieStore); // apply additional settings using interceptor Function httpClientContextInterceptor = getHttpClientContextInterceptor(); @@ -822,47 +803,4 @@ protected void log(Level level, String correlationId, String msg, Object... args } } } - - /** - * Cookie store which uses {@link #getDefaultCookieStore()} with all operations run for the specified - * {@link ISession}. May be used if async threads access the cookie store where {@link ISession#CURRENT} is not set - * correctly. - */ - private class SpecificSessionCookieStore implements CookieStore { - - private ISession m_session; - - public SpecificSessionCookieStore(ISession session) { - m_session = session; - } - - @Override - public void addCookie(Cookie cookie) { - runWithSession(() -> getDefaultCookieStore().addCookie(cookie)); - } - - @Override - public List getCookies() { - return callWithSession(getDefaultCookieStore()::getCookies); - } - - @SuppressWarnings("deprecation") - @Override - public boolean clearExpired(Date date) { - return callWithSession(() -> getDefaultCookieStore().clearExpired(date)); - } - - @Override - public void clear() { - runWithSession(getDefaultCookieStore()::clear); - } - - private void runWithSession(IRunnable runnable) { - RunContexts.copyCurrent(true).withThreadLocal(ISession.CURRENT, m_session).run(runnable); - } - - private R callWithSession(Callable callable) { - return RunContexts.copyCurrent(true).withThreadLocal(ISession.CURRENT, m_session).call(callable); - } - } } diff --git a/org.eclipse.scout.rt.server.jaxws.test/pom.xml b/org.eclipse.scout.rt.server.jaxws.test/pom.xml index 2694333b449..22ae5bda706 100644 --- a/org.eclipse.scout.rt.server.jaxws.test/pom.xml +++ b/org.eclipse.scout.rt.server.jaxws.test/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt @@ -77,6 +77,10 @@ org.eclipse.scout.rt org.eclipse.scout.rt.server.test + + org.eclipse.scout.rt + org.eclipse.scout.rt.server.session.test + com.sun.xml.ws jaxws-rt diff --git a/org.eclipse.scout.rt.server.jaxws.test/target/generated-sources/annotations/.gitkeep b/org.eclipse.scout.rt.server.jaxws.test/target/generated-sources/annotations/.gitkeep deleted file mode 100644 index 77f2af2affd..00000000000 --- a/org.eclipse.scout.rt.server.jaxws.test/target/generated-sources/annotations/.gitkeep +++ /dev/null @@ -1 +0,0 @@ -gitkeep diff --git a/org.eclipse.scout.rt.server.jaxws.test/target/generated-sources/wsimport/.gitkeep b/org.eclipse.scout.rt.server.jaxws.test/target/generated-sources/wsimport/.gitkeep deleted file mode 100644 index 77f2af2affd..00000000000 --- a/org.eclipse.scout.rt.server.jaxws.test/target/generated-sources/wsimport/.gitkeep +++ /dev/null @@ -1 +0,0 @@ -gitkeep diff --git a/org.eclipse.scout.rt.server.jaxws/pom.xml b/org.eclipse.scout.rt.server.jaxws/pom.xml index 0b5d0c85247..4ee99b643df 100644 --- a/org.eclipse.scout.rt.server.jaxws/pom.xml +++ b/org.eclipse.scout.rt.server.jaxws/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt @@ -28,6 +28,10 @@ org.eclipse.scout.rt org.eclipse.scout.rt.server + + org.eclipse.scout.rt + org.eclipse.scout.rt.server.session + jakarta.xml.ws jakarta.xml.ws-api diff --git a/org.eclipse.scout.rt.server.jdbc.test/pom.xml b/org.eclipse.scout.rt.server.jdbc.test/pom.xml index 6426979f67b..38d43299f72 100644 --- a/org.eclipse.scout.rt.server.jdbc.test/pom.xml +++ b/org.eclipse.scout.rt.server.jdbc.test/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt @@ -34,6 +34,10 @@ org.eclipse.scout.rt org.eclipse.scout.rt.server.test + + org.eclipse.scout.rt + org.eclipse.scout.rt.server.session.test + ch.qos.logback diff --git a/org.eclipse.scout.rt.server.jdbc/pom.xml b/org.eclipse.scout.rt.server.jdbc/pom.xml index f2b557b3f55..99ab89b6bb3 100644 --- a/org.eclipse.scout.rt.server.jdbc/pom.xml +++ b/org.eclipse.scout.rt.server.jdbc/pom.xml @@ -14,7 +14,7 @@ org.eclipse.scout.rt org.eclipse.scout.rt - 26.1-SNAPSHOT + 26.2-SNAPSHOT ../org.eclipse.scout.rt @@ -28,6 +28,10 @@ org.eclipse.scout.rt org.eclipse.scout.rt.server + + org.eclipse.scout.rt + org.eclipse.scout.rt.server.session + diff --git a/org.eclipse.scout.rt.server.session.test/.settings/org.eclipse.core.resources.prefs b/org.eclipse.scout.rt.server.session.test/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000000..13d34f372ba --- /dev/null +++ b/org.eclipse.scout.rt.server.session.test/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,18 @@ +eclipse.preferences.version=1 +encoding//src/main/client=UTF-8 +encoding//src/main/fixture=UTF-8 +encoding//src/main/java=UTF-8 +encoding//src/main/java-jcl=UTF-8 +encoding//src/main/java-log4j=UTF-8 +encoding//src/main/java-original=UTF-8 +encoding//src/main/js=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/main/shared=UTF-8 +encoding//src/main/webapp=UTF-8 +encoding//src/test/java=UTF-8 +encoding//src/test/js=UTF-8 +encoding//src/test/resources=UTF-8 +encoding//target/generated-sources/annotations=UTF-8 +encoding//target/generated-sources/wsimport=UTF-8 +encoding/=UTF-8 +encoding/files=UTF-8 diff --git a/org.eclipse.scout.rt.server.session.test/.settings/org.eclipse.core.runtime.prefs b/org.eclipse.scout.rt.server.session.test/.settings/org.eclipse.core.runtime.prefs new file mode 100644 index 00000000000..5a0ad22d2a7 --- /dev/null +++ b/org.eclipse.scout.rt.server.session.test/.settings/org.eclipse.core.runtime.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +line.separator=\n diff --git a/org.eclipse.scout.rt.server.session.test/.settings/org.eclipse.jdt.apt.core.prefs b/org.eclipse.scout.rt.server.session.test/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000000..d4313d4b25e --- /dev/null +++ b/org.eclipse.scout.rt.server.session.test/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=false diff --git a/org.eclipse.scout.rt.server.session.test/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.scout.rt.server.session.test/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000000..b79226010fc --- /dev/null +++ b/org.eclipse.scout.rt.server.session.test/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,399 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.codeComplete.argumentPrefixes= +org.eclipse.jdt.core.codeComplete.argumentSuffixes= +org.eclipse.jdt.core.codeComplete.fieldPrefixes=m_ +org.eclipse.jdt.core.codeComplete.fieldSuffixes= +org.eclipse.jdt.core.codeComplete.localPrefixes= +org.eclipse.jdt.core.codeComplete.localSuffixes= +org.eclipse.jdt.core.codeComplete.staticFieldPrefixes= +org.eclipse.jdt.core.codeComplete.staticFieldSuffixes= +org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes= +org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes= +org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=21 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=21 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning +org.eclipse.jdt.core.compiler.problem.deadCode=warning +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore +org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore +org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore +org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning +org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore +org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning +org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedImport=warning +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.compiler.processAnnotations=disabled +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=21 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=16 +org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true +org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=false +org.eclipse.jdt.core.formatter.comment.format_block_comments=false +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=false +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true +org.eclipse.jdt.core.formatter.comment.indent_root_tags=true +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert +org.eclipse.jdt.core.formatter.comment.line_length=120 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=2 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true +org.eclipse.jdt.core.formatter.indentation.size=2 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_wrapped_lines=false +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=true +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=true +org.eclipse.jdt.core.formatter.lineSplit=240 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=true +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=true +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=space +org.eclipse.jdt.core.formatter.tabulation.size=2 +org.eclipse.jdt.core.formatter.use_on_off_tags=false +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=true +org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true diff --git a/org.eclipse.scout.rt.server.session.test/.settings/org.eclipse.jdt.launching.prefs b/org.eclipse.scout.rt.server.session.test/.settings/org.eclipse.jdt.launching.prefs new file mode 100644 index 00000000000..d211d326335 --- /dev/null +++ b/org.eclipse.scout.rt.server.session.test/.settings/org.eclipse.jdt.launching.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=warning diff --git a/org.eclipse.scout.rt.server.session.test/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.scout.rt.server.session.test/.settings/org.eclipse.jdt.ui.prefs new file mode 100644 index 00000000000..a52f8c4ad0a --- /dev/null +++ b/org.eclipse.scout.rt.server.session.test/.settings/org.eclipse.jdt.ui.prefs @@ -0,0 +1,127 @@ +cleanup.add_default_serial_version_id=true +cleanup.add_generated_serial_version_id=false +cleanup.add_missing_annotations=true +cleanup.add_missing_deprecated_annotations=false +cleanup.add_missing_methods=false +cleanup.add_missing_nls_tags=false +cleanup.add_missing_override_annotations=true +cleanup.add_missing_override_annotations_interface_methods=true +cleanup.add_serial_version_id=false +cleanup.always_use_blocks=true +cleanup.always_use_parentheses_in_expressions=false +cleanup.always_use_this_for_non_static_field_access=false +cleanup.always_use_this_for_non_static_method_access=false +cleanup.convert_functional_interfaces=false +cleanup.convert_to_enhanced_for_loop=false +cleanup.correct_indentation=true +cleanup.format_source_code=true +cleanup.format_source_code_changes_only=false +cleanup.insert_inferred_type_arguments=false +cleanup.make_local_variable_final=true +cleanup.make_parameters_final=false +cleanup.make_private_fields_final=true +cleanup.make_type_abstract_if_missing_method=false +cleanup.make_variable_declarations_final=false +cleanup.never_use_blocks=false +cleanup.never_use_parentheses_in_expressions=true +cleanup.organize_imports=true +cleanup.qualify_static_field_accesses_with_declaring_class=false +cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true +cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=false +cleanup.qualify_static_member_accesses_with_declaring_class=false +cleanup.qualify_static_method_accesses_with_declaring_class=false +cleanup.remove_private_constructors=true +cleanup.remove_redundant_type_arguments=true +cleanup.remove_trailing_whitespaces=true +cleanup.remove_trailing_whitespaces_all=true +cleanup.remove_trailing_whitespaces_ignore_empty=false +cleanup.remove_unnecessary_casts=false +cleanup.remove_unnecessary_nls_tags=false +cleanup.remove_unused_imports=true +cleanup.remove_unused_local_variables=false +cleanup.remove_unused_private_fields=true +cleanup.remove_unused_private_members=false +cleanup.remove_unused_private_methods=true +cleanup.remove_unused_private_types=true +cleanup.sort_members=false +cleanup.sort_members_all=false +cleanup.use_anonymous_class_creation=false +cleanup.use_blocks=false +cleanup.use_blocks_only_for_return_and_throw=false +cleanup.use_lambda=true +cleanup.use_parentheses_in_expressions=false +cleanup.use_this_for_non_static_field_access=false +cleanup.use_this_for_non_static_field_access_only_if_necessary=true +cleanup.use_this_for_non_static_method_access=false +cleanup.use_this_for_non_static_method_access_only_if_necessary=true +cleanup.use_type_arguments=false +cleanup_profile=_Eclipse Scout +cleanup_settings_version=2 +eclipse.preferences.version=1 +editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true +formatter_profile=_Eclipse Scout +formatter_settings_version=12 +org.eclipse.jdt.ui.exception.name=e +org.eclipse.jdt.ui.gettersetter.use.is=true +org.eclipse.jdt.ui.javadoc=true +org.eclipse.jdt.ui.keywordthis=false +org.eclipse.jdt.ui.overrideannotation=true +org.eclipse.jdt.ui.text.custom_code_templates=