<?php require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'

	#*****************************************************************************
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Equinox Incubator - Provisioning Overview";
	$pageKeywords	= "equinox, osgi, framework, runtime, incubator, provisioning";
	
	# Add page-specific Nav bars here
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);

	# End: page-specific settings
	#
		
	# Paste your HTML content between the markers!	
ob_start();
?>	
<div id="midcolumn">
<h1><?= $pageTitle ?></h1>

<p class=bar>Requirements</p>
<p>
The set of requirements to be addressed by this workarea will evolve over time.  

</p>

<p class=bar>Design</p>
<p>Of course, the design too will evolve over time. To kick off the effort we have sketched out and prototyped
some ideas.  The basis for this design is the desire to factor a provisioning system into constituent parts
and allow those parts to be replaced and reassembled as needed.  In particular we have identified the following
high level concepts.
</p>

<dl>

<dt><b>Agent</b></dt>
<dd>The provisioning infrastructure on client machines is generally referred to as the agent.  The agent may run
separate from any other Eclipse system being managed or may be embedded inside of another Eclipse system.
Agents can manage many profiles (see below) and indeed, a given system may have many agents running on it.
</dd>

<dt><b>Profile</b></dt>
<dd>Profiles are the unit of management in the system.  That is, the provisioning infrastructure can manage 
individual (or collections of) profiles.  Profiles are analogous to Eclipse <i>configuration</i> in some situations.  
For now we have chosen to introduce this new term to separate the conceptual profile from the implementation 
configuration.
</dd>

<dt><b>Artifact</b></dt>
<dd>Artifacts are the elements that are ultimately provisioned to a profile.  For example, Eclipse bundles are artifacts.
</dd>

<dt><b>Metadata</b></dt>
<dd>As with the original Update Manager, there is a need for metadata that describes artifacts separate from the actual 
artifacts themselves.  This allows the provisioning system to reason about profiles hypothetically without 
having to actually incur the cost of downloading all the content.  Broadly speaking the provisioning metadata envisioned here 
takes the form of extensible <b>Installable Units (IUs)</b>.  As the name implies, IUs describe things that can be installed, 
updated or uninstalled.  They do not contain the actual artifacts but rather essential information about such artifacts (e.g., names, ids,
version numbers, dependencies, etc).  The metadata should allow dependencies to be structured as directed acyclic graphs
without forcing containment relationships between nodes.
</dd>

<dt><b>Repository</b></dt>
<dd>Both metadata and artifacts are organized into repositories.  Repository structure, layout and access has long been the source
of much debate and discussion.  We do not intend to fight that battle here. Rather, the provisioning system
must be extensible and thus allow for a wide range of repository formats to be represented.  The pervasive notion of downloading
or managing repository content is <i>mirroring</i>.  Rather than downloading artifacts etc, they are mirrored locally.
</dd>

<dt><b>Transports</b></dt>
<dd>As the name implies transports are the mechanisms by which artifacts, metadata etc are mirrored around the system.  
The set of available transports must be extensible and the programmatic interface to transports should allow for progress
monitoring, cancellation and restart as appropriate.  The incubator work will focus on a small set of transports (e.g., HTTP)
sufficient to do standard Eclipse install management.
</dd>

<dt><b>Director</b></dt>
<dd>Directors are responsible for determining <b>what</b> should be done to a given profile to reshape it as requested. 
That is, given the current state of a profile, a description of the desired end state
of that profile and metadata describing the available IUs, a director produces a list 
of provisioning operations (e.g., install, update or uninstall) to perform on the related IUs.
Directors are also able to validate profiles and assist in the diagnosis of configuration errors.  Note that directors
may range in complexity from very simple (e.g., reading a list of bundles from a static file) to very complex.  In this 
incubator we will create a director sufficient to achieve Update Manager-like function.
</dd>

<dt><b>Engine</b></dt>
<dd>Engines are responsible for determining <b>how</b> to achieve the desired provisioning operations as determined 
by a director.  Whereas the subject of the director's work is metadata, the subject of the engine's work is the artifacts and 
configuration information contained in the IUs selected by the director.  Engines cooperate with repositories and transport
mechanisms to ensure that the required artifacts are available in the desired locations.
</dd>

<dt><b>Phase</b></dt>
<dd>During execution the engine traverses through a set of phases (e.g., fetch, install, configurre). 
At each phase all the IUs being operated on have an 
opportunity to participate in the lifecycle.  The mechanism by which they specify their participation is undecided at this point.
</dd>

<dt><b>Touchpoints</b></dt>
<dd>IUs can be stamped with a <i>type</i>.  Using this type the engine identifies the touchpoint responsible for marrying 
the IU with the related system.  For example, an IU of type "Eclipse bundle" would be handled by the Eclipse Touchpoint.  
That touchpoint is responsible for putting the bundle in the appropriate spot, adding it to the Eclipse configuration files
and setting any related/described settings.  The set of touchpoints is open-ended.
</dd>
</dl>

<p>
The interactions between some of these concepts are depicted in the 1000ft view diagram.
</p>
</div>

<?php
	include $_SERVER['DOCUMENT_ROOT'] . "/equinox/global-links.html";
	include $_SERVER['DOCUMENT_ROOT'] . "/equinox/incubator/component-links.html";
	if (file_exists("dir-links.html")) {include "dir-links.html";}
?>

<?php
	$html = ob_get_contents();
	ob_end_clean();

	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
