<!-- 
	This document is provided as a template along with some guidance for creating
	your project proposal. This is just a template. Feel free to change it as
	you see fit (add sections, remove section). We feel, however, that the
	suggestions represented in this document represent the reasonable minimum
	amount of information to move forward.
	
	Please keep the formatting in this document simple. Please do not edit 
	this document in Microsoft Word as it adds huge piles of markup that make
	it difficult to restyle.
	
	More information is available here:
	
	http://wiki.eclipse.org/Development_Resources/HOWTO/Pre-Proposal_Phase
	
	Direct any questions about this template to emo@eclipse.org
 -->

<html>
<head>

<!-- 
	Include the title here. We will parse it out of here and include it on the
	rendered webpage. Do not duplicate the title within the text of your page.
 -->

<title>Fundamental Modeling Concepts (FMC)</title>
</head>

<!-- 
	We make use of the 'classic' HTML Definition List (dl) tag to specify
	committers. I know... you haven't seen this tag in a long while...
 -->
 
<style>
dt {
display: list-item;
list-style-position:outside;
list-style-image:url(/eclipse.org-common/themes/Phoenix/images/arrow.gif);
margin-left:16px;
}
dd {
margin-left:25px;
margin-bottom:5px;
}
</style>

<body>
<p>The Fundamental Modeling Concepts (FMC) project is a proposed open source project under the <a
	href="http://www.eclipse.org/projects/project_summary.php?projectid=modeling">Modeling Project
Container Project</a>.</p>

<!-- 
	The communication channel must be specified. Typically, this is the
	"Proposals" forum. In general, you don't need to change this.
 -->
<p>This proposal is in the Project Proposal Phase (as defined in the
Eclipse Development Process) and is written to declare its intent and
scope. We solicit additional participation and input from the Eclipse
community. Please send all feedback to the 
<a href="http://www.eclipse.org/forums/eclipse.proposals">Eclipse Proposals</a>
Forum.</p>

<h2>Background</h2>

<!-- 
	Optionally provide the background that has lead you to creating this project.
 -->
 
<p> 
Fundamental Modeling Concepts (<a href="http://www.fmc-modeling.org/">FMC</a>) is a modeling language for complex and dynamic systems. FMC provides a universal notation for the visualization and communication of structures and concepts in a coherent and efficient way. It supports all levels of abstraction from conceptual structures to implementation structures and has successfully been applied to various real-life systems (at SAP, Alcatel, Siemens etc.). FMC defines three types of diagrams: Block Diagrams, Extended Petri nets and Entity Relationship Diagrams. Block Diagrams depict the compositional structure of the system, Petri nets focus on the behavioral aspects of the system and Entity Relationship Diagrams describe the value range structures (observable values at locations within the system) or topics (correlation between interesting points). 
</p>
Another language directly related to FMC is technical architecture modeling (<a href="http://www.fmc-modeling.org/fmc-and-tam">TAM</a>). TAM aims at modeling and describing technical architecture. It is a combination of the Unified Modeling Language (UML) and Fundamental Modeling Concepts (FMC). TAM includes seven diagram types: 6 from UML and 1 from FMC. It uses subsets of UML Activity, State and Sequence diagrams to model behavioral aspects, Use Case Diagram to specify requirements, Package and Class Diagrams to model data structures and relations and FMC Block diagrams for compositional structures.
</p>
<h2>Scope</h2>

<!-- 
	All projects must have a well-defined scope. Describe, concisely, what
	is in-scope and (optionally) what is out-of-scope. An Eclipse project
	cannot have an open-ended scope.
 -->

The project will provide meta models and editors for FMC diagrams. The architecture of the project will be open and extensible for domain-specific applications. Furthermore, it will allow the integration of FMC with UML models. This is the basis for Technical Architecture Modeling (TAM).   

The following features are in scope for the FMC project:

<dl>
	<dt>An Ecore meta model for FMC Block Diagrams.</dt>
	<dt>A graphical editor for FMC Block Diagrams.</dt>
	<dt>Ecore meta models and graphical editors for other FMC diagrams.</dt>
	<dt>Plug-in extension points that allow customizing the editor.</dt> 
</dl>

The FMC model files can be used to facilitate interchange, for the integration with established frameworks such as EMF Compare, EMF Search or EMF Validation.

<h2>Description</h2>

<!-- 
	Describe the project here. Be concise, but provide enough information that
	somebody who doesn't already know very much about your project idea or domain
	has at least a fighting chance of understanding its purpose.
 -->
 
 This project aims at providing meta models and editors for FMC to support software architects and consultants in defining and analyzing system landscapes on the conceptual as well as on the design level. This project focuses firstly on the FMC Block diagram and integrates already existing diagram types from Papyrus UML to offer a holistic TAM modeling support. In addition, the project will define meta models and provide editors for the other FMC diagram types. The FMC Block Diagram editor will be based on Eclipse Graphiti and uses EMF/Ecore for the respective meta model. 
 
<h2>Why Eclipse?</h2> 

<!-- 
	Answer these two questions:	What value does this project bring to the Eclipse
	community? What value do you expect to obtain from hosting your project at Eclipse?
	
	What value do you get by having your project at Eclipse over and above the value
	of hosting at Eclipse Labs?
 -->
 
With Papyrus UML the Eclipse Modeling project already provides a modeling tool for UML. This enables to support fundamental modeling concepts (FMC) by combining UML tools such as Papyrus with the FMC project. Furthermore, such an integration complements UML tools by the ability to model system landscapes with compositional structure. Since all technologies, this project is based on, are from the Eclipse environment (Graphiti, GEF, Draw2D, EMF) this is a nice fit. Furthermore, modeling FMC inside Eclipse IDE enables the use of other existing Eclipse plug-ins such as EGit, Mylyn, etc. 

<h2>Relationship with other Eclipse Projects</h2> 

The FMC project will be built on top of the Eclipse Platform and will depend on the following Eclipse projects. 

<dl>
	<dt><a href="http://www.eclipse.org/graphiti">Graphiti Project</a> is the graphical framework for the FMC editor(s). </dt>
	<dt><a href="http://www.eclipse.org/emf">EMF Project</a> is required for defining the FMC meta models. </dt>
	<dt><a href="http://www.eclipse.org/papyrus/">Papyrus UML Project</a> includes required UML diagram types to be integrated in TAM.</dt>
</dl>

<h2>Initial Contribution</h2>

<!-- 
	Projects are expected to arrive at Eclipse with existing code.
	
	Describe the existing code that will be contributed to the project. Please provide
	a couple of paragraphs describing the code with modest detail, including important
	information like code ownership (who holds the copyright?), and some consideration
	of community that exists around the code. Include a listing of third-party libraries 
	and associated licenses.
 -->
 
The initial code contribution will come from SAP where the FMC/TAM project was developed originally. The code includes the Ecore meta model and a Graphiti-based editor for FMC Block diagrams. This will be the basis for the code contributed to Eclipse.
 
<h2>Legal Issues</h2>

<!-- 
	Please describe any potential legal issues in this section. Does somebody else
	own the trademark to the project name? Is there some issue that prevents you
	from licensing the project under the Eclipse Public License? Are parts of the 
	code available under some other license? Are there any LGPL/GPL bits that you
	absolutely require?
 -->

There are no known legal issues with this project. 
 
<h2>Committers</h2>

<!-- 
	List any initial committers that should be provisioned along with the
	new project. Include affiliation, but do not include email addresses at
	this point.
 -->

<p>The following individuals are proposed as initial committers to the project:</p>

<dl>
	<dt>Benjamin Schmeling, <a href="http://www.ubl-is.de/">UBL Informationssysteme</a>, lead</dt>
	<dt>Anis Charfi, <a href="http://www.sap.com/">SAP</a>, lead</dt>
	<dt>Heiko Witteborg, <a href="http://www.sap.com/">SAP</a></dt>
	<dt>Patrick Jahnke, <a href="http://www.sap.com/">SAP</a></dt>
</dl>

<p>We welcome additional committers and contributions.</p>

<!-- 
	Describe any initial contributions of code that will be brought to the 
	project. If there is no existing code, just remove this section.
 -->

<h2>Mentors</h2>

<!-- 
	New Eclipse projects require a minimum of two mentors from the Architecture
	Council. You need to identify two mentors before the project is created. The
	proposal can be posted before this section is filled in (it's a little easier
	to find a mentor when the proposal itself is public).
 -->

<p>The following Architecture Council members will mentor this
project:</p>

<ul>
	<li>Ed Merks</li>
	<li>Eike Stepper</li>
</ul>

<h2>Interested Parties</h2>

<!-- 
	Provide a list of individuals, organisations, companies, and other Eclipse
	projects that are interested in this project. This list will provide some
	insight into who your project's community will ultimately include. Where
	possible, include affiliations. Do not include email addresses.
 -->

<p>The following individuals, organisations, companies and projects have 
expressed interest in this project:</p>

<ul>
	<li>Bernhard Groene (SAP AG)</li>
	<li>Peter Tabeling (INTERVISTA AG)</li>
	<li>Karsten Wolfert (Ingenieurb&uuml;ro Wolfert)</li>
	<li>Andreas Bungert (Bungerts Ingenieurb&uuml;ro f&uuml;r L&ouml;sungsarchitekturen)</li>
</ul>

<h2>Project Scheduling</h2>

<!-- 
	Describe, in rough terms, what the basic scheduling of the project will
	be. You might, for example, include an indication of when an initial contribution
	should be expected, when your first build will be ready, etc. Exact
	dates are not required.
 -->

<h2>Changes to this Document</h2>

<!-- 
	List any changes that have occurred in the document here.
	You only need to document changes that have occurred after the document
	has been posted live for the community to view and comment.
 -->

<table>
	<tr>
		<th>Date</th>
		<th>Change</th>
	</tr>
	<tr>
		<td>23-January-2013</td>
		<td>Document created</td>
	</tr>
	<tr>
		<td>11-February-2013</td>
		<td>First document revision</td>
	</tr>
</table>
</body>
</html>