<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <meta name="author" content="Aurelien Didier for Artal Technologies">
    
    <meta name="keywords" content="" />
    <meta name="generator" content="Hugo 0.30.2" />
    <link href="//fonts.googleapis.com/css?family=Open+Sans:400,700,300,600,100" rel="stylesheet" type="text/css">
    <link rel="shortcut icon" href="https://polarsys.org/time4sys/public/images/favicon.ico"/>
    <title>Time4Sys</title>
    <meta property="og:title" content="" />
    <meta property="og:description" content="The Time4Sys project" />
    <meta property="og:image" content="https://polarsys.org/time4sys/images/logo.png" />
    <link rel="stylesheet" href="https://polarsys.org/time4sys/public/css/solstice.css">
    
    
    
  </head>
  <body class="" id="body_solstice">
    <a class="sr-only" href="#content">Skip to main content</a>
    <header role="banner">
      <div class="container">
        <div id="row-logo-search">
          <div id="header-left" class="col-sm-14 col-md-16 col-lg-19">
            <div class="row">
              <div class="hidden-xs">
                <a href="https://polarsys.org/time4sys/"><img src="https://polarsys.org/time4sys/images/logo.png" class="logo-eclipse-default"/></a>
              </div>
              <div id="main-menu" class="navbar row yamm">
                <div id="navbar-collapse-1" class="navbar-collapse collapse">
                  <ul class="nav navbar-nav">
                    


<li>
  <a class="" href="/time4sys/">
  
  Home
  </a>
  
</li>


<li>
  <a class="" href="/time4sys/documentation/">
  
  Documentation
  </a>
  
</li>


<li>
  <a class="" href="/time4sys/community/">
  
  Community
  </a>
  
</li>


<li>
  <a class="" href="/time4sys/videos/">
  
  Videos
  </a>
  
</li>


<li>
  <a class="" href="/time4sys/about/">
  
  About
  </a>
  
</li>

<li class="dropdown">
  <a data-toggle="dropdown" class="dropdown-toggle">More @ Eclipse<b class="caret"></b></a>
  <ul class="dropdown-menu">
    <li>
      
      <div class="yamm-content">
        <div class="row">
          <ul class="col-sm-8 list-unstyled">
            <li>
              <p><strong>Community</strong></p>
            </li>
            <li><a href="http://marketplace.eclipse.org">Marketplace</a></li>
            <li><a href="http://events.eclipse.org">Events</a></li>
            <li><a href="http://www.planeteclipse.org/">Planet Eclipse</a></li>
            <li><a href="https://eclipse.org/community/eclipse_newsletter/">Newsletter</a></li>
            <li><a href="https://www.youtube.com/user/EclipseFdn">Videos</a></li>
          </ul>
          <ul class="col-sm-8 list-unstyled">
            <li>
              <p><strong>Participate</strong></p>
            </li>
            <li><a href="https://bugs.eclipse.org/bugs/">Report a Bug</a></li>
            <li><a href="https://eclipse.org/forums/">Forums</a></li>
            <li><a href="https://eclipse.org/mail/">Mailing Lists</a></li>
            <li><a href="https://wiki.eclipse.org/">Wiki</a></li>
            <li><a href="https://wiki.eclipse.org/IRC">IRC</a></li>
            <li><a href="https://eclipse.org/contribute/">How to Contribute</a></li>
          </ul>
          <ul class="col-sm-8 list-unstyled">
            <li>
              <p><strong>Working Groups</strong></p>
            </li>
            <li><a href="http://wiki.eclipse.org/Auto_IWG">Automotive</a></li>
            <li><a href="http://iot.eclipse.org">Internet of Things</a></li>
            <li><a href="http://locationtech.org">LocationTech</a></li>
            <li><a href="http://lts.eclipse.org">Long-Term Support</a></li>
            <li><a href="http://polarsys.org">PolarSys</a></li>
            <li><a href="http://science.eclipse.org">Science</a></li>
            <li><a href="http://www.openmdm.org">OpenMDM</a></li>
          </ul>
        </div>
      </div>
    </li>
  </ul>
</li>


                  </ul>
                </div>
                <div class="navbar-header">
                  <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapse-1">
                  <span class="sr-only">Toggle navigation</span>
                  <span class="icon-bar"></span>
                  <span class="icon-bar"></span>
                  <span class="icon-bar"></span>
                  <span class="icon-bar"></span>
                  </button>
                  <a href="https://polarsys.org/time4sys/" class="navbar-brand visible-xs"><img src="https://polarsys.org/time4sys/public/images/logo/APP4MCLogo.png" alt="APP4MC logo" width="174" class="logo-eclipse-default"/></a>
                </div>
              </div>
            </div>
          </div>
          <div id="header-right" class="form-inline col-sm-10 col-md-8 col-lg-5 hidden-print hidden-xs">
            <div id="header-right-container">
              <div id="custom-search-form" class="reset-box-sizing">
  <script>
    (function() {
      var cx = '011805775785170369411:15ipmpflp-0';
      var gcse = document.createElement('script');
      gcse.type = 'text/javascript';
      gcse.async = true;
      gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
          '//cse.google.com/cse.js?cx=' + cx;
      var s = document.getElementsByTagName('script')[0];
      s.parentNode.insertBefore(gcse, s);
    })();
  </script>
  <gcse:searchbox-only></gcse:searchbox-only>
</div>

              
              <a id="btn-call-for-action" href="https://polarsys.org/time4sys//downloads" class="btn btn-huge btn-warning"><i class="fa fa-download"></i> Download</a>
            </div>
          </div>
        </div>
      </div>
    </header>
    <section id="breadcrumb" class="defaut-breadcrumbs hidden-print">
  <div class="container">
    <h3 class="sr-only">Breadcrumbs</h3>
    <div class="col-xs-24">
      
      
      <ol class="breadcrumb">
        <li><a href="/">home</a></li>
        <li><a href="https://polarsys.org/time4sys/">Time4Sys</a></li>
        
        
        
        <li><a href='https://polarsys.org/time4sys/gettingstarted'>gettingstarted</a></li>
        
        
        
        
        
        
      </ol>
    </div>
  </div>
</section>

    <main role="main" class=" no-promo">
    <div class="container background-image-none" id="novaContent">
    



<h1>Getting Started with OpenCert</h1>



<hr />

<p>This section guides the end-user through the use of OpenCert.</p>

<hr />

<h2 id="installation">Installation</h2>

<p>It must be noted that the pre-existing OpenCert tools are designed to follow client-server architecture approach:</p>

<ul>
<li>OpenCert server - installed in a central host machine</li>
<li>One or many OpenCert clients - each of which installed on specific user machines</li>
</ul>

<p>This installation relates to a standalone version of OpenCert, including Papyrus/CHESS plugins.</p>

<p>OpenCert can also use the Eclipse Process Framework (EPF) toolset. That can be downloaded in a separate Eclipse standalone version (<a href="http://www.eclipse.org/epf/downloads/downloads.php">http://www.eclipse.org/epf/downloads/downloads.php</a>). We plan to integrate the whole toolsets in the same standalone version in future releases.</p>

<h3 id="client-bundle-download">Client bundle download</h3>

<p>It is required to have installed (minimum) <strong>Java Environment 1.8</strong>.</p>

<p>To install the OpenCert platform client, download it from the <a href="../downloads/">Downloads</a> page for Windows 64 bits and uncompress it into your hard disk.</p>

<h3 id="client-configuration">Client configuration</h3>

<p>To use the platform execute the eclipse.exe file and introduce a select a folder that will be used as workspace.</p>

<p><img src="../images/gettingstarted/Fig1.png" class="img-responsive" alt="Figure 1 - Select the workspace menu"><br /></p>

<p>The first step after the installation process is to configure the connection settings with the CDO repository where all the models generated using the platform will be stored. This information must be introduced in the Model Repository Preference page inside the OpenCert category. Go to menu Window → Preferences to open this window.</p>

<p><img src="../images/gettingstarted/Fig2.png" class="img-responsive" alt="Figure 2 - Preference menu"><br /></p>

<p><img src="../images/gettingstarted/Fig3.png" class="img-responsive" alt="Figure 3 - Model Repository Configuration Page linked to a common repository"><br /></p>

<p>The information to introduce is:</p>

<ul>
<li><strong>Server IP:</strong> The IP of the centralized CDO Server (<a href="http://opencert.tecnalia.com">opencert.tecnalia.com</a>).</li>
<li><strong>Server Port:</strong> The port used by the running CDO Server. Take into account that if the client is behind a proxy, the port 2036 shall be open, otherwise the communication will fail.</li>
<li><strong>Repository name:</strong> The name of the repository where all the date will be stored (read only).</li>
<li><strong>Protocol:</strong> The protocol used to connect to the CDO Server.</li>
</ul>

<p>Disable the Repository timeout to avoid the automatic closing of the connection with the server for inactivity using the menu Window → Preference as shown in the image below.</p>

<p><img src="../images/gettingstarted/Fig4.png" class="img-responsive" alt="Figure 4 - Disable the Repository timeout time"><br /></p>

<p>After introducing this data the Opencert Perspective can be used to connect to the server and view the data of the repository configured. To open it, go to menu Window→ Perspective → Open Perspective→ Other.</p>

<p><img src="../images/gettingstarted/Fig5.png" class="img-responsive" alt="Figure 5 - Opencert Perspective"><br /></p>

<p>If the provided connection settings with the repository are incorrect or the server is not running, this view will display the error in the screenshot below instead of the contents of the repository. To solve it, check the server is running (using the page <a href="http://opencert.tecnalia.com:8080">http://opencert.tecnalia.com:8080</a>) and the configuration settings are correct, ensure the communication ports (2036 and 8080) are open, close the Repository Explorer view and open it again (Window→Show View→Other→Opencert→Repository Explorer).</p>

<p><img src="../images/gettingstarted/Fig6.png" class="img-responsive" alt="Figure 6 - Opencert Perspective"></p>

<h3 id="1-3-deleting-repository-contents">1.3 Deleting Repository contents</h3>

<p>To delete a folder and its contents, right click over it and left click the “Delete” menu.</p>

<p><img src="../images/gettingstarted/Fig7.png" class="img-responsive" alt="Figure 7 - Delete folder menu"><br /></p>

<p>To delete a model, right click over it and left click the “Delete“menu.</p>

<p><img src="../images/gettingstarted/Fig8.png" class="img-responsive" alt="Figure 8 - Delete model menu"></p>




</div>
</main>

<p id="back-to-top">
  <a class="visible-xs" href="#top">Back to the top</a>
</p>
<footer role="contentinfo" id="solstice-footer">
  <div class="container">
    <div class="row">
      <section id="footer-eclipse-foundation" class="col-xs-offset-1 col-xs-11 col-sm-7 col-md-6 col-md-offset-0 hidden-print">
        <h2 class="section-title">Eclipse Foundation</h2>
        <ul class="nav">
          <li><a href="https://eclipse.org/org/">About us</a></li>
          <li><a href="https://eclipse.org/org/foundation/contact.php">Contact Us</a></li>
          <li><a href="https://eclipse.org/donate">Donate</a></li>
          <li><a href="https://eclipse.org/org/documents/">Governance</a></li>
          <li><a href="https://eclipse.org/artwork/">Logo and Artwork</a></li>
          <li><a href="https://eclipse.org/org/foundation/directors.php">Board of Directors</a></li>
        </ul>
      </section>
      <section id="footer-legal" class="col-xs-offset-1 col-xs-11 col-sm-7 col-md-6 col-md-offset-0 hidden-print ">
        <h2 class="section-title">Legal</h2>
        <ul class="nav">
          <li><a href="https://eclipse.org/legal/privacy.php">Privacy Policy</a></li>
          <li><a href="https://eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
          <li><a href="https://eclipse.org/legal/copyright.php">Copyright Agent</a></li>
          <li><a href="https://eclipse.org/org/documents/epl-v10.php">Eclipse Public License </a></li>
          <li><a href="https://eclipse.org/legal/">Legal Resources </a></li>
        </ul>
      </section>
      <section id="footer-useful-links" class="col-xs-offset-1 col-xs-11 col-sm-7 col-md-6 col-md-offset-0 hidden-print">
        <h2 class="section-title">Useful Links</h2>
        <ul class="nav">
          <li><a href="https://bugs.eclipse.org/bugs/">Report a Bug</a></li>
          <li><a href="//help.eclipse.org/">Documentation</a></li>
          <li><a href="https://eclipse.org/contribute/">How to Contribute</a></li>
          <li><a href="https://eclipse.org/mail/">Mailing Lists</a></li>
          <li><a href="https://eclipse.org/forums/">Forums</a></li>
          <li><a href="//marketplace.eclipse.org">Marketplace</a></li>
        </ul>
      </section>
      <section id="footer-other" class="col-xs-offset-1 col-xs-11 col-sm-7 col-md-6 col-md-offset-0 hidden-print">
        <h2 class="section-title">Other</h2>
        <ul class="nav">
          <li><a href="https://eclipse.org/ide/">IDE and Tools</a></li>
          <li><a href="https://eclipse.org/projects">Community of Projects</a></li>
          <li><a href="https://eclipse.org/org/workinggroups/">Working Groups</a></li>
        </ul>
        <ul class="list-inline social-media">
          <li><a href="https://twitter.com/EclipseFdn"><i class="fa fa-twitter-square"></i></a></li>
          <li><a href="https://plus.google.com/+Eclipse"><i class="fa fa-google-plus-square"></i></a></li>
          <li><a href="https://www.facebook.com/eclipse.org"><i class="fa fa-facebook-square"></i> </a></li>
          <li><a href="https://www.youtube.com/user/EclipseFdn"><i class="fa fa-youtube-square"></i></a></li>
        </ul>
      </section>
      <div id="copyright"  class="col-xs-offset-1 col-sm-14 col-md-24 col-md-offset-0">
        <div>
          <span class="hidden-print"><img src="https://polarsys.org/time4sys/public/images/logo/eclipse-logo-bw-800x188.png" alt="Eclipse.org black and white logo" width="166" height="39" id="logo-eclipse-white"/></span>
          <p id="copyright-text">Copyright &copy; 2015 The Eclipse Foundation. All Rights Reserved.</p>
        </div>
      </div>
      <a href="#" class="scrollup">Back to the top</a>
    </div>
  </div>
</footer>

<script src="https://polarsys.org/time4sys/public/js/solstice.js"></script>
<script type="text/javascript">
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-910670-2']);
  _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>
</body>
</html>