<!DOCTYPE html>
<html>

 <head>
	<meta charset="UTF-8">
	<title>OSBP - Home</title>

	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta name="description"
		content="The website of Eclipse OSBP, an open-source no-code and low-code development platform for business and enterprise applications">
	<meta name="author" content="(c) Compex Systemhaus GmbH, Germnany">

	<!--  styles -->
	<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
	<!--[if lt IE 9]>
	  <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
	<![endif]-->

	<!-- Le fav and touch icons -->
	<link rel="shortcut icon" href="images/OS-logo-32x32.jpg">

	<link href="css/bootstrap.css" rel="stylesheet" type='text/css'>
	<link href="css/bootstrap-responsive.css" rel="stylesheet" type='text/css'>
	<link href="css/shield-responsive.css" rel="stylesheet" type='text/css'>
	<link href='css/fonts.css' rel='stylesheet' type='text/css'>
	<link href="css/prettyPhoto.css" rel="stylesheet" media="screen" type='text/css'>
	<link href="css/prettify.css" type="text/css" rel="stylesheet"/>
	<link href="css/style.css" rel="stylesheet" type='text/css'>

	<!-- cover flow -->
	<link href="css/coverflow.css" rel="stylesheet" type='text/css'>
	<!--[if lt IE 9]>
	  <link href="css/iebugs.css" rel="stylesheet" type='text/css'>
	<![endif]-->
</head>


<body>

  <!-- Google Tag Manager --  >
	<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-TGDS5S"
	height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
	<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
	new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
	j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
	'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
	})(window,document,'script','dataLayer','GTM-TGDS5S');</script>
  <!-- End Google Tag Manager -->

<header class="site-header">
  <!-- Navbar -->
  <div class="navbar navbar-fixed-top">
    <div class="navbar-inner">
      <div class="container">
        <a class="btn btn-navbar" data-toggle="collapse"
          data-target=".nav-collapse"> <span class="icon-bar"></span> <span
          class="icon-bar"></span> <span class="icon-bar"></span>
        </a> <a class="brand" href="index.html"></a>

		<div class="nav-collapse collapse" style="height: 0px;">
          <ul class="nav">
            <!--li ><a href="news.html">News</a></li-->
			<li ><a href="index.html">Home</a></li>
			<li ><a href="download.html">Download</a></li>
            <li ><a href="documentation.html">Documentation</a></li>
            <li ><a href="community.html">Community</a></li>
			<li ><a href="OS-bea-WG.html">OS.bea Working Group</a></li>
            <li class="dropdown">
              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Support &amp; Training<span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a href="http://www.osbee.org/services/" target="_blank">OS.bee</a></li>
                <li><a href="http://www.compex-commerce.com/en/services/" target="_blank">Compex</a></li>
              </ul>
            </li>
          </ul>
        </div>
        </div>
    </div>
  </div>
  <!-- Navbar End -->
</header>

<!--Container-->
<div id="header_wrapper">
  <div class="container image-slider">
    <div class="row">
      <h2>
        Model your business or enterprise application !
      </h2>
      <p>OSBP (open standard business platform) is an open source Software Factory combining no-code, low-code as well as traditional model driven and automated application development. Based on domain specific languages, it is made for users who want to implement by modelling tailor-made business applications the fastest and easiest possible way.
	     <br>OSBP is based on extensible frameworks, tools and runtime environments for building, deploying and managing software applications across their lifecycle.
		 <br> Would you like to know more?
        <br/><i><a href="OSBP-management-summary.html">Click here...</a></i></p>
    </div>
  </div>

  <!---------Slider --------------------------------------------------->
  <div class="row" style="text-align:center">
    <div>
      <div id="coverflow">
        <img class="intro-screenshot" style="display:none;" src="images/OSBP_concept_01.png"alt="OSBP concept">
        <img class="intro-screenshot" src="images/screen_01.png" alt="OSBP in Eclipse">
        <img class="intro-screenshot" style="display:none;" src="images/OSBP_concept_02.png" alt="OSBP application architecture">
      </div>
    </div>

  <div class="cta-section">
      <a href="download.html" style="margin:10px;" class="has-popover btn btn-primary btn-large pull_right">Download</a>
      <a href="documentation.html" style="margin:10px;" class="has-popover btn btn-success btn-large pull_right">Getting Started</a>
    </div>
  </div>
  <!---------End Slider --------------------------------------------------->
</div>




<div id="intro-quotes" class="intro-reference">
  <div class="container">
    <ul id="newsticker" class="newsticker">
   <!--   <li>Event: <a href="https://www.eclipsecon.org/france2018/" target="_blank" style="text-decoration: underline; color: #fff;">EclipseFrance 2018</a></li>   -->
    </ul>
  </div>
</div>



<div id="why-OSBP">
  <div class="container">
    <div class="row quick-overview">

      <div class="span12">
        <h1>Why OSBP?</h1>
      </div>

	  <div class="span4">
      	<h4><img src="images/red-round-bullet.png"/>
          Easy to learn</h4>
        <p>
          OSBP is designed to onboard you smoothly. With easy to learn no-code and low-code tools you can generate your first application in minutes.
        </p>
	  </div>

	  <div class="span4">
        <h4><img src="images/red-round-bullet.png"/>
         High quality</h4>
        <p>
		  OSBP is the result of joint effort of experienced software architects and developers.
		  The main driver behind this project is Compex, a software company with 30+ years of history and a solid track of creating ERP solutions with several 10.000 end users.

		</p>
      </div>

	  <div class="span4">
        <h4><img src="images/red-round-bullet.png"/>
          Multi device</h4>
        <p>
          Whether you are targeting end-user, citizen developers, domain experts or professionl software developers, you will be able to provide all necessary tools to implement the required application on any device.
        </p>
      </div>

	  <div class="span4">
        <h4><img src="images/red-round-bullet.png"/>
          Performance</h4>
        <p>
          We know that tools need to be fast in order to be helpful. We believe that there no faster method to develop applications than with combining no-code, low-code and traditional development technics.
        </p>
      </div>

	  <div class="span4">
        <h4><img src="images/red-round-bullet.png"/>
          Target any platform</h4>
        <p>By default we target Java, but as OSBP mainly relies on Xtext, you can target any platform or artifact.

        </p>
      </div>

	  <div class="span4">
        <h4><img src="images/red-round-bullet.png"/>
          Easy to use applications</h4>
        <p>
          Automaticaly create flexible, ergonomic and intuitive user interfaces without coding for full user satisfaction.
        </p>
      </div>

	  <div class="span12">
          <p><br/><h2>Have a look on the list of technology partners. The names speak for themselves.<i><a href="Technology-partners.html"> Click here...</a></i></h2></p>
      </div>

    </div>
  </div>
</div>

 <!------------------  technology partners ??????
<div id="intro-companies" class="intro-reference">
  <div class="container">
    <ul class="companies">
      <li><img src="images/OSBP_concept_01.png" alt="Google"/>
       <img src="images/Siemens-logo.svg" alt="Siemens"/>
        <img src="images/logo_morgan_stanley.svg" alt="Morgan Stanley"/></li>

      <li>
        <img src="images/ESA_logo.svg" alt="ESA"/>
        <img src="images/Bosch-Logo.svg" alt="Bosch"/>
        <img src="images/SAIC_Logo.svg" alt="SAIC"/>
        <img src="images/SAP-Logo.svg" alt="SAP"/>
	  </li>

    </ul>
  </div>
</div>
	------>

<div id="feature-overview">
  <div class="container">
    <div class="row quick-overview">
      <div class="span12">
        <h1>Features</h1>
      </div>
      <div class="span4">
        <h4><img src="images/red-round-bullet.png"/>
          Highly customizable</h4>
        <p>Not only applications shall be customizable but also development environments. Even better, application development
		should be independent of specific frameworks. Therefore OSBP models rely on domain specific languages (DSL) to
		uncouple dependencies between business and IT know-how. All OSBP DSL
        allow to insert custom behavior for every single feature by replacing the default implementation.
        </p>
      </div>

	  <div class="span4">
        <h4><img src="images/red-round-bullet.png"/>
          Unique full stack DSL architecture</h4>
        <p>
		We believe that business models shall not be stashed in plain source code.
		Instead, business models using modeling techniques persisted in domain specific languages (DSL) will result
		in short implementation times, sustainable and easy improvable business applications dramatically diminishing software related costs.
		Using OSBP, developers and architects can take advantage of built-in 30+ frameworks, covering practically
		all different aspects of engineering business or enterprise applications.
		</p>
      </div>

      <div class="span4">
        <h4><img src="images/red-round-bullet.png"/>
          Sophisticated Application Layout</h4>
        <p>
		OSBP delivers typical visualization and interaction components that build a graphical user interface (GUI), including dialogs,
		tables (and grids), reports, charts, topology maps, business processes, and organograms.  All these features can be designed
		via distinct view model DSL. A view, once defined, can be reused on different parts.
		The structure of an OSBP application relies on the Eclipse E4 application model, which provides a very flexible way to
		determine how the application frontend can be subdivided. In other words, end user applications build with OSBP
		benefit from the well-known Eclipse IDE ergonomics.
		</p>
      </div>

      <div class="span4">
        <h4><img src="images/red-round-bullet.png"/>
          Sevices</h4>
        <p>The service layer defines a common set of application operations available to many kind of client and it coordinates
		an application's response in each operation . All services follow the Declarative Service specification and implement
		the E4 Context Function if related to the UI. Any service can therefore be injected into your customized code to
		benefit from its functionality, also Web Services are supported. Services comprise I18N support, object metadata,
		event and message broadcasting, units of measurement, dialog layouting and focusing strategies, and many more.
		</p>
      </div>
      <div class="span4">
        <h4><img src="images/red-round-bullet.png"/>
          Data persistence</h4>
        <p>Business applications are always data centric. It may be a relational database or a non-SQL database,
		a web-service or just files. OSBP is not tied to a specific technology. You can easily mix various database
		products in a single application. The OS.bee persistence includes features like entity models, data types and data transfer
		objects (DTO), supplemented by persistence service, OSGi implementations, as well as mock data generator.
		</p>
      </div>
      <div class="span4">
        <h4><img src="images/red-round-bullet.png"/>
          Integration</h4>
        <p>With integration features OSBP based applications can be embedded into environments of your choice.
		Data interchange allows for a real-time integration with any system and delivers a lightweight platform
		on which you can build your own custom processing logic for a wide range of data formats.
		Transform data regardless of formats and implement ETL features.
		</p>
      </div>
    </div>
  </div>
</div>

<footer class="site-footer">
  <div id="extra">
    <div class="inner">
      <div class="container">
        <div class="row">
          <div class="span6">
            <h3 class="footer-links-header">Quick Links</h3>
            <ul class="footer-links clearfix">
              <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a><br>
              <a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a><br>
              <a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a><br>
              <a href="http://www.eclipse.org/legal/">Legal</a></li>
            </ul>
          </div>
		  <div class="span6">
            <h3 class="footer-links-header">&nbsp;  </h3>

			<ul class="footer-links clearfix">
              <li><a href="http://www.eclipse.org">Eclipse Home</a><br>
              <a href="http://marketplace.eclipse.org/">Market Place</a><br>
              <a href="http://live.eclipse.org/">Eclipse Live</a><br>
              <a href="http://www.planeteclipse.org/">Eclipse Planet</a></li>
            </ul>

          </div>
       </div>
      </div>
    </div>
  </div>

  <a href="#" class="scrollup fadeOutRight animated" style="display: none;">ScrollUp</a>

  <!-- Le javascript
      ==================================================
      Placed at the end of the document so the pages load faster -->

  <script src="js/jquery-1.11.3.min.js"></script>
  <script src="js/bootstrap.min.js"></script>
  <script src="js/jquery.easing.1.3.js" type="text/javascript"></script>
  <script src="js/jquery.prettyPhoto.js" type="text/javascript"></script>
  <script src="js/twitter.js" type="text/javascript"></script>
  <script src="js/prettify.js" type="text/javascript"></script>
  <script src="js/lang-xtend.js" type="text/javascript"></script>
  <script src="js/lang-common.js" type="text/javascript"></script>
  <script src="js/custom.js" type="text/javascript"></script>
  <script src="https://apis.google.com/js/platform.js" async defer></script>

  <!--script type="text/javascript">
    var _gaq = _gaq || [];
      _gaq.push([ '_setAccount', 'UA-2429174-3' ]);
    _gaq.push([ '_trackPageview' ]);
    (function() {
      var ga = document.createElement('script');
      ga.type = 'text/javascript';
      ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl'
          : 'http://www')
          + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0];
      s.parentNode.insertBefore(ga, s);
    })();
  </script-->

  <script src="js/coverflow.min.js" type="text/javascript"></script>
  <script>
      $(function() {
        $('#coverflow').coverflow({
          active : 1,
          visibleAside: 2,
          overlap : 0.5,
          scale : 0.9,
          angle : 20,
          trigger : {
            "itemfocus" : true,
            "swipe" : true,
            "mousewheel" : false
          }
        });
        $('#coverflow :hidden').toggle();
        $(window).resize(function() {
          $('#coverflow').coverflow();
        });
      });

  </script>
</footer>


  </body>

</html>
