<!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="Technology-partners.html">Frameworks &amp; Techpartners</a></li>
            <li ><a href="use-cases.html">Gallery</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<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 application !
      </h2>
		<p>OSBP (open standard business platform) is the community version of OS.bee, an open source software development environment combining no-code, 
		low-code as well as traditional model driven and automated application development. 
		Based on domain specific languages, it is made for developers who want to implement by modelling 
		tailor-made business, enterprise or any other application the fastest and easiest possible way.
	     
		<br>OSBP is based on best in class extensible and exchangeable frameworks, Eclipse projects, tools and runtime environments for building, 
		deploying and managing software applications across their lifecycle. In short: OSBP ist the first and only full stack no-code low-code 
		software development environment in the Eclipse Ecosystem. 
		 
		<br>Need a fullfledge 100% open source software development environment? 
        <br/><i><a href="OSBP-management-summary.html">Click here</a></i> for a summary.</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>




<!-----  Anfang grauer Balken
<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>

Ende grauer Balken      --->



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

		  <div class="span12">
          <p><br/><h2>Access the power of a combination of best in class frameworks via a unique DSL-architecture.
		  <br><center><i><a href="Technology-partners.html"> Click here...</a></i></center></h2></p>
		  </div>
	
	
      <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>

<!--- Techpartner---->

    </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>
