<!DOCTYPE html>
<html>

  <head>
	<meta charset="UTF-8">
	<title>OSBP - Documentation</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-32x18.png">

	<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>
		<!--/.nav-collapse -->
      </div>
    </div>
  </div>
  <!-- Navbar End -->
</header>

    <div id="page">
	<div class="container">
		<div class="row">
			<div class="span12">
				<h2>Documentation</h2>
				<p>
				The documentation for the OSBP Software Factory and project can be found on the <a href="https://wiki.eclipse.org/OSBP"  target="_blank">Eclipse Wiki</a>
				</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>
