Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "Scout/NewAndNoteworthy/4.0"

(M7 (Friday, May 09): add Multiple Columns in the SmartField proposal form)
(Replaced content with "The Scout documentation has been moved to https://eclipsescout.github.io/.")
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
{{ScoutPage|cat=Release 4.0}}
+
The Scout documentation has been moved to https://eclipsescout.github.io/.
 
+
This page shows what you need to know about the new Eclipse [[Scout/Release/Luna | Scout 4.0]] release shipped with Eclipse [[Luna]].
+
 
+
== M1 (Friday, August 23, 2013) ==
+
 
+
=== Scout is using GIT flow ===
+
{{Bug|411769}}
+
 
+
Scout is now using GIT flow with 4.0 as described [[Scout/Contribution_Guidelines | here]]. We also try to make contributions more efficient and update our [[Scout/Contributions_for_Scout_Committers | documentation for committers]]
+
 
+
=== New french translations for ScoutTexts ===
+
{{Bug|414392}} - New translations were added for the French language (ScoutTexts entries for fr and fr_BE).
+
 
+
There is one minor correction for the fr_BE language. Additionally 14 translations were added to the French language (missing until now). These translations will be used in all Scout applications deployed in French, unless the text entry is overridden in the project.
+
 
+
=== Tree Box with support for auto check of child nodes  ===
+
 
+
{{Bug|368107}}
+
 
+
A a new configuration method for the treebox was introduced to automatically check/uncheck all child nodes when the parent node is checked / unchecked: AbstractTreeBox now provides getConfiguredAutoCheckChildNodes.
+
 
+
[[File:ScoutTreeboxExample.png]]
+
 
+
=== Scout SDK: Tooling Functionality for F2 ===
+
{{Bug|409468}}
+
 
+
[[Scout/Concepts/F2 | F2]] is a simple update manager for Eclipse or Java based applications that can be downloaded from the [http://marketplace.eclipse.org/content/f2-updater eclipse marketplace]. Scout SDK provides a new technology checkbox to help integrating F2 into your Scout application. A tutorial is provided [[Scout/Tutorial/3.10/UpdateWithF2 | here]].
+
 
+
[[Image:addF2SupportToScoutApplication.jpg|400px]]
+
 
+
 
+
=== Scout SDK: Eclipse 3.6 not supported anymore ===
+
Scout SDK does not run with Eclipse 3.6 anymore. Scout Runtime is still compatible to eclipse 3.6. Please upgrade your eclipse IDE! See [[Scout/Release/Luna#Target_Environment | here]] for supported eclipse versions.
+
 
+
== M2 (Friday, October 04) ==
+
 
+
=== Swing: Custom XML for Rayo Look and Feel ===
+
{{Bug|417579}} and {{Bug|408611}}:
+
There is an addition in the Scout RT Swing API allowing to provide a custom configuration for Look and Feels. This new extension point is used by Rayo: it is now possible to exchange the XML (e.g. to use different colors). See {{ScoutLink|Concepts|Rayo#Use_a_custom_XML|Use a custom XML with the Rayo Look and Feel}}.
+
 
+
=== Enhancement of SWT Look and Feel Extension Point ===
+
{{Bug|407261}} The Look and Feel extension point for SWT now has a new property for setting the background color of disabled fields (color.background.disabled). Setting the foreground color of disabled fields (color.forground.disabled) has already been available.
+
 
+
 
+
[[Image:Swtlookandfeelextensionpoint.PNG|600px]]
+
 
+
=== SDK: Test Suite and CBI ===
+
{{Bug|397542}} We have added the possibility to run the SDK Test suite from our maven Build. Because these tests require an UI Layer, they are not activated by default (analog to our UiTests in the RT). To activate them, run the build with the profile <tt>include-sdktest</tt>.
+
 
+
  mvn clean install -Pinclude-sdktest
+
 
+
=== Minor API Enhancements ===
+
With {{Bug|416848}} and {{Bug|416862}} we introduce some minor API changes to make ServiceTunnelServlet and Scheduler more extensible.
+
 
+
== M3 (Friday, November 15) ==
+
 
+
=== Service Tunnel Plugin ===
+
 
+
[[Image:Scout_Servicetunnel_Class_Diagram.png|thumb|right|500px|Scout service tunnel classes.]]
+
 
+
With bug {{Bug|405353}}, we have introduced a new plugin: <tt>org.eclipse.scout.rt.servicetunnel</tt> to allow server-server communication in the same way as the existing client-server communication.
+
 
+
This new plugin contains now the classes handling the service tunnel (client-server {{ScoutLink|Concepts|Communication|communication}}) that were previously contained in the <tt>org.eclipse.scout.rt.client</tt> plugin. The service tunnel classes are now completly independent from the scout client and can therefore be reused for server-server communication.
+
 
+
As a result the client plugin has a new dependency on the new servicetunnel plugin. If you work with plugin based product file (every project created by the Scout SDK does) you will have to add the new plugin as new dependency in your client product files. The [https://bugs.eclipse.org/bugs/show_bug.cgi?id=405353#c5 migration notes] in bugzilla contained additional information that will help you to fix the depreciation warnings.
+
 
+
In the client plugin you should now consider {{ScoutJavadoc|IClientServiceTunnel|I}} and {{ScoutJavadoc|ClientServiceTunnel|C}} when you want to extend the service tunnel mechanism.
+
 
+
In the service tunnel plugin, the architecture has also evolved: <tt>HttpBackgroundJob</tt> does not exist anymore. Instead there are {{ScoutJavadoc|HttpBackgroundExecutable|C}} (runnable which is executed by a Job) and {{ScoutJavadoc|HttpBackgroundExecutor|C}} (composite which holds a Job and an HttpBackgroundExecutable together). In the service tunnel plugin, you will also find the abstract classes you can extend for you own use case (for example {{ScoutJavadoc|AbstractHttpServiceTunnel<T extends ISession>|C}} can be used as parent class for a <tt>ServerHttpServiceTunnel</tt>).
+
 
+
=== TablePageData Dto ===
+
{{Bug|412752}} introduced a new type of transfert object for {{ScoutLink|Concepts|TablePage}}: the {{ScoutLink|Concepts|TablePageData}} objects. Similar to {{ScoutLink|Concepts|FormData}} it contains the content of the page that comes from the server to the client. Like for the FormData the PageData is linked with the {{ScoutJavadoc|PageData|A}} annotation:
+
 
+
<source lang="java">
+
@PageData(PersonTablePageData.class)
+
public class PersonTablePage extends AbstractPageWithTable<Table> {
+
  //... content of the page
+
}
+
</source>
+
 
+
{{Bug|418997}}: the SDK was modified to take care of this modification. When a new Table page is generated, the SDK can also generate the corresponding TablePageData.
+
 
+
{{Bug|419138}}: in the client plugin-in, in the {{ScoutEvent|LoadData}} event (new event that replace {{ScoutEvent|LoadTableData}}) it is possible to import the pageData:
+
<source lang="java">
+
@Override
+
protected void execLoadData(SearchFilter filter) throws ProcessingException {
+
  PersonSearchFormData formData = (PersonSearchFormData) filter.getFormData();
+
  if (formData == null) {
+
    formData = new PersonSearchFormData();
+
  }
+
 
+
  PersonTablePageData pageData = SERVICES.getService(IStandardOutlineService.class).getPersonTableData(formData);
+
  importPageData(pageData);
+
}
+
</source>
+
 
+
{{Bug|419140}}: the {{ScoutLink|Concepts|Sql_Service|SQL Support}} of Scout also offer support to select into TablePage data. For example:
+
 
+
<source lang="java">SQL.selectInto("SELECT person_nr, last_name, first_name FROM person INTO :{personNr}, :{lastName}, :{firstName}", pageData);</source>
+
 
+
For your table field, if you decide to switch your {{ScoutLink|Concepts|TableData}} from array based table data to bean based table data, the SQL support provides you the same possibilites (holder, input bind, output bind, filter...).
+
 
+
Please note that it is not possible to use input and output bindings which use the same field names (e.g. input bind SearchForm :lastName and output bind TablePageData :{lastName}) as [https://www.eclipse.org/forums/index.php/t/803695/ discussed in the forum]. As a workaround please provide a name for the output bindings:
+
 
+
<source lang="java">
+
SQL.selectInto(""
+
  + "SELECT person_nr, last_name, first_name FROM person "
+
  + "WHERE last_name like :lastName "
+
  + "INTO :{out.personNr}, :{out.lastName}, :{out.firstName}",
+
  searchFormData,
+
  new NVPair("out", pageData));
+
</source>
+
 
+
=== ClientNotification - SingleUserFilter ===
+
With {{Bug|408551}}, the default value of SingleUserFilter's <b>isMulticast</b> was changed from <b>false</b> to <b>true</b>.
+
 
+
=== Menu Mnemonics for SWT ===
+
With {{Bug|419831}}, mnemonics for menus are working with SWT. When declaring a menu with an ampersand (e.g. "&File") the "F" character gets underlined. When pressing "alt+F", the menu will be selected.
+
 
+
=== Upgrade to org.apache.batik 1.7 in Scout RT Feature  ===
+
With {{Bug|421217}} scout upgrades org.apache.batik from 1.6 to 1.7. This is because batik was upgraded in the platform (see [[http://download.eclipse.org/eclipse/downloads/drops4/S-4.4M3-201310302000/news/#Platform]]. The dependencies in the scout plugins remain the same (still compatible with batik 1.6), however the default installed version when creating a new project is batik 1.7.
+
 
+
== M4 (Friday, December 20) ==
+
 
+
=== Removal of Legacy Functionality ===
+
 
+
* With {{Bug|421586}} Deprecated Code for 4.0 will be removed
+
* With {{Bug|422055}} The Legacy Text Fragment is removed
+
* With {{Bug|403310}} Scout Client Testing Framework will be removed (To be replaced with junit based integration tests)
+
* With {{Bug|422052}} Legacy SQL Support in Scout Client will be removed in the next Scout release
+
 
+
=== Generics in ICodeType, ICode, ILookupRow, ILookupService, ICodeRow ===
+
 
+
With {{Bug|420491}} several JRE 1.3 relevant code will be replaced with JRE 1.6+ implementations.
+
 
+
ICodeType, ICode, ILookupRow, ILookupService, ICodeRow and all its implementations become generic.
+
Several (return-) parameters will be changed from array to typed lists.
+
SmartFields allowing custom text become its own field ‘{{ScoutLink|Concepts|ProposalField}}’. Sot the ‘allowCustomText’ member will be removed from ISmartField. The lookupCall and codeType members on IContentAssistField (common super class of ISmartField and IProposalField) will be typed.
+
Furthermore the AbstractListBox does no longer support null values as keys.
+
 
+
=== Multiline Support for RadioButton and CheckBox ===
+
With {{Bug|419011}} and {{Bug|419015}} RadioButton and CheckBox now support multiline labels.
+
 
+
 
+
 
+
Try it via
+
<source lang="java">
+
public class MultilineCheckboxField extends AbstractCheckBox {
+
 
+
@Override
+
protected String getConfiguredLabel() {
+
  return "This is a \n multiline \n checkbox";
+
}
+
 
+
@Override
+
  protected int getConfiguredGridH() {
+
  return 2;
+
}
+
}
+
</source>
+
 
+
=== Number Fields and Columns ===
+
With {{Bug|422120}}, {{Bug|422160}}, {{Bug|422163}}, {{Bug|423163}} issues with number fields and columns were solved. In addition to the reported problems with integer number fields, similar issues were fixed for the decimal number fields. Further problems with these number fields were fixed and the API for number fields and columns was consolidated.
+
 
+
Consider these changes for migration:
+
 
+
''Consistent Rounding''
+
* There is a new property '''roundingMode''' for all number fields and columns which is used for formatting and parsing. When set to ROUND_UNNECESSARY the parsing of GUI-text-input accepts only values that can be assigned without rounding to the field's generic type and respect the maxFractionDigits property for decimal number fields. (Old parsing behavior was: truncating for AbstractIntegerField and AbstractLongField; rounding for decimal number fields; exception for AbstractBigIntegerField for fraction digits.) Default is ROUND_UNNECESSARY for integer number fields and columns and ROUND_HALF_UP for decimal number fields and columns. (Before the rounding behavior for decimal fields and columns was ROUND_HALF_EVEN.)
+
 
+
''Consistent API''
+
* IDecimalField now extends INumberField. The UI Interfaces ISwingScoutDecimalField, ISWTScoutDecimalField and IRwtScoutDecimalField together with their implementations were removed.
+
* IDecimalColumn now extends INumberColumn.
+
* AbstractDecimalField is now a Subclass of AbstractNumberField, hence all changes mentioned below for AbstractNumberField apply as well for AbstractDecimalField.
+
* AbstractDecimalColumn is now a Subclass of AbstractNumberColumn, hence all changes mentioned below for AbstractNumberColumn apply as well for AbstractDecimalColumn.
+
* INumberField.setFormat(DecimalFormat): parameter's type changed from String to DecimalFormat
+
* INumberField.getFormat(): return type changed from String to DecimalFormat
+
* AbstractNumberField.getConfiguredFormat() is deprecated, for setting the format override initConfig() and call setFormat(DecimalFormat)
+
* AbstractNumberField.createNumberFormat() is deprecated, use getFormat() instead
+
* AbstractDoubleField.getConfiguredMinimumValue() is deprecated, use getConfiguredMinValue() instead
+
* AbstractDoubleField.getConfiguredMaximumValue() is deprecated, use getConfiguredMaxValue() instead
+
* AbstractIntegerField.getConfiguredMinimumValue() is deprecated, use getConfiguredMinValue() instead
+
* AbstractIntegerField.getConfiguredMaximumValue() is deprecated, use getConfiguredMaxValue() instead
+
* AbstractLongField.getConfiguredMinimumValue() is deprecated, use getConfiguredMinValue() instead
+
* AbstractLongField.getConfiguredMaximumValue() is deprecated, use getConfiguredMaxValue() instead
+
* Return value of AbstractBigDecimalField.getConfiguredMinValue() changed from Double to BigDecimal (For overrides it is recommended to use BigDecimal's String-constructor.)
+
* Return value of AbstractBigDecimalField.getConfiguredMaxValue() changed from Double to BigDecimal (For overrides it is recommended to use BigDecimal's String constructor.)
+
* Return value of AbstractBigIntegerField.getConfiguredMinValue() changed from Long to BigInteger (For overrides it is recommended to use BigInteger's String constructor.)
+
* Return value of AbstractBigIntegerField.getConfiguredMaxValue() changed from Long to BigInteger (For overrides it is recommended to use BigInteger's String constructor.)
+
* INumberColumn.setNumberFormat(NumberFormat) is deprecated, use setFormat(DecimalFormat) instead
+
* INumberColumn.setFormat(DecimalFormat): parameter's type changed from String to DecimalFormat
+
* INumberColumn.getFormat(): return type changed from String to DecimalFormat
+
* AbstractNumberColumn.getConfiguredFormat() is deprecated, for setting the format override initConfig() and call setFormat(DecimalFormat)
+
 
+
''Consistent semantics for format setters''
+
* New: Number fields and columns hold an internal DecimalFormat instance. All convenience setters and getters for DecimalFormat's properties (e.g. setGroupingUsed(boolean), isGroupingUsed() delegate to the internal instance. (Old behavior for the columns was: If a format was set, this would have priority over the convenience properties.)
+
 
+
''Character limit in UI''
+
* The fix character limit (60 chars swing, 32 chars SWT and RAP) for all number fields was replaced by a default for AbstractNumberField.getConfiguredMaxValue() and AbstractNumberField.getConfiguredMinValue(). These defaults are set to the limits of the generic type where such a limit exists and +-999999999999999999999999999999999999999999999999999999999999 for AbstractBigIntegerField and AbstractBigDecimalField.
+
 
+
=== Diagnostic Servlet ===
+
With {{Bug|423598}} Eclipse Scout has now a {{ScoutLink|Concepts|Servlets#Diagnostic_Servlet|diagnostic servlet}}. This creates an html page with diagnostic information like JVM Memory allocation and cpu architecture. Its also possible to add diagnostic information from any class entity. If an Entity want to provide diagnostic status info it has to implement org.eclipse.scout.rt.server.admin.diagnostic.IDiagnostic and has to register itself at the DiagnosticFactory:
+
 
+
org.eclipse.scout.rt.server.admin.diagnostic.DiagnosticFactory.addDiagnosticStatusProvider()
+
org.eclipse.scout.rt.server.admin.diagnostic.DiagnosticFactory.removeDiagnosticStatusProvider()
+
 
+
Here a preview how it looks like:
+
[[File:Eclipse_Scout-LunaM4-Diagnostics.png]]
+
 
+
== M5 (Friday, January 31, 2014) ==
+
 
+
=== SDK: Support for more Property Types ===
+
{{Bug|422163}}
+
 
+
The [[Scout/SDK/Object_Properties_View | Object Property View]] provides support for more property types that exist in the Scout Runtime:
+
* Drag & Drop Types
+
* Composer Attribute Types
+
* Rounding Mode for NumberFields
+
* Min- & Max-Values for BigDecimal- and BigInteger-Fields
+
 
+
=== SDK: Product Launchers improved ===
+
{{Bug|414535}}
+
 
+
The Scout SDK now finds all .product files in the workspace which gives you more flexibility on how to organize your projects. You can therefore configure each product file as a product launcher. Furthermore links to the web pages are provided for RAP and Server products (when the products are running).
+
 
+
[[Image:ScoutProductLauncherNews.png|400px]]
+
 
+
 
+
=== SDK: Create Elements without Scout Explorer ===
+
 
+
For some Elements it is no longer required to switch to the Scout Explorer and then drill down to the correct nodes. You can create them directly by using a key stroke:
+
* By typing Ctrl+Space within a [[Scout/Concepts/CodeType | CodeType]] you can directly create a new nested [[Scout/Concepts/Code | Code]].
+
* By typing Ctrl+Space in an NLS context you can create new translations.
+
* Typing Ctrl+N and then searching for "Scout" provides access to the wizard for creating [[Scout/Concepts/CodeType | CodeTypes]], [[Scout/Concepts/LookupCall | LookupCalls]], [[Scout/Concepts/Page | Pages]], [[Scout/Concepts/Form | Forms]], [[Scout/Concepts/SearchForm | SearchForms]] and Services.
+
 
+
[[Image:ScoutNlsNewEntry.png|400px]]  [[Image:ScoutNewWizards.png|400px]]
+
 
+
=== SDK: Choose ServerSessions for Services ===
+
{{Bug|421985}}
+
 
+
When creating Services it is possible to choose which ServerSession that should be used in the registration of the service.
+
 
+
[[Image:ScoutChooseServerSession.png|400px]]
+
 
+
=== Unique Id (''classId'') for Scout Model ===
+
{{Bug|422960}}{{Bug|433306}}
+
 
+
A unique id for form fields, forms and other components is needed for test tools, registries, documentation, etc. With this change a standardized way for obtaining this id is introduced. The existing fieldId on IFormField is not sufficient, because it is not always unique, e.g. multiple abstract group boxes containing the fields with the same names may exist.
+
 
+
A new interface ''IObjectWithClassId'' was introduced for this new id:
+
 
+
public interface IObjectWithClassId{
+
  String classId();
+
}
+
 
+
For the static case a new annotation @ClassId is used to set the id at design time: (e.g. @ClassId(„550e8400-e29b-11d4-a716-446655440000“)). There is SDK support available to create the @ClassId with a generated id.
+
 
+
For FormFields the classid complies to the following rules:
+
- Fields that are replacing other fields (@Replace annotation) get the id of the original field
+
- FormFields, Columns: When using templates the enclosing field list needs to be considered such that the id is unique.
+
- For inner forms, the outer form field needs to be considered.
+
 
+
==== Using Id in test tools ====
+
To enable ids on widget in Swing or SWT, update the config.ini properties.
+
 
+
org.eclipse.scout.rt.widgetIdsEnabled=true
+
 
+
If a custom key is needed you can override AbstractSwtEnvironment.assignWidgetId(ITypeWithClassId, Widget).
+
 
+
See also [http://www.eclipse.org/forums/index.php/t/670073/].
+
 
+
==== SDK: Support for @ClassId Annotation ====
+
{{Bug|422960}}
+
 
+
For classes that implement the new ITypeWithClassId interface a @ClassId annotation can be added. This can be done for a specific class only by using the Quick Assist (Ctrl+1) or for an entire bundle by using the corresponding context menu on a Client-, Shared- or Server node in the Scout Explorer.
+
 
+
There also exists an option (Window->Preferences->Scout) to automatically create this annotation when an element is created with the Scout SDK.
+
 
+
We also added a validation check that searches for duplicate @ClassId values within a Scout project and marks them as errors.
+
 
+
== M6 (Friday, March 14) ==
+
=== Application title as tray icon tooltip  ===
+
 
+
{{Bug|426014}}
+
 
+
Scout clients with SWT and Swing frontends will now display the application title as tray icon tooltip. The tooltip is updated dynamically whenever the application title changes via <code>IDesktop.setTitle(String)</code>.
+
 
+
[[File:tray_icon_tooltip.png]]
+
 
+
=== Swing: render AbstractLabelField not as JLabel ===
+
{{Bug|423148}}
+
 
+
The AbstractLabelField can now be configured as selectable or non-selectable. Before this change, the AbstractLabel was not selectable in the Swing UI. Thus, a new property was introduced:
+
 
+
<source lang="java">
+
  protected boolean getConfiguredSelectable() {
+
    return true;
+
  }
+
</source>
+
By default, the AbstractLabel is selectable.
+
 
+
[[File:abstractlabel_selectable.png]]
+
 
+
Note, the web UI currently does not support the selectable feature, an AbstractLabelField in RAP is always non-selectable.
+
 
+
 
+
Moreover, the AbstractLabel field not correctly supports wrap text via
+
<source lang="java">
+
@Override
+
protected boolean getConfiguredWrapText() {
+
  return true;
+
}
+
</source>
+
 
+
=== SWT: menu/action clean up ===
+
{{Bug|413524}}
+
 
+
<ul>
+
<li>Change your DesktopMenuBar to:
+
<source lang="java">
+
public class DesktopMenuBar extends CompoundContributionItem {
+
 
+
  @Override
+
  protected IContributionItem[] getContributionItems() {
+
    ISwtEnvironment env = Activator.getDefault().getEnvironment();
+
    if (env != null && env.isInitialized()) {
+
      if (env.getClientSession() != null && env.getClientSession().getDesktop() != null) {
+
        List<IMenu> menus = env.getClientSession().getDesktop().getMenus();
+
        List<IMenu> consolidatedMenus = MenuUtility.consolidateMenus(menus);
+
        List<IContributionItem> swtContributionItems = new ArrayList<IContributionItem>();
+
        for (IMenu menu : consolidatedMenus) {
+
          swtContributionItems.add(new SwtScoutMenuContributionItem(menu, env));
+
        }
+
        return swtContributionItems.toArray(new IContributionItem[swtContributionItems.size()]);
+
      }
+
    }
+
    return new IContributionItem[0];
+
  }
+
 
+
  @Override
+
  public boolean isDirty() {
+
    boolean isDirty = super.isDirty();
+
    if (!isDirty && getParent() instanceof IMenuManager) {
+
      isDirty = ((IMenuManager) getParent()).isDirty();
+
    }
+
    return isDirty;
+
  }
+
}
+
</source>
+
</li>
+
<li>SwtScoutAction is replaced with <code>org.eclipse.scout.rt.ui.swt.action.SwtScoutToolbarAction</code> or <code>org.eclipse.scout.rt.ui.swt.action.SwtScoutActionContributionItem</code> depending on the usage.
+
</li>
+
</ul>
+
 
+
=== GroupBox Layout ===
+
{{Bug|428899}}
+
 
+
As discussed in [http://www.eclipse.org/forums/index.php/mv/msg/659075/1256277/#msg_1256277 this forum thread], it is now possible to use an horizontal field layout on {{ScoutLink|Concepts|GroupBox}}.
+
 
+
This is implemented with a new property {{ScoutProp|BodyGrid}}. The default layout is '''vertical''' (enhanced implementation of the previous layout strategy):
+
 
+
<source lang="java">
+
  protected Class<? extends IGroupBoxBodyGrid> getConfiguredBodyGrid() {
+
    return VerticalSmartGroupBoxBodyGrid.class;
+
  }
+
</source>
+
 
+
[[File:Scout Vertical GroupBox Grid.png]]
+
 
+
The new '''horizontal''' layout can be set like this:
+
 
+
<source lang="java">
+
  protected Class<? extends IGroupBoxBodyGrid> getConfiguredBodyGrid() {
+
    return HorizontalGroupBoxBodyGrid.class;
+
  }
+
</source>
+
 
+
[[File:Scout Horizontal GroupBox Grid.png]]
+
 
+
Additionally a new {{ScoutLink|Concepts|Spy|Spy function}} was introduced: the layout debugger.
+
 
+
[[File:Scout_Layout_debugger.jpg]]
+
 
+
=== Toolbuttons in Form (SWT) ===
+
{{Bug|422646}}
+
 
+
{{ScoutLink|Concepts|Form|Scout forms}} now support {{ScoutLink|Concepts|ToolButton|toolbuttons}}. The toolbuttons can be rendered on the form header (default):
+
 
+
[[File:Scout_Form_Toolbar_FormHeader.png]]
+
 
+
or as view part buttons (Swt only):
+
 
+
[[File:Scout_Form_Toolbar_ViewPart.png]]
+
 
+
The toolbuttons are added as inner-class of the form (The inner-class needs to implement  {{ScoutJavadoc|IToolButton|I}} or to extend {{ScoutJavadoc|AbstractToolButton|C}}). Example:
+
 
+
<source lang="java">
+
@FormData(value = MyFormData.class, sdkCommand = FormData.SdkCommand.CREATE)
+
public class MyForm extends AbstractForm {
+
 
+
  //... other form content ...
+
 
+
  @Order(10.0)
+
  public class BookmarkToolButton extends AbstractToolButton {
+
 
+
    @Override
+
    protected String getConfiguredIconId() {
+
      return Icons.Bookmark;
+
    }
+
 
+
    @Override
+
    protected String getConfiguredTooltipText() {
+
      return TEXTS.get("AddToBookmark");
+
    }
+
 
+
    @Override
+
    protected void execAction() throws ProcessingException {
+
      //mark bookmark action
+
    }
+
  }
+
}
+
</source>
+
 
+
The position of the toolbar is controlled with the property {{ScoutProp|ToobarLocation}} on {{ScoutLink|Concepts|Form}}.
+
 
+
=== Derby bundle & package name change ===
+
{{Bug|429542}}
+
The following bundles were renamed:
+
 
+
* org.eclipse.scout.rt.jdbc.derby -> org.eclipse.scout.rt.jdbc.derby10
+
* org.w3c.dom.svg.fragment -> org.eclipse.scout. org.w3c.dom.svg.fragment
+
 
+
=== Servletfilter ===
+
{{Bug|429297}}
+
 
+
The bundle <tt>org.eclipse.scout.http.servletfilter</tt> does not exist anymore. Use <tt>org.eclipse.scout.rt.server.commons</tt> instead. Change this in your *.product and MANIFEST.MF files.
+
 
+
The extention point <tt>org.eclipse.scout.http.servletfilter.filters</tt> was renamed to <tt>org.eclipse.scout.rt.server.commons.filters</tt> you need to change this in your plugin.xml file.
+
 
+
The packages names has also changed:
+
* <tt>org.eclipse.scout.http.servletfilter.security.*</tt> to <tt>org.eclipse.scout.rt.server.commons.servletfilter.security.*</tt>
+
* <tt>org.eclipse.scout.http.servletfilter.helper.*</tt> to <tt>org.eclipse.scout.rt.server.commons.servletfilter.helper.*</tt>
+
 
+
You need to update this in your plugin.xml and in your config.ini files.
+
 
+
For example your plugin.xml will look like this:
+
<source lang="XML">
+
  <extension
+
        name=""
+
        point="org.eclipse.scout.rt.server.commons.filters">
+
      <filter
+
            aliases="/process /remotefiles /updatesite"
+
            class="org.eclipse.scout.rt.server.commons.servletfilter.security.BasicSecurityFilter"
+
            ranking="20">
+
      </filter>
+
      <filter
+
            aliases="/process /remotefiles /updatesite"
+
            class="org.eclipse.scout.rt.server.commons.servletfilter.security.AnonymousSecurityFilter"
+
            ranking="30">
+
      </filter>
+
  </extension>
+
</source>
+
 
+
== M7 (Friday, May 09) ==
+
=== Multiple Columns in the SmartField proposal form ===
+
{{Bug|423801}} It now possible to define multiple columns in the proposal table of a SmartField; this allows distinguishing between similar rows, when one text column is not enough.
+
 
+
[[File:Scout_MultiColumnSmartField.png]]
+
 
+
See the {{ScoutLink|Concepts|SmartField}} page for more detail.
+
 
+
=== BigInteger Column ===
+
{{Bug|424019}}
+
 
+
BigInteger support for columns was added with AbstractBigIntegerColumn.
+
 
+
=== More reliable client notifications ===
+
{{Bug|422070}}
+
 
+
Some of our customers had the problem that responses were lost under heavy load. Lost responses of service calls do not seem to be such a big problem. Lost client notifications, however are more critical. Therefore we implemented a mechanism to only stop resending the notifications when processing by the client is acknowledged.
+
 
+
The client keeps track of the already received notifications until they expire to prevent duplicate handling of the notifications.
+
 
+
=== Date default in DateTime Field ===
+
{{Bug|433200}}
+
 
+
When the time is selected in the DateTime field prior to selecting a date, you may now set a default date other than the current date. If no default date is specified, the current date is used as in previous versions.
+
 
+
=== RAP Drag & Drop support from Desktop ===
+
{{Bug|432904}}
+
 
+
Drag & Drop support has been added to RAP 2.3 M2. This new functionality has also been integrated into the web frontend of Scout. All fields (StringField, TableField, TreeField, ImageField) having drag & drop support inside the application do also support drag & drop from the desktop.
+
 
+
'''Notice:''' Drag & Drop from desktop does only work if the [http://git.eclipse.org/c/scout/scout.rt.incubator.git/ Scout Filechooser] bundle is installed.
+
 
+
Example: Configure your table with
+
 
+
@Override
+
protected int getConfiguredDropType() {
+
  return TYPE_FILE_TRANSFER;
+
}
+
 
+
After dropping a files or even multiple files from the desktop, the files can be handled in the Scout model as FileListTransferObject:
+
 
+
@Override
+
protected void execDrop(ITableRow row, TransferObject t) throws ProcessingException {
+
  if (!(t instanceof FileListTransferObject)) {
+
    return;
+
  }
+
  FileListTransferObject fileListTransferObject = (FileListTransferObject) t;
+
  for (File file : fileListTransferObject.getFiles()) {
+
    // handle your dropped files
+
  }
+
}
+
 
+
Choose one or several files and drop them into the table
+
[[File:Drop_several_files.png]]
+
 
+
After the dropped files have been handled:
+
 
+
[[File:Dropped_files_handled.png]]
+
 
+
=== Add service cache for much better performance ===
+
{{Bug|422441}}
+
 
+
Set the config.ini property org.eclipse.scout.service.cache.enabled=true in order
+
to use it. The switch is false by default, but will be true in a future release.
+
Call SERVICES.clearCache() to clear the cache at runtime.
+
 
+
=== Add Scout Job caching context finder for much better performance ===
+
{{Bug|423933}}
+
 
+
Added caching to scout context finder as well as more efficient reference class loading. Add the property
+
 
+
org.eclipse.scout.rt.server.customServerJobClassloader=true
+
 
+
to the config.ini of the server product to use the classloader provided by the SerializationUtility in server jobs. If you enable the property, you must make sure, that all classes only exist once in the classpath.
+
 
+
=== Cloud: synchronization of caches ===
+
{{Bug|421614}}
+
 
+
==== New cache services ====
+
 
+
In a cloud environment cached data such as the scout server session has to be synchronized. New interface have been introduced to cache server side data.
+
 
+
org.eclipse.scout.rt.server.commons.cache.IHttpSessionCacheService used to cache data dependent on http session
+
org.eclipse.scout.rt.server.commons.cache.IGlobalServerCacheService used to cache data per server node
+
 
+
Default implementations for sticky sessions, synchroized sessions (have to be serialized) or custom cache services are available. By default, server side data is stored as before (on the http session).
+
 
+
org.eclipse.scout.rt.server.commons.cache.StickySessionCacheService assumes that each request is handled by the same server node (default, as before)
+
org.eclipse.scout.rt.server.commons.cache.SerializedCacheService can be used when serialization is done by the servlet container
+
 
+
Alternative caches provided on [https://marketplace.eclipse.org/content/cloud-support-eclipse-scout eclipse marketplace]. Howto use the services is described in the [https://wiki.eclipse.org/Scout/Tutorial/4.0/Cloud cloud tutorial]
+
 
+
==== Multisession Cookiestore ====
+
 
+
When using RAP and a Loadbalancer with sticky sessions the a multisession cookiestore can be enabled, such for each client session a separate cookiestore is used. Use the config.ini of rap and server product:
+
org.eclipse.scout.rt.multiClientSessionCookieStoreEnabled = true
+
 
+
=== Cloud: synchronization of notifications ===
+
{{Bug|421615}}
+
 
+
New synchronization mechanism of client notifications, permissions, etc. between scout server nodes for cloud or cluster support. Popular message queue implemenations are provided on the [https://marketplace.eclipse.org/content/cloud-support-eclipse-scout eclipse marketplace]. Howto use the services is described in the [https://wiki.eclipse.org/Scout/Tutorial/4.0/Cloud cloud tutorial]
+
 
+
Client Notifications are now only submitted on commit.
+
 
+
Migration: If you extened ClientNotificationService, please consider that putNotification only puts notifications in the queue on successful commit.
+
 
+
=== Tree: Enhance drag and drop behavior with callback. ===
+
{{Bug|416818}}
+
With this change request, a new method was introduced on the AbstractTree. It is now possible to get informed about the current position of a dragged node (e.g. on which node the dragged node is currently over)
+
<source lang="java">
+
  /**
+
  * This method gets called when the drop node is changed, e.g. the dragged object
+
  * is moved over a new drop target.
+
  *
+
  * @since 4.0-M7
+
  */
+
  @ConfigOperation
+
  @Order(45)
+
  protected void execDropTargetChanged(ITreeNode node) throws ProcessingException {
+
  }
+
</source>
+
 
+
If you want to try the new feature, check out our Widget Demo App where a new form "Tree Drag&Drop" was added.
+
[[File:Tree_drag_and_drop.png]]
+
 
+
=== Project Creation in Scout SDK: Target Selection ===
+
 
+
When creating a new Scout project a corresponding target definition file is created as well. While creating the new project the supported runtime target platforms can be selected: 3.7 (Indigo), 3.8 (Juno) or 4.4 (Luna).
+
 
+
== RC1 (Friday, May 23) ==
+
=== Menu Refactoring ===
+
New UI technologies require to display the menus as buttons. Visibility and enable state of Scout menus were calculated before displaying a menu (<tt>execPrepareAction</tt>). This works for context menus displayed on demand not for a button representation of a menu. So the requirement came up to change the implementation to have always a valid enable and visible state. The major change to get there is every menu is listening to property changes of fields it is interested in.
+
 
+
The AbstractMenu API is changing with Luna.
+
 
+
Deprecations (will be removed with Mars release):
+
 
+
* <tt>execPrepareAction</tt> is called before a menu gets showed. Will be removed and should be replaced with property listeners or <tt>execOwnerValueChanged</tt>.
+
* <tt>getConfiguredEmptySpaceAction()</tt> (default was false)
+
* <tt>getConfiguredSingleSelectionAction()</tt> (default was true)
+
* <tt>getConfiguredMultiSelectionAction()</tt> (default was false)
+
 
+
New methods (Version > 4.0)
+
* <tt>execOwnerValueChanged(Object value)</tt> This method is called whenever the menu owner field's value changes. It is basically a property listener of the value property on the owner field. This method is usually used to change enable/visible state, label, icon, ... The object passed as an argument is the owners new value in case of a TableField the list of the selected rows in case of a TreeField the set of the selected nodes. Unfortunately this argument can not be typed since we do not want to add a generic of the owner value on every menu. In most cases, this should not matter, and the argument can be ignored. In Tables, for example, you may safely call the table's getSelectedRows() method to define your condition, as changing the row selection is considered as a change in the "owner value".
+
 
+
Here is the correspondence between old and new API for menus in {{ScoutLink|Concepts|Table|tables}}:
+
 
+
{|border="1"
+
!Old API (Version < 4.0)
+
!New API (Version > 4.0)
+
|-
+
|
+
<source lang="java">
+
@Override
+
protected boolean getConfiguredEmptySpaceAction() {
+
  return true;
+
}
+
 
+
@Override
+
protected boolean getConfiguredSingleSelectionAction() {
+
  return false;
+
}
+
</source>
+
|
+
<source lang="java">
+
@Override
+
protected Set<? extends IMenuType> getConfiguredMenuTypes() {
+
  return CollectionUtility.<IMenuType> hashSet(TableMenuType.EmptySpace);
+
}
+
</source>
+
|-
+
|
+
<source lang="java">
+
@Override
+
protected boolean getConfiguredMultiSelectionAction() {
+
  return true;
+
}
+
</source>
+
|
+
<source lang="java">
+
@Override
+
protected Set<? extends IMenuType> getConfiguredMenuTypes() {
+
  return CollectionUtility.<IMenuType> hashSet(TableMenuType.MultiSelection, TableMenuType.SingleSelection);
+
}
+
</source>
+
|-
+
|
+
<source lang="java">
+
@Override
+
protected void execPrepareAction() throws ProcessingException {
+
  setEnabled(getSelectedRowCount() == 2);
+
}
+
</source>
+
|
+
<source lang="java">
+
@Override
+
protected void execOwnerValueChanged(Object newOwnerValue) throws ProcessingException {
+
  setEnabled(getSelectedRowCount() == 2);
+
}
+
</source>
+
|}
+
 
+
Here is the correspondence between old and new API for menus in fields (like {{ScoutLink|Concepts|SmartField}}):
+
{|border="1"
+
!Old API (Version < 4.0)
+
!New API (Version > 4.0)
+
|-
+
|
+
<source lang="java">
+
@Override
+
protected boolean getConfiguredEmptySpaceAction() {
+
  return true;
+
}
+
 
+
@Override
+
protected boolean getConfiguredSingleSelectionAction() {
+
  return false;
+
}
+
</source>
+
|
+
<source lang="java">
+
@Override
+
protected Set<? extends IMenuType> getConfiguredMenuTypes() {
+
  return CollectionUtility.<IMenuType> hashSet(ValueFieldMenuType.Null);
+
}
+
</source>
+
|}
+
 
+
== RC2 (Friday, May 30) ==
+
 
+
== RC3 (Friday, June 06) ==
+
=== Add classloading resource url caching for much better performance and resource filtering ===
+
{{Bug|423933}}
+
 
+
Added caching of resource URLs to scout bundleList classloader. Add the property
+
 
+
org.eclipse.scout.commons.serialization.enableResourceUrlCaching=true
+
 
+
to the config.ini of the products to use the caching of resource URLs in the classloader provided by the SerializationUtility. If you enable the property, it breaks the osgi way of deinstalling/updating bundles as it wouldn't find new resources of the same name already in the cache. If you wan't to be able to use this osgi feature please do not enable this feature.
+
 
+
Added filtering of resource URLs to scout bundleList classloader. Add the property
+
 
+
org.eclipse.scout.commons.serialization.enableUsageOfBundleOrderPrefixListAsResourceFilter=true
+
 
+
to the config.ini of the products to use the filtering of resource URLs in the classloader provided by the SerializationUtility. The methods getResource(s) from BundleListClassLoader return resources from every bundle from the product plus from the general classpath. There are cases (library bundles with multiple jars) which this behavior has to be changed. With this property resources will be filtered the following way:
+
 
+
* if a resource is found in a bundle which matches the prefix list just this or these resources URLs will be returned.
+
* if no resource is found in a bundle which matches the prefix list the list will be returned unfiltered.
+
 
+
== RC4 (Friday, June 13) ==
+
 
+
== Bugfixes and Change Request Overview ==
+
 
+
The following list shows all Bugzilla Tickets which have been fixed for this release. The list also contains all new enhancements.
+
 
+
*[https://bugs.eclipse.org/bugs/buglist.cgi?list_id=7472259&classification=Technology&query_format=advanced&target_milestone=3.10.0%20Luna&target_milestone=3.10.0%20M1&target_milestone=3.10.0%20M2&target_milestone=3.10.0%20M3&target_milestone=3.10.0%20M4&target_milestone=3.10.0%20M5&target_milestone=3.10.0%20M6&product=Scout Bugzilla List for 4.0]
+
 
+
== Migration Guidelines  ==
+
 
+
Some features and bugfixes sometimes require a change of the API. If this has been the case for the new release then you'll find behind the link below a guideline how to migrate your Scout application to the newest release. The link below lists all implemented enhancements and bugs that require specific upgrade actions for your application based on Scout 3.9. The migration actions to Scout 4.0 are described in the corresponding bugs directly.
+
 
+
[https://bugs.eclipse.org/bugs/buglist.cgi?list_id=7667627&classification=Technology&status_whiteboard_type=allwordssubstr&query_format=advanced&status_whiteboard=migration&product=Scout&target_milestone=3.10.0%20Luna&target_milestone=3.10.0%20M1&target_milestone=3.10.0%20M2&target_milestone=3.10.0%20M3&target_milestone=3.10.0%20M4&target_milestone=3.10.0%20M5&target_milestone=3.10.0%20M6&target_milestone=3.10.0%20M7&target_milestone=4.0.0%20M6&target_milestone=4.0.0%20M7&target_milestone=4.0.0%20RC1&target_milestone=4.0.0%20RC2&target_milestone=4.0.0%20RC3&target_milestone=4.0.0%20RC4 Scout 3.9 to 4.0 Migration Tickets]
+

Latest revision as of 10:31, 18 March 2024

The Scout documentation has been moved to https://eclipsescout.github.io/.

Back to the top