<?php

  include( $_SERVER['DOCUMENT_ROOT'] . "/rap/_projectCommon.php" );

  $title = "Remote Application Platform (RAP)";
  $navPosition = array( "home", "index" );
  printHeader( $title, $navPosition );

?>

<div id="slideshow">
  <h1>
    Enabling modular business apps<br/>
    for desktop, browser and mobile
  </h1>
  <p>
    RAP provides a powerful widget toolkit and integrates well with proven technologies
    such as OSGi and JEE.
    You can write your application entirely in Java, re-use code and benefit from first-class IDE
    tools.
  </p>
  <div id="heading-eclipse-icon">
    <a href="http://eclipse.org/"><img
        src="/rap/images/logos/eclipse.png"
        alt="Eclipse.org icon" /></a>
  </div>
</div>

<div id="features">
  <div class="feature" id="ui-kit">
    <div class="icon"></div>
    <div class="feature-description">
      <h2>Widget Toolkit</h2>
      <p>
        RAP lets you develop modern web UIs with a real widget toolkit with
        <a href="http://eclipse.org/swt/" title="Standard Widget Toolkit">SWT</a> API,
        which includes powerful features like drag &amp; drop, loading data on demand, inline editing,
        and drawing.
      </p><p>
        Using the <a href="http://wiki.eclipse.org/JFace">JFace</a> APIs,
        it makes accessing complex data models incredibly simple.
        <br/><a class="popup-activate" href="">learn more...</a>
      </p>
    </div>
  </div>

  <div class="feature" id="cross-browser">
    <div class="icon"></div>
    <div class="feature-description">
      <h2>Cross Platform</h2>
      <p>
        RAP runs in all relevant web browsers, without any add-ons required.
        Many advanced features like gradients are rendered even in browsers without CSS3 support.
      </p><p>
        It's built on an open protocol, so other clients can be connected.
        <br/><a class="popup-activate" href="">learn more...</a>
      </p>
    </div>
  </div>

  <div class="feature" id="integration">
    <div class="icon"></div>
    <div class="feature-description">
      <h2>Integration</h2>
      <p>
        RAP uses standard servlet technology and runs on any JEE servlet container.
        It integrates well with OSGi, but can also be used stand-alone.
      </p><p>
        <!--
        Various Eclipse technologies build on RAP: Riena, Scout, Jubula.
        -->
        For high-availability applications, load balancing and transparent session failover is
        supported.
        <br/><a class="popup-activate" href="">learn more...</a>
      </p>
    </div>
  </div>

  <div class="stop" ></div>

  <div class="feature" id="tooling">
    <div class="icon"></div>
    <div class="feature-description">
      <h2>Tool Support</h2>
      <p>
        RAP applications are written in Java, and you have the full power of Eclipse's development
        tools at hand.
      </p><p>
        This includes a first-class UI designer and an acceptance testing tool suite available
        together with RAP 1.5.
        <br/><a class="popup-activate" href="">learn more...</a>
      </p>
    </div>
  </div>

  <div class="feature" id="clustering">
    <div class="icon"></div>
    <div class="feature-description">
      <h2>Single Sourcing</h2>
      <p>
        With RAP, you can re-use your code for different target platforms.
        Even code that has been written for Eclipse RCP can run in a web browser.
      </p><p>
        Existing Eclipse plugins such as EMF, BIRT, or JGit can easily be included in RAP apps.
        <br/><a class="popup-activate" href="">learn more...</a>
      </p>
    </div>
  </div>

  <div class="feature" id="open-source">
    <div class="icon"></div>
    <div class="feature-description">
      <h2>Open Source</h2>
      <p>
        As an Eclipse project, RAP is published under the
        <a href="http://eclipse.org/legal/epl-v10.html" title="Eclipse Public License">EPL</a>
        and benefits from the Eclipse Foundation's high standards of IP management.
      </p><p>
        RAP is part of the annual Eclipse release and always delivers on time.
        <br/><a class="popup-activate" href="">learn more...</a>
      </p>
    </div>
  </div>
  <div class="stop"></div>
</div>

<div class="popup-content" data-for="ui-kit">
  <h2>Widget Toolkit</h2>
  <p>
    With RAP, you don't create UIs with HTML and browser technologies, but with the Java API of SWT,
    the widget toolkit used in Eclipse.
    The RAP Widget Toolkit (RWT) provides a comprehensive set of powerful SWT widgets, also including
    <a href="http://www.eclipse.org/articles/printable.php?file=Article-Understanding-Layouts/index.html">layout managers</a>
    and event listeners.
    It supports advanced features such as
    <a href="http://rap.eclipsesource.com/rapdemo/examples#drag-and-drop">Drag and Drop</a> and
    <a href="http://rap.eclipsesource.com/rapdemo/examples#canvas">drawing</a>,
    and adds several web-specific features not found in SWT, like
    <a href="http://rap.eclipsesource.com/rapdemo/examples#rich-label">Markup Support</a>.
    With the JFace viewer framework, applications can easily provide access to millions of data
    entries through the use of virtual rendering and lazy loading.
    RWT can be freely styled using a CSS-based
    <a href="/rap/developers-guide/devguide.php?topic=theming.html">Theming API</a>.
  </p>
  <ul>
    <li>
      See the widgets in action:
      <a href="http://rap.eclipsesource.com/rapdemo/examples">RAP Examples Demo</a>
    </li>
    <li>
      SWT is easy to learn and nearly identical to RWT:
      <a href="http://www.eclipse.org/swt/docs.php">SWT Documentation</a>
    </li>
    <li>
      If you are already familiar with SWT, read about
      <a href="/rap/developers-guide/devguide.php?topic=rwt.html">Differences between
      RWT and SWT</a>
    </li>
    <li>
     Need more widgets? A list of known Add-Ons targeted specifically at RAP can be found in the
     <a href="http://wiki.eclipse.org/RAP/Add-Ons">RAP Wiki</a> <!-- Nebula? -->
    </li>
    <li>
     Widget behavior can be enhanced using client-side event handlers:
     <a href="http://wiki.eclipse.org/RAP/Incubator/ClientScripting">RAP ClientScripting</a>
    </li>
  </ul>
</div>

<div class="popup-content" data-for="cross-browser">
  <h2>Cross Platform</h2>
  <p>
    The default RAP Web client supports these browsers:
  </p>
  <ul>
    <li>Internet Explorer 9+</li>
    <li>Google Chrome 29+</li>
    <li>Firefox 23+</li>
    <li>Safari 6+</li>
    <li>Opera 15+</li>
    <li>iOs 6+</li>
    <li>Android 4 (Limited)</li>
  </ul>
  <p>
    No browser plug-ins are required by the default client, only JavaScript needs to be enabled.
    However, custom widgets are free to build on any third-party API.
    Other browser may work if based on a Trident, Gecko or Webkit engine.
    Support on mobile browsers has
    <a href ="http://wiki.eclipse.org/RAP/Mobile_Browser">some limitations</a>.
  </p>
  <p>
    Other platforms can be supported by alternative RAP clients connecting to RAP's
    <a href="http://wiki.eclipse.org/RAP/Protocol">open protocol</a>.
    As an example, native clients for mobile platforms are available as a commercial add-on.
  </p>
</div>

<div class="popup-content" data-for="integration">
  <h2>Integration</h2>
  <p>
    Making it possible to integrate RAP with other Java technologies is one of our main objectives.
    We're doing so by making RAP compatible with JEE and OSGi and by limiting
    dependencies to the necessary minimum.
    A partial list of compatible technologies:
  </p>
  <ul>
    <li>
      RAP applications can be deployed directly as OSGi bundles on
      <a href="http://wiki.eclipse.org/RAP/Running_RAP_on_virgo">Virgo</a>,
      <a href="http://wiki.eclipse.org/RAP/Running_RAP_on_WebSphere">WebSphere</a>
      and many other application servers.
    </li>
    <li>
      If you prefer, it can also be
      <a href="/rap/developers-guide/devguide.php?topic=deployment.html">deployed</a>
      as <code>.war</code> file in a traditional servlet container like Tomcat.
    </li>
    <li>
      The
      <a href="/rap/developers-guide/devguide.php?topic=application-setup.html#compat">JEE compatibility mode</a>
      in RAP makes it possible to use
      <a href="http://wiki.eclipse.org/RAP/RWT_Cluster">clustering</a>.
    </li>
    <li>
      <a href="http://wiki.eclipse.org/RAP/Equinox_Security_Integration">Equinox Security Integration</a>
      ensures your data is safe at all times.
    </li>
  </ul>
</div>

<div class="popup-content" data-for="tooling">
  <h2>Tool Support</h2>
  <p>
    Many of the Eclipse tools designed for Java or SWT development can be used with RAP.
  </p>
  <ul>
    <li>
      You can use the full power of the
      <a href="http://www.eclipse.org/jdt/">Java Development Tools</a> (JDT)
      including automated refactorings,
      <a href="http://www.vogella.com/articles/EclipseDebugging/article.html">debugger</a>,
      <a href="http://www.vogella.com/articles/JUnit/article.html">test runner</a>
      etc.
    </li>
    <li>
      The Plug-in Development Environment (PDE) assists with the creation of OSGi bundles,
      dependency management, maintaining a target platform, etc.
    </li>
    <li>
      The <a href="http://www.eclipse.org/windowbuilder/">Eclipse WindowBuilder</a> provides an
      excellent UI designer for SWT.
    </li>
    <li>
      WAR files can be created using the WAR product tools from the Libra project.
    </li>
    <li>
      Many more great add-ons are available for Java development in Eclipse such as the
      <a href="http://www.eclemma.org/">EclEmma code coverage integration</a> or
      <a href="http://findbugs.sourceforge.net/downloads.html">Findbugs for static code analysis</a>....
    </li>
  </ul>
</div>

<div class="popup-content" data-for="clustering">
  <h2>Single Sourcing</h2>
  <p>
    RAP allows you to address different platforms with a shared code base.
    Applications can be developed for the desktop, the web browser, and even mobile clients without
    duplicating code.
    Due to RAP's high compatibility with the Eclipse UI technologies, a lot of existing code
    targeted at the desktop can be re-used for your web application with minimal changes.
    And besides the code, you can also re-use your developer tools and skills.
  </p>
  <p>
    Typical scenarios are:
  </p>
  <ul>
    <li>
      Porting an existing SWT/RCP application to the web.
    </li>
    <li>
      Developing a new application that can run on the desktop and in the browser.
    </li>
    <li>
      Re-using existing libraries developed for previous applications.
    </li>
    <li>
      Utilize RCP-compatible open source libraries and frameworks. Examples:
      <ul>
        <li>
          The <a href="http://eclipse.org/modeling/emf/">Eclipse Modeling Framework</a>
          can
          <a href="http://wiki.eclipse.org/RAP/EMF_Integration">create RAP UIs</a>.
        </li>
        <li>
          Use <a href="http://eclipse.org/birt/">Eclipse BIRT</a> (with
          <a href="http://wiki.eclipse.org/RAP/BIRT_Integration">some adjustments</a>)
          to create charts in RAP.
        </li>
        <li>
          <a href="/rap/users/#riena">Eclipse Riena</a>
          is an application framework which can be used on top of RAP.
        </li>
        <li>
          <a href="/rap/users/#scout">Eclipse Scout</a>
          can generate RCP and RAP applications
        </li>
      </ul>
    </li>
  </ul>
</div>

<div class="popup-content" data-for="open-source">
  <h2>Open Source</h2>
  <p>
    All code can be freely used in open source projects and in
    <a href="/rap/users/">commercial applications</a>.
    On the <a href="/rap/downloads/">downloads page</a>, you always get the latest versions.
    We also offer public nightly builds to make all changes available immediately.
    You can check out the source code directly from the <a href="/rap/source/">git repository</a>
    or even fork us on <a href="https://github.com/eclipse/rap">github</a>.
  </p>
  <p>
    If you require help beyond the <a href="/rap/developers-guide/">RAP Developer's Guide</a>,
    there is an active community maintaining a
    <a href="http://www.eclipse.org/forums/index.php?t=thread&amp;frm_id=34">Newsgroup</a>,
    a <a href="http://wiki.eclipse.org/RAP">Wiki</a> and the <a href="/rap/incubator/">Incubator project</a>.
    Bugs can be reported in the <a href="/rap/bugs/">RAP Bugzilla</a> and will be  processed
    transparently.
    Professional services are also <a href ="/rap/support/professional-services/">available</a>.
  </p>
</div>
<?php
  includeSidebar( "rap-feed-for-home.php" );
  printFooter();
?>
