<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="copyright"
  content="Copyright (c) Eclipse contributors and others 2014. This page is made available under license. For full details, see the LEGAL section in the documentation that contains this page." />
<meta http-equiv="Content-Language" content="en-us" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="default_style.css" charset="UTF-8" type="text/css" />
<style type="text/css">
table.news td {
  border-top: solid thin black;
}

table.news tr {
  vertical-align: top;
}

table.news tr td.section {
  font-size: 20px;
  font-weight: bold;
}

table.news tr td.title {
  vertical-align: top;
  width: 30%;
  font-weight: bold;
}

table.news tr td.content {
  vertical-align: top;
  width: 70%;
}
</style>
<title>Eclipse Project Luna - New and Noteworthy</title>
</head>

<body>

  <h2>Platform and Equinox API</h2>
  <ul>
    <li><a href="#Platform">Platform Changes</a></li>
    <li><a href="#Equinox">Equinox Changes</a></li>
    <li><a href="#SWT">SWT Changes</a></li>
  </ul>

  <!-- ****************** START OF N&N TABLE ****************** -->
  <table class="news" cellpadding="10" cellspacing="0">
    <tbody>
      <!-- ******************** Platform ********************** -->
      <tr>
        <td id="Platform" class="section" colspan="2"><h2>Platform Changes</h2></td>
      </tr>

      <tr id="e4-views-1">
        <td class="title">Contribute e4 Views into the IDE</td>
        <td class="content">Native e4 views can now be contributed to the Eclipse workbench via extension point. The <code>org.eclipse.ui.views</code> extension point now supports an <code>e4view</code>
          element for declaring a new view for the IDE whose implementation is done in the e4 style (i.e. an annotated POJO).
          <p>
            <img src="images/new-e4view-extension.png" alt="new extension" />
          </p>
          <p>The new type of extension is identical to the original 'view' except for relaxing the requirement that the 'class' implement IViewPart.</p>
          <p>For those that are unaware of the e4 way of coding, here's what the implementation of an e4 view looks like:</p> <pre>
import javax.annotation.PostConstruct;
import org.eclipse.e4.ui.di.Focus;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;

public class RealE4View {
	Label label;

	@PostConstruct
	void createView(Composite parent) {
		label = new Label(parent, SWT.BORDER);	
		label.setText("Testing");
	}

	@Focus
	void setFocus() {
		label.setFocus();
	}
}
      </pre>
          <p>Note how it's a simple Java object (POJO) and how few dependencies it has; this has already proven itself as a far more convenient way to write the code and has great advantages in
            testing (because of its few dependencies).</p>
        </td>
      </tr>

      <tr id="css-bridge">
        <td class="title">CSS bridge</td>
        <td class="content">The Eclipse 4 CSS-based styling engine has been connected to the classic Eclipse platform theme APIs through a new mechanism called the <i>CSS bridge</i>. This support
          enables a number of new user cases:
          <ul>
            <li>Accessing legacy platform <b>Color and Font</b> definitions from within a CSS style sheet:
              <p>
                <img src="images/css-bridge/using-definitions.png" alt="" />
              </p>
            </li>
            <li>Overriding <b>Color and Font</b> definitions in a CSS style sheet:
              <p>
                <img src="images/css-bridge/overriding-definitions.png" alt="" />
              </p>
            </li>
            <li>Adding new style definitions within your CSS that will be surfaced for user customization on the <b>Color and Font</b> preference page:
              <p>
                <img src="images/css-bridge/new-definitions.png" alt="" />
              </p>
            </li>
          </ul> This bridging has a number of nice properties:
          <ul>
            <li>The legacy color theme definitions overridden or added in the CSS style sheet are merged with the current theme.</li>
            <li>When switching themes, overridden values are re-merged with the new theme.</li>
            <li>The new definitions added with the CSS file (the last use case) are available in the CSS theme that provides it.</li>
          </ul> Note that after switching CSS themes, the definitions can be unavailable in the theme registries when the new theme doesn't re-define it. This means when using theme definitions out of CSS
          files, you must be prepared for such situations and use proper default values in the case when some definitions are missing.
        </td>
      </tr>

      <tr id="theme-association">
        <td class="title">New 'themeAssociation' element of the 'org.eclipse.e4.ui.css.swt.theme' extension&nbsp;point</td>
        <td class="content">An Eclipse platform CSS theme can now register an association with a legacy platform <b>Color and Font</b> theme. After defining the proper association between themes,
          changing themes in the <b>Appearance</b> preference page will automatically set the associated <b>Color and Font</b> theme.
          <p>
            <img src="images/theme-association.png" alt="" />
          </p>
        </td>
      </tr>

      <tr id="recenter-command">
        <td class="title">Improved Recenter command</td>
        <td class="content">Like in Emacs, the <b>Recenter</b> command in textual editors now cycles between center, bottom and top.
        </td>
      </tr>

      <tr id="ant-1.9.2-update">
        <td class="title">Ant 1.9.2</td>
        <td class="content">The platform has been updated to use the latest version of Apache Ant (1.9.2). For more information on what is new in Ant 1.9.2, see the official <a
          href="http://mirror.olnevhost.net/pub/apache//ant/README.html">what's new</a>.
        </td>
      </tr>

      <tr id="ant-bree-update">
        <td class="title">Platform Ant BREE update</td>
        <td class="content">Platform Ant has had a BREE update to require a Java 1.6 compatible execution environment (or newer).</td>
      </tr>

      <tr>
        <td class="title">Platform Debug BREE update</td>
        <td class="content">Platform Debug has had a BREE update to require a Java 1.6 compatible execution environment (or newer).</td>
      </tr>

      <tr id="debug-examples">
        <td class="title">New debugger examples</td>
        <td class="content">New examples have been added to the Platform Debug git repository. The <code>org.eclipse.debug.examples.mixedmode</code> project demonstrates how to use Debug's
          mixed-mode launching support. The <code>org.eclipse.debug.examples.memory</code> project provides sample content to display in the <b>Memory</b> and <b>Registers</b> views.
        </td>
      </tr>

      <tr id="batik-1-7">
        <td class="title">Updated to Batik 1.7</td>
        <td class="content">The Platform now includes a newer version of Apache Batik, version 1.7.0. This new version is being used for CSS parsing in the declarative styling engine, and is
          notably faster than the previous version.</td>
      </tr>

      <tr id="workspaceLock">
        <td class="title">Removed WorkspaceLock API</td>
        <td class="content">The <code>WorkspaceLock</code> API allowed a special client (usually Platform UI) to hook into the locking protocols used by the workspace implementation. This hook
          was used to mitigate deadlocks due to interaction with synchronous SWT events, and was never intended to be used by other clients. In the 3.0 release this API was deprecated in favor of a
          more general API provided by the <code>org.eclipse.core.jobs</code> bundle. Invoking this API has had no effect since the 3.0 release. The specific API being removed includes:
          <ul>
            <li>The <code>org.eclipse.core.resources.WorkspaceLock</code> class.
            </li>
            <li>The method <code>org.eclipse.core.resources.IWorkspace#setWorkspaceLock</code></li>
          </ul> Clients that directly use an API listed above should remove any references to it.
        </td>
      </tr>

      <tr id="incrementalProjectBuilder-getRule">
        <td class="title">Removed IncrementalProjectBuilder#getRule() API</td>
        <td class="content">The <code>IncrementalProjectBuilder#getRule()</code> method returned a scheduling rule that was required for building the project by the builder. This method was
          intended to be used by the builder framework only. In the 3.6 release this method was deprecated in favor of a more general method <code>IncrementalProjectBuilder#getRule(int, Map)</code>.
          The specific API being removed includes:
          <ul>
            <li>The method <code>org.eclipse.core.resources.IncrementalProjectBuilder#getRule()</code></li>
          </ul> Clients that directly call the API listed above should remove any references to it or replace them with calls to <code>IncrementalProjectBuilder#getRule(int, Map)</code>. Clients that
          implement the API listed above should implement <code>IncrementalProjectBuilder#getRule(int, Map)</code> instead.
        </td>
      </tr>

      <tr id="eclipse-api">
        <td class="title">EMenuService released as API</td>
        <td class="content">The <code>EMenuService</code> service has been released as API. RCP clients must adjust their package imports to <code>org.eclipse.e4.ui.services</code>.
        </td>
      </tr>

      <tr id="MLocalizable">
        <td class="title">MLocalizable mixin interface</td>
        <td class="content">The mechanism for localizing strings in the application model has been changed. Previously, EOperations (methods) were used to get a localized value. Now, volatile,
          transient, derived, unchangeable EStructuralFeatures are used. This enables notifications if a localizable value has changed. To mark EClasses who hold localizable informations and to inform
          them externally about a changed Locale, the <code>MLocalizable</code> mixin interface is introduced, which contains the single method <code>updateLocalization()</code>. This enables the
          platform to generically search the model for model elements affected by a Locale change and force them to update.
        </td>
      </tr>

      <tr id="Locale_Change_Propagation">
        <td class="title">Locale change propagation</td>
        <td class="content">A new service called <code>ILocaleChangeService</code> has been introduced, which supports changing Locale at runtime. Using this service will:
          <ol>
            <li>Update the Locale in the application context.</li>
            <li>Inform all model elements of an application that implement <code>MLocalization</code> about the change.
            </li>
            <li>Post an event via event broker.</li>
          </ol>
        </td>
      </tr>

      <tr id="Locale_Change_Consumption">
        <td class="title">Locale change consumption</td>
        <td class="content">There are now three ways to be informed about a Locale change:
          <ol>
            <li>Via event broker by listening to the topic <i>org/eclipse/e4/core/NLS/LOCALE_CHANGE</i></li>
            <li>Via dependency injection by getting the value for <code>TranslationService.LOCALE</code> injected (e.g. via method injection)
            </li>
            <li>Via attaching to the model events listening to the newly introduced LOCALIZED-Features</li>
          </ol> <b>Note:</b> The renderers need to be modified to listen to the LOCALIZED-Features, otherwise the Locale change at runtime isn't supported!
        </td>
      </tr>

      <tr id="ResourceBundleProvider">
        <td class="title">ResourceBundleProvider</td>
        <td class="content">A new <code>ResourceBundleProvider</code> service has been introduced to abstract out the reference to the <code>BundleLocalization</code> OSGi service. This enables
          application authors to change how ResourceBundles should be looked up within their Eclipse application, e.g. using class-based ResourceBundles, loading translations out of a database,
          loading ResourceBundles from a server by using a different ResourceBundle.Control. The default implementation <code>DefaultResourceBundleProvider</code> is internally using <code>BundleLocalization</code>
          to keep the known default behaviour.
        </td>
      </tr>

      <tr id="TranslationService">
        <td class="title">TranslationService update</td>
        <td class="content">The <code>TranslationService</code>, that is used to localize the application model, had several downsides regarding extensibility. A lot of code needed to be copied
          in order to create a custom <code>TranslationService</code> that retrieves translations from a different location than the OSGi-ResourceBundle. To make it easier for users to implement a
          custom <code>TranslationService</code>, the API was modified. The method <code>getResourceString(String, ResourceBundle)</code> is moved from <code>BundleTranslationProvider</code> to <code>TranslationService</code>
          with protected visibility, as it contains the logic to retrieve and transform the translation key that is set in the application model. The default implementation <code>BundleTranslationProvider</code>
          is now using the <code>ResourceBundleHelper</code> in combination with the <code>ResourceBundleProvider</code>. This way the localization of the application model and the localization via
          new message extension are using the same mechanisms. As a small enhancement, this also enables the usage of dot separated keys for translating the application model.
          <p>
            As part of this work, the previously internal package
            <code>org.eclipse.e4.core.services.translation</code>
            has been released as API.
          </p>
        </td>
      </tr>

      <tr id="CSSIncludes">
        <td class="title">CSS includes</td>
        <td class="content">CSS files for Eclipse can now include other CSS files via the <code>@import url("platform:/plugin/Bundle-Symbolic-Name/path/file.extension");</code> statement. This
          allows easy reuse of existing style sheets.
        </td>
      </tr>

      <tr id="osgi-integration">
        <td class="title">Improved OSGi integration</td>
        <td class="content">Eclipse implementations can retrieve the OSGI <code>BundleContext</code> via an extended object supplier and the <code>@Inject @OSGiBundle</code> annotations.
        </td>
      </tr>

      <tr id="code-cleanup">
        <td class="title">Platform code improvements</td>
        <td class="content">During the last milestones, the platform team has invested in cleaning up the existing codes basis to simplify contributions by new and existing contributors. For more
          details, see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=420779">bug 420779</a>. During this update, several plug-ins have been upgraded to require Java 1.6 instead of Java 1.4 or
          Java 1.5.
        </td>
      </tr>

      <tr id="java7-filesystem-fragment">
        <td class="title">New filesystem fragment for Java 7 API</td>
        <td class="content">A new filesystem fragment supporting Java 7 file API has been added. The new fragment named <code>org.eclipse.core.filesystem.java7</code> allows to retrieve
          information about files such as permissions, link targets, etc. using Java 7 API rather than native code. This enables full filesystem capabilities on platforms with no native Eclipse
          filesystem fragment. There are three different types of filesystems supported:
          <ul>
            <li>DOS/Windows filesystems,</li>
            <li>POSIX compliant filesystems, and</li>
            <li>filesystems that are neither DOS/Windows nor POSIX compliant.</li>
          </ul> The new fragment will be loaded and used automatically when you run Eclipse with JRE 7 or newer and no native filesystem fragment applicable for your operating system can be found (such as
          Solaris, ARM, and s390).
        </td>
      </tr>


      <!-- ******************** Equinox ********************** -->
      <tr>
        <td id="Equinox" class="section" colspan="2"><h2>Equinox Changes</h2></td>
      </tr>

      <tr id="framework-update-1">
        <td class="title">Equinox OSGi framework update</td>
        <td class="content">The Equinox Framework implementation has been updated to implement the latest API OSGi R6 Framework specification. The OSGi R6 Core Framework specification (finalized
          in March 2014) contain enhancements in the following areas:
          <ul>
            <li>Introduction of Service Scopes to the OSGi Service Registry (<a href="https://github.com/osgi/design/tree/master/rfcs/rfc0195">RFC 195</a>)
            </li>
            <li>Improvements of Weaving Hooks (<a href="https://github.com/osgi/design/tree/master/rfcs/rfc0191">RFC 191</a>)
            </li>
            <li>Clarification of hooks on the system bundle (<a href="https://github.com/osgi/design/tree/master/rfcs/rfc0198">RFC 198</a>)
            </li>
            <li>Native environment namespace (<a href="https://github.com/osgi/design/tree/master/rfcs/rfc0188">RFC 188</a>)
            </li>
            <li>Data Transfer Objects (<a href="https://github.com/osgi/design/tree/master/rfcs/rfc0185">RFC 185</a>)
            </li>
            <li>Extension Bundle Activators (<a href="https://github.com/osgi/design/tree/master/rfcs/rfc0204">RFC 204</a>)
            </li>
            <li>Addition of FrameworkWiring.findProviders - no RFC</li>
          </ul> From an Equinox perspective these are considered incremental enhancements. A majority of the development effort during this release cycle is focused on refactoring and, in many cases,
          rewriting the core Equinox Framework implementation to be based on the OSGi generic dependency model.
          <p>
            For most consumers and developers this change should not be noticed. But, as documented in the <a href="http://wiki.eclipse.org/Equinox/Luna_Framework">wiki</a>, there are four main areas
            of concern that the community should be aware of:
          </p>
          <ul>
            <li>The Framework no longer uses the old Equinox resolver API org.eclipse.osgi.service.resolver internally to resolve bundles.</li>
            <li>All Equinox Framework specific hook implementations are broken and will need to migrate.</li>
            <li>Removal of old style plug-in support. A compatibility fragment is available to add the support back.</li>
            <li>Removal of PlatformAdmin Service Implementation. A compatibility fragment is available to add support back.</li>
          </ul>
        </td>
      </tr>
      <tr id="cm-update">
        <td class="title">Equinox Configuration Admin update</td>
        <td class="content">The Equinox Configuration Admin implementation has been updated to implement the OSGi Configuration Admin Service Specification version 1.5. The previous release of
          Equinox Configuration Admin implemented version 1.3.</td>
      </tr>

      <tr id="region-update-1">
        <td class="title">Equinox Regions update</td>
        <td class="content">The Equinox Regions implementation has been updated to take advantage of Extension Bundle Activators (<a href="https://github.com/osgi/design/tree/master/rfcs/rfc0204">RFC
            204</a>) coming in the OSGi R6 specification. This allows Equinox Regions to insert its isolation model before the framework is launched so that proper region behavior can be established
          before any bundles are loaded in the framework.
          <p>
            The Equinox Regions has added a new namespace for sharing bundle lifecycle operations between regions. In previous versions of Equinox regions the only way to share bundle lifecycle
            operations across different regions was to share complete bundles which also shared all capabilities provided by the bundle. Now it is possible to use the
            org.eclipse.equinox.allow.bundle.lifecycle namespace to share only the bundle lifecycle operations between different regions. (see <a
              href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=418224">bug 418224</a>)
          </p>
        </td>
      </tr>


      <tr id="metatype-update">
        <td class="title">Equinox Metatype update</td>
        <td class="content">The Equinox Metatype API has been updated to add the methods to get the minimum and maximum values of an attribute definition. (see <a
          href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=416640">bug 416640</a>)
        </td>
      </tr>

      <tr>
        <td class="title">Framework Trace Options</td>
        <td class="content">The new OSGi framework implementation now supports many of the previously supported trace options and adds a few more trace options to help debug issues with the
          framework. The following trace options are now implemented:
          <dl>
            <dt>debug/bundleTime</dt>
            <dd>Prints out timing information for bundle activation</dd>
            <dt>debug/cachedmanifest</dt>
            <dd>Debug the caching of bundle headers</dd>
            <dt>debug/location</dt>
            <dd>Prints out location service debug information</dd>
            <dt>debug/startlevel</dt>
            <dd>Prints out start level service debug information</dd>
            <dt>monitor/activation</dt>
            <dd>Monitor persistent bundle activation</dd>
            <dt>resolver/providers</dt>
            <dd>Prints out information about matching capabilities returned to the resolver and why any were filtered out</dd>
            <dt>resolver/hooks</dt>
            <dd>Prints out information about capabilities or resources that were filtered by resolver hooks</dd>
            <dt>resolver/uses</dt>
            <dd>Prints out information about uses constraint violations</dd>
            <dt>resolver/wiring</dt>
            <dd>Prints out wiring information after the resolve process completes</dd>
            <dt>resolver/report</dt>
            <dd>Prints out the resolution report information</dd>
            <dt>resolver</dt>
            <dd>enables all resolver trace options</dd>
          </dl>
        </td>
      </tr>


      <!-- *********************** SWT *********************** -->
      <tr>
        <td id="SWT" class="section" colspan="2"><h2>SWT Changes</h2></td>
      </tr>

      <tr id="swt-needs-1.5">
        <td class="title">SWT requires JRE 1.5</td>
        <td class="content">The SWT project has moved to Java 1.5 compliance level. SWT applications will now require JRE 1.5 or higher to run.</td>
      </tr>

      <tr id="timing-api">
        <td class="title">Added UI timing API</td>
        <td class="content">SWT has added two new events, <tt>SWT.PreEvent</tt> and <tt>SWT.PostEvent</tt>, which are sent before and after all events and async runnables. These events can be
          used to measure the time spent on processing any events. This can be useful for detecting slow event listeners. Because of its pervasive effect on all events, this listener should be used
          with <b>extreme</b> caution. For an example of how this can be used, take a look at the <a
          href="http://git.eclipse.org/c/platform/eclipse.platform.swt.git/tree/examples/org.eclipse.swt.examples.watchdog"> Watchdog</a> plugin in SWT examples.
        </td>
      </tr>

      <tr id="bidi-segments">
        <td class="title">BIDI segments support for Combo on Windows</td>
        <td class="content">The <code>Combo</code> widget now supports the same <code>SegmentListener</code> API as <code>Text</code>. This allows an application to specify segment boundaries and
          Unicode Control Characters to use in the segment boundaries.
          <p>
            <a href="http://git.eclipse.org/c/platform/eclipse.platform.swt.git/tree/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet332.java"> Snippet332</a> shows how to
            accomplish RTL override in a Combo.
          </p>
          <p>
            <img src="images/combo-bidi-segments.png" alt="" />
          </p>
          <p>
            JFace clients can use
            <code>BidiUtils#applyBidiProcessing(...)</code>
            to set pre-defined text types.
          </p>
        </td>
      </tr>

      <tr id="styled-text-api">
        <td class="title">Added new API in StyledText to get text selection state</td>
        <td class="content"><code>StyledText.isTextSelected()</code> can be used to quickly determine whether any text in the widget is selected or not.</td>
      </tr>

      <tr id="sleep-monitor-api">
        <td class="title">Added API for sleep monitoring</td>
        <td class="content">SWT has added two new events, <code>SWT.Sleep</code> and <code>SWT.Wakeup</code>, which are sent before the <code>Display</code> event loop goes into sleep and after
          it wakes up from sleep respectively. These events can e.g. be used to monitor the duration of sleep time in SWT applications.
        </td>
      </tr>

      <tr id="styledtext-bidi">
        <td class="title">Set text direction for the <code>StyledText</code> widget on Windows
        </td>
        <td class="content">The <code>StyledText</code> widget now supports setting the text direction via the <code>setTextDirection(int)</code> API on the Windows platform. The <code>setTextDirection
            (int)</code> and <code>getTextDirection ()</code> APIs are also added to <code>TextLayout</code> (implemented only on Windows currently).
        </td>
      </tr>

      <tr id="gtk3-as-default">
        <td class="title">GTK+ 3 used by default on Linux distributions (when installed and available)</td>
        <td class="content">Linux builds come with GTK+ 3 support enabled by default on GTK+ 3 versions prior to 3.10, versions newer than that will fall back to GTK+ 2.x by default for maximum
          stability. The GTK+ 3 support can however still be enabled either by setting the environment variable <code>SWT_GTK3</code> to <code>1</code> or by adding the launcher parameters <code>--launcher.GTK_version
            3</code>.
        </td>
      </tr>

      <tr id="swt-webkit">
        <td class="title">Experimental support for WebKit2 added to the SWT Browser</td>
        <td class="content">The SWT Browser now has preliminary support for WebKit2. To try it out, create a browser widget with style <code>SWT.WEBKIT</code>, and set the environment variable
          SWT_WEBKIT2 to 1. This is only supported with GTK+ 3.x; if GTK+ 3 is disabled the browser will fallback to WebKit1.
        </td>
      </tr>

      <tr id="windows-taskbar-grouping">
        <td class="title">SWT applications will not be grouped together in the Windows taskbar by default</td>
        <td class="content">SWT does not initialize the <b>AppUserModelID</b> (which is used by Windows for taskbar grouping) to "SWT" by default anymore. SWT applications which desire to be
          grouped together in the Windows taskbar should set an appropriate application name before creating the <code>Display</code> object as shown below: <pre>
		Display.setAppName("APP_NAME"); // APP_NAME will used as AppUserModelID
		Display display = new Display();
	  </pre>
        </td>
      </tr>



    </tbody>
    <!-- ****************** END OF N&N TABLE ****************** -->
  </table>

  <p align="center">
    <a href="eclipse-news-part2.php">Previous</a>&nbsp;&nbsp;&nbsp;&nbsp; <a href="eclipse-news-part4.php">Next</a>
  </p>

</body>
</html>