[378790] - Backporting Frameworks and Editors to Indigo Branch
diff --git a/features/org.eclipse.libra.framework.editor.feature.source/.project b/features/org.eclipse.libra.framework.editor.feature.source/.project
new file mode 100644
index 0000000..6d80d06
--- /dev/null
+++ b/features/org.eclipse.libra.framework.editor.feature.source/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.libra.framework.editor.feature.source</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.libra.framework.editor.feature.source/build.properties b/features/org.eclipse.libra.framework.editor.feature.source/build.properties
new file mode 100644
index 0000000..39b0777
--- /dev/null
+++ b/features/org.eclipse.libra.framework.editor.feature.source/build.properties
@@ -0,0 +1,4 @@
+bin.includes = feature.xml,\
+               epl-v10.html,\
+               feature.properties,\
+               license.html
diff --git a/features/org.eclipse.libra.framework.editor.feature.source/epl-v10.html b/features/org.eclipse.libra.framework.editor.feature.source/epl-v10.html
new file mode 100644
index 0000000..fd39122
--- /dev/null
+++ b/features/org.eclipse.libra.framework.editor.feature.source/epl-v10.html
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>&quot;Contribution&quot; means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>&quot;Contributor&quot; means any person or entity that distributes
+the Program.</p>
+
+<p>&quot;Licensed Patents&quot; mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>&quot;Program&quot; means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>&quot;Recipient&quot; means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+(&quot;Commercial Contributor&quot;) hereby agrees to defend and
+indemnify every other Contributor (&quot;Indemnified Contributor&quot;)
+against any losses, damages and costs (collectively &quot;Losses&quot;)
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+</body>
+
+</html>
diff --git a/features/org.eclipse.libra.framework.editor.feature.source/feature.properties b/features/org.eclipse.libra.framework.editor.feature.source/feature.properties
new file mode 100644
index 0000000..0e51943
--- /dev/null
+++ b/features/org.eclipse.libra.framework.editor.feature.source/feature.properties
@@ -0,0 +1,159 @@
+###############################################################################

+# Copyright (c) 2010, 2011 SAP AG and others.

+# All rights reserved. This program and the accompanying materials

+# are made available under the terms of the Eclipse Public License v1.0

+# which accompanies this distribution, and is available at

+# http://www.eclipse.org/legal/epl-v10.html

+#

+# Contributors:

+#     Kaloyan Raev (SAP AG) - initial API and implementation

+###############################################################################

+featureName=OSGi Framework Editor SDK (Incubation)

+providerName=Eclipse Web Tools Platform

+

+description=Source code archives for OSGi Framework Editor. 

+

+# "copyright" property - text of the "Feature Update Copyright"

+copyright=\

+Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others\

+All rights reserved. This program and the accompanying materials\

+are made available under the terms of the Eclipse Public License v1.0\

+which accompanies this distribution, and is available at\

+http://www.eclipse.org/legal/epl-v10.html\

+\n\

+Contributors:\n\

+    SpringSource, a division of VMware, Inc. - initial API and implementation\n\

+    SAP AG - moving to Eclipse Libra project and enhancements\n

+################ end of copyright property ####################################

+

+# "licenseURL" property - URL of the "Feature License"

+# do not translate value - just change to point to a locale-specific HTML page

+licenseURL=license.html

+

+# "license" property - text of the "Feature Update License"

+# should be plain text version of license agreement pointed to be "licenseURL"

+license=\

+Eclipse Foundation Software User Agreement\n\

+February 1, 2011\n\

+\n\

+Usage Of Content\n\

+\n\

+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\

+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\

+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\

+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\

+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\

+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\

+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\

+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\

+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\

+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\

+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\

+\n\

+Applicable Licenses\n\

+\n\

+Unless otherwise indicated, all Content made available by the\n\

+Eclipse Foundation is provided to you under the terms and conditions of\n\

+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\

+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\

+For purposes of the EPL, "Program" will mean the Content.\n\

+\n\

+Content includes, but is not limited to, source code, object code,\n\

+documentation and other files maintained in the Eclipse Foundation source code\n\

+repository ("Repository") in software modules ("Modules") and made available\n\

+as downloadable archives ("Downloads").\n\

+\n\

+       - Content may be structured and packaged into modules to facilitate delivering,\n\

+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\

+         plug-in fragments ("Fragments"), and features ("Features").\n\

+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\

+         in a directory named "plugins".\n\

+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\

+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\

+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\

+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\

+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\

+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\

+\n\

+The terms and conditions governing Plug-ins and Fragments should be\n\

+contained in files named "about.html" ("Abouts"). The terms and\n\

+conditions governing Features and Included Features should be contained\n\

+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\

+Licenses may be located in any directory of a Download or Module\n\

+including, but not limited to the following locations:\n\

+\n\

+       - The top-level (root) directory\n\

+       - Plug-in and Fragment directories\n\

+       - Inside Plug-ins and Fragments packaged as JARs\n\

+       - Sub-directories of the directory named "src" of certain Plug-ins\n\

+       - Feature directories\n\

+\n\

+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\

+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\

+Update License") during the installation process. If the Feature contains\n\

+Included Features, the Feature Update License should either provide you\n\

+with the terms and conditions governing the Included Features or inform\n\

+you where you can locate them. Feature Update Licenses may be found in\n\

+the "license" property of files named "feature.properties" found within a Feature.\n\

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\

+terms and conditions (or references to such terms and conditions) that\n\

+govern your use of the associated Content in that directory.\n\

+\n\

+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\

+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\

+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\

+\n\

+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\

+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\

+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\

+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\

+       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\

+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\

+\n\

+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\

+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\

+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\

+govern that particular Content.\n\

+\n\

+\n\Use of Provisioning Technology\n\

+\n\

+The Eclipse Foundation makes available provisioning software, examples of which include,\n\

+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\

+the purpose of allowing users to install software, documentation, information and/or\n\

+other materials (collectively "Installable Software"). This capability is provided with\n\

+the intent of allowing such users to install, extend and update Eclipse-based products.\n\

+Information about packaging Installable Software is available at\n\

+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\

+\n\

+You may use Provisioning Technology to allow other parties to install Installable Software.\n\

+You shall be responsible for enabling the applicable license agreements relating to the\n\

+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\

+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\

+making it available in accordance with the Specification, you further acknowledge your\n\

+agreement to, and the acquisition of all necessary rights to permit the following:\n\

+\n\

+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\

+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\

+          extending or updating the functionality of an Eclipse-based product.\n\

+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\

+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\

+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\

+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\

+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\

+          with the Specification. Such Installable Software Agreement must inform the user of the\n\

+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\

+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\

+          indication of agreement by the user, the provisioning Technology will complete installation\n\

+          of the Installable Software.\n\

+\n\

+Cryptography\n\

+\n\

+Content may contain encryption software. The country in which you are\n\

+currently may have restrictions on the import, possession, and use,\n\

+and/or re-export to another country, of encryption software. BEFORE\n\

+using any encryption software, please check the country's laws,\n\

+regulations and policies concerning the import, possession, or use, and\n\

+re-export of encryption software, to see if this is permitted.\n\

+\n\

+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n

+########### end of license property ##########################################

diff --git a/features/org.eclipse.libra.framework.editor.feature.source/feature.xml b/features/org.eclipse.libra.framework.editor.feature.source/feature.xml
new file mode 100644
index 0000000..fd90489
--- /dev/null
+++ b/features/org.eclipse.libra.framework.editor.feature.source/feature.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<feature

+      id="org.eclipse.libra.framework.editor.feature.source"

+      label="%featureName"

+      version="0.1.0.qualifier"

+      provider-name="%providerName">

+

+   <description>

+      %description

+   </description>

+

+   <copyright>

+      %copyright

+   </copyright>

+

+   <license url="%licenseURL">

+      %license

+   </license>

+

+   <includes

+         id="org.eclipse.libra.framework.editor.feature"

+         version="0.0.0"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.editor.core.source"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.editor.ui.source"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.editor.integration.source"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="osgi.enterprise.source"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+</feature>

diff --git a/features/org.eclipse.libra.framework.editor.feature.source/license.html b/features/org.eclipse.libra.framework.editor.feature.source/license.html
new file mode 100644
index 0000000..f19c483
--- /dev/null
+++ b/features/org.eclipse.libra.framework.editor.feature.source/license.html
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.libra.framework.editor.feature.source/pom.xml b/features/org.eclipse.libra.framework.editor.feature.source/pom.xml
new file mode 100644
index 0000000..f723078
--- /dev/null
+++ b/features/org.eclipse.libra.framework.editor.feature.source/pom.xml
@@ -0,0 +1,17 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	
+	<parent>
+		<artifactId>org.eclipse.libra_parent</artifactId>
+		<groupId>org.eclipse.libra</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>../../development/org.eclipse.libra.releng/pom.xml</relativePath>
+	</parent>
+	
+	<artifactId>org.eclipse.libra.framework.editor.feature.source</artifactId>
+	<packaging>eclipse-feature</packaging>
+	<name>OSGi Framework Editor SDK Feature</name>
+	<version>0.1.0-SNAPSHOT</version>
+	
+</project>
\ No newline at end of file
diff --git a/features/org.eclipse.libra.framework.editor.feature/.project b/features/org.eclipse.libra.framework.editor.feature/.project
new file mode 100644
index 0000000..ced8032
--- /dev/null
+++ b/features/org.eclipse.libra.framework.editor.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.libra.framework.editor.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.libra.framework.editor.feature/build.properties b/features/org.eclipse.libra.framework.editor.feature/build.properties
new file mode 100644
index 0000000..39b0777
--- /dev/null
+++ b/features/org.eclipse.libra.framework.editor.feature/build.properties
@@ -0,0 +1,4 @@
+bin.includes = feature.xml,\
+               epl-v10.html,\
+               feature.properties,\
+               license.html
diff --git a/features/org.eclipse.libra.framework.editor.feature/epl-v10.html b/features/org.eclipse.libra.framework.editor.feature/epl-v10.html
new file mode 100644
index 0000000..fd39122
--- /dev/null
+++ b/features/org.eclipse.libra.framework.editor.feature/epl-v10.html
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>&quot;Contribution&quot; means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>&quot;Contributor&quot; means any person or entity that distributes
+the Program.</p>
+
+<p>&quot;Licensed Patents&quot; mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>&quot;Program&quot; means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>&quot;Recipient&quot; means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+(&quot;Commercial Contributor&quot;) hereby agrees to defend and
+indemnify every other Contributor (&quot;Indemnified Contributor&quot;)
+against any losses, damages and costs (collectively &quot;Losses&quot;)
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+</body>
+
+</html>
diff --git a/features/org.eclipse.libra.framework.editor.feature/feature.properties b/features/org.eclipse.libra.framework.editor.feature/feature.properties
new file mode 100644
index 0000000..29974f6
--- /dev/null
+++ b/features/org.eclipse.libra.framework.editor.feature/feature.properties
@@ -0,0 +1,159 @@
+###############################################################################

+# Copyright (c) 2010, 2011 SAP AG and others.

+# All rights reserved. This program and the accompanying materials

+# are made available under the terms of the Eclipse Public License v1.0

+# which accompanies this distribution, and is available at

+# http://www.eclipse.org/legal/epl-v10.html

+#

+# Contributors:

+#     Kaloyan Raev (SAP AG) - initial API and implementation

+###############################################################################

+featureName=OSGi Framework Editor (Incubation)

+providerName=Eclipse Web Tools Platform

+

+description=Provides server editor parts for analyzing the bundle state and dependencies of an OSGi Framework.

+

+# "copyright" property - text of the "Feature Update Copyright"

+copyright=\

+Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others\

+All rights reserved. This program and the accompanying materials\

+are made available under the terms of the Eclipse Public License v1.0\

+which accompanies this distribution, and is available at\

+http://www.eclipse.org/legal/epl-v10.html\

+\n\

+Contributors:\n\

+    SpringSource, a division of VMware, Inc. - initial API and implementation\n\

+    SAP AG - moving to Eclipse Libra project and enhancements\n

+################ end of copyright property ####################################

+

+# "licenseURL" property - URL of the "Feature License"

+# do not translate value - just change to point to a locale-specific HTML page

+licenseURL=license.html

+

+# "license" property - text of the "Feature Update License"

+# should be plain text version of license agreement pointed to be "licenseURL"

+license=\

+Eclipse Foundation Software User Agreement\n\

+February 1, 2011\n\

+\n\

+Usage Of Content\n\

+\n\

+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\

+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\

+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\

+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\

+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\

+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\

+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\

+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\

+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\

+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\

+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\

+\n\

+Applicable Licenses\n\

+\n\

+Unless otherwise indicated, all Content made available by the\n\

+Eclipse Foundation is provided to you under the terms and conditions of\n\

+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\

+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\

+For purposes of the EPL, "Program" will mean the Content.\n\

+\n\

+Content includes, but is not limited to, source code, object code,\n\

+documentation and other files maintained in the Eclipse Foundation source code\n\

+repository ("Repository") in software modules ("Modules") and made available\n\

+as downloadable archives ("Downloads").\n\

+\n\

+       - Content may be structured and packaged into modules to facilitate delivering,\n\

+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\

+         plug-in fragments ("Fragments"), and features ("Features").\n\

+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\

+         in a directory named "plugins".\n\

+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\

+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\

+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\

+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\

+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\

+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\

+\n\

+The terms and conditions governing Plug-ins and Fragments should be\n\

+contained in files named "about.html" ("Abouts"). The terms and\n\

+conditions governing Features and Included Features should be contained\n\

+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\

+Licenses may be located in any directory of a Download or Module\n\

+including, but not limited to the following locations:\n\

+\n\

+       - The top-level (root) directory\n\

+       - Plug-in and Fragment directories\n\

+       - Inside Plug-ins and Fragments packaged as JARs\n\

+       - Sub-directories of the directory named "src" of certain Plug-ins\n\

+       - Feature directories\n\

+\n\

+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\

+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\

+Update License") during the installation process. If the Feature contains\n\

+Included Features, the Feature Update License should either provide you\n\

+with the terms and conditions governing the Included Features or inform\n\

+you where you can locate them. Feature Update Licenses may be found in\n\

+the "license" property of files named "feature.properties" found within a Feature.\n\

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\

+terms and conditions (or references to such terms and conditions) that\n\

+govern your use of the associated Content in that directory.\n\

+\n\

+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\

+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\

+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\

+\n\

+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\

+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\

+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\

+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\

+       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\

+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\

+\n\

+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\

+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\

+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\

+govern that particular Content.\n\

+\n\

+\n\Use of Provisioning Technology\n\

+\n\

+The Eclipse Foundation makes available provisioning software, examples of which include,\n\

+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\

+the purpose of allowing users to install software, documentation, information and/or\n\

+other materials (collectively "Installable Software"). This capability is provided with\n\

+the intent of allowing such users to install, extend and update Eclipse-based products.\n\

+Information about packaging Installable Software is available at\n\

+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\

+\n\

+You may use Provisioning Technology to allow other parties to install Installable Software.\n\

+You shall be responsible for enabling the applicable license agreements relating to the\n\

+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\

+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\

+making it available in accordance with the Specification, you further acknowledge your\n\

+agreement to, and the acquisition of all necessary rights to permit the following:\n\

+\n\

+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\

+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\

+          extending or updating the functionality of an Eclipse-based product.\n\

+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\

+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\

+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\

+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\

+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\

+          with the Specification. Such Installable Software Agreement must inform the user of the\n\

+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\

+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\

+          indication of agreement by the user, the provisioning Technology will complete installation\n\

+          of the Installable Software.\n\

+\n\

+Cryptography\n\

+\n\

+Content may contain encryption software. The country in which you are\n\

+currently may have restrictions on the import, possession, and use,\n\

+and/or re-export to another country, of encryption software. BEFORE\n\

+using any encryption software, please check the country's laws,\n\

+regulations and policies concerning the import, possession, or use, and\n\

+re-export of encryption software, to see if this is permitted.\n\

+\n\

+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n

+########### end of license property ##########################################

diff --git a/features/org.eclipse.libra.framework.editor.feature/feature.xml b/features/org.eclipse.libra.framework.editor.feature/feature.xml
new file mode 100644
index 0000000..f2b1e92
--- /dev/null
+++ b/features/org.eclipse.libra.framework.editor.feature/feature.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<feature

+      id="org.eclipse.libra.framework.editor.feature"

+      label="%featureName"

+      version="0.1.0.qualifier"

+      provider-name="%providerName">

+

+   <description>

+      %description

+   </description>

+

+   <copyright>

+      %copyright

+   </copyright>

+

+   <license url="%licenseURL">

+      %license

+   </license>

+

+   <plugin

+         id="org.eclipse.libra.framework.editor.core"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.editor.ui"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.editor.integration"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="osgi.enterprise"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+</feature>

diff --git a/features/org.eclipse.libra.framework.editor.feature/license.html b/features/org.eclipse.libra.framework.editor.feature/license.html
new file mode 100644
index 0000000..f19c483
--- /dev/null
+++ b/features/org.eclipse.libra.framework.editor.feature/license.html
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.libra.framework.editor.feature/pom.xml b/features/org.eclipse.libra.framework.editor.feature/pom.xml
new file mode 100644
index 0000000..1818d6f
--- /dev/null
+++ b/features/org.eclipse.libra.framework.editor.feature/pom.xml
@@ -0,0 +1,17 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	
+	<parent>
+		<artifactId>org.eclipse.libra_parent</artifactId>
+		<groupId>org.eclipse.libra</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>../../development/org.eclipse.libra.releng/pom.xml</relativePath>
+	</parent>
+	
+	<artifactId>org.eclipse.libra.framework.editor.feature</artifactId>
+	<packaging>eclipse-feature</packaging>
+	<name>OSGi Framework Editor Feature</name>
+	<version>0.1.0-SNAPSHOT</version>
+	
+</project>
\ No newline at end of file
diff --git a/features/org.eclipse.libra.framework.feature.source/.project b/features/org.eclipse.libra.framework.feature.source/.project
new file mode 100644
index 0000000..83c0a3a
--- /dev/null
+++ b/features/org.eclipse.libra.framework.feature.source/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.libra.framework.feature.source</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.pde.FeatureBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.FeatureNature</nature>

+	</natures>

+</projectDescription>

diff --git a/features/org.eclipse.libra.framework.feature.source/build.properties b/features/org.eclipse.libra.framework.feature.source/build.properties
new file mode 100644
index 0000000..8a0a77b
--- /dev/null
+++ b/features/org.eclipse.libra.framework.feature.source/build.properties
@@ -0,0 +1,4 @@
+bin.includes = feature.xml,\

+               license.html,\

+               feature.properties,\

+               epl-v10.html

diff --git a/features/org.eclipse.libra.framework.feature.source/epl-v10.html b/features/org.eclipse.libra.framework.feature.source/epl-v10.html
new file mode 100644
index 0000000..fd39122
--- /dev/null
+++ b/features/org.eclipse.libra.framework.feature.source/epl-v10.html
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>&quot;Contribution&quot; means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>&quot;Contributor&quot; means any person or entity that distributes
+the Program.</p>
+
+<p>&quot;Licensed Patents&quot; mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>&quot;Program&quot; means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>&quot;Recipient&quot; means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+(&quot;Commercial Contributor&quot;) hereby agrees to defend and
+indemnify every other Contributor (&quot;Indemnified Contributor&quot;)
+against any losses, damages and costs (collectively &quot;Losses&quot;)
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+</body>
+
+</html>
diff --git a/features/org.eclipse.libra.framework.feature.source/feature.properties b/features/org.eclipse.libra.framework.feature.source/feature.properties
new file mode 100644
index 0000000..265ce35
--- /dev/null
+++ b/features/org.eclipse.libra.framework.feature.source/feature.properties
@@ -0,0 +1,158 @@
+###############################################################################

+# Copyright (c) 2010, 2011 Eteration A.S. and others.

+# All rights reserved. This program and the accompanying materials

+# are made available under the terms of the Eclipse Public License v1.0

+# which accompanies this distribution, and is available at

+# http://www.eclipse.org/legal/epl-v10.html

+#

+# Contributors:

+#     Naci Dai (Eteration A.S.) - initial API and implementation

+###############################################################################

+featureName=OSGi Framework Launchers SDK (Incubation)

+providerName=Eclipse Web Tools Platform

+

+description=Source code archives for OSGi Framework Launchers.

+

+# "copyright" property - text of the "Feature Update Copyright"

+copyright=\

+Copyright (c) 2010, 2011 Eteration A.S.\

+All rights reserved. This program and the accompanying materials\

+are made available under the terms of the Eclipse Public License v1.0\

+which accompanies this distribution, and is available at\

+http://www.eclipse.org/legal/epl-v10.html\

+\n\

+Contributors:\n\

+     Naci Dai (Eteration A.S.) - initial API and implementation\n

+################ end of copyright property ####################################

+

+# "licenseURL" property - URL of the "Feature License"

+# do not translate value - just change to point to a locale-specific HTML page

+licenseURL=license.html

+

+# "license" property - text of the "Feature Update License"

+# should be plain text version of license agreement pointed to be "licenseURL"

+license=\

+Eclipse Foundation Software User Agreement\n\

+February 1, 2011\n\

+\n\

+Usage Of Content\n\

+\n\

+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\

+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\

+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\

+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\

+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\

+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\

+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\

+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\

+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\

+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\

+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\

+\n\

+Applicable Licenses\n\

+\n\

+Unless otherwise indicated, all Content made available by the\n\

+Eclipse Foundation is provided to you under the terms and conditions of\n\

+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\

+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\

+For purposes of the EPL, "Program" will mean the Content.\n\

+\n\

+Content includes, but is not limited to, source code, object code,\n\

+documentation and other files maintained in the Eclipse Foundation source code\n\

+repository ("Repository") in software modules ("Modules") and made available\n\

+as downloadable archives ("Downloads").\n\

+\n\

+       - Content may be structured and packaged into modules to facilitate delivering,\n\

+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\

+         plug-in fragments ("Fragments"), and features ("Features").\n\

+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\

+         in a directory named "plugins".\n\

+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\

+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\

+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\

+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\

+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\

+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\

+\n\

+The terms and conditions governing Plug-ins and Fragments should be\n\

+contained in files named "about.html" ("Abouts"). The terms and\n\

+conditions governing Features and Included Features should be contained\n\

+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\

+Licenses may be located in any directory of a Download or Module\n\

+including, but not limited to the following locations:\n\

+\n\

+       - The top-level (root) directory\n\

+       - Plug-in and Fragment directories\n\

+       - Inside Plug-ins and Fragments packaged as JARs\n\

+       - Sub-directories of the directory named "src" of certain Plug-ins\n\

+       - Feature directories\n\

+\n\

+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\

+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\

+Update License") during the installation process. If the Feature contains\n\

+Included Features, the Feature Update License should either provide you\n\

+with the terms and conditions governing the Included Features or inform\n\

+you where you can locate them. Feature Update Licenses may be found in\n\

+the "license" property of files named "feature.properties" found within a Feature.\n\

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\

+terms and conditions (or references to such terms and conditions) that\n\

+govern your use of the associated Content in that directory.\n\

+\n\

+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\

+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\

+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\

+\n\

+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\

+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\

+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\

+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\

+       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\

+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\

+\n\

+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\

+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\

+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\

+govern that particular Content.\n\

+\n\

+\n\Use of Provisioning Technology\n\

+\n\

+The Eclipse Foundation makes available provisioning software, examples of which include,\n\

+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\

+the purpose of allowing users to install software, documentation, information and/or\n\

+other materials (collectively "Installable Software"). This capability is provided with\n\

+the intent of allowing such users to install, extend and update Eclipse-based products.\n\

+Information about packaging Installable Software is available at\n\

+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\

+\n\

+You may use Provisioning Technology to allow other parties to install Installable Software.\n\

+You shall be responsible for enabling the applicable license agreements relating to the\n\

+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\

+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\

+making it available in accordance with the Specification, you further acknowledge your\n\

+agreement to, and the acquisition of all necessary rights to permit the following:\n\

+\n\

+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\

+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\

+          extending or updating the functionality of an Eclipse-based product.\n\

+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\

+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\

+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\

+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\

+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\

+          with the Specification. Such Installable Software Agreement must inform the user of the\n\

+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\

+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\

+          indication of agreement by the user, the provisioning Technology will complete installation\n\

+          of the Installable Software.\n\

+\n\

+Cryptography\n\

+\n\

+Content may contain encryption software. The country in which you are\n\

+currently may have restrictions on the import, possession, and use,\n\

+and/or re-export to another country, of encryption software. BEFORE\n\

+using any encryption software, please check the country's laws,\n\

+regulations and policies concerning the import, possession, or use, and\n\

+re-export of encryption software, to see if this is permitted.\n\

+\n\

+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n

+########### end of license property ##########################################

diff --git a/features/org.eclipse.libra.framework.feature.source/feature.xml b/features/org.eclipse.libra.framework.feature.source/feature.xml
new file mode 100644
index 0000000..2bf4200
--- /dev/null
+++ b/features/org.eclipse.libra.framework.feature.source/feature.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<feature

+      id="org.eclipse.libra.framework.feature.source"

+      label="%featureName"

+      version="0.1.0.qualifier"

+      provider-name="%providerName">

+

+   <description>

+      %description

+   </description>

+

+   <copyright>

+      %copyright

+   </copyright>

+

+   <license url="%licenseURL">

+      %license

+   </license>

+

+   <includes

+         id="org.eclipse.libra.framework.feature"

+         version="0.0.0"/>

+

+   <includes

+         id="org.eclipse.libra.framework.editor.feature.source"

+         version="0.0.0"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.equinox.source"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.equinox.ui.source"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.felix.source"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.felix.ui.source"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.jonas.source"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.jonas.ui.source"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.knopflerfish.source"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.knopflerfish.ui.source"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.ui.source"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+</feature>

diff --git a/features/org.eclipse.libra.framework.feature.source/license.html b/features/org.eclipse.libra.framework.feature.source/license.html
new file mode 100644
index 0000000..f19c483
--- /dev/null
+++ b/features/org.eclipse.libra.framework.feature.source/license.html
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.libra.framework.feature.source/pom.xml b/features/org.eclipse.libra.framework.feature.source/pom.xml
new file mode 100644
index 0000000..fcb805a
--- /dev/null
+++ b/features/org.eclipse.libra.framework.feature.source/pom.xml
@@ -0,0 +1,16 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	
+	<parent>
+		<artifactId>org.eclipse.libra_parent</artifactId>
+		<groupId>org.eclipse.libra</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>../../development/org.eclipse.libra.releng/pom.xml</relativePath>
+	</parent>
+	
+	<artifactId>org.eclipse.libra.framework.feature.source</artifactId>
+	<packaging>eclipse-feature</packaging>
+	<name>OSGi Frameworks Server Adapters SDK Feature</name>
+	
+</project>
\ No newline at end of file
diff --git a/features/org.eclipse.libra.framework.feature/.project b/features/org.eclipse.libra.framework.feature/.project
new file mode 100644
index 0000000..a71e33d
--- /dev/null
+++ b/features/org.eclipse.libra.framework.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.libra.framework.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.libra.framework.feature/build.properties b/features/org.eclipse.libra.framework.feature/build.properties
new file mode 100644
index 0000000..82433ad
--- /dev/null
+++ b/features/org.eclipse.libra.framework.feature/build.properties
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2010, 2011 SAP AG and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     Kaloyan Raev (SAP AG) - initial API and implementation
+###############################################################################
+bin.includes = feature.xml,\

+               feature.properties,\

+               license.html,\

+               epl-v10.html

diff --git a/features/org.eclipse.libra.framework.feature/epl-v10.html b/features/org.eclipse.libra.framework.feature/epl-v10.html
new file mode 100644
index 0000000..fd39122
--- /dev/null
+++ b/features/org.eclipse.libra.framework.feature/epl-v10.html
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>&quot;Contribution&quot; means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>&quot;Contributor&quot; means any person or entity that distributes
+the Program.</p>
+
+<p>&quot;Licensed Patents&quot; mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>&quot;Program&quot; means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>&quot;Recipient&quot; means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+(&quot;Commercial Contributor&quot;) hereby agrees to defend and
+indemnify every other Contributor (&quot;Indemnified Contributor&quot;)
+against any losses, damages and costs (collectively &quot;Losses&quot;)
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+</body>
+
+</html>
diff --git a/features/org.eclipse.libra.framework.feature/feature.properties b/features/org.eclipse.libra.framework.feature/feature.properties
new file mode 100644
index 0000000..e806613
--- /dev/null
+++ b/features/org.eclipse.libra.framework.feature/feature.properties
@@ -0,0 +1,158 @@
+###############################################################################

+# Copyright (c) 2010 Eteration A.S and others.

+# All rights reserved. This program and the accompanying materials

+# are made available under the terms of the Eclipse Public License v1.0

+# which accompanies this distribution, and is available at

+# http://www.eclipse.org/legal/epl-v10.html

+#

+# Contributors:

+#     Naci Dai (Eteration A.S.) - initial API and implementation

+###############################################################################

+featureName=OSGi Framework Launchers (Incubation)

+providerName=Eclipse Web Tools Platform

+

+description=Provides WTP server adapters for OSGi Frameworks like Eclipse Equinox, Apache Felix and Knopflerfish.    

+

+# "copyright" property - text of the "Feature Update Copyright"

+copyright=\

+Copyright (c) 2010, 2011 Eteration A.S.\

+All rights reserved. This program and the accompanying materials\

+are made available under the terms of the Eclipse Public License v1.0\

+which accompanies this distribution, and is available at\

+http://www.eclipse.org/legal/epl-v10.html\

+\n\

+Contributors:\n\

+     Naci Dai (Eteration A.S.) - initial API and implementation\n

+################ end of copyright property ####################################

+

+# "licenseURL" property - URL of the "Feature License"

+# do not translate value - just change to point to a locale-specific HTML page

+licenseURL=license.html

+

+# "license" property - text of the "Feature Update License"

+# should be plain text version of license agreement pointed to be "licenseURL"

+license=\

+Eclipse Foundation Software User Agreement\n\

+February 1, 2011\n\

+\n\

+Usage Of Content\n\

+\n\

+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\

+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\

+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\

+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\

+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\

+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\

+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\

+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\

+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\

+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\

+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\

+\n\

+Applicable Licenses\n\

+\n\

+Unless otherwise indicated, all Content made available by the\n\

+Eclipse Foundation is provided to you under the terms and conditions of\n\

+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\

+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\

+For purposes of the EPL, "Program" will mean the Content.\n\

+\n\

+Content includes, but is not limited to, source code, object code,\n\

+documentation and other files maintained in the Eclipse Foundation source code\n\

+repository ("Repository") in software modules ("Modules") and made available\n\

+as downloadable archives ("Downloads").\n\

+\n\

+       - Content may be structured and packaged into modules to facilitate delivering,\n\

+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\

+         plug-in fragments ("Fragments"), and features ("Features").\n\

+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\

+         in a directory named "plugins".\n\

+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\

+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\

+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\

+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\

+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\

+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\

+\n\

+The terms and conditions governing Plug-ins and Fragments should be\n\

+contained in files named "about.html" ("Abouts"). The terms and\n\

+conditions governing Features and Included Features should be contained\n\

+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\

+Licenses may be located in any directory of a Download or Module\n\

+including, but not limited to the following locations:\n\

+\n\

+       - The top-level (root) directory\n\

+       - Plug-in and Fragment directories\n\

+       - Inside Plug-ins and Fragments packaged as JARs\n\

+       - Sub-directories of the directory named "src" of certain Plug-ins\n\

+       - Feature directories\n\

+\n\

+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\

+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\

+Update License") during the installation process. If the Feature contains\n\

+Included Features, the Feature Update License should either provide you\n\

+with the terms and conditions governing the Included Features or inform\n\

+you where you can locate them. Feature Update Licenses may be found in\n\

+the "license" property of files named "feature.properties" found within a Feature.\n\

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\

+terms and conditions (or references to such terms and conditions) that\n\

+govern your use of the associated Content in that directory.\n\

+\n\

+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\

+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\

+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\

+\n\

+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\

+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\

+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\

+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\

+       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\

+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\

+\n\

+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\

+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\

+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\

+govern that particular Content.\n\

+\n\

+\n\Use of Provisioning Technology\n\

+\n\

+The Eclipse Foundation makes available provisioning software, examples of which include,\n\

+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\

+the purpose of allowing users to install software, documentation, information and/or\n\

+other materials (collectively "Installable Software"). This capability is provided with\n\

+the intent of allowing such users to install, extend and update Eclipse-based products.\n\

+Information about packaging Installable Software is available at\n\

+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\

+\n\

+You may use Provisioning Technology to allow other parties to install Installable Software.\n\

+You shall be responsible for enabling the applicable license agreements relating to the\n\

+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\

+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\

+making it available in accordance with the Specification, you further acknowledge your\n\

+agreement to, and the acquisition of all necessary rights to permit the following:\n\

+\n\

+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\

+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\

+          extending or updating the functionality of an Eclipse-based product.\n\

+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\

+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\

+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\

+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\

+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\

+          with the Specification. Such Installable Software Agreement must inform the user of the\n\

+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\

+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\

+          indication of agreement by the user, the provisioning Technology will complete installation\n\

+          of the Installable Software.\n\

+\n\

+Cryptography\n\

+\n\

+Content may contain encryption software. The country in which you are\n\

+currently may have restrictions on the import, possession, and use,\n\

+and/or re-export to another country, of encryption software. BEFORE\n\

+using any encryption software, please check the country's laws,\n\

+regulations and policies concerning the import, possession, or use, and\n\

+re-export of encryption software, to see if this is permitted.\n\

+\n\

+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n

+########### end of license property ##########################################

diff --git a/features/org.eclipse.libra.framework.feature/feature.xml b/features/org.eclipse.libra.framework.feature/feature.xml
new file mode 100644
index 0000000..c521eb0
--- /dev/null
+++ b/features/org.eclipse.libra.framework.feature/feature.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<feature

+      id="org.eclipse.libra.framework.feature"

+      label="%featureName"

+      version="0.1.0.qualifier"

+      provider-name="%providerName">

+

+   <description>

+      %description

+   </description>

+

+   <copyright>

+      %copyright

+   </copyright>

+

+   <license url="%licenseURL">

+      %license

+   </license>

+

+   <includes

+         id="org.eclipse.libra.framework.editor.feature"

+         version="0.0.0"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.core"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.equinox"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.equinox.ui"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.felix"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.felix.ui"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.jonas"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.jonas.ui"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.knopflerfish"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.knopflerfish.ui"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.libra.framework.ui"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+</feature>

diff --git a/features/org.eclipse.libra.framework.feature/license.html b/features/org.eclipse.libra.framework.feature/license.html
new file mode 100644
index 0000000..f19c483
--- /dev/null
+++ b/features/org.eclipse.libra.framework.feature/license.html
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.libra.framework.feature/pom.xml b/features/org.eclipse.libra.framework.feature/pom.xml
new file mode 100644
index 0000000..8017eba
--- /dev/null
+++ b/features/org.eclipse.libra.framework.feature/pom.xml
@@ -0,0 +1,16 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	
+	<parent>
+		<artifactId>org.eclipse.libra_parent</artifactId>
+		<groupId>org.eclipse.libra</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>../../development/org.eclipse.libra.releng/pom.xml</relativePath>
+	</parent>
+	
+	<artifactId>org.eclipse.libra.framework.feature</artifactId>
+	<packaging>eclipse-feature</packaging>
+	<name>OSGi Frameworks Server Adapters Feature</name>
+	
+</project>
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.core/.classpath b/plugins/org.eclipse.libra.framework.core/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.libra.framework.core/.project b/plugins/org.eclipse.libra.framework.core/.project
new file mode 100644
index 0000000..b729069
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.libra.framework.core</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.libra.framework.core/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.libra.framework.core/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..64203b9
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Fri Oct 22 10:43:27 EEST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.libra.framework.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.libra.framework.core/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e420d11
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/META-INF/MANIFEST.MF
@@ -0,0 +1,37 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.libra.framework.core;singleton:=true
+Bundle-Version: 0.1.0.qualifier
+Bundle-Activator: org.eclipse.libra.framework.core.FrameworkCorePlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.jdt.launching,
+ org.eclipse.debug.core,
+ org.eclipse.pde.ui,
+ org.eclipse.pde;bundle-version="3.6.100",
+ org.eclipse.wst.server.core,
+ org.eclipse.wst.server.ui,
+ org.eclipse.jst.server.core,
+ org.eclipse.jdt.core,
+ org.eclipse.jst.common.project.facet.core,
+ org.eclipse.wst.common.modulecore,
+ org.eclipse.equinox.frameworkadmin,
+ org.eclipse.wst.web,
+ org.eclipse.wst.common.project.facet.core;bundle-version="1.4.102",
+ org.eclipse.libra.framework.editor.core;bundle-version="[0.1.0,2.0.0)";visibility:=reexport
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ActivationPolicy: lazy
+Import-Package: org.eclipse.core.resources,
+ org.eclipse.debug.core,
+ org.eclipse.jdt.launching.sourcelookup,
+ org.eclipse.libra.framework.editor.integration.admin.osgijmx;version="[0.1.0,2.0.0)",
+ org.eclipse.libra.framework.editor.integration.console.basic;version="[0.1.0,2.0.0)",
+ org.eclipse.pde.core.plugin,
+ org.eclipse.pde.ui.launcher
+Export-Package: org.eclipse.libra.framework.core,
+ org.eclipse.libra.framework.core.internal.debug,
+ org.eclipse.libra.framework.core.launching,
+ org.eclipse.libra.framework.core.publish
diff --git a/plugins/org.eclipse.libra.framework.core/about.html b/plugins/org.eclipse.libra.framework.core/about.html
new file mode 100644
index 0000000..7d9511d
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>September 21, 2011</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.core/build.properties b/plugins/org.eclipse.libra.framework.core/build.properties
new file mode 100644
index 0000000..86350ba
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/build.properties
@@ -0,0 +1,15 @@
+###############################################################################
+#   Copyright (c) 2012 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/plugins/org.eclipse.libra.framework.core/plugin.properties b/plugins/org.eclipse.libra.framework.core/plugin.properties
new file mode 100644
index 0000000..374870e
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/plugin.properties
@@ -0,0 +1,12 @@
+################################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+################################################################################
+pluginName=OSGI Runtime Support
+providerName=Eteration A.S.
diff --git a/plugins/org.eclipse.libra.framework.core/plugin.xml b/plugins/org.eclipse.libra.framework.core/plugin.xml
new file mode 100644
index 0000000..0bd3892
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/plugin.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+      Copyright (c) 2010 Eteration A.S. and others.
+      All rights reserved. This program and the accompanying materials
+      are made available under the terms of the Eclipse Public License v1.0
+      which accompanies this distribution, and is available at
+      http://www.eclipse.org/legal/epl-v10.html
+     
+      Contributors:
+         Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ -->
+
+<plugin>
+   <extension-point id="launchBehavior" name="Libra Launch Behavior" schema="schema/launchBehavior.exsd"/>
+
+ <extension
+      point="org.eclipse.pde.ui.osgiFrameworks">
+    <framework
+        id="org.eclipse.libra.framework.meta"
+        launcherDelegate="org.eclipse.libra.framework.core.launching.LaunchConfigurationDelegate"
+        name="Libra Meta Framework" >
+    </framework>
+  </extension>
+  
+     <extension
+         point="org.eclipse.wst.server.core.moduleFactories">
+      <moduleFactory
+            projects="true"
+            class="org.eclipse.libra.framework.core.module.OsgiModuleDeployableFactory"
+            id="org.eclipse.libra.runtime.internal.deployables.osgi.bundle">
+         <moduleType
+               versions="4.2"
+               types="osgi.bundle">
+         </moduleType>
+      </moduleFactory>
+     </extension>
+</plugin>
diff --git a/plugins/org.eclipse.libra.framework.core/pom.xml b/plugins/org.eclipse.libra.framework.core/pom.xml
new file mode 100644
index 0000000..f30ba54
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/pom.xml
@@ -0,0 +1,33 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<artifactId>org.eclipse.libra_parent</artifactId>
+		<groupId>org.eclipse.libra</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>../../development/org.eclipse.libra.releng/pom.xml</relativePath>
+	</parent>
+
+	<artifactId>org.eclipse.libra.framework.core</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<name>OSGi Frameworks Server Adapters Core Plug-in</name>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-source-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>findbugs-maven-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-pmd-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/plugins/org.eclipse.libra.framework.core/schema/launchBehavior.exsd b/plugins/org.eclipse.libra.framework.core/schema/launchBehavior.exsd
new file mode 100644
index 0000000..7b24863
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/schema/launchBehavior.exsd
@@ -0,0 +1,84 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.libra.framework.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.libra.framework.core" id="launchBehavior" name="OSAMI Launch Behavior"/>
+      </appinfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/FrameworkCorePlugin.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/FrameworkCorePlugin.java
new file mode 100644
index 0000000..4a0bc07
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/FrameworkCorePlugin.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.pde.core.project.IBundleProjectDescription;
+import org.eclipse.pde.core.project.IBundleProjectService;
+import org.eclipse.pde.internal.core.PDECore;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+
+public class FrameworkCorePlugin extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.libra.framework.core"; //$NON-NLS-1$
+
+	// The shared instance
+	private static FrameworkCorePlugin plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public FrameworkCorePlugin() {
+		super();
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static FrameworkCorePlugin getDefault() {
+		return plugin;
+	}
+	
+	
+
+	public static String getPreference(String id) {
+		return Platform.getPreferencesService().getString(PLUGIN_ID, id, "", null);
+	}
+	
+	public static void setPreference(String id, String value) {
+		(new DefaultScope()).getNode(PLUGIN_ID).put(id, value);
+	}
+	
+	
+	public static IBundleProjectService getBundleProjectService() {
+		PDECore instance = PDECore.getDefault();
+		if (instance == null)
+			return null;
+		return (IBundleProjectService) instance.acquireService(IBundleProjectService.class.getName());
+	}
+	
+	public static IBundleProjectDescription getDescription(IProject project) throws CoreException {
+		try {
+			return getBundleProjectService().getDescription(project);
+		}
+		catch (IllegalArgumentException e) {
+			return null;
+		}
+	}
+
+
+}
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/FrameworkDelegate.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/FrameworkDelegate.java
new file mode 100644
index 0000000..3cedfe1
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/FrameworkDelegate.java
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jdt.launching.IVMInstallType;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.wst.server.core.IRuntimeType;
+
+public abstract class FrameworkDelegate extends org.eclipse.wst.server.core.model.RuntimeDelegate {
+
+	protected static final String PROP_VM_INSTALL_TYPE_ID = "vm-install-type-id";
+	protected static final String PROP_VM_INSTALL_ID = "vm-install-id";
+	protected static Map<Object, Object> sdkMap = new HashMap<Object, Object>(2);
+
+	public FrameworkDelegate() {
+		super();
+	}
+
+	protected String getVMInstallTypeId() {
+		return getAttribute(PROP_VM_INSTALL_TYPE_ID, (String) null);
+	}
+
+	protected String getVMInstallId() {
+		return getAttribute(PROP_VM_INSTALL_ID, (String) null);
+	}
+
+	public boolean isUsingDefaultJRE() {
+		return getVMInstallTypeId() == null;
+	}
+
+	public IVMInstall getVMInstall() {
+		if (getVMInstallTypeId() == null)
+			return JavaRuntime.getDefaultVMInstall();
+		try {
+			IVMInstallType vmInstallType = JavaRuntime
+					.getVMInstallType(getVMInstallTypeId());
+			IVMInstall[] vmInstalls = vmInstallType.getVMInstalls();
+			int size = vmInstalls.length;
+			String id = getVMInstallId();
+			for (int i = 0; i < size; i++) {
+				if (id.equals(vmInstalls[i].getId()))
+					return vmInstalls[i];
+			}
+		} catch (Exception e) {
+			// ignore
+		}
+		return null;
+	}
+
+	public abstract IStatus verifyLocation() ;
+	//public abstract IStatus validate(); 
+
+
+	public void setDefaults(IProgressMonitor monitor) {
+		IRuntimeType type = getRuntimeWorkingCopy().getRuntimeType();
+		getRuntimeWorkingCopy()
+				.setLocation(
+						new Path(FrameworkCorePlugin.getPreference("location"+ type.getId())));
+	}
+
+	public void setVMInstall(IVMInstall vmInstall) {
+		if (vmInstall == null) {
+			setVMInstall(null, null);
+		} else
+			setVMInstall(vmInstall.getVMInstallType().getId(),
+					vmInstall.getId());
+	}
+
+	protected void setVMInstall(String typeId, String id) {
+		if (typeId == null)
+			setAttribute(PROP_VM_INSTALL_TYPE_ID, (String) null);
+		else
+			setAttribute(PROP_VM_INSTALL_TYPE_ID, typeId);
+	
+		if (id == null)
+			setAttribute(PROP_VM_INSTALL_ID, (String) null);
+		else
+			setAttribute(PROP_VM_INSTALL_ID, id);
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/FrameworkInstanceConfiguration.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/FrameworkInstanceConfiguration.java
new file mode 100644
index 0000000..e3d630d
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/FrameworkInstanceConfiguration.java
@@ -0,0 +1,241 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
+import org.eclipse.pde.internal.core.target.provisional.ITargetHandle;
+import org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService;
+
+
+public class FrameworkInstanceConfiguration {
+
+	public static final String ADD_BUNDLE = "ADD_BUNDLE";
+	public static final String REMOVE_BUNDLE = "REMOVE_BUNDLE";
+	
+	
+	protected IFolder configPath;
+	protected ITargetDefinition targetDefinition;
+	protected FrameworkInstanceDelegate runtimeInstance;
+	private transient List<PropertyChangeListener> propertyListeners;
+
+	
+	public FrameworkInstanceConfiguration(IFolder path, FrameworkInstanceDelegate runtimeInstance) {
+		super();
+		this.configPath = path;
+		this.runtimeInstance = runtimeInstance;
+	}
+
+
+
+	public ITargetDefinition getTargetDefinition() {
+		try {
+			loadTarget();
+		} catch (CoreException e) {
+		}
+		return targetDefinition;
+	}
+
+	public void setTargetDefinition(ITargetDefinition targetDefinition) {
+		this.targetDefinition = targetDefinition;
+	}
+
+	protected IFolder getFolder() {
+		return configPath;
+	}
+
+	public void load(IFolder folder, IProgressMonitor monitor)
+			throws CoreException {
+
+		targetDefinition = loadTarget();
+		if (targetDefinition == null) {
+			createDefaultTarget();
+		} else {
+			loadTarget();
+		}
+
+
+
+	}
+
+	private ITargetDefinition loadTarget() throws CoreException {
+
+		targetDefinition = null;
+		ITargetPlatformService service = TargetDefinitionUtil.getTargetPlatformService();
+		
+		ITargetHandle[] targets = service.getTargets(new NullProgressMonitor());
+		String name = runtimeInstance.getServer().getName();
+		for (ITargetHandle handle : targets) {
+			if (name.equals(handle.getTargetDefinition().getName())) {
+				targetDefinition = handle.getTargetDefinition();
+			}
+		}
+		return targetDefinition;
+	}
+
+	private void createDefaultTarget() throws CoreException {
+		
+		targetDefinition = runtimeInstance.createDefaultTarget();
+		
+
+	}
+
+	
+
+
+	protected void firePropertyChangeEvent(String propertyName,
+			Object oldValue, Object newValue) {
+		if (propertyListeners == null)
+			return;
+
+		PropertyChangeEvent event = new PropertyChangeEvent(this, propertyName,
+				oldValue, newValue);
+		try {
+			for (PropertyChangeListener listener : propertyListeners) {
+				try {
+					listener.propertyChange(event);
+				} catch (Exception e) {
+					Trace.trace(Trace.SEVERE,
+							"Error firing property change event", e);
+				}
+			}
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error in property event", e);
+		}
+	}
+
+	/**
+	 * Adds a property change listener to this server.
+	 * 
+	 * @param listener
+	 *            java.beans.PropertyChangeListener
+	 */
+	public void addPropertyChangeListener(PropertyChangeListener listener) {
+		if (propertyListeners == null)
+			propertyListeners = new ArrayList<PropertyChangeListener>();
+		propertyListeners.add(listener);
+	}
+
+	/**
+	 * Removes a property change listener from this server.
+	 * 
+	 * @param listener
+	 *            java.beans.PropertyChangeListener
+	 */
+	public void removePropertyChangeListener(PropertyChangeListener listener) {
+		if (propertyListeners != null)
+			propertyListeners.remove(listener);
+	}
+
+	public void importFromPath(IPath path, boolean isTestEnv,
+			IProgressMonitor monitor) throws CoreException {
+		load(path, monitor);
+	}
+
+	public void load(IPath path, IProgressMonitor monitor) throws CoreException {
+		try {
+			monitor = ProgressUtil.getMonitorFor(monitor);
+			monitor.beginTask(Messages.loadingTask, 7);
+
+			// InputStream in = new
+			// FileInputStream(path.append("catalina.policy")
+			// .toFile());
+			// in.read();
+			// in.close();
+			monitor.worked(1);
+			monitor.worked(1);
+
+			if (monitor.isCanceled())
+				return;
+			monitor.done();
+		} catch (Exception e) {
+			Trace.trace(
+					Trace.WARNING,
+					"Could not load Felix configuration from "
+							+ path.toOSString() + ": " + e.getMessage());
+			throw new CoreException(new Status(IStatus.ERROR,
+					FrameworkCorePlugin.PLUGIN_ID, 0, NLS.bind(
+							Messages.errorCouldNotLoadConfiguration,
+							path.toOSString()), e));
+		}
+
+	}
+
+	/**
+	 * Save to the given directory.
+	 * 
+	 * @param path
+	 *            a path
+	 * @param forceDirty
+	 *            boolean
+	 * @param monitor
+	 *            a progress monitor
+	 * @exception CoreException
+	 */
+	protected void save(IPath path, boolean forceDirty, IProgressMonitor monitor)
+			throws CoreException {
+
+	}
+
+	/**
+	 * Save to the given directory. All configuration files are forced to be
+	 * saved.
+	 * 
+	 * @param path
+	 *            Desination path for the configuration files.
+	 * @param monitor
+	 *            A progress monitor
+	 * @exception CoreException
+	 */
+	public void save(IPath path, IProgressMonitor monitor) throws CoreException {
+		save(path, true, monitor);
+	}
+
+	/**
+	 * Save the information held by this object to the given directory.
+	 * 
+	 * @param folder
+	 *            a folder
+	 * @param monitor
+	 *            a progress monitor
+	 * @throws CoreException
+	 */
+	public void save(IFolder folder, IProgressMonitor monitor)
+			throws CoreException {
+	}
+
+	/**
+	 * Return a string representation of this object.
+	 * 
+	 * @return java.lang.String
+	 */
+	public String toString() {
+		return "FrameworkInstanceConfiguration[" + getFolder() + "]";
+	}
+	
+}
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/FrameworkInstanceDelegate.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/FrameworkInstanceDelegate.java
new file mode 100644
index 0000000..a5cf4a2
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/FrameworkInstanceDelegate.java
@@ -0,0 +1,306 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.libra.framework.core.internal.dependency.DependencyUtil;
+import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.core.plugin.ModelEntry;
+import org.eclipse.pde.core.plugin.PluginRegistry;
+import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.internal.Module;
+import org.eclipse.wst.server.core.model.ServerDelegate;
+
+
+public abstract class FrameworkInstanceDelegate extends ServerDelegate implements
+		IOSGIFrameworkInstance {
+
+	public static final String DEFAULT_DEPLOYDIR = "auto";
+
+	private FrameworkInstanceConfiguration configuration;
+
+	public FrameworkInstanceDelegate() {
+		super();
+	}
+
+	@Override
+	public IModule[] getChildModules(IModule[] module) {
+		if (module == null)
+			return null;
+
+		if ("osgi.bundle".equalsIgnoreCase(module[0].getModuleType().getId())) {
+
+			IPluginModelBase modelBase = null;
+			IPluginModelBase[] plugins = PluginRegistry.getActiveModels();
+			for (IPluginModelBase iPluginModelBase : plugins) {
+				if (module[0].getName().equalsIgnoreCase(
+						iPluginModelBase.getBundleDescription().getName())) {
+					modelBase = iPluginModelBase;
+					break;
+				}
+			}
+			// get dependencies
+			if (modelBase != null) {
+				Object[] dependents = DependencyUtil.getDependencies(modelBase
+						.getBundleDescription());
+
+				List<IModule> modules = new ArrayList<IModule>();
+				for (Object dep : dependents) {
+					BundleDescription depBundle = (BundleDescription) dep;
+					ModelEntry entry = PluginRegistry.findEntry(depBundle
+							.getSymbolicName());
+					if (entry.hasWorkspaceModels()) { // isWorkspaceBundle(depBundle)){
+						IPluginModelBase base = entry.getModel();
+						IModule[] iModules = ((Module) module[0])
+								.getModuleFactory().getModules(
+										base.getUnderlyingResource()
+												.getProject(),
+										new NullProgressMonitor());
+						for (IModule iModule : iModules) {
+							modules.add(iModule);
+						}
+						// modelBase e eklemek gerek
+						// module yap liste koy
+					}
+
+				}
+				IModule[] moduleArr=new IModule[modules.size()];
+				modules.toArray(moduleArr);
+				return moduleArr;
+			}
+		}
+		return new IModule[0];
+	}
+
+	@Override
+	public IModule[] getRootModules(IModule module) throws CoreException {
+		if (module == null)
+			return null;
+
+		if ("osgi.bundle".equalsIgnoreCase(module.getModuleType().getId())) {
+
+			IPluginModelBase modelBase = null;
+			IPluginModelBase[] plugins = PluginRegistry.getActiveModels();
+			for (IPluginModelBase iPluginModelBase : plugins) {
+				if (module.getName().equalsIgnoreCase(
+						iPluginModelBase.getBundleDescription().getName())) {
+					modelBase = iPluginModelBase;
+					break;
+				}
+			}
+			// get dependencies
+			if (modelBase != null) {
+				//modelbase bu listeye çıkacaklardan herhangibirinin childimi??
+			}
+		}
+		
+		// TODO - OSAMI If this module is a child composed in a composite,
+		// return the module that represents the parent
+		// if this is the parent then - no action needed. Just return the
+		// composite
+		// if ("osami.bundle".equals(module.getModuleType().getId())) {
+		// IStatus status = canModifyModules(new IModule[] { module }, null);
+		// if (status == null || !status.isOK())
+		// throw new CoreException(status);
+		return new IModule[] { module };
+		// }
+
+		// return null;
+	}
+
+	public IStatus canModifyModules(IModule[] add, IModule[] remove) {
+		if (add != null) {
+			int size = add.length;
+			for (int i = 0; i < size; i++) {
+				IModule module = add[i];
+				if (!"osgi.bundle".equals(module.getModuleType().getId()))
+					return new Status(IStatus.ERROR,
+							FrameworkCorePlugin.PLUGIN_ID, 0,
+							Messages.errorOSGiBundlesOnly, null);
+
+				// TODO - OSAMI After adding faceted projects enable this
+				// check....
+				// MUST CHECK IF THE FRAMEWORK ALLOWS REMOTE MANAGEMENT
+
+				// if (module.getProject() != null) {
+				// status = FacetUtil.verifyFacets(module.getProject(),
+				// getServer());
+				// if (status != null && !status.isOK())
+				// return status;
+				// }
+			}
+		}
+
+		return Status.OK_STATUS;
+	}
+
+	public FrameworkInstanceConfiguration getFrameworkInstanceConfiguration()
+			throws CoreException {
+
+		if (configuration == null) {
+			IFolder folder = getServer().getServerConfiguration();
+			if (folder == null || !folder.exists()) {
+				String path = null;
+				if (folder != null) {
+					path = folder.getFullPath().toOSString();
+					IProject project = folder.getProject();
+					if (project != null && project.exists()
+							&& !project.isOpen())
+						throw new CoreException(
+								new Status(
+										IStatus.ERROR,
+										FrameworkCorePlugin.PLUGIN_ID,
+										0,
+										NLS.bind(
+												Messages.errorConfigurationProjectClosed,
+												path, project.getName()), null));
+				}
+				throw new CoreException(new Status(IStatus.ERROR,
+						FrameworkCorePlugin.PLUGIN_ID, 0, NLS.bind(
+								Messages.errorNoConfiguration, path), null));
+			}
+
+			// String id = getServer().getServerType().getId();
+			configuration = new FrameworkInstanceConfiguration(folder, this);
+
+			try {
+				configuration.load(folder, null);
+			} catch (CoreException ce) {
+				configuration = null;
+				throw ce;
+			}
+		}
+		return configuration;
+
+	}
+
+	public String getInstanceDirectory() {
+		return getAttribute(PROPERTY_INSTANCE_DIR, (String) null);
+	}
+
+	public String getDeployDirectory() {
+		// Default to value used by prior WTP versions
+		return getAttribute(PROPERTY_DEPLOY_DIR, "bundles");
+	}
+
+	public void setInstanceDirectory(String instanceDir) {
+		setAttribute(PROPERTY_INSTANCE_DIR, instanceDir);
+	}
+
+	public void setDeployDirectory(String deployDir) {
+		setAttribute(PROPERTY_DEPLOY_DIR, deployDir);
+	}
+
+	public boolean isDebug() {
+		return getAttribute(PROPERTY_DEBUG, false);
+	}
+
+	@Override
+	public void setDefaults(IProgressMonitor monitor) {
+		super.setDefaults(monitor);
+		setDeployDirectory(DEFAULT_DEPLOYDIR);
+	}
+
+	@Override
+	public void importRuntimeConfiguration(IRuntime runtime,
+			IProgressMonitor monitor) throws CoreException {
+		super.importRuntimeConfiguration(runtime, monitor);
+	}
+
+	@Override
+	public void modifyModules(IModule[] add, IModule[] remove,
+			IProgressMonitor monitor) throws CoreException {
+
+		IStatus status = canModifyModules(add, remove);
+		if (status == null || !status.isOK())
+			throw new CoreException(status);
+
+		if (add != null) {
+			int size = add.length;
+			for (int i = 0; i < size; i++) {
+				// IModule module3 = add[i];
+				// TODO - OSAMI Do something to add the module....
+				// If the framework is running this will require an install + start
+				// Also need to check if framework allows remote management
+				// If an earliver version was already deployed we need to stop+uninstall
+			}
+		}
+
+		if (remove != null) {
+			int size2 = remove.length;
+			for (int j = 0; j < size2; j++) {
+				// IModule module3 = remove[j];
+				// TODO - OSAMI Do something to remove the module....
+				// If the framework is running this will require an stop + uninstall
+				// Also need to check if framework allows remote management
+
+			}
+		}
+		// config.save(config.getFolder(), monitor);
+	}
+
+	
+	public void setJavaProfile(String profileID) {
+		setAttribute(IOSGIFrameworkInstance.PROPERTY_JAVA_PROFILE, profileID);
+	}
+
+	public String getJavaPofile() {
+		return getAttribute(PROPERTY_JAVA_PROFILE, "JavaSE-1.6");
+		
+	}
+	
+	
+	public void setJMXPort(int port) {
+		setAttribute(IOSGIFrameworkInstance.PROPERTY_JMX_PORT, ""+port);
+	}
+
+	public int getJMXPort() {
+		int port = 12345;
+		String portNo =  getAttribute(PROPERTY_JMX_PORT, "12345");
+		try{
+			port =  Integer.parseInt(portNo);
+		}finally{
+		
+		}
+		return port;
+	}
+
+	public void setJMXEnabled(boolean isEnabled) {
+		setAttribute(IOSGIFrameworkInstance.PROPERTY_JMX_ENABLED, isEnabled);
+	}
+
+	public boolean getJMXEnabled() {
+		return  getAttribute(PROPERTY_JMX_ENABLED, true);
+		
+	}
+
+	public abstract ITargetDefinition createDefaultTarget()
+			throws CoreException;
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/IOSGIExecutionEnvironment.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/IOSGIExecutionEnvironment.java
new file mode 100644
index 0000000..25bc9c1
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/IOSGIExecutionEnvironment.java
@@ -0,0 +1,36 @@
+package org.eclipse.libra.framework.core;
+
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
+
+public enum IOSGIExecutionEnvironment {
+	Default, JAVASE6_SERVER;
+
+	@Override
+	public String toString() {
+		switch (this) {
+		case Default:
+			return "Default";
+		case JAVASE6_SERVER:
+			return "JavaSE-1.6-Server";
+		}
+		return this.name();
+	}
+	
+	public static String[] getExecutionEnvironmentIds() {
+
+		IExecutionEnvironment environment[] = JavaRuntime
+				.getExecutionEnvironmentsManager().getExecutionEnvironments();
+		IOSGIExecutionEnvironment[] all = IOSGIExecutionEnvironment.values();
+		String[] envList = new String[environment.length + all.length];
+		int i = 0;
+		for (IOSGIExecutionEnvironment e : all) {
+			envList[i++] = e.toString();
+		}
+		for (IExecutionEnvironment e : environment) {
+			envList[i++] = e.getId();
+		}
+		return envList;
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/IOSGIFramework.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/IOSGIFramework.java
new file mode 100644
index 0000000..0ac2be8
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/IOSGIFramework.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jdt.launching.IVMInstall;
+
+public interface IOSGIFramework {
+	/**
+	 * Return the VM install (installed JRE) that this runtime is using.
+	 * 
+	 * @return the current VM install
+	 */
+	public IVMInstall getVMInstall();
+
+	/**
+	 * Returns <code>true</code> if the runtime is using the default JRE.
+	 * 
+	 * @return <code>true</code> if the runtime is using the default JRE,
+	 *    and <code>false</code> otherwise
+	 * @since 2.0
+	 */
+	public boolean isUsingDefaultJRE();
+	
+	/**
+	 * Returns the runtime classpath that is used by this runtime.
+	 * 
+	 * @return the runtime classpath
+	 */
+	@SuppressWarnings("rawtypes")
+	public List getFrameworkClasspath(IPath configPath);
+	
+	public IStatus validate() ;
+}
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/IOSGIFrameworkInstance.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/IOSGIFrameworkInstance.java
new file mode 100644
index 0000000..3974579
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/IOSGIFrameworkInstance.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core;
+
+import org.eclipse.core.runtime.CoreException;
+
+public interface IOSGIFrameworkInstance {
+
+	
+	public static final String PROPERTY_DEBUG = "debug";
+	public static final String PROPERTY_INSTANCE_DIR = "instanceDir";
+	public static final String PROPERTY_DEPLOY_DIR = "deployDir";
+	public static final String PROPERTY_JAVA_PROFILE = "JAVA_PROFILE";
+	public static final String PROPERTY_JMX_PORT = "jmxPort";
+	public static final String PROPERTY_JMX_ENABLED = "jmxEnabled";
+	
+	/**
+	 * Gets the java profile for the  framework instance.  If not set,
+	 * the instance profile is determined from the JRE setting.  
+	 * 
+	 * @return javaProfile for the framework instance exists. Returns null
+	 * if not set.
+	 */
+	public String getJavaPofile();
+	public void setJavaProfile(String id);
+
+	/**
+	 * Gets the jmx management port for the  framework instance.  If not set,
+	 * the instance profile returns the default value (12345).  
+	 * 
+	 * @return jmx port for the framework instance exists. Returns null
+	 * if not set.
+	 */
+	public int getJMXPort();
+	public void setJMXPort(int port);
+	
+	public boolean getJMXEnabled();
+	public void setJMXEnabled(boolean isEnabled);
+
+	
+	/**
+	 * Gets the directory where the server instance exists.  If not set,
+	 * the instance directory is derived from the testEnvironment setting.  
+	 * 
+	 * @return directory where the server instance exists. Returns null
+	 * if not set.
+	 */
+	public String getInstanceDirectory();
+
+	/**
+	 * Gets the directory to which web applications are to be deployed.
+	 * If relative, it is relative to the runtime base directory for the
+	 * server.
+	 * 
+	 * @return directory where web applications are deployed
+	 */
+	public String getDeployDirectory();
+
+	public boolean isDebug();
+	public FrameworkInstanceConfiguration getFrameworkInstanceConfiguration() throws CoreException;
+}
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/IOSGIFrameworkWorkingCopy.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/IOSGIFrameworkWorkingCopy.java
new file mode 100644
index 0000000..54ab3c3
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/IOSGIFrameworkWorkingCopy.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core;
+
+import org.eclipse.jdt.launching.IVMInstall;
+/**
+ * 
+ */
+public interface IOSGIFrameworkWorkingCopy extends IOSGIFramework {
+	public void setVMInstall(IVMInstall vmInstall);
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/Messages.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/Messages.java
new file mode 100644
index 0000000..356b69b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/Messages.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ *    Copyright (c) 2010, 2011 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *        Naci Dai and Murat Yener, Eteration A.S. 
+ *        Kaloyan Raev, SAP AG - integration with OSGi Framework Editor parts
+ *******************************************************************************/
+package org.eclipse.libra.framework.core;
+
+import org.eclipse.libra.framework.core.FrameworkCorePlugin;
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Translated messages.
+ */
+public class Messages extends NLS {
+
+
+
+	public static String loadingTask;
+	public static String errorCouldNotLoadConfiguration;
+	public static String errorOSGiBundlesOnly;
+	public static String configurationEditorActionAddOsgiModule;
+	public static String errorConfigurationProjectClosed;
+	public static String errorNoConfiguration;
+	
+	public static String OSGIFrameworkInstanceBehaviorDelegate_ServerNotInitialized;
+	public static String OSGIFrameworkInstanceBehaviorDelegate_ServerNotStarted;
+
+	static {
+		NLS.initializeMessages(FrameworkCorePlugin.PLUGIN_ID + ".Messages", Messages.class);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/Messages.properties b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/Messages.properties
new file mode 100644
index 0000000..06bfd3f
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/Messages.properties
@@ -0,0 +1,26 @@
+###############################################################################
+#    Copyright (c) 2010, 2011 Eteration A.S. and others.
+#    All rights reserved. This program and the accompanying materials
+#    are made available under the terms of the Eclipse Public License v1.0
+#    which accompanies this distribution, and is available at
+#    http://www.eclipse.org/legal/epl-v10.html
+#    
+#     Contributors:
+#        IBM Corporation - initial API and implementation
+#           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+#           org.eclipse.jst.server.core
+#           org.eclipse.jst.server.ui
+#           
+#        Naci Dai and Murat Yener, Eteration A.S. 
+#        Kaloyan Raev, SAP AG - integration with OSGi Framework Editor parts
+###############################################################################
+
+# --------------- General UI ---------------
+
+loadingTask=Loading...
+errorCouldNotLoadConfiguration=Could not load configuration
+errorOSGiBundlesOnly=Only osgi bundles are allowed
+configurationEditorActionAddOsgiModule=Add OSGI Bundles
+
+OSGIFrameworkInstanceBehaviorDelegate_ServerNotInitialized=Server not initialized.
+OSGIFrameworkInstanceBehaviorDelegate_ServerNotStarted=Server not started.
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/OSGIFrameworkInstanceBehaviorDelegate.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/OSGIFrameworkInstanceBehaviorDelegate.java
new file mode 100644
index 0000000..1f07e34
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/OSGIFrameworkInstanceBehaviorDelegate.java
@@ -0,0 +1,718 @@
+/*******************************************************************************
+ *    Copyright (c) 2010, 2011 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *        Naci Dai and Murat Yener, Eteration A.S.
+ *        Kaloyan Raev, SAP AG - integration with OSGi Framework Editor parts
+ *******************************************************************************/
+package org.eclipse.libra.framework.core;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.debug.core.DebugEvent;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.IDebugEventSetListener;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.debug.core.model.IProcess;
+import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
+import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
+import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.libra.framework.editor.core.IOSGiFrameworkAdmin;
+import org.eclipse.libra.framework.editor.core.IOSGiFrameworkConsole;
+import org.eclipse.libra.framework.editor.core.model.IBundle;
+import org.eclipse.libra.framework.editor.integration.admin.osgijmx.LaunchOSGiJMXFrameworkAdmin;
+import org.eclipse.libra.framework.editor.integration.console.basic.LaunchBasicOSGiFrameworkConsole;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.internal.IModulePublishHelper;
+import org.eclipse.wst.server.core.model.IModuleFile;
+import org.eclipse.wst.server.core.model.IModuleResource;
+import org.eclipse.wst.server.core.model.IModuleResourceDelta;
+import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
+
+
+@SuppressWarnings("restriction")
+public abstract class OSGIFrameworkInstanceBehaviorDelegate extends ServerBehaviourDelegate implements IModulePublishHelper, IOSGiFrameworkAdmin, IOSGiFrameworkConsole {
+
+	private static final String ATTR_STOP = "stop-server";
+	// the thread used to ping the server to check for startup
+	protected transient PingThread ping = null;
+	protected transient IDebugEventSetListener processListener;
+	
+	private IOSGiFrameworkAdmin admin = null;
+	private IOSGiFrameworkConsole console = null;
+	
+	public abstract  String[] getFrameworkProgramArguments(boolean starting) ;
+	public abstract  String[] getExcludedFrameworkProgramArguments(boolean starting);
+	public abstract  String[] getFrameworkVMArguments();
+	public abstract  String getFrameworkClass() ;
+	
+	protected static int getNextToken(String s, int start) {
+		int i = start;
+		int length = s.length();
+		char lookFor = ' ';
+
+		while (i < length) {
+			char c = s.charAt(i);
+			if (lookFor == c) {
+				if (lookFor == '"')
+					return i + 1;
+				return i;
+			}
+			if (c == '"')
+				lookFor = '"';
+			i++;
+		}
+		return -1;
+	}
+
+	/**
+	 * Merge the given arguments into the original argument string, replacing
+	 * invalid values if they have been changed. Special handling is provided if
+	 * the keepActionLast argument is true and the last vmArg is a simple
+	 * string. The vmArgs will be merged such that the last vmArg is guaranteed
+	 * to be the last argument in the merged string.
+	 * 
+	 * @param originalArg
+	 *            String of original arguments.
+	 * @param vmArgs
+	 *            Arguments to merge into the original arguments string
+	 * @param excludeArgs
+	 *            Arguments to exclude from the original arguments string
+	 * @param keepActionLast
+	 *            If <b>true</b> the vmArguments are assumed to be Framework program
+	 *            arguments, the last of which is the action to perform which
+	 *            must remain the last argument. This only has an impact if the
+	 *            last vmArg is a simple string argument, like
+	 *            &quot;start&quot;.
+	 * @return merged argument string
+	 */
+	public static String mergeArguments(String originalArg, String[] vmArgs,
+			String[] excludeArgs, boolean keepActionLast) {
+		if (vmArgs == null)
+			return originalArg;
+
+		if (originalArg == null)
+			originalArg = "";
+
+		originalArg = concatArgs(originalArg,  vmArgs, keepActionLast) ;
+		originalArg =excludeArgs(originalArg, excludeArgs);
+	
+		return originalArg;
+	}
+	
+	
+	private static String concatArgs(String  initialArgs, String[] newArgs, boolean keepLast) {
+		if(newArgs == null || newArgs.length <= 0)
+			return initialArgs;
+		StringBuffer args = new StringBuffer();
+		List<String> initArgsList = Arrays.asList(DebugPlugin.parseArguments(initialArgs));
+		int i= 0;
+		if (initialArgs != null && initialArgs.length() > 0) {
+			int last= (keepLast? initArgsList.size()-1 : initArgsList.size() );
+			for (i=0; i< last ; i++) {
+				if(i != 0)
+					args.append(' ');
+				args.append(initArgsList.get(i));
+			}
+		}
+		
+		for (String anArg: newArgs) {
+			if(!initArgsList.contains(anArg)){
+				if(i++ != 0)
+					args.append(' ');
+				args.append(anArg);
+			}
+		}
+		
+		if(keepLast && initArgsList.size() >0 ){
+			args.append(' ');
+			args.append(initArgsList.get(initArgsList.size()-1));
+		}
+		return args.toString();
+	}
+	
+	private static String excludeArgs(String  initialArgs, String[] excludeArgs) {
+		if(excludeArgs == null || excludeArgs.length <= 0)
+			return initialArgs;
+		StringBuffer args = new StringBuffer();
+		List<String> excludeArgsList = Arrays.asList(excludeArgs);
+		if (initialArgs != null && initialArgs.length() > 0) {
+			String[] initArgsArray = DebugPlugin.parseArguments(initialArgs);
+			int i=0;
+			for (String anArg : initArgsArray) {
+				if (!excludeArgsList.contains(anArg)) {
+					if(i++ != 0)
+						args.append(' ');
+					args.append(anArg);
+				}
+			}
+		}
+		return args.toString();
+	}
+
+	/**
+	 * Replace the current JRE container classpath with the given entry.
+	 * 
+	 * @param cp
+	 * @param entry
+	 */
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public static void replaceJREContainer(List cp, IRuntimeClasspathEntry entry) {
+		int size = cp.size();
+		for (int i = 0; i < size; i++) {
+			IRuntimeClasspathEntry entry2 = (IRuntimeClasspathEntry) cp.get(i);
+			if (entry2.getPath().uptoSegment(2).isPrefixOf(entry.getPath())) {
+				cp.set(i, entry);
+				return;
+			}
+		}
+
+		cp.add(0, entry);
+	}
+
+	/**
+	 * Merge a single classpath entry into the classpath list.
+	 * 
+	 * @param cp
+	 * @param entry
+	 */
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public static void mergeClasspath(List cp, IRuntimeClasspathEntry entry) {
+		Iterator iterator = cp.iterator();
+		while (iterator.hasNext()) {
+			IRuntimeClasspathEntry entry2 = (IRuntimeClasspathEntry) iterator
+					.next();
+
+			if (entry2.getPath().equals(entry.getPath()))
+				return;
+		}
+
+		cp.add(entry);
+	}
+
+	public OSGIFrameworkInstanceBehaviorDelegate() {
+		super();
+	}
+
+	public void setServerStarted() {
+		setServerState(IServer.STATE_STARTED);
+	}
+
+	public void stopImpl() {
+		if (ping != null) {
+			ping.stop();
+			ping = null;
+		}
+		if (processListener != null) {
+			DebugPlugin.getDefault().removeDebugEventListener(processListener);
+			processListener = null;
+		}
+		admin = null;
+		console = null;
+		setServerState(IServer.STATE_STOPPED);
+	}
+
+	/**
+	 * Cleanly shuts down and terminates the server.
+	 * 
+	 * @param force
+	 *            <code>true</code> to kill the server
+	 */
+	public void stop(boolean force) {
+		if (force) {
+			terminate();
+			return;
+		}
+		int state = getServer().getServerState();
+		// If stopped or stopping, no need to run stop command again
+		if (state == IServer.STATE_STOPPED || state == IServer.STATE_STOPPING)
+			return;
+		else if (state == IServer.STATE_STARTING) {
+			terminate();
+			return;
+		}
+
+		try {
+			if (Trace.isTraceEnabled())
+				Trace.trace(Trace.FINER, "Stopping OSGi Framework");
+			if (state != IServer.STATE_STOPPED)
+				setServerState(IServer.STATE_STOPPING);
+
+			// ILaunchConfiguration launchConfig = ((Server)
+			// getServer()).getLaunchConfiguration(true, null);
+			// ILaunchConfigurationWorkingCopy wc =
+			// launchConfig.getWorkingCopy();
+			//
+			// String args =
+			// renderCommandLine(getRuntimeProgramArguments(false)," ");
+			// wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS,args);
+			// wc.setAttribute("org.eclipse.debug.ui.private", true);
+			// wc.setAttribute(ATTR_STOP, "true");
+			// wc.launch(ILaunchManager.RUN_MODE, new NullProgressMonitor());
+			this.terminate();
+
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error stopping OSGi Framework", e);
+		}
+	}
+
+	/**
+	 * Terminates the server.
+	 */
+	protected void terminate() {
+		if (getServer().getServerState() == IServer.STATE_STOPPED)
+			return;
+
+		try {
+			setServerState(IServer.STATE_STOPPING);
+			if (Trace.isTraceEnabled())
+				Trace.trace(Trace.FINER, "Killing the OSGi Framework process");
+			ILaunch launch = getServer().getLaunch();
+			if (launch != null) {
+				launch.terminate();
+				stopImpl();
+			}
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error killing the process", e);
+		}
+	}
+
+	public IPath getTempDirectory() {
+		return super.getTempDirectory(false);
+	}
+
+	public IPath getBaseDirectory() {
+
+		IPath confDir = getTempDirectory(true);
+		String instancePathStr = getFrameworkInstance().getInstanceDirectory();
+		if (instancePathStr != null) {
+			IPath instanceDir = new Path(getFrameworkInstance()
+					.getInstanceDirectory());
+			if (instanceDir != null)
+				confDir = instanceDir;
+		}
+
+		return confDir;
+	}
+
+	public void initialize(IProgressMonitor monitor) {
+		// do nothing
+	}
+
+	public IOSGIFramework getFramework() {
+		if (getServer().getRuntime() == null)
+			return null;
+
+		return (IOSGIFramework) getServer().getRuntime().loadAdapter(
+				IOSGIFramework.class, null);
+	}
+
+	public IOSGIFrameworkInstance getFrameworkInstance() {
+		return (IOSGIFrameworkInstance) getServer().loadAdapter(
+				IOSGIFrameworkInstance.class, null);
+	}
+
+	public void addProcessListener(final IProcess newProcess) {
+		if (processListener != null || newProcess == null)
+			return;
+
+		processListener = new IDebugEventSetListener() {
+			public void handleDebugEvents(DebugEvent[] events) {
+				if (events != null) {
+					int size = events.length;
+					for (int i = 0; i < size; i++) {
+						if (newProcess != null
+								&& newProcess.equals(events[i].getSource())
+								&& events[i].getKind() == DebugEvent.TERMINATE) {
+							stopImpl();
+						}
+					}
+				}
+			}
+		};
+		DebugPlugin.getDefault().addDebugEventListener(processListener);
+	}
+
+	/**
+	 * Setup for starting the server.
+	 * 
+	 * @param launch
+	 *            ILaunch
+	 * @param launchMode
+	 *            String
+	 * @param monitor
+	 *            IProgressMonitor
+	 * @throws CoreException
+	 *             if anything goes wrong
+	 */
+	public void setupLaunch(ILaunch launch, String launchMode,
+			IProgressMonitor monitor) throws CoreException {
+		if ("true".equals(launch.getLaunchConfiguration().getAttribute(ATTR_STOP, "false")))
+			return;
+		if (getFramework() == null)
+			throw new CoreException(new Status(IStatus.ERROR, FrameworkCorePlugin.PLUGIN_ID, "Can't launch for OSGi Framework"));
+
+		IStatus status = getFramework().validate();
+		if (status != null && status.getSeverity() == IStatus.ERROR)
+			throw new CoreException(status);
+
+		setServerRestartState(false);
+		setServerState(IServer.STATE_STARTING);
+		setMode(launchMode);
+
+		// ping server to check for startup
+		try {
+			String url = "http://" + getServer().getHost();
+			ping = new PingThread(launch, getServer(), url, -1, this);
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Can't ping for OSGi Framework startup.");
+		}
+	}
+
+
+
+
+	/**
+	 * Return a string representation of this object.
+	 * 
+	 * @return java.lang.String
+	 */
+	public String toString() {
+		return "OSGiFrameworkInstance";
+	}
+
+	public void setupLaunchConfiguration(
+			ILaunchConfigurationWorkingCopy workingCopy,
+			IProgressMonitor monitor) throws CoreException {
+		String existingProgArgs = workingCopy.getAttribute(
+				IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS,
+				(String) null);
+		workingCopy.setAttribute(
+				IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS,
+				mergeArguments(existingProgArgs,
+						getFrameworkProgramArguments(true),
+						getExcludedFrameworkProgramArguments(true), true));
+
+		String existingVMArgs = workingCopy.getAttribute(
+				IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS,
+				(String) null);
+		String[] parsedVMArgs = null;
+		if (null != existingVMArgs) {
+			parsedVMArgs = DebugPlugin.parseArguments(existingVMArgs);
+		}
+		String[] configVMArgs = getFrameworkVMArguments();
+
+		workingCopy.setAttribute(
+				IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS,
+				mergeArguments(existingVMArgs, configVMArgs, null, false));
+
+		IOSGIFramework runtime = getFramework();
+		IVMInstall vmInstall = runtime.getVMInstall();
+		if (vmInstall != null)
+			workingCopy.setAttribute(
+					IJavaLaunchConfigurationConstants.ATTR_JRE_CONTAINER_PATH,
+					JavaRuntime.newJREContainerPath(vmInstall)
+							.toPortableString());
+
+		// update classpath
+		IRuntimeClasspathEntry[] originalClasspath = JavaRuntime
+				.computeUnresolvedRuntimeClasspath(workingCopy);
+		int size = originalClasspath.length;
+		List oldCp = new ArrayList(originalClasspath.length + 2);
+		for (int i = 0; i < size; i++)
+			oldCp.add(originalClasspath[i]);
+
+		List cp2 = runtime.getFrameworkClasspath(null);
+		Iterator iterator = cp2.iterator();
+		while (iterator.hasNext()) {
+			IRuntimeClasspathEntry entry = (IRuntimeClasspathEntry) iterator
+					.next();
+			mergeClasspath(oldCp, entry);
+		}
+
+		if (vmInstall != null) {
+			try {
+				String typeId = vmInstall.getVMInstallType().getId();
+				replaceJREContainer(oldCp,
+						JavaRuntime.newRuntimeContainerClasspathEntry(new Path(
+								JavaRuntime.JRE_CONTAINER).append(typeId)
+								.append(vmInstall.getName()),
+								IRuntimeClasspathEntry.BOOTSTRAP_CLASSES));
+			} catch (Exception e) {
+				// ignore
+			}
+
+			IPath jrePath = new Path(vmInstall.getInstallLocation()
+					.getAbsolutePath());
+			if (jrePath != null) {
+				IPath toolsPath = jrePath.append("lib").append("tools.jar");
+				if (toolsPath.toFile().exists()) {
+					IRuntimeClasspathEntry toolsJar = JavaRuntime
+							.newArchiveRuntimeClasspathEntry(toolsPath);
+					// Search for index to any existing tools.jar entry
+					int toolsIndex;
+					for (toolsIndex = 0; toolsIndex < oldCp.size(); toolsIndex++) {
+						IRuntimeClasspathEntry entry = (IRuntimeClasspathEntry) oldCp
+								.get(toolsIndex);
+						if (entry.getType() == IRuntimeClasspathEntry.ARCHIVE
+								&& entry.getPath().lastSegment()
+										.equals("tools.jar")) {
+							break;
+						}
+					}
+					// If existing tools.jar found, replace in case it's
+					// different. Otherwise add.
+					if (toolsIndex < oldCp.size())
+						oldCp.set(toolsIndex, toolsJar);
+					else
+						mergeClasspath(oldCp, toolsJar);
+				}
+			}
+		}
+
+		iterator = oldCp.iterator();
+		List list = new ArrayList();
+		while (iterator.hasNext()) {
+			IRuntimeClasspathEntry entry = (IRuntimeClasspathEntry) iterator
+					.next();
+			try {
+				list.add(entry.getMemento());
+			} catch (Exception e) {
+				Trace.trace(Trace.SEVERE, "Could not resolve classpath entry: "
+						+ entry, e);
+			}
+		}
+
+		workingCopy.setAttribute(
+				IJavaLaunchConfigurationConstants.ATTR_CLASSPATH, list);
+		workingCopy
+				.setAttribute(
+						IJavaLaunchConfigurationConstants.ATTR_DEFAULT_CLASSPATH,
+						false);
+	}
+
+	protected IModuleResource[] getResources(IModule[] module) {
+		return super.getResources(module);
+	}
+
+	protected IModuleResourceDelta[] getPublishedResourceDelta(IModule[] module) {
+		return super.getPublishedResourceDelta(module);
+	}
+
+	/**
+	 * @see ServerBehaviourDelegate#handleResourceChange()
+	 */
+	public void handleResourceChange() {
+		if (getServer().getServerRestartState())
+			return;
+
+		Iterator iterator = getAllModules().iterator();
+		while (iterator.hasNext()) {
+			IModule[] module = (IModule[]) iterator.next();
+			IModuleResourceDelta[] delta = getPublishedResourceDelta(module);
+			if (delta == null || delta.length == 0)
+				continue;
+
+			if (containsNonResourceChange(delta)) {
+				setServerRestartState(true);
+				return;
+			}
+		}
+	}
+
+	protected boolean containsNonResourceChange(IModuleResourceDelta[] delta) {
+		int size = delta.length;
+		for (int i = 0; i < size; i++) {
+			IModuleResourceDelta d = delta[i];
+			if (d.getModuleRelativePath().segmentCount() == 0) {
+				if ("WEB-INF".equals(d.getModuleResource().getName())) {
+					return containsNonResourceChange(d.getAffectedChildren());
+				}
+				continue;
+			}
+			if (d.getModuleResource() instanceof IModuleFile)
+				return true;
+
+			boolean b = containsNonAddChange(d.getAffectedChildren());
+			if (b)
+				return true;
+		}
+		return false;
+	}
+
+	protected boolean containsNonAddChange(IModuleResourceDelta[] delta) {
+		if (delta == null)
+			return false;
+		int size = delta.length;
+		for (int i = 0; i < size; i++) {
+			IModuleResourceDelta d = delta[i];
+			if (d.getModuleResource() instanceof IModuleFile) {
+				if (d.getKind() != IModuleResourceDelta.ADDED)
+					return true;
+			}
+
+			boolean b = containsNonAddChange(d.getAffectedChildren());
+			if (b)
+				return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Cleans the entire work directory for this server. This involves deleting
+	 * all subdirectories of the server's work directory.
+	 * 
+	 * @param monitor
+	 *            a progress monitor
+	 * @return results of the clean operation
+	 * @throws CoreException
+	 */
+	public IStatus cleanFrameworkInstanceWorkDir(IProgressMonitor monitor)
+			throws CoreException {
+		return Status.OK_STATUS;
+	}
+
+	public IPath getPublishDirectory(IModule[] module) {
+		return getServerDeployDirectory();
+	}
+
+	/**
+	 * Gets the directory to which modules should be deployed for this server.
+	 * 
+	 * @return full path to deployment directory for the server
+	 */
+	public IPath getServerDeployDirectory() {
+		return new Path(getFrameworkInstance().getInstanceDirectory());
+	}
+
+	/**
+	 * Gets the directory to which to deploy a module's web application.
+	 * 
+	 * @param module
+	 *            a module
+	 * @return full path to deployment directory for the module
+	 */
+	public IPath getModuleDeployDirectory(IModule module) {
+		return getServerDeployDirectory().append(module.getName());
+	}
+
+	public void setModulePublishState2(IModule[] module, int state) {
+		setModulePublishState(module, state);
+	}
+
+	public Properties loadModulePublishLocations() {
+		Properties p = new Properties();
+		IPath path = getTempDirectory().append("publish.txt");
+		FileInputStream fin = null;
+		try {
+			fin = new FileInputStream(path.toFile());
+			p.load(fin);
+		} catch (Exception e) {
+			// ignore
+		} finally {
+			try {
+				fin.close();
+			} catch (Exception ex) {
+				// ignore
+			}
+		}
+		return p;
+	}
+
+	public void saveModulePublishLocations(Properties p) {
+		IPath path = getTempDirectory().append("publish.txt");
+		FileOutputStream fout = null;
+		try {
+			fout = new FileOutputStream(path.toFile());
+			p.store(fout, "OSGi Framework publish data");
+		} catch (Exception e) {
+			// ignore
+		} finally {
+			try {
+				fout.close();
+			} catch (Exception ex) {
+				// ignore
+			}
+		}
+	}
+	
+	public Map<Long, IBundle> getBundles(IProgressMonitor monitor) throws CoreException {
+		return getAdmin().getBundles(monitor);
+	}
+	
+	public void startBundle(long bundleId) throws CoreException {
+		getAdmin().startBundle(bundleId);
+	}
+	
+	public void stopBundle(long bundleId) throws CoreException {
+		getAdmin().stopBundle(bundleId);
+	}
+	
+	public void refreshBundle(long bundleId) throws CoreException {
+		getAdmin().refreshBundle(bundleId);
+	}
+	
+	public void updateBundle(long bundleId) throws CoreException {
+		getAdmin().updateBundle(bundleId);
+	}
+	
+	public String executeCommand(String command) throws CoreException {
+		return getConsole().executeCommand(command);
+	}
+	
+	private IOSGiFrameworkAdmin getAdmin() throws CoreException {
+		if (admin == null) {
+			admin = new LaunchOSGiJMXFrameworkAdmin(getLaunch());
+		}
+		return admin;
+	}
+	
+	private IOSGiFrameworkConsole getConsole() throws CoreException {
+		if (console == null) {
+			console = new LaunchBasicOSGiFrameworkConsole(getLaunch());
+		}
+		return console;
+	}
+	
+	private ILaunch getLaunch() throws CoreException {
+		IServer server = getServer();
+		if (server == null) {
+			throw new CoreException(new Status(IStatus.ERROR, FrameworkCorePlugin.PLUGIN_ID, 
+					Messages.OSGIFrameworkInstanceBehaviorDelegate_ServerNotInitialized));
+		}
+		
+		ILaunch launch = server.getLaunch();
+		if (launch == null) {
+			throw new CoreException(new Status(IStatus.ERROR, FrameworkCorePlugin.PLUGIN_ID, 
+					Messages.OSGIFrameworkInstanceBehaviorDelegate_ServerNotStarted));
+		}
+		
+		return launch;
+	}
+	
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/OSGIFrameworkInstanceLocatorDelegate.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/OSGIFrameworkInstanceLocatorDelegate.java
new file mode 100644
index 0000000..85bc5cc
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/OSGIFrameworkInstanceLocatorDelegate.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
+import org.eclipse.wst.server.core.IServerType;
+import org.eclipse.wst.server.core.IServerWorkingCopy;
+import org.eclipse.wst.server.core.ServerCore;
+import org.eclipse.wst.server.core.internal.provisional.ServerLocatorDelegate;
+
+/**
+ * 
+ */
+@SuppressWarnings("restriction")
+public class OSGIFrameworkInstanceLocatorDelegate extends ServerLocatorDelegate {
+	public void searchForServers(String host, final IServerSearchListener listener, final IProgressMonitor monitor) {
+		OSGIFrameworkLocatorDelegate.IRuntimeSearchListener listener2 = new OSGIFrameworkLocatorDelegate.IRuntimeSearchListener() {
+			public void runtimeFound(IRuntimeWorkingCopy runtime) {
+				String runtimeTypeId = runtime.getRuntimeType().getId();
+				String serverTypeId = runtimeTypeId.substring(0, runtimeTypeId.length() - 8);
+				IServerType serverType = ServerCore.findServerType(serverTypeId);
+				try {
+					IServerWorkingCopy server = serverType.createServer(serverTypeId, null, runtime, monitor);
+					listener.serverFound(server);
+				} catch (Exception e) {
+					Trace.trace(Trace.WARNING, "Could not create OSGI runtime instance", e);
+				}
+			}
+		};
+		OSGIFrameworkLocatorDelegate.searchForRuntimes2(null, listener2, monitor);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/OSGIFrameworkLocatorDelegate.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/OSGIFrameworkLocatorDelegate.java
new file mode 100644
index 0000000..dd3b82b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/OSGIFrameworkLocatorDelegate.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core;
+
+import java.io.File;
+import java.io.FileFilter;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.wst.server.core.IRuntimeType;
+import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
+import org.eclipse.wst.server.core.ServerCore;
+import org.eclipse.wst.server.core.model.RuntimeLocatorDelegate;
+
+/**
+ * 
+ */
+public abstract class OSGIFrameworkLocatorDelegate extends RuntimeLocatorDelegate {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.wst.server.core.model.IRuntimeFactoryDelegate#getKnownRuntimes
+	 * ()
+	 */
+	public void searchForRuntimes(IPath path, IRuntimeSearchListener listener,
+			IProgressMonitor monitor) {
+		searchForRuntimes2(path, listener, monitor);
+	}
+
+	protected static void searchForRuntimes2(IPath path,
+			IRuntimeSearchListener listener, IProgressMonitor monitor) {
+		File[] files = null;
+		if (path != null) {
+			File f = path.toFile();
+			if (f.exists())
+				files = f.listFiles();
+			else
+				return;
+		} else
+			files = File.listRoots();
+
+		if (files != null) {
+			int size = files.length;
+			int work = 100 / size;
+			int workLeft = 100 - (work * size);
+			for (int i = 0; i < size; i++) {
+				if (monitor.isCanceled())
+					return;
+				if (files[i] != null && files[i].isDirectory())
+					searchDir(listener, files[i], 4, monitor);
+				monitor.worked(work);
+			}
+			monitor.worked(workLeft);
+		} else
+			monitor.worked(100);
+	}
+
+	protected static void searchDir(IRuntimeSearchListener listener, File dir,
+			int depth, IProgressMonitor monitor) {
+		if ("conf".equals(dir.getName())) {
+			IRuntimeWorkingCopy runtime = getRuntimeFromDir(
+					dir.getParentFile(), monitor);
+			if (runtime != null) {
+				listener.runtimeFound(runtime);
+				return;
+			}
+		}
+
+		if (depth == 0)
+			return;
+
+		File[] files = dir.listFiles(new FileFilter() {
+			public boolean accept(File file) {
+				return file.isDirectory();
+			}
+		});
+		if (files != null) {
+			int size = files.length;
+			for (int i = 0; i < size; i++) {
+				if (monitor.isCanceled())
+					return;
+				searchDir(listener, files[i], depth - 1, monitor);
+			}
+		}
+	}
+
+	protected static IRuntimeWorkingCopy getRuntimeFromDir(File dir, IProgressMonitor monitor) {
+		return getRuntimeFromDir(dir, null, monitor);
+	}
+
+	protected static IRuntimeWorkingCopy getRuntimeFromDir(File dir,
+			String runtimeTypes[], IProgressMonitor monitor) {
+
+		for (int i = 0; i < runtimeTypes.length; i++) {
+			try {
+				IRuntimeType runtimeType = ServerCore
+						.findRuntimeType(runtimeTypes[i]);
+				String absolutePath = dir.getAbsolutePath();
+				String id = absolutePath.replace(File.separatorChar, '_')
+						.replace(':', '-');
+				IRuntimeWorkingCopy runtime = runtimeType.createRuntime(id,
+						monitor);
+				runtime.setName(dir.getName());
+				runtime.setLocation(new Path(absolutePath));
+				IOSGIFrameworkWorkingCopy wc = (IOSGIFrameworkWorkingCopy) runtime
+						.loadAdapter(IOSGIFrameworkWorkingCopy.class, null);
+				wc.setVMInstall(JavaRuntime.getDefaultVMInstall());
+				IStatus status = runtime.validate(monitor);
+				if (status == null || status.getSeverity() != IStatus.ERROR)
+					return runtime;
+
+				Trace.trace(Trace.FINER,
+						"False runtime found at " + dir.getAbsolutePath()
+								+ ": " + status.getMessage());
+			} catch (Exception e) {
+				Trace.trace(Trace.SEVERE, "Could not find runtime", e);
+			}
+		}
+		return null;
+	}
+	
+	public static String[] getRuntimeTypes(){
+		return new String[]{};
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/PingThread.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/PingThread.java
new file mode 100644
index 0000000..b08f870
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/PingThread.java
@@ -0,0 +1,134 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core;
+
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.model.IProcess;
+import org.eclipse.wst.server.core.IServer;
+
+/**
+ * Thread used to ping server to test when it is started.
+ */
+public class PingThread {
+	// delay before pinging starts
+	private static final int PING_DELAY = 2000;
+
+	// delay between pings
+	private static final int PING_INTERVAL = 250;
+
+	// maximum number of pings before giving up
+	private int maxPings;
+
+	private boolean stop = false;
+	private String url;
+	private IServer server;
+	private ILaunch launch;
+	private OSGIFrameworkInstanceBehaviorDelegate behaviour;
+
+	/**
+	 * Create a new PingThread.
+	 * 
+	 * @param server
+	 * @param url
+	 * @param maxPings
+	 *            the maximum number of times to try pinging, or -1 to continue
+	 *            forever
+	 * @param behaviour
+	 */
+	public PingThread(ILaunch launch, IServer server, String url, int maxPings,
+			OSGIFrameworkInstanceBehaviorDelegate behaviour) {
+		super();
+		this.server = server;
+		this.url = url;
+		this.maxPings = maxPings;
+		this.behaviour = behaviour;
+		this.launch = launch;
+		Thread t = new Thread("OSGi Framework Launchers Ping Thread") {
+			public void run() {
+				ping();
+			}
+		};
+		t.setDaemon(true);
+		t.start();
+	}
+
+	/**
+	 * Ping the server until it is started. Then set the server state to
+	 * STATE_STARTED.
+	 */
+	protected void ping() {
+		int count = 0;
+		try {
+			Thread.sleep(PING_DELAY);
+		} catch (Exception e) {
+			// ignore
+		}
+
+		while (!stop) {
+			try {
+				if (count == maxPings) {
+					try {
+						server.stop(false);
+					} catch (Exception e) {
+						Trace.trace(Trace.FINEST, "Ping: could not stop server");
+					}
+					stop();
+					break;
+				}
+				count++;
+
+				if (launch.isTerminated()) {
+					behaviour.stop(true);
+					server.stop(true);
+					stop = true;
+					break;
+				} else {
+					Trace.trace(Trace.FINEST, "Ping: pinging " + count);
+					IProcess[] procs = launch.getProcesses();
+					if (procs != null && procs.length > 0) {
+						if (!procs[0].isTerminated()) {
+							behaviour.setServerStarted();
+							stop();
+							break;
+						}
+					}
+				}
+
+			} catch (Exception e) {
+				Trace.trace(Trace.FINEST, "Ping: failed");
+				// pinging failed
+				if (!stop) {
+					try {
+						Thread.sleep(PING_INTERVAL);
+					} catch (InterruptedException e2) {
+
+					}
+				}
+			}
+		}
+
+		stop = true;
+
+	}
+
+	/**
+	 * Tell the pinging to stop.
+	 */
+	public void stop() {
+		Trace.trace(Trace.FINEST, "Ping: stopping");
+		stop = true;
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/ProgressUtil.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/ProgressUtil.java
new file mode 100644
index 0000000..1ee8859
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/ProgressUtil.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core;
+
+import org.eclipse.core.runtime.*;
+/**
+ * Progress Monitor utility.
+ */
+public class ProgressUtil {
+	/**
+	 * ProgressUtil constructor comment.
+	 */
+	private ProgressUtil() {
+		super();
+	}
+
+	/**
+	 * Return a valid progress monitor.
+	 *
+	 * @param monitor org.eclipse.core.runtime.IProgressMonitor
+	 * @return org.eclipse.core.runtime.IProgressMonitor
+	 */
+	public static IProgressMonitor getMonitorFor(IProgressMonitor monitor) {
+		if (monitor == null)
+			return new NullProgressMonitor();
+		return monitor;
+	}
+
+	/**
+	 * Return a sub-progress monitor with the given amount on the
+	 * current progress monitor.
+	 *
+	 * @param monitor org.eclipse.core.runtime.IProgressMonitor
+	 * @param ticks int
+	 * @return org.eclipse.core.runtime.IProgressMonitor
+	 */
+	public static IProgressMonitor getSubMonitorFor(IProgressMonitor monitor, int ticks) {
+		if (monitor == null)
+			return new NullProgressMonitor();
+		if (monitor instanceof NullProgressMonitor)
+			return monitor;
+		return new SubProgressMonitor(monitor, ticks);
+	}
+
+	/**
+	 * Return a sub-progress monitor with the given amount on the
+	 * current progress monitor.
+	 *
+	 * @param monitor org.eclipse.core.runtime.IProgressMonitor
+	 * @param ticks a number of ticks
+	 * @param style a style
+	 * @return org.eclipse.core.runtime.IProgressMonitor
+	 */
+	public static IProgressMonitor getSubMonitorFor(IProgressMonitor monitor, int ticks, int style) {
+		if (monitor == null)
+			return new NullProgressMonitor();
+		if (monitor instanceof NullProgressMonitor)
+			return monitor;
+		return new SubProgressMonitor(monitor, ticks, style);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/TargetDefinitionUtil.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/TargetDefinitionUtil.java
new file mode 100644
index 0000000..6c48c4f
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/TargetDefinitionUtil.java
@@ -0,0 +1,15 @@
+package org.eclipse.libra.framework.core;
+
+import org.eclipse.pde.internal.core.PDECore;
+import org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService;
+
+@SuppressWarnings("restriction")
+public class TargetDefinitionUtil {
+	
+	public static ITargetPlatformService getTargetPlatformService() {
+		ITargetPlatformService service = (ITargetPlatformService) PDECore.getDefault().acquireService(ITargetPlatformService.class.getName());
+		return service;
+	}
+
+
+}
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/Trace.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/Trace.java
new file mode 100644
index 0000000..07029f4
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/Trace.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * Helper class to route trace output.
+ */
+public class Trace {
+	public static final byte CONFIG = 0;
+	public static final byte WARNING = 1;
+	public static final byte SEVERE = 2;
+	public static final byte FINEST = 3;
+	public static final byte FINER = 4;
+	
+	private static final String[] levelNames = new String[] {
+		"CONFIG   ", "WARNING  ", "SEVERE   ", "FINER    ", "FINEST   "};
+	private static final String spacer = "                                   ";
+	
+	private static final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy HH:mm.ss.SSS");
+	
+	protected static int pluginLength = -1;
+
+	/**
+	 * Trace constructor comment.
+	 */
+	private Trace() {
+		super();
+	}
+
+	/**
+	 * Trace the given text.
+	 *
+	 * @param level the trace level
+	 * @param s a message
+	 */
+	public static void trace(byte level, String s) {
+		Trace.trace(level, s, null);
+	}
+
+	/**
+	 * Trace the given message and exception.
+	 *
+	 * @param level the trace level
+	 * @param s a message
+	 * @param t a throwable
+	 */
+	public static void trace(byte level, String s, Throwable t) {
+		if (!FrameworkCorePlugin.getDefault().isDebugging())
+			return;
+
+		trace(FrameworkCorePlugin.PLUGIN_ID, level, s, t);
+	}
+
+	/**
+	 * Trace the given message and exception.
+	 *
+	 * @param level a trace level
+	 * @param s a message
+	 * @param t a throwable
+	 */
+	private static void trace(String pluginId, int level, String s, Throwable t) {
+		if (pluginId == null || s == null)
+			return;
+
+		if (!FrameworkCorePlugin.getDefault().isDebugging())
+			return;
+		
+		StringBuffer sb = new StringBuffer(pluginId);
+		if (pluginId.length() > pluginLength)
+			pluginLength = pluginId.length();
+		else if (pluginId.length() < pluginLength)
+			sb.append(spacer.substring(0, pluginLength - pluginId.length()));
+		sb.append(" ");
+		sb.append(levelNames[level]);
+		sb.append(" ");
+		sb.append(sdf.format(new Date()));
+		sb.append(" ");
+		sb.append(s);
+		//Platform.getDebugOption(ServerCore.PLUGIN_ID + "/" + "resources");
+
+		System.out.println(sb.toString());
+		if (t != null)
+			t.printStackTrace();
+	}
+	
+	/**
+	 * Gets state of debug flag for the plug-in.
+	 * 
+	 * @return true if tracing is enabled
+	 */
+	public static boolean isTraceEnabled() {
+		return FrameworkCorePlugin.getDefault().isDebugging();
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/internal/debug/IModuleVisitor.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/internal/debug/IModuleVisitor.java
new file mode 100644
index 0000000..6f5082d
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/internal/debug/IModuleVisitor.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core.internal.debug;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+
+/**
+ * Visitor interface to process module components
+ */
+public interface IModuleVisitor {
+
+	/**
+	 * Process web component
+	 * @param component web component to process
+	 * @throws CoreException
+	 */
+	void visitWebComponent(IVirtualComponent component) throws CoreException;
+
+	/**
+	 * Post process web component
+	 * @param component web component to process
+	 * @throws CoreException
+	 */
+	void endVisitWebComponent(IVirtualComponent component) throws CoreException;
+
+	/**
+	 * Process archive component.
+	 * @param runtimePath path for component at runtime
+	 * @param workspacePath path to component in workspace
+	 */
+	void visitArchiveComponent(IPath runtimePath, IPath workspacePath);
+
+	/**
+	 * Process dependent component.
+	 * @param runtimePath path for component at runtime
+	 * @param workspacePath path to component in workspace
+	 */
+	void visitDependentComponent(IPath runtimePath, IPath workspacePath);
+
+	/**
+	 * Process web resource.
+	 * @param runtimePath path for resource at runtime
+	 * @param workspacePath path to resource in workspace
+	 */
+	void visitWebResource(IPath runtimePath, IPath workspacePath);
+
+	/**
+	 * Process a content resource from dependent component.
+	 * @param runtimePath path for resource at runtime
+	 * @param workspacePath path to resource in workspace
+	 */
+	void visitDependentContentResource(IPath runtimePath, IPath workspacePath);
+
+	/**
+	 * Process EAR resource.
+	 * @param runtimePath path for resource at runtime
+	 * @param workspacePath path to resource in workspace
+	 */
+	void visitEarResource(IPath runtimePath, IPath workspacePath);
+
+	/**
+	 * Post process EAR resource.
+	 * @param component EAR component to process
+	 * @throws CoreException 
+	 */
+	void endVisitEarComponent(IVirtualComponent component) throws CoreException;
+}
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/internal/debug/ModuleTraverser.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/internal/debug/ModuleTraverser.java
new file mode 100644
index 0000000..a65d451
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/internal/debug/ModuleTraverser.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core.internal.debug;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.libra.framework.core.Trace;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.server.core.IModule;
+
+
+
+public class ModuleTraverser {
+
+	/**
+     * Scans the module using the specified visitor.
+     * 
+     * @param module module to traverse
+     * @param visitor visitor to handle resources
+     * @param monitor a progress monitor
+     * @throws CoreException
+     */
+    public static void traverse(IModule module, IModuleVisitor visitor,
+            IProgressMonitor monitor) throws CoreException {
+        if (module == null || module.getModuleType() == null)
+            return;
+
+        //String typeId = module.getModuleType().getId();
+        IVirtualComponent component = ComponentCore.createComponent(module.getProject());
+
+        if (component == null) {
+            // can happen if project has been closed
+            Trace.trace(Trace.WARNING, "Unable to create component for module "
+                    + module.getName());
+            return;
+        }
+
+        traverseOSGIComponent(component, visitor, monitor);
+        
+    }
+
+ 
+
+    private static void traverseOSGIComponent(IVirtualComponent component,
+            IModuleVisitor visitor, IProgressMonitor monitor)
+            throws CoreException {
+
+        visitor.visitWebComponent(component);
+
+        visitor.endVisitWebComponent(component);
+    }
+}
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/internal/debug/OSGIRuntimeSourcePathComputerDelegate.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/internal/debug/OSGIRuntimeSourcePathComputerDelegate.java
new file mode 100644
index 0000000..531c7d9
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/internal/debug/OSGIRuntimeSourcePathComputerDelegate.java
@@ -0,0 +1,160 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core.internal.debug;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.sourcelookup.ISourceContainer;
+import org.eclipse.debug.core.sourcelookup.ISourcePathComputerDelegate;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.ServerUtil;
+
+
+/**
+ * 
+ */
+public class OSGIRuntimeSourcePathComputerDelegate implements
+		ISourcePathComputerDelegate {
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public ISourceContainer[] computeSourceContainers(
+			ILaunchConfiguration configuration, IProgressMonitor monitor)
+			throws CoreException {
+		IServer server = ServerUtil.getServer(configuration);
+
+		SourcePathComputerVisitor visitor = new SourcePathComputerVisitor(configuration);
+
+		IModule[] modules = server.getModules();
+		for (int i = 0; i < modules.length; i++) {
+			ModuleTraverser.traverse(modules[i], visitor, monitor);
+		}
+
+		return visitor.getSourceContainers();
+	}
+
+	class SourcePathComputerVisitor implements IModuleVisitor {
+
+		final ILaunchConfiguration configuration;
+
+		/**
+		 * List<IRuntimeClasspathEntry> of unresolved IRuntimeClasspathEntries
+		 */
+		List runtimeClasspath = new ArrayList();
+
+		SourcePathComputerVisitor(ILaunchConfiguration configuration) {
+			this.configuration = configuration;
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		public void visitWebComponent(IVirtualComponent component)
+				throws CoreException {
+			IProject project = component.getProject();
+			if (project.hasNature(JavaCore.NATURE_ID)) {
+				IJavaProject javaProject = JavaCore.create(project);
+				runtimeClasspath.add(JavaRuntime
+						.newDefaultProjectClasspathEntry(javaProject));
+			}
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		public void endVisitWebComponent(IVirtualComponent component)
+				throws CoreException {
+			// do nothing
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		public void visitArchiveComponent(IPath runtimePath, IPath workspacePath) {
+			// do nothing
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		public void visitDependentComponent(IPath runtimePath,
+				IPath workspacePath) {
+			// do nothing
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		public void visitWebResource(IPath runtimePath, IPath workspacePath) {
+			// do nothing
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		public void visitDependentContentResource(IPath runtimePath, IPath workspacePath) {
+			// do nothing
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		public void visitEarResource(IPath runtimePath, IPath workspacePath) {
+			// do nothing
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		public void endVisitEarComponent(IVirtualComponent component)
+				throws CoreException {
+			// do nothing
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		public void visitClasspathEntry(IPath rtFolder, IClasspathEntry entry) {
+			// do nothing
+		}
+
+		ISourceContainer[] getSourceContainers() throws CoreException {
+			runtimeClasspath.addAll(Arrays.asList(JavaRuntime
+					.computeUnresolvedSourceLookupPath(configuration)));
+			IRuntimeClasspathEntry[] entries = (IRuntimeClasspathEntry[]) runtimeClasspath
+					.toArray(new IRuntimeClasspathEntry[runtimeClasspath.size()]);
+			IRuntimeClasspathEntry[] resolved = JavaRuntime
+					.resolveSourceLookupPath(entries, configuration);
+			return JavaRuntime.getSourceContainers(resolved);
+		}
+
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/internal/dependency/DependencyUtil.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/internal/dependency/DependencyUtil.java
new file mode 100644
index 0000000..5866f35
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/internal/dependency/DependencyUtil.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core.internal.dependency;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.osgi.service.resolver.BundleSpecification;
+import org.eclipse.osgi.service.resolver.ExportPackageDescription;
+
+public class DependencyUtil {
+
+	public static Object[] getDependencies(BundleDescription bundleDescription) {
+
+		if (bundleDescription == null) {
+			return new BundleDescription[0];
+		}
+
+		List<Object> c = getDescription(bundleDescription.getRequiredBundles());
+		c.addAll(getExportedDescription(bundleDescription,
+				bundleDescription.getResolvedImports()));
+
+		if (bundleDescription.getHost() != null) {
+			c.add(bundleDescription.getHost().getSupplier());
+		}
+
+		return c.toArray(new Object[c.size()]);
+	}
+
+	public static List<Object> getDescription(
+			BundleSpecification[] specifications) {
+		ArrayList<Object> descriptionList = new ArrayList<Object>();
+		for (int i = 0; i < specifications.length; i++) {
+			BundleSpecification specification = specifications[i];
+			if (specification.getSupplier() == null) {
+				// We can't get a description, so just keep the bundle
+				// specification
+				descriptionList.add(specification);
+			} else {
+				descriptionList.add(specification.getSupplier());
+			}
+		}
+		return descriptionList;
+	}
+
+	private static Set<BundleDescription> getExportedDescription(
+			BundleDescription element,
+			ExportPackageDescription[] exportedPackages) {
+		Set<BundleDescription> descriptionList = new HashSet<BundleDescription>();
+		for (int i = 0; i < exportedPackages.length; i++) {
+			ExportPackageDescription exportedPackage = exportedPackages[i];
+			if (!element.getLocation().equals(
+					exportedPackage.getExporter().getLocation())) {
+				descriptionList.add(exportedPackage.getExporter());
+			}
+		}
+		return descriptionList;
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/launching/LaunchConfigurationDelegate.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/launching/LaunchConfigurationDelegate.java
new file mode 100644
index 0000000..aedf0d5
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/launching/LaunchConfigurationDelegate.java
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core.launching;
+
+import java.io.File;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate;
+import org.eclipse.jdt.launching.ExecutionArguments;
+import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jdt.launching.IVMRunner;
+import org.eclipse.jdt.launching.VMRunnerConfiguration;
+import org.eclipse.jst.server.core.ServerProfilerDelegate;
+import org.eclipse.libra.framework.core.OSGIFrameworkInstanceBehaviorDelegate;
+import org.eclipse.libra.framework.core.Trace;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.ServerCore;
+import org.eclipse.wst.server.core.ServerUtil;
+
+
+/**
+ * 
+ */
+public class LaunchConfigurationDelegate extends
+		AbstractJavaLaunchConfigurationDelegate {
+
+	public void launch(ILaunchConfiguration configuration, String mode,
+			ILaunch launch, IProgressMonitor monitor) throws CoreException {
+		IServer server = ServerUtil.getServer(configuration);
+		
+		if (server == null) {
+			Trace.trace(Trace.FINEST,
+					"Launch configuration could not find runtime instance");
+		}
+
+//      This should be handled by the action that starts/debugs not here
+//		if (server.shouldPublish() && ServerCore.isAutoPublishing())
+//			server.publish(IServer.PUBLISH_INCREMENTAL, monitor);
+
+		OSGIFrameworkInstanceBehaviorDelegate oribd = (OSGIFrameworkInstanceBehaviorDelegate) server
+				.loadAdapter(OSGIFrameworkInstanceBehaviorDelegate.class, null);
+
+		String mainTypeName = oribd.getFrameworkClass();
+
+		IVMInstall vm = verifyVMInstall(configuration);
+
+		IVMRunner runner = vm.getVMRunner(mode);
+		if (runner == null)
+			runner = vm.getVMRunner(ILaunchManager.RUN_MODE);
+
+		File workingDir = verifyWorkingDirectory(configuration);
+		String workingDirName = null;
+		if (workingDir != null)
+			workingDirName = workingDir.getAbsolutePath();
+
+		// Program & VM args
+		String pgmArgs = getProgramArguments(configuration);
+		String vmArgs = getVMArguments(configuration);
+		String[] envp = getEnvironment(configuration);
+
+		ExecutionArguments execArgs = new ExecutionArguments(vmArgs, pgmArgs);
+
+		// VM-specific attributes
+		Map vmAttributesMap = getVMSpecificAttributesMap(configuration);
+
+		// Classpath
+		String[] classpath = getClasspath(configuration);
+
+		// Create VM config
+		VMRunnerConfiguration runConfig = new VMRunnerConfiguration(
+				mainTypeName, classpath);
+		runConfig.setProgramArguments(execArgs.getProgramArgumentsArray());
+		runConfig.setVMArguments(execArgs.getVMArgumentsArray());
+		runConfig.setWorkingDirectory(workingDirName);
+		runConfig.setEnvironment(envp);
+		runConfig.setVMSpecificAttributesMap(vmAttributesMap);
+
+		// Bootpath
+		String[] bootpath = getBootpath(configuration);
+		if (bootpath != null && bootpath.length > 0)
+			runConfig.setBootClassPath(bootpath);
+
+		setDefaultSourceLocator(launch, configuration);
+
+		if (ILaunchManager.PROFILE_MODE.equals(mode)) {
+			try {
+				ServerProfilerDelegate.configureProfiling(launch, vm,
+						runConfig, monitor);
+			} catch (CoreException ce) {
+				oribd.stopImpl();
+				throw ce;
+			}
+		}
+
+		// Launch the configuration
+		oribd.setupLaunch(launch, mode, monitor);
+		try {
+			runner.run(runConfig, launch, monitor);
+			oribd.addProcessListener(launch.getProcesses()[0]);
+		} catch (Exception e) {
+			// Ensure we don't continue to think the server is starting
+			oribd.stopImpl();
+		}
+	}
+	
+	
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/launching/LaunchableAdapterDelegate.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/launching/LaunchableAdapterDelegate.java
new file mode 100644
index 0000000..19baf12
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/launching/LaunchableAdapterDelegate.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core.launching;
+
+import org.eclipse.libra.framework.core.IOSGIFrameworkInstance;
+import org.eclipse.libra.framework.core.Trace;
+import org.eclipse.wst.server.core.IModuleArtifact;
+import org.eclipse.wst.server.core.IServer;
+
+
+/**
+ * Launchable adapter delegate for OSGi resources.
+ */
+public class LaunchableAdapterDelegate extends
+		org.eclipse.wst.server.core.model.LaunchableAdapterDelegate {
+	/*
+	 * @see LaunchableAdapterDelegate#getLaunchable(IServer, IModuleArtifact)
+	 */
+	public Object getLaunchable(IServer server, IModuleArtifact moduleObject) {
+		Trace.trace(Trace.FINER, "IOSGIFrameworkInstance Launchable Adapter " + server + "-"
+				+ moduleObject);
+		if (server.getAdapter(IOSGIFrameworkInstance.class) == null)
+			return null;
+		// if (!(moduleObject instanceof Servlet) &&
+		// !(moduleObject instanceof WebResource))
+		return null;
+
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/module/OsgiModuleDeployable.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/module/OsgiModuleDeployable.java
new file mode 100644
index 0000000..2d48722
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/module/OsgiModuleDeployable.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core.module;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.web.internal.deployables.FlatComponentDeployable;
+
+@SuppressWarnings("restriction")
+public class OsgiModuleDeployable extends FlatComponentDeployable {
+
+
+	IVirtualComponent component;
+	
+	public OsgiModuleDeployable(IProject project, IVirtualComponent component) {
+		super(project);
+		this.component = component;
+	}
+
+	public String getVersion() {
+		IFacetedProject facetedProject = null;
+		try {
+			facetedProject = ProjectFacetsManager.create(component.getProject());
+			if (facetedProject !=null && ProjectFacetsManager.isProjectFacetDefined("osgi.bundle")) {
+				IProjectFacet projectFacet = ProjectFacetsManager.getProjectFacet("osgi.bundle");
+				return facetedProject.getInstalledVersion(projectFacet).getVersionString();
+			}
+		} catch (Exception e) {
+			//Ignore
+		}
+		return "1.0"; //$NON-NLS-1$
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/module/OsgiModuleDeployableFactory.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/module/OsgiModuleDeployableFactory.java
new file mode 100644
index 0000000..ab5fc62
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/module/OsgiModuleDeployableFactory.java
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core.module;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.libra.framework.core.Trace;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.internal.StructureEdit;
+import org.eclipse.wst.common.componentcore.internal.resources.VirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.model.ModuleDelegate;
+import org.eclipse.wst.server.core.util.ProjectModuleFactoryDelegate;
+
+
+public class OsgiModuleDeployableFactory extends ProjectModuleFactoryDelegate {
+
+	List<OsgiModuleDeployable> moduleDelegates = new ArrayList<OsgiModuleDeployable>();
+
+	@Override
+	public ModuleDelegate getModuleDelegate(IModule module) {
+		for (OsgiModuleDeployable omd : moduleDelegates) {
+			if (module == omd.getModule())
+				return omd;
+		}
+		return null;
+	}
+
+	@Override
+	protected IModule[] createModules(IProject project) {
+		IVirtualComponent component = ComponentCore.createComponent(project);
+		if (component == null) {
+			component = new VirtualComponent(project, new Path("/")); //$NON-NLS-1$
+		}
+		if (component != null) {
+			return createModuleDelegates(component);
+		}
+		return null;
+	}
+
+	private IModule[] createModuleDelegates(IVirtualComponent component) {
+		if (component == null) {
+			return null;
+		}
+		OsgiModuleDeployable moduleDelegate = null;
+		IModule module = null;
+		try {
+			if (isValidModule(component.getProject())) {
+				moduleDelegate = new OsgiModuleDeployable(
+						component.getProject(), component);
+				module = createModule(component.getName(), component.getName(),
+						"osgi.bundle", moduleDelegate.getVersion(),
+						moduleDelegate.getProject());
+				moduleDelegate.initialize(module);
+
+			}
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, e.getMessage(), e);
+		} finally {
+			if (module != null) {
+				if (getModuleDelegate(module) == null)
+					moduleDelegates.add(moduleDelegate);
+			}
+		}
+		if (module == null)
+			return null;
+		return new IModule[] { module };
+	}
+
+	
+	private boolean isValidModule(IProject project) {
+		try {
+			IFacetedProject facetedProject = ProjectFacetsManager
+					.create(project);
+			if (facetedProject == null)
+				return false;
+			IProjectFacet webFacet = ProjectFacetsManager
+					.getProjectFacet("osgi.bundle");
+			return facetedProject.hasProjectFacet(webFacet);
+		} catch (Exception e) {
+			return false;
+		}
+	}
+	
+	/**
+	 * Returns the list of resources that the module should listen to
+	 * for state changes. The paths should be project relative paths.
+	 * Subclasses can override this method to provide the paths.
+	 *
+	 * @return a possibly empty array of paths
+	 */
+	@Override
+	protected IPath[] getListenerPaths() {
+		return new IPath[] {
+			new Path(".project"), // nature //$NON-NLS-1$
+			new Path(StructureEdit.MODULE_META_FILE_NAME), // component
+			new Path(".settings/org.eclipse.wst.common.project.facet.core.xml") // facets //$NON-NLS-1$
+		};
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/publish/PublishHelper.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/publish/PublishHelper.java
new file mode 100644
index 0000000..a0984cc
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/publish/PublishHelper.java
@@ -0,0 +1,330 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core.publish;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.channels.FileChannel;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.libra.framework.core.FrameworkInstanceConfiguration;
+import org.eclipse.pde.core.IModel;
+import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.core.plugin.ModelEntry;
+import org.eclipse.pde.core.plugin.PluginRegistry;
+import org.eclipse.pde.internal.core.WorkspaceModelManager;
+import org.eclipse.pde.internal.core.exports.FeatureExportInfo;
+import org.eclipse.pde.internal.core.exports.PluginExportOperation;
+import org.eclipse.pde.internal.core.target.provisional.IResolvedBundle;
+import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
+import org.eclipse.pde.internal.ui.PDEPluginImages;
+import org.eclipse.pde.internal.ui.PDEUIMessages;
+import org.eclipse.ui.progress.IProgressConstants;
+import org.eclipse.wst.server.core.IModule;
+
+@SuppressWarnings("restriction")
+public abstract class PublishHelper {
+
+	protected abstract IPath getPublishFolder();
+
+
+	public String getServerModules(List modules, String prefix, String spacer) {
+		StringBuilder builder = new StringBuilder();
+		for (Object object : modules) {
+			IModule[] moduleArr = (IModule[]) object;
+			for (IModule module : moduleArr) {
+				if (builder.length() > 0)
+					builder.append(spacer); //$NON-NLS-1$
+				IPluginModelBase[] models = PluginRegistry.getActiveModels();
+				IPath publishFolder = getPublishFolder();
+				for (IPluginModelBase iPluginModelBase : models) {
+					if (iPluginModelBase.getBundleDescription().getName()
+							.equalsIgnoreCase(module.getName())) {
+						if (builder.indexOf(iPluginModelBase.getPluginBase()
+								.getId()
+								+ "_"
+								+ iPluginModelBase.getPluginBase().getVersion()
+								+ ".jar") < 0) {
+							builder.append(prefix
+									+ publishFolder.append(
+											iPluginModelBase.getPluginBase()
+													.getId()
+													+ "_"
+													+ iPluginModelBase
+															.getPluginBase()
+															.getVersion()
+													+ ".jar").toOSString());
+							break;
+						}
+					}
+				}
+			}
+		}
+		return builder.toString();
+	}
+
+	public String getTargetBundles(FrameworkInstanceConfiguration config,
+			String prefix, String spacer) {
+		StringBuffer buffer = new StringBuffer();
+		String[] paths = getTargetBundlePaths(config);
+		for (int i = 0; i < paths.length; i++) {
+			String path = paths[i];
+			if (buffer.length() > 0)
+				buffer.append(spacer); //$NON-NLS-1$
+			buffer.append(prefix + path);
+		}
+		return buffer.toString();
+	}
+
+
+
+	public String[] getTargetBundlePaths(FrameworkInstanceConfiguration config) {
+		List<String> all = new ArrayList<String>();
+		ITargetDefinition targetDefinition = config.getTargetDefinition();
+		targetDefinition.resolve(new NullProgressMonitor());
+		IResolvedBundle[] targetBundles = targetDefinition.getBundles();
+		for (IResolvedBundle b : targetBundles) {
+			if (b.getStatus().getSeverity() == IStatus.OK) {
+				all.add(b.getBundleInfo().getLocation().getRawPath());
+			}
+
+		}
+		return all.toArray(new String[all.size()]);
+	}
+	
+	public IResolvedBundle[] getTargetBundles(FrameworkInstanceConfiguration config) {
+		List<String> all = new ArrayList<String>();
+		ITargetDefinition targetDefinition = config.getTargetDefinition();
+		targetDefinition.resolve(new NullProgressMonitor());
+		IResolvedBundle[] targetBundles = targetDefinition.getBundles();
+		return targetBundles;
+	}
+
+
+	public String[] getTargetBundleIds(FrameworkInstanceConfiguration config) {
+		List<String> all = new ArrayList<String>();
+		ITargetDefinition targetDefinition = config.getTargetDefinition();
+		targetDefinition.resolve(new NullProgressMonitor());
+		IResolvedBundle[] targetBundles = targetDefinition.getBundles();
+		for (IResolvedBundle b : targetBundles) {
+			if (b.getStatus().getSeverity() == IStatus.OK) {
+				all.add(b.getBundleInfo().getSymbolicName());
+			}
+
+		}
+		return all.toArray(new String[all.size()]);
+	}
+
+
+	public void exportBundles(List modules,
+			FrameworkInstanceConfiguration config, IPath location) {
+		exportBundles(modules, config, location, null);
+	}
+
+	public void exportBundles(List modules,
+			FrameworkInstanceConfiguration config, final IPath location,
+			final IPath tmpLocation) {
+
+		final FeatureExportInfo info = new FeatureExportInfo();
+		info.toDirectory = true;
+		info.useJarFormat = true;
+		info.exportSource = true;
+		info.exportSourceBundle = false;
+		info.allowBinaryCycles = true;
+		info.useWorkspaceCompiledClasses = true;
+
+		info.destinationDirectory = tmpLocation == null ? location
+				.makeAbsolute().toOSString() : tmpLocation.makeAbsolute()
+				.toOSString();
+
+		List<Object> allWsBundles = new ArrayList<Object>();
+		List<IProject> allBinBundles = new ArrayList<IProject>();
+
+		for (Object module : modules) {
+			try {
+				IModule[] moduleArr = (IModule[]) module;
+
+				for (IModule iModule : moduleArr) {
+					IProject project = iModule.getProject();
+
+					IPluginModelBase pmb = PluginRegistry.findModel(project);
+					ModelEntry entry = null;
+					if(pmb != null)
+					 entry = PluginRegistry.findEntry(pmb
+							.getBundleDescription().getSymbolicName());
+					if (!WorkspaceModelManager.isBinaryProject(project)
+							&& WorkspaceModelManager.isPluginProject(project)) {
+						if (entry.getModel() != null
+								&& isValidModel(entry.getModel())
+								&& hasBuildProperties((IPluginModelBase) entry
+										.getModel())) {
+
+							allWsBundles.add(entry.getModel());
+						} else {
+							allBinBundles.add(project);
+						}
+					} else if (WorkspaceModelManager.isBinaryProject(project)
+							&& WorkspaceModelManager.isPluginProject(project)) {
+						allBinBundles.add(project);
+					}
+				}
+			} catch (SecurityException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+				// } catch (NoSuchMethodException e) {
+				// // TODO Auto-generated catch block
+				// e.printStackTrace();
+			} catch (IllegalArgumentException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+
+		copyBinaryJars(allBinBundles, (tmpLocation == null ? location
+				: tmpLocation));
+		info.items = allWsBundles.toArray();
+		info.signingInfo = null;
+		info.qualifier = "qualifier";
+
+		final PluginExportOperation job = new PluginExportOperation(info,
+				PDEUIMessages.PluginExportJob_name);
+		job.setUser(true);
+		job.setRule(ResourcesPlugin.getWorkspace().getRoot());
+		job.setProperty(IProgressConstants.ICON_PROPERTY,
+				PDEPluginImages.DESC_PLUGIN_OBJ);
+		job.addJobChangeListener(new JobChangeAdapter() {
+			@Override
+			public void done(IJobChangeEvent event) {
+				if (event.getResult().isOK()) {
+					try {
+						if (tmpLocation != null) {
+							// MOVE ALL
+							File sourceFiles = tmpLocation.append("/plugins").toFile();
+							for (File jars : sourceFiles.listFiles()) {
+								File destFile = location.append(jars.getName()).toFile();
+								
+								if (!destFile.exists()) {
+									destFile.createNewFile();
+								}
+								
+								FileChannel source = null;
+								FileChannel destination = null;
+								try {
+									source = new FileInputStream(jars)
+									.getChannel();
+									destination = new FileOutputStream(destFile)
+									.getChannel();
+									destination.transferFrom(source, 0,
+											source.size());
+								} finally {
+									if (source != null) {
+										source.close();
+									}
+									if (destination != null) {
+										destination.close();
+									}
+								}
+							}
+						} else {
+						}
+					} catch (Exception e) {
+
+					}
+				}
+			}
+		});
+		job.schedule();
+
+	}
+
+	private void copyBinaryJars(List<IProject> list, IPath location) {
+		// TODO Auto-generated method stub
+		FileChannel inChannel = null;
+		FileChannel outChannel = null;
+		try {
+			for (IProject project : list) {
+				for (IResource resource : project.members(true)) {
+					if (("jar".equalsIgnoreCase(resource.getFileExtension()))) {
+						String jarId = "";
+						IPluginModelBase[] models = PluginRegistry
+								.getWorkspaceModels();
+						for (IPluginModelBase iPluginModelBase : models) {
+							if (iPluginModelBase
+									.getPluginBase()
+									.getId()
+									.equalsIgnoreCase(
+											resource.getProject().getName())) {
+								iPluginModelBase.getPluginBase().getId();
+								jarId = iPluginModelBase.getPluginBase()
+										.getId()
+										+ "_"
+										+ iPluginModelBase.getPluginBase()
+												.getVersion() + ".jar";
+							}
+						}
+
+						inChannel = new FileInputStream(new File(
+								resource.getLocationURI())).getChannel();
+						outChannel = new FileOutputStream(new File(location
+								.append(jarId).makeAbsolute()
+								.toPortableString())).getChannel();
+						inChannel.transferTo(0, inChannel.size(), outChannel);
+						break;
+					}
+				}
+			}
+		} catch (IOException e) {
+			e.printStackTrace();
+		} catch (CoreException e) {
+			e.printStackTrace();
+		} finally {
+			if (inChannel != null)
+				try {
+					inChannel.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			if (outChannel != null)
+				try {
+					outChannel.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+		}
+	}
+
+	private boolean hasBuildProperties(IPluginModelBase model) {
+		File file = new File(model.getInstallLocation(), "build.properties"); //$NON-NLS-1$
+		return file.exists();
+	}
+
+	protected boolean isValidModel(IModel model) {
+		return model != null && model instanceof IPluginModelBase;
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/publish/PublishTask.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/publish/PublishTask.java
new file mode 100644
index 0000000..93c8ffb
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/publish/PublishTask.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.core.publish;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.model.PublishOperation;
+import org.eclipse.wst.server.core.model.PublishTaskDelegate;
+
+public class PublishTask extends PublishTaskDelegate {
+	public PublishOperation[] getTasks(IServer server, int kind, List modules, List kindList) {
+		if (modules == null)
+			return null;
+
+		List<PublishOperation> tasks = new ArrayList<PublishOperation>();
+		
+		return (PublishOperation[]) tasks.toArray(new PublishOperation[tasks.size()]);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.editor.core/.classpath b/plugins/org.eclipse.libra.framework.editor.core/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.core/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.libra.framework.editor.core/.project b/plugins/org.eclipse.libra.framework.editor.core/.project
new file mode 100644
index 0000000..f24d34e
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.core/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.libra.framework.editor.core</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>

+	</natures>

+</projectDescription>

diff --git a/plugins/org.eclipse.libra.framework.editor.core/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.libra.framework.editor.core/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..fae65f9
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.core/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Wed Oct 05 20:16:09 EEST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.libra.framework.editor.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.libra.framework.editor.core/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..de648e5
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.core/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.libra.framework.editor.core
+Bundle-Version: 0.1.0.qualifier
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.libra.framework.editor.core;version="0.1.0",
+ org.eclipse.libra.framework.editor.core.model;version="0.1.0"
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)"
+Bundle-Vendor: %Bundle-Vendor
+Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.libra.framework.editor.core/build.properties b/plugins/org.eclipse.libra.framework.editor.core/build.properties
new file mode 100644
index 0000000..aa1a008
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.core/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.properties
diff --git a/plugins/org.eclipse.libra.framework.editor.core/plugin.properties b/plugins/org.eclipse.libra.framework.editor.core/plugin.properties
new file mode 100644
index 0000000..98d1c57
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.core/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2011 SAP AG.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     Kaloyan Raev (SAP AG) - initial API and implementation
+###############################################################################
+Bundle-Name = OSGi Framework Editor Core (Incubation)
+Bundle-Vendor = Eclipse Web Tools Platform
diff --git a/plugins/org.eclipse.libra.framework.editor.core/pom.xml b/plugins/org.eclipse.libra.framework.editor.core/pom.xml
new file mode 100644
index 0000000..7d3ae65
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.core/pom.xml
@@ -0,0 +1,33 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<artifactId>org.eclipse.libra_parent</artifactId>
+		<groupId>org.eclipse.libra</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>../../development/org.eclipse.libra.releng/pom.xml</relativePath>
+	</parent>
+
+	<artifactId>org.eclipse.libra.framework.editor.core</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<name>OSGi Framework Editor Core Plug-in</name>
+	<version>0.1.0-SNAPSHOT</version>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-source-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>findbugs-maven-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-pmd-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+</project>
diff --git a/plugins/org.eclipse.libra.framework.editor.core/src/org/eclipse/libra/framework/editor/core/IOSGiFrameworkAdmin.java b/plugins/org.eclipse.libra.framework.editor.core/src/org/eclipse/libra/framework/editor/core/IOSGiFrameworkAdmin.java
new file mode 100644
index 0000000..fee0e04
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.core/src/org/eclipse/libra/framework/editor/core/IOSGiFrameworkAdmin.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2011 SAP AG
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SAP AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.core;
+
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.libra.framework.editor.core.model.IBundle;
+
+/**
+ * The methods of this interface are called by the <i>Bundle Information</i> and
+ * <i>Bundle Dependency Graph</i> editor parts to retrieve and manage the state
+ * of the bundles in the OSGi framework.
+ * 
+ * <p>
+ * The editor parts get a reference to this interface by trying to adapt the
+ * {@code IServer} instance to this interface, i.e. by calling something like:
+ * {@code getServer().loadAdapter(IOSGiFrameworkAdmin.class, null)}.
+ * </p>
+ * 
+ * <p>
+ * Server runtimes that integrate the <i>Bundle Information</i> and <i>Bundle
+ * Dependency Graph</i> editor parts must implement this interface in order to
+ * feed the editor with the required capabilities for this runtime. The easiest
+ * way to make this implementation available to the editor parts is to implement
+ * this interface in either the {@code ServerDelegate} or the
+ * {@code ServerBehaviorDelegate} classes.
+ * </p>
+ * 
+ * @noextend This interface is not intended to be extended by clients.
+ * 
+ * @author Kaloyan Raev
+ */
+public interface IOSGiFrameworkAdmin {
+
+	/**
+	 * Retrieves the bundle state of the OSGi framework.
+	 * 
+	 * @param monitor
+	 *            for tracking the progress of retrieving bundle information.
+	 * 
+	 * @return a map of the bundle state: the key is the bundle id and the value
+	 *         is an {@code IBundle} object that provides information about the
+	 *         bundle state.
+	 * @throws CoreException
+	 *             if the operation cannot be executed successfully. The
+	 *             {@code IStatus} of the exception is presented to the user in
+	 *             a appropriate way.
+	 * 
+	 * @see IBundle
+	 */
+	public Map<Long, IBundle> getBundles(IProgressMonitor monitor) throws CoreException;
+
+	/**
+	 * Starts a bundle in the OSGi framework.
+	 * 
+	 * @param bundleId
+	 *            the id of the bundle to be started.
+	 * @throws CoreException
+	 *             if the operation cannot be executed successfully. The
+	 *             {@code IStatus} of the exception is presented to the user in
+	 *             a appropriate way.
+	 */
+	public void startBundle(long bundleId) throws CoreException;
+
+	/**
+	 * Stops a bundle in the OSGi framework.
+	 * 
+	 * @param bundleId
+	 *            the id of the bundle to be stopped.
+	 * @throws CoreException
+	 *             if the operation cannot be executed successfully. The
+	 *             {@code IStatus} of the exception is presented to the user in
+	 *             a appropriate way.
+	 */
+	public void stopBundle(long bundleId) throws CoreException;
+
+	/**
+	 * Refreshes a bundle in the OSGi framework.
+	 * 
+	 * @param bundleId
+	 *            the id of the bundle to be refreshed.
+	 * @throws CoreException
+	 *             if the operation cannot be executed successfully. The
+	 *             {@code IStatus} of the exception is presented to the user in
+	 *             a appropriate way.
+	 */
+	public void refreshBundle(long bundleId) throws CoreException;
+
+	/**
+	 * Updates a bundle in the OSGi framework.
+	 * 
+	 * @param bundleId
+	 *            the id of the bundle to be updated.
+	 * @throws CoreException
+	 *             if the operation cannot be executed successfully. The
+	 *             {@code IStatus} of the exception is presented to the user in
+	 *             a appropriate way.
+	 */
+	public void updateBundle(long bundleId) throws CoreException;
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.core/src/org/eclipse/libra/framework/editor/core/IOSGiFrameworkConsole.java b/plugins/org.eclipse.libra.framework.editor.core/src/org/eclipse/libra/framework/editor/core/IOSGiFrameworkConsole.java
new file mode 100644
index 0000000..e39cd73
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.core/src/org/eclipse/libra/framework/editor/core/IOSGiFrameworkConsole.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2011 SAP AG
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SAP AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.core;
+
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * The methods of this interface are called by the <i>Server Console</i> editor
+ * part to execute commands in the shell of the OSGi framework.
+ * 
+ * <p>
+ * The editor parts get a reference to this interface by trying to adapt the
+ * {@code IServer} instance to this interface, i.e. by calling something like:
+ * {@code getServer().loadAdapter(IOSGiFrameworkConsole.class, null)}. .
+ * </p>
+ * 
+ * <p>
+ * Server runtimes that integrate the <i>Server Console</i> editor part must
+ * implement this interface in order to feed the editor with the required
+ * capabilities for this runtime. The easiest way to make this implementation
+ * available to the editor parts is to implement this interface in either the
+ * {@code ServerDelegate} or the {@code ServerBehaviorDelegate} classes.
+ * </p>
+ * 
+ * @noextend This interface is not intended to be extended by clients.
+ * 
+ * @author Kaloyan Raev
+ */
+public interface IOSGiFrameworkConsole {
+
+	/**
+	 * Executes a command in the shell of the OSGi framework.
+	 * 
+	 * @param command
+	 *            the command line to be executed.
+	 * @throws CoreException
+	 *             if the operation cannot be executed successfully. The
+	 *             {@code IStatus} of the exception is presented to the user in
+	 *             a appropriate way.
+	 */
+	public String executeCommand(String command) throws CoreException;
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.core/src/org/eclipse/libra/framework/editor/core/model/IBundle.java b/plugins/org.eclipse.libra.framework.editor.core/src/org/eclipse/libra/framework/editor/core/model/IBundle.java
new file mode 100644
index 0000000..6754278
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.core/src/org/eclipse/libra/framework/editor/core/model/IBundle.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * Copyright (c) 2011 SAP AG
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SAP AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.core.model;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.libra.framework.editor.core.IOSGiFrameworkAdmin;
+import org.osgi.framework.Bundle;
+
+/**
+ * This interface represents a bundle and its state in an OSGi framework. It is
+ * used by the <i>Bundle Information</i> and <i>Bundle Dependency Graph</i>
+ * editor parts to display the state of the represented bundle.
+ * 
+ * <p>
+ * Objects implementing this interface are returned as a map by the
+ * {@link IOSGiFrameworkAdmin#getBundles()} method that is called by the editor
+ * parts. These objects are provided by the server runtime that implements the
+ * {@link IOSGiFrameworkAdmin} interface.
+ * </p>
+ * 
+ * @noextend This interface is not intended to be extended by clients.
+ * 
+ * @see IOSGiFrameworkAdmin#getBundles()
+ * 
+ * @author Kaloyan Raev
+ */
+public interface IBundle {
+
+	/**
+	 * Returns the unique identifier of this bundle.
+	 * 
+	 * @return The String representation of the id number.
+	 * 
+	 * @see Bundle#getBundleId()
+	 */
+	public String getId();
+
+	/**
+	 * Returns the symbolic name of this bundle.
+	 * 
+	 * @return The symbolic name of this bundle or {@code null} if this bundle
+	 *         does not have a symbolic name.
+	 * 
+	 * @see Bundle#getSymbolicName()
+	 */
+	public String getSymbolicName();
+
+	/**
+	 * Returns the version of this bundle.
+	 * 
+	 * @return The String representation of the version number.
+	 * 
+	 * @see Bundle#getVersion()
+	 */
+	public String getVersion();
+
+	/**
+	 * Returns the current state of this bundle.
+	 * 
+	 * @return The String representation of the state.
+	 * 
+	 * @see Bundle#getVersion()
+	 */
+	public String getState();
+
+	/**
+	 * Returns the location identifier of this bundle.
+	 * 
+	 * @return The String representation of the location identifier.
+	 * 
+	 * @see Bundle#getLocation()
+	 */
+	public String getLocation();
+
+	/**
+	 * Returns the Manifest headers and values of this bundle.
+	 * 
+	 * @return A {@code Map} object containing the Manifest headers and values.
+	 *         This method never returns {@code null}.
+	 * 
+	 * @see Bundle#getHeaders()
+	 */
+	public Map<String, String> getHeaders();
+
+	/**
+	 * Returns all packages exported by this bundle.
+	 * 
+	 * @return A {@code Set} object containing all exported packages represented
+	 *         as {@code IPackageExport} objects. This method never returns
+	 *         {@code null}.
+	 * 
+	 * @see IPackageExport
+	 */
+	public Set<IPackageExport> getPackageExports();
+
+	/**
+	 * Returns the packages imported by this bundle.
+	 * 
+	 * @return A {@code Set} object containing all imported packages represented
+	 *         as {@code IPackageImport} objects. This method never returns
+	 *         {@code null}.
+	 * 
+	 * @see IPackageImport
+	 */
+	public Set<IPackageImport> getPackageImports();
+
+	/**
+	 * Returns all services registered by this bundle.
+	 * 
+	 * @return A {@code Set} object containing all registered services
+	 *         represented as {@code IServiceReference} objects. This method
+	 *         never returns {@code null}.
+	 * 
+	 * @see Bundle#getRegisteredServices()
+	 * @see IServiceReference
+	 */
+	public Set<IServiceReference> getRegisteredServices();
+
+	/**
+	 * Returns all services this bundle is using.
+	 * 
+	 * @return A {@code Set} object containing all services in use represented
+	 *         as {@code IServiceReference} objects. This method never returns
+	 *         {@code null}.
+	 * 
+	 * @see Bundle#getServicesInUse()
+	 * @see IServiceReference
+	 */
+	public Set<IServiceReference> getServicesInUse();
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.core/src/org/eclipse/libra/framework/editor/core/model/IPackageExport.java b/plugins/org.eclipse.libra.framework.editor.core/src/org/eclipse/libra/framework/editor/core/model/IPackageExport.java
new file mode 100644
index 0000000..2e8d853
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.core/src/org/eclipse/libra/framework/editor/core/model/IPackageExport.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2011 SAP AG
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SAP AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.core.model;
+
+/**
+ * This interface represents a package exported by an OSGi bundle represented by
+ * an {@code IBundle} object.
+ * 
+ * @see IBundle
+ * 
+ * @author Kaloyan Raev
+ */
+public interface IPackageExport {
+
+	/**
+	 * Returns the name of the exported package.
+	 * 
+	 * @return The fully qualified name of the package.
+	 */
+	public String getName();
+
+	/**
+	 * Returns the version of the exported package.
+	 * 
+	 * @return The String representation of the version.
+	 */
+	public String getVersion();
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.core/src/org/eclipse/libra/framework/editor/core/model/IPackageImport.java b/plugins/org.eclipse.libra.framework.editor.core/src/org/eclipse/libra/framework/editor/core/model/IPackageImport.java
new file mode 100644
index 0000000..cbe8e7d
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.core/src/org/eclipse/libra/framework/editor/core/model/IPackageImport.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2011 SAP AG
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SAP AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.core.model;
+
+/**
+ * This interface represents a package imported by an OSGi bundle represented by
+ * an {@code IBundle} object.
+ * 
+ * @see IBundle
+ * 
+ * @author Kaloyan Raev
+ */
+public interface IPackageImport {
+
+	/**
+	 * Returns the name of the imported package.
+	 * 
+	 * @return The fully qualified name of the package.
+	 */
+	public String getName();
+
+	/**
+	 * Returns the version of the imported package.
+	 * 
+	 * @return The String representation of the version.
+	 */
+	public String getVersion();
+
+	/**
+	 * Returns the unique identifier of the bundle exporting this package. 
+	 * 
+	 * @return The String representation of the id. 
+	 */
+	public String getSupplierId();
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.core/src/org/eclipse/libra/framework/editor/core/model/IServiceReference.java b/plugins/org.eclipse.libra.framework.editor.core/src/org/eclipse/libra/framework/editor/core/model/IServiceReference.java
new file mode 100644
index 0000000..86522c1
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.core/src/org/eclipse/libra/framework/editor/core/model/IServiceReference.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2011 SAP AG
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SAP AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.core.model;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * This interface represents an OSGi service that is either registered or in use
+ * by an OSGi bundle represented by an {@code IBundle} object.
+ * 
+ * @see IBundle
+ * 
+ * @author Kaloyan Raev
+ */
+public interface IServiceReference {
+
+	/**
+	 * The type of the reference between the bundle and the service.
+	 */
+	public enum Type {
+
+		/**
+		 * Means that the service is in use by the bundle.
+		 */
+		IN_USE,
+
+		/**
+		 * Means that the service is registered by the bundle.
+		 */
+		REGISTERED
+	}
+
+	/**
+	 * Returns the type of the reference between this service and the
+	 * corresponding bundle.
+	 * 
+	 * @return An element of {@link Type#IN_USE} or {@link Type#REGISTERED}.
+	 *         This method never returns {@code null}.
+	 * 
+	 * @see Type
+	 */
+	public Type getType();
+
+	/**
+	 * Returns the unique identifier of the bundle that registered this service.
+	 * 
+	 * @return A {@code Long} object representing the bundle id. This method
+	 *         never returns {@code null}.
+	 */
+	public Long getBundleId();
+
+	/**
+	 * Returns the class names under which this service can be located.
+	 * 
+	 * @return An array of String objects representing the different class
+	 *         names. This method never returns {@code null}.
+	 */
+	public String[] getClazzes();
+
+	/**
+	 * Returns the unique identifiers of the bundles that are using this
+	 * service.
+	 * 
+	 * @return A {@code Set} object containing the bundle ids represented as
+	 *         {@code Long} objects. This method never returns {@code null}.
+	 */
+	public Set<Long> getUsingBundleIds();
+
+	/**
+	 * Returns the properties that this service is registered with.
+	 * 
+	 * @return A {@code Map} object containing the keys and values of all
+	 *         properties. This method never returns {@code null}.
+	 */
+	public Map<String, String> getProperties();
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.integration/.classpath b/plugins/org.eclipse.libra.framework.editor.integration/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.libra.framework.editor.integration/.project b/plugins/org.eclipse.libra.framework.editor.integration/.project
new file mode 100644
index 0000000..a9512a0
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.libra.framework.editor.integration</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.libra.framework.editor.integration/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.libra.framework.editor.integration/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..6237a6a
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Wed Oct 05 20:14:59 EEST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.libra.framework.editor.integration/META-INF/MANIFEST.MF b/plugins/org.eclipse.libra.framework.editor.integration/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..3550ce5
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.libra.framework.editor.integration;singleton:=true
+Bundle-Version: 0.1.0.qualifier
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.debug.core
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Import-Package: org.eclipse.libra.framework.editor.core;version="0.1.0",
+ org.eclipse.libra.framework.editor.core.model;version="0.1.0",
+ org.osgi.jmx.framework;version="[1.0.0,2.0.0)"
+Bundle-Activator: org.eclipse.libra.framework.editor.integration.internal.IntegrationPlugin
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.libra.framework.editor.integration.admin.osgijmx;version="0.1.0";uses:="org.eclipse.libra.framework.editor.core",
+ org.eclipse.libra.framework.editor.integration.console.basic;version="0.1.0";uses:="org.eclipse.libra.framework.editor.core"
+Bundle-Vendor: %Bundle-Vendor
+Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.libra.framework.editor.integration/build.properties b/plugins/org.eclipse.libra.framework.editor.integration/build.properties
new file mode 100644
index 0000000..aa1a008
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.properties
diff --git a/plugins/org.eclipse.libra.framework.editor.integration/plugin.properties b/plugins/org.eclipse.libra.framework.editor.integration/plugin.properties
new file mode 100644
index 0000000..73765e4
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2011 SAP AG.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     Kaloyan Raev (SAP AG) - initial API and implementation
+###############################################################################
+Bundle-Name = OSGi Framework Editor Integration (Incubation)
+Bundle-Vendor = Eclipse Web Tools Platform
diff --git a/plugins/org.eclipse.libra.framework.editor.integration/pom.xml b/plugins/org.eclipse.libra.framework.editor.integration/pom.xml
new file mode 100644
index 0000000..38bc537
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/pom.xml
@@ -0,0 +1,33 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<artifactId>org.eclipse.libra_parent</artifactId>
+		<groupId>org.eclipse.libra</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>../../development/org.eclipse.libra.releng/pom.xml</relativePath>
+	</parent>
+
+	<artifactId>org.eclipse.libra.framework.editor.integration</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<name>OSGi Framework Editor Integration Plug-in</name>
+	<version>0.1.0-SNAPSHOT</version>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-source-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>findbugs-maven-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-pmd-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+</project>
diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/admin/osgijmx/AbstractOSGiJMXFrameworkAdmin.java b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/admin/osgijmx/AbstractOSGiJMXFrameworkAdmin.java
new file mode 100644
index 0000000..d56d038
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/admin/osgijmx/AbstractOSGiJMXFrameworkAdmin.java
@@ -0,0 +1,208 @@
+/*******************************************************************************

+ * Copyright (c) 2011 SAP AG

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     SAP AG - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.libra.framework.editor.integration.admin.osgijmx;

+

+import java.io.IOException;

+import java.lang.reflect.UndeclaredThrowableException;

+import java.util.Collection;

+import java.util.HashMap;

+import java.util.Map;

+import java.util.Set;

+

+import javax.management.InstanceNotFoundException;

+import javax.management.JMX;

+import javax.management.MBeanServerConnection;

+import javax.management.MalformedObjectNameException;

+import javax.management.ObjectName;

+import javax.management.openmbean.CompositeData;

+import javax.management.openmbean.TabularData;

+import javax.management.remote.JMXConnector;

+import javax.management.remote.JMXConnectorFactory;

+import javax.management.remote.JMXServiceURL;

+

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.IProgressMonitor;

+import org.eclipse.libra.framework.editor.core.IOSGiFrameworkAdmin;

+import org.eclipse.libra.framework.editor.core.model.IBundle;

+import org.eclipse.libra.framework.editor.integration.internal.IntegrationPlugin;

+import org.eclipse.libra.framework.editor.integration.internal.admin.osgijmx.Bundle;

+import org.eclipse.libra.framework.editor.integration.internal.admin.osgijmx.PackageExport;

+import org.eclipse.libra.framework.editor.integration.internal.admin.osgijmx.PackageImport;

+import org.eclipse.libra.framework.editor.integration.internal.admin.osgijmx.PackagesData;

+import org.eclipse.libra.framework.editor.integration.internal.admin.osgijmx.ServiceReference;

+import org.eclipse.libra.framework.editor.integration.internal.admin.osgijmx.ServicesData;

+import org.osgi.framework.Constants;

+import org.osgi.jmx.framework.BundleStateMBean;

+import org.osgi.jmx.framework.FrameworkMBean;

+import org.osgi.jmx.framework.PackageStateMBean;

+import org.osgi.jmx.framework.ServiceStateMBean;

+

+/**

+ * @author Kaloyan Raev

+ */

+public abstract class AbstractOSGiJMXFrameworkAdmin implements IOSGiFrameworkAdmin {

+	

+	protected abstract String getHost() throws CoreException;

+	

+	protected abstract String getPort() throws CoreException;

+	

+	public Map<Long, IBundle> getBundles(IProgressMonitor monitor) throws CoreException {

+		Map<Long, IBundle> map = new HashMap<Long, IBundle>();

+		

+		try {

+			MBeanServerConnection connection = getMBeanServerConnection();

+			BundleStateMBean bundleStateMBean = getBundleStateMBean(connection);

+			TabularData bundlesData = bundleStateMBean.listBundles();

+			PackageStateMBean packageStateMBean = getPackageStateMBean(connection);

+			PackagesData packagesData = new PackagesData(packageStateMBean);

+			ServiceStateMBean serviceStateMBean = getServiceStateMBean(connection);

+			ServicesData servicesData = new ServicesData(serviceStateMBean);

+			

+			Set keys = bundlesData.keySet();

+			for (Object key : keys) {

+				CompositeData bundleInfo = bundlesData.get(((Collection) key).toArray());

+				String id = bundleInfo.get(BundleStateMBean.IDENTIFIER).toString();

+				String symbolicName = bundleInfo.get(BundleStateMBean.SYMBOLIC_NAME).toString();

+				String version = bundleInfo.get(BundleStateMBean.VERSION).toString();

+				String state = bundleInfo.get(BundleStateMBean.STATE).toString();

+				String location = bundleInfo.get(BundleStateMBean.LOCATION).toString();

+				Bundle bundle = new Bundle(id, symbolicName, version, state, location);

+				

+				TabularData headers = (TabularData) bundleInfo.get(BundleStateMBean.HEADERS);

+				Set headerKeys = headers.keySet();

+				for (Object headerKey : headerKeys) {

+					CompositeData headerCData = headers.get(((Collection) headerKey).toArray()); 

+					String hKey = (String) headerCData.get(BundleStateMBean.KEY);

+					String hValue = (String) headerCData.get(BundleStateMBean.VALUE);

+					bundle.addHeader(hKey, hValue);

+				}

+				

+				String[] exportedPackages = (String[]) bundleInfo.get(BundleStateMBean.EXPORTED_PACKAGES);

+				for (String epStr : exportedPackages) {

+					int column = epStr.indexOf(';');

+					String packageName = epStr.substring(0, column);

+					String packageVersion = epStr.substring(column + 1, epStr.length());

+					bundle.addPackageExport(new PackageExport(packageName, packageVersion));

+				}

+				

+				String[] importedPackages = (String[]) bundleInfo.get(BundleStateMBean.IMPORTED_PACKAGES);

+				for (String ipStr : importedPackages) {

+					int column = ipStr.indexOf(';');

+					String packageName = ipStr.substring(0, column);

+					String packageVersion = ipStr.substring(column + 1, ipStr.length());

+					String exportingBundleId = packagesData.getExportingBundleId(packageName, packageVersion).toString();

+					bundle.addPackageImport(new PackageImport(packageName, packageVersion, exportingBundleId));

+				}

+				

+				Long[] registeredServices = (Long[]) bundleInfo.get(BundleStateMBean.REGISTERED_SERVICES);

+				for (Long regService : registeredServices) {

+					ServicesData.ServiceInfo serviceInfo = servicesData.getService(regService);

+					ServiceReference sr = new ServiceReference(ServiceReference.Type.REGISTERED, serviceInfo.getBundleId(), serviceInfo.getObjectClass());

+					sr.addProperty(Constants.SERVICE_ID, serviceInfo.getServiceId().toString());

+					for (Long usingBundleId : serviceInfo.getUsingBundles()) {

+						sr.addUsingBundle(usingBundleId);

+					}

+					bundle.addRegisteredService(sr);

+				}

+				

+				Long[] servicesInUse = (Long[]) bundleInfo.get(BundleStateMBean.SERVICES_IN_USE);

+				for (Long serviceInUse : servicesInUse) {

+					ServicesData.ServiceInfo serviceInfo = servicesData.getService(serviceInUse);

+					ServiceReference sr = new ServiceReference(ServiceReference.Type.IN_USE, serviceInfo.getBundleId(), serviceInfo.getObjectClass());

+					sr.addProperty(Constants.SERVICE_ID, serviceInfo.getServiceId().toString());

+					for (Long usingBundleId : serviceInfo.getUsingBundles()) {

+						sr.addUsingBundle(usingBundleId);

+					}

+					bundle.addUsingService(sr); 

+				}

+				

+				map.put(Long.parseLong(id), bundle);

+			}

+		} catch (UndeclaredThrowableException e) {

+			if (e.getCause() instanceof InstanceNotFoundException) {

+				throw new CoreException(IntegrationPlugin.newErrorStatus("MBean not found: " + e.getCause().getMessage(), e.getCause()));

+			}

+			throw new CoreException(IntegrationPlugin.newErrorStatus(e));

+		} catch (Exception e) {

+			throw new CoreException(IntegrationPlugin.newErrorStatus(e));

+		}

+		

+		return map;

+	}

+

+	public void startBundle(long bundleId) throws CoreException {

+		try {

+			MBeanServerConnection connection = getMBeanServerConnection();

+			FrameworkMBean mbean = getFrameworkMBean(connection);

+			mbean.startBundle(bundleId);

+		} catch (Exception e) {

+			throw new CoreException(IntegrationPlugin.newErrorStatus(e));

+		}

+	}

+

+	public void stopBundle(long bundleId) throws CoreException {

+		try {

+			MBeanServerConnection connection = getMBeanServerConnection();

+			FrameworkMBean mbean = getFrameworkMBean(connection);

+			mbean.stopBundle(bundleId);

+		} catch (Exception e) {

+			throw new CoreException(IntegrationPlugin.newErrorStatus(e));

+		}

+	}

+

+	public void refreshBundle(long bundleId) throws CoreException {

+		try {

+			MBeanServerConnection connection = getMBeanServerConnection();

+			FrameworkMBean mbean = getFrameworkMBean(connection);

+			mbean.refreshBundle(bundleId);

+		} catch (Exception e) {

+			throw new CoreException(IntegrationPlugin.newErrorStatus(e));

+		}

+	}

+

+	public void updateBundle(long bundleId) throws CoreException {

+

+		try {

+			MBeanServerConnection connection = getMBeanServerConnection();

+			FrameworkMBean mbean = getFrameworkMBean(connection);

+			mbean.updateBundle(bundleId);

+		} catch (Exception e) {

+			throw new CoreException(IntegrationPlugin.newErrorStatus(e));

+		}

+	}

+	

+	protected MBeanServerConnection getMBeanServerConnection() throws IOException, CoreException {

+		JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + getHost() + ":" + getPort() + "/jmxrmi"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

+		JMXConnector connector = JMXConnectorFactory.connect(url);

+		return connector.getMBeanServerConnection();

+	}

+	

+	protected BundleStateMBean getBundleStateMBean(MBeanServerConnection connection) throws MalformedObjectNameException {

+		ObjectName objectName = new ObjectName("osgi.core:type=bundleState,version=1.5"); //$NON-NLS-1$

+		return JMX.newMBeanProxy(connection, objectName, BundleStateMBean.class);

+	}

+	

+	protected PackageStateMBean getPackageStateMBean(MBeanServerConnection connection) throws MalformedObjectNameException {

+		ObjectName objectName = new ObjectName("osgi.core:type=packageState,version=1.5"); //$NON-NLS-1$

+		return JMX.newMBeanProxy(connection, objectName, PackageStateMBean.class);

+	}

+	

+	protected ServiceStateMBean getServiceStateMBean(MBeanServerConnection connection) throws MalformedObjectNameException {

+		ObjectName objectName = new ObjectName("osgi.core:type=serviceState,version=1.5"); //$NON-NLS-1$

+		return JMX.newMBeanProxy(connection, objectName, ServiceStateMBean.class);

+	}

+	

+	protected FrameworkMBean getFrameworkMBean(MBeanServerConnection connection) throws MalformedObjectNameException {

+		ObjectName objectName = new ObjectName("osgi.core:type=framework,version=1.5"); //$NON-NLS-1$

+		return JMX.newMBeanProxy(connection, objectName, FrameworkMBean.class);

+	}

+

+}

diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/admin/osgijmx/LaunchOSGiJMXFrameworkAdmin.java b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/admin/osgijmx/LaunchOSGiJMXFrameworkAdmin.java
new file mode 100644
index 0000000..606557a
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/admin/osgijmx/LaunchOSGiJMXFrameworkAdmin.java
@@ -0,0 +1,62 @@
+/*******************************************************************************

+ * Copyright (c) 2011 SAP AG

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     SAP AG - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.libra.framework.editor.integration.admin.osgijmx;

+

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.debug.core.DebugPlugin;

+import org.eclipse.debug.core.ILaunch;

+import org.eclipse.debug.core.model.IProcess;

+import org.eclipse.libra.framework.editor.integration.internal.IntegrationPlugin;

+

+/**

+ * @author Kaloyan Raev

+ */

+public class LaunchOSGiJMXFrameworkAdmin extends AbstractOSGiJMXFrameworkAdmin {

+	

+	private ILaunch launch;

+	

+	public LaunchOSGiJMXFrameworkAdmin(ILaunch launch) {

+		this.launch = launch;

+	}

+	

+	@Override

+	protected String getHost() throws CoreException {

+		return "localhost";

+	}

+

+	@Override

+	protected String getPort() throws CoreException {

+		return getJmxPort(launch);

+	}

+

+	public static String getJmxPort(ILaunch launch) throws CoreException {

+		String rawVMArgs = IntegrationPlugin.getProcess(launch).getAttribute(IProcess.ATTR_CMDLINE);

+		if (rawVMArgs == null) {

+			throw IntegrationPlugin.newCoreException(Messages.OSGiJMXFrameworkAdmin_CannotGetCmdLineArgs);

+		}

+

+		String port = null;

+		String[] vmArgs = DebugPlugin.parseArguments(rawVMArgs);

+		for (String arg : vmArgs) {

+			if (arg.startsWith("-Dcom.sun.management.jmxremote.port=")) { //$NON-NLS-1$

+				int index = arg.indexOf('=');

+				port = arg.substring(index + 1).trim();	

+			}

+		}

+		

+		if (port == null) {

+			throw IntegrationPlugin.newCoreException(Messages.OSGiJMXFrameworkAdmin_JmxRemoteNotConfigured); 

+		}

+		

+		return port;

+	}

+

+}

diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/admin/osgijmx/Messages.java b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/admin/osgijmx/Messages.java
new file mode 100644
index 0000000..b76a25b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/admin/osgijmx/Messages.java
@@ -0,0 +1,29 @@
+/*******************************************************************************

+ * Copyright (c) 2011 SAP AG

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     SAP AG - initial API and implementation

+ */

+package org.eclipse.libra.framework.editor.integration.admin.osgijmx;

+

+import org.eclipse.osgi.util.NLS;

+

+/**

+ * @author Kaloyan Raev

+ */

+public class Messages extends NLS {

+	private static final String BUNDLE_NAME = "org.eclipse.libra.framework.editor.integration.admin.osgijmx.messages"; //$NON-NLS-1$

+	public static String OSGiJMXFrameworkAdmin_CannotGetCmdLineArgs;

+	public static String OSGiJMXFrameworkAdmin_JmxRemoteNotConfigured;

+	static {

+		// initialize resource bundle

+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);

+	}

+

+	private Messages() {

+	}

+}

diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/admin/osgijmx/OSGiJMXFrameworkAdmin.java b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/admin/osgijmx/OSGiJMXFrameworkAdmin.java
new file mode 100644
index 0000000..9d443ce
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/admin/osgijmx/OSGiJMXFrameworkAdmin.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2011 SAP AG
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SAP AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.integration.admin.osgijmx;
+
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * @author Kaloyan Raev
+ */
+public class OSGiJMXFrameworkAdmin extends AbstractOSGiJMXFrameworkAdmin {
+	
+	private String host;
+	private String port;
+	
+	public OSGiJMXFrameworkAdmin(String host, String port) {
+		this.host = host;
+		this.port = port;
+	}
+	
+	@Override
+	protected String getHost() throws CoreException {
+		return host;
+	}
+	
+	@Override
+	protected String getPort() throws CoreException {
+		return port;
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/admin/osgijmx/messages.properties b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/admin/osgijmx/messages.properties
new file mode 100644
index 0000000..0db8e83
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/admin/osgijmx/messages.properties
@@ -0,0 +1,12 @@
+################################################################################

+# Copyright (c) 2011 SAP AG

+# All rights reserved. This program and the accompanying materials

+# are made available under the terms of the Eclipse Public License v1.0

+# which accompanies this distribution, and is available at

+# http://www.eclipse.org/legal/epl-v10.html

+#

+# Contributors:

+#     Kaloyan Raev, SAP AG - initial content

+################################################################################

+OSGiJMXFrameworkAdmin_CannotGetCmdLineArgs=Cannot get command line arguments of the server process.

+OSGiJMXFrameworkAdmin_JmxRemoteNotConfigured=Server process is not configured for remote JMX access.

diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/console/basic/AbstractBasicOSGiFrameworkConsole.java b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/console/basic/AbstractBasicOSGiFrameworkConsole.java
new file mode 100644
index 0000000..3e0ea3b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/console/basic/AbstractBasicOSGiFrameworkConsole.java
@@ -0,0 +1,61 @@
+/*******************************************************************************

+ * Copyright (c) 2011 SAP AG

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     SAP AG - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.libra.framework.editor.integration.console.basic;

+

+import java.io.IOException;

+

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.debug.core.IStreamListener;

+import org.eclipse.debug.core.model.IStreamMonitor;

+import org.eclipse.debug.core.model.IStreamsProxy;

+import org.eclipse.libra.framework.editor.core.IOSGiFrameworkConsole;

+import org.eclipse.libra.framework.editor.integration.internal.IntegrationPlugin;

+

+/**

+ * @author Kaloyan Raev

+ */

+public abstract class AbstractBasicOSGiFrameworkConsole implements IOSGiFrameworkConsole, IStreamListener {

+	

+	private StringBuilder result;

+

+	protected abstract IStreamsProxy getProxy() throws CoreException;

+	

+	public synchronized String executeCommand(String command) throws CoreException {

+		result = new StringBuilder();

+		

+		try {

+			IStreamsProxy proxy = getProxy();

+			proxy.getOutputStreamMonitor().addListener(this);

+			proxy.write(command + "\n"); //$NON-NLS-1$

+		} catch (IOException e) {

+			throw new CoreException(IntegrationPlugin.newErrorStatus(e));

+		}

+		

+		long startTime = System.currentTimeMillis();

+		int size = 0;

+		do {

+			size = result.length();

+			try {

+				wait(10);

+			} catch (InterruptedException e) {

+				throw new CoreException(IntegrationPlugin.newErrorStatus(e));

+			}

+		} while ((result.length() == 0 && System.currentTimeMillis() - startTime < 5000)

+				|| result.length() > size);

+		

+		return result.toString();

+	}

+

+	public synchronized void streamAppended(String text, IStreamMonitor monitor) {

+		result.append(text);

+	}

+

+}

diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/console/basic/BasicOSGiFrameworkConsole.java b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/console/basic/BasicOSGiFrameworkConsole.java
new file mode 100644
index 0000000..e0896e8
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/console/basic/BasicOSGiFrameworkConsole.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2011 SAP AG
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SAP AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.integration.console.basic;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.core.model.IStreamsProxy;
+
+/**
+ * @author Kaloyan Raev
+ */
+public class BasicOSGiFrameworkConsole extends AbstractBasicOSGiFrameworkConsole {
+	
+	private IStreamsProxy proxy;
+	
+	protected BasicOSGiFrameworkConsole() {
+		this.proxy = null;
+	}
+
+	public BasicOSGiFrameworkConsole(IStreamsProxy proxy) {
+		this.proxy = proxy;
+	}
+	
+	@Override
+	protected IStreamsProxy getProxy() throws CoreException {
+		return proxy;
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/console/basic/LaunchBasicOSGiFrameworkConsole.java b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/console/basic/LaunchBasicOSGiFrameworkConsole.java
new file mode 100644
index 0000000..c22211c
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/console/basic/LaunchBasicOSGiFrameworkConsole.java
@@ -0,0 +1,43 @@
+/*******************************************************************************

+ * Copyright (c) 2011 SAP AG

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     SAP AG - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.libra.framework.editor.integration.console.basic;

+

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.debug.core.ILaunch;

+import org.eclipse.debug.core.model.IStreamsProxy;

+import org.eclipse.libra.framework.editor.integration.internal.IntegrationPlugin;

+

+/**

+ * @author Kaloyan Raev

+ */

+public class LaunchBasicOSGiFrameworkConsole extends BasicOSGiFrameworkConsole {

+	

+	private ILaunch launch;

+	

+	public LaunchBasicOSGiFrameworkConsole(ILaunch launch) {

+		super();

+		this.launch = launch;

+	}

+

+	@Override

+	protected IStreamsProxy getProxy() throws CoreException {

+		return getStreamsProxy(launch);

+	}

+

+	public static IStreamsProxy getStreamsProxy(ILaunch launch) throws CoreException {

+		IStreamsProxy proxy = IntegrationPlugin.getProcess(launch).getStreamsProxy();

+		if (proxy == null) {

+			throw IntegrationPlugin.newCoreException(Messages.BasicOSGiFrameworkConsole_CannotGetInOutStreams);

+		}

+		return proxy;

+	}

+

+}

diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/console/basic/Messages.java b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/console/basic/Messages.java
new file mode 100644
index 0000000..cf77cb8
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/console/basic/Messages.java
@@ -0,0 +1,28 @@
+/*******************************************************************************

+ * Copyright (c) 2011 SAP AG

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     SAP AG - initial API and implementation

+ */

+package org.eclipse.libra.framework.editor.integration.console.basic;

+

+import org.eclipse.osgi.util.NLS;

+

+/**

+ * @author Kaloyan Raev

+ */

+public class Messages extends NLS {

+	private static final String BUNDLE_NAME = "org.eclipse.libra.framework.editor.integration.console.basic.messages"; //$NON-NLS-1$

+	public static String BasicOSGiFrameworkConsole_CannotGetInOutStreams;

+	static {

+		// initialize resource bundle

+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);

+	}

+

+	private Messages() {

+	}

+}

diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/console/basic/messages.properties b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/console/basic/messages.properties
new file mode 100644
index 0000000..e16c8e9
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/console/basic/messages.properties
@@ -0,0 +1,11 @@
+################################################################################

+# Copyright (c) 2011 SAP AG

+# All rights reserved. This program and the accompanying materials

+# are made available under the terms of the Eclipse Public License v1.0

+# which accompanies this distribution, and is available at

+# http://www.eclipse.org/legal/epl-v10.html

+#

+# Contributors:

+#     Kaloyan Raev, SAP AG - initial content

+################################################################################

+BasicOSGiFrameworkConsole_CannotGetInOutStreams=Cannot get standard input and output streams of the server process.

diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/IntegrationPlugin.java b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/IntegrationPlugin.java
new file mode 100644
index 0000000..daf152a
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/IntegrationPlugin.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2011 SAP AG
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SAP AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.integration.internal;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.model.IProcess;
+
+/**
+ * @author Kaloyan Raev
+ */
+public class IntegrationPlugin extends Plugin {
+	
+	public static final String PLUGIN_ID = "org.eclipse.libra.framework.editor.integration"; //$NON-NLS-1$
+	
+	public static IStatus newErrorStatus(Throwable t) {
+		return newErrorStatus(t.getMessage(), t);
+	}
+	
+	public static IStatus newErrorStatus(String message, Throwable t) {
+		return new Status(IStatus.ERROR, PLUGIN_ID, message, t);
+	}
+	
+	public static CoreException newCoreException(String errorMessage) {
+		return new CoreException(new Status(IStatus.ERROR, PLUGIN_ID, errorMessage));
+	}
+	
+	public static IProcess getProcess(ILaunch launch) throws CoreException {
+		IProcess[] processes = launch.getProcesses();
+		if (processes.length == 0) {
+			throw newCoreException(Messages.IntegrationPlugin_FrameworkNotStarted);
+		}
+		return processes[0];
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/Messages.java b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/Messages.java
new file mode 100644
index 0000000..0b72b16
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/Messages.java
@@ -0,0 +1,28 @@
+/*******************************************************************************

+ * Copyright (c) 2011 SAP AG

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     SAP AG - initial API and implementation

+ */

+package org.eclipse.libra.framework.editor.integration.internal;

+

+import org.eclipse.osgi.util.NLS;

+

+/**

+ * @author Kaloyan Raev

+ */

+public class Messages extends NLS {

+	private static final String BUNDLE_NAME = "org.eclipse.libra.framework.editor.integration.internal.messages"; //$NON-NLS-1$

+	public static String IntegrationPlugin_FrameworkNotStarted;

+	static {

+		// initialize resource bundle

+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);

+	}

+

+	private Messages() {

+	}

+}

diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/admin/osgijmx/Bundle.java b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/admin/osgijmx/Bundle.java
new file mode 100644
index 0000000..eda0b36
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/admin/osgijmx/Bundle.java
@@ -0,0 +1,150 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - moving to Eclipse Libra project and enhancements
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.integration.internal.admin.osgijmx;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.libra.framework.editor.core.model.IBundle;
+import org.eclipse.libra.framework.editor.core.model.IPackageExport;
+import org.eclipse.libra.framework.editor.core.model.IPackageImport;
+import org.eclipse.libra.framework.editor.core.model.IServiceReference;
+
+/**
+ * @author Christian Dupuis
+ * @author Kaloyan Raev
+ */
+public class Bundle implements IBundle {
+
+	private final Set<IPackageExport> exports = new HashSet<IPackageExport>();
+
+	private final String id;
+
+	private final Set<IPackageImport> imports = new HashSet<IPackageImport>();
+
+	private final String state;
+
+	private final String symbolicName;
+
+	private final String version;
+
+	private final String location;
+
+	private final Map<String, String> headers = new HashMap<String, String>();
+
+	private final Set<IServiceReference> registeredServices = new HashSet<IServiceReference>();
+
+	private final Set<IServiceReference> servicesInUse = new HashSet<IServiceReference>();
+
+	public Bundle(String id, String symbolicName, String version, String state, String location) {
+		this.symbolicName = symbolicName;
+		this.version = version;
+		this.id = id;
+		this.state = state;
+		this.location = location;
+	}
+
+	public Map<String, String> getHeaders() {
+		return headers;
+	}
+
+	public Set<IPackageExport> getPackageExports() {
+		return exports;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public Set<IPackageImport> getPackageImports() {
+		return imports;
+	}
+
+	public String getState() {
+		return state;
+	}
+
+	public String getSymbolicName() {
+		return symbolicName;
+	}
+
+	public String getVersion() {
+		return version;
+	}
+
+	public void addPackageExport(IPackageExport pe) {
+		this.exports.add(pe);
+	}
+
+	public void addPackageImport(IPackageImport pi) {
+		this.imports.add(pi);
+	}
+
+	public void addRegisteredService(IServiceReference pi) {
+		this.registeredServices.add(pi);
+	}
+
+	public void addUsingService(IServiceReference pi) {
+		this.servicesInUse.add(pi);
+	}
+
+	public void addHeader(String key, String value) {
+		this.headers.put(key, value);
+	}
+
+	public String getLocation() {
+		return location;
+	}
+
+	public Set<IServiceReference> getRegisteredServices() {
+		return registeredServices;
+	}
+
+	public Set<IServiceReference> getServicesInUse() {
+		return servicesInUse;
+	}
+
+	@Override
+	public int hashCode() {
+		int hashCode = 17;
+		hashCode = 31 * hashCode + id.hashCode();
+		hashCode = 31 * hashCode + symbolicName.hashCode();
+		return hashCode;
+	}
+
+	@Override
+	public boolean equals(Object other) {
+		if (this == other) {
+			return true;
+		}
+		if (!(other instanceof Bundle)) {
+			return false;
+		}
+		Bundle that = (Bundle) other;
+		if (this.id != that.id) {
+			return false;
+		}
+		if (this.id != null && !this.id.equals(that.id)) {
+			return false;
+		}
+		if (this.symbolicName != that.symbolicName) {
+			return false;
+		}
+		if (this.symbolicName != null && !this.symbolicName.equals(that.symbolicName)) {
+			return false;
+		}
+		return true;
+	}
+	
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/admin/osgijmx/PackageExport.java b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/admin/osgijmx/PackageExport.java
new file mode 100644
index 0000000..7b6cec9
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/admin/osgijmx/PackageExport.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - moving to Eclipse Libra project and enhancements
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.integration.internal.admin.osgijmx;
+
+import org.eclipse.libra.framework.editor.core.model.IPackageExport;
+
+/**
+ * @author Christian Dupuis
+ * @author Kaloyan Raev
+ */
+public class PackageExport implements IPackageExport {
+
+	private final String name;
+
+	private final String version;
+
+	public PackageExport(String name, String version) {
+		this.name = name;
+		this.version = version;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public String getVersion() {
+		return version;
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/admin/osgijmx/PackageImport.java b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/admin/osgijmx/PackageImport.java
new file mode 100644
index 0000000..d1eb40b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/admin/osgijmx/PackageImport.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - moving to Eclipse Libra project and enhancements
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.integration.internal.admin.osgijmx;
+
+import org.eclipse.libra.framework.editor.core.model.IPackageImport;
+
+/**
+ * @author Christian Dupuis
+ * @author Kaloyan Raev
+ */
+public class PackageImport implements IPackageImport {
+
+	private final String name;
+
+	private final String version;
+
+	private final String supplierId;
+
+	public PackageImport(String name, String version, String supplierId) {
+		this.name = name;
+		this.version = version;
+		this.supplierId = supplierId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public String getVersion() {
+		return version;
+	}
+
+	public String getSupplierId() {
+		return supplierId;
+	}
+	
+	@Override
+	public int hashCode() {
+		int hashCode = 17;
+		hashCode = 31 * hashCode + name.hashCode();
+		hashCode = 31 * hashCode + version.hashCode();
+		hashCode = 31 * hashCode + supplierId.hashCode();
+		return hashCode;
+	}
+	
+	@Override
+	public boolean equals(Object other) {
+		if (this == other) {
+			return true;
+		}
+		if (!(other instanceof PackageImport)) {
+			return false;
+		}
+		PackageImport that = (PackageImport) other;
+		if (this.name != that.name) {
+			return false;
+		}
+		if (this.name != null && !this.name.equals(that.name)) {
+			return false;
+		}
+		if (this.version != that.version) {
+			return false;
+		}
+		if (this.version != null && !this.version.equals(that.version)) {
+			return false;
+		}
+		if (this.supplierId != that.supplierId) {
+			return false;
+		}
+		if (this.supplierId != null && !this.supplierId.equals(that.supplierId)) {
+			return false;
+		}
+		return true;
+	}
+	
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/admin/osgijmx/PackagesData.java b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/admin/osgijmx/PackagesData.java
new file mode 100644
index 0000000..31a879f
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/admin/osgijmx/PackagesData.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * Copyright (c) 2011 SAP AG
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SAP AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.integration.internal.admin.osgijmx;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.management.openmbean.TabularData;
+
+import org.osgi.jmx.framework.PackageStateMBean;
+
+/**
+ * @author Kaloyan Raev
+ */
+public class PackagesData {
+	
+	private Map<PackageKey, Long> map = new HashMap<PackagesData.PackageKey, Long>();
+	
+	public PackagesData(PackageStateMBean mbean) throws IOException {
+		TabularData data = mbean.listPackages();
+		
+		Set<List> keys = (Set<List>) data.keySet();
+		for (List key : keys) {
+			String name = (String) key.get(0);
+			String version = (String) key.get(1);
+			Long exportingBundleId = ((Long[]) key.get(2))[0];
+			map.put(new PackageKey(name, version), exportingBundleId);
+		}
+	}
+	
+	public Long getExportingBundleId(String packageName, String packageVersion) {
+		return map.get(new PackageKey(packageName, packageVersion));
+	}
+	
+	class PackageKey {
+		
+		private String name;
+		private String version;
+		
+		PackageKey(String name, String version) {
+			this.name = name;
+			this.version = version;
+		}
+
+		public String getName() {
+			return name;
+		}
+		
+		public String getVersion() {
+			return version;
+		}
+
+		@Override
+		public int hashCode() {
+			final int prime = 31;
+			int result = 1;
+			result = prime * result + getOuterType().hashCode();
+			result = prime * result + ((name == null) ? 0 : name.hashCode());
+			result = prime * result
+					+ ((version == null) ? 0 : version.hashCode());
+			return result;
+		}
+
+		@Override
+		public boolean equals(Object obj) {
+			if (this == obj)
+				return true;
+			if (obj == null)
+				return false;
+			if (getClass() != obj.getClass())
+				return false;
+			PackageKey other = (PackageKey) obj;
+			if (!getOuterType().equals(other.getOuterType()))
+				return false;
+			if (name == null) {
+				if (other.name != null)
+					return false;
+			} else if (!name.equals(other.name))
+				return false;
+			if (version == null) {
+				if (other.version != null)
+					return false;
+			} else if (!version.equals(other.version))
+				return false;
+			return true;
+		}
+
+		private PackagesData getOuterType() {
+			return PackagesData.this;
+		}
+		
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/admin/osgijmx/ServiceReference.java b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/admin/osgijmx/ServiceReference.java
new file mode 100644
index 0000000..cebb7f2
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/admin/osgijmx/ServiceReference.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - moving to Eclipse Libra project and enhancements
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.integration.internal.admin.osgijmx;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.libra.framework.editor.core.model.IServiceReference;
+
+/**
+ * @author Christian Dupuis
+ * @author Kaloyan Raev
+ */
+public class ServiceReference implements IServiceReference {
+
+	private final Long bundleId;
+
+	private final String[] clazzes;
+
+	private final Map<String, String> properties = new HashMap<String, String>();
+
+	private final Set<Long> usingBundles = new HashSet<Long>();
+	
+	private final Type type;
+
+	public ServiceReference(Type type, Long bundleId, String[] clazzes) {
+		this.bundleId = bundleId;
+		this.clazzes = clazzes;
+		this.type = type;
+	}
+
+	public Map<String, String> getProperties() {
+		return properties;
+	}
+
+	public String[] getClazzes() {
+		return clazzes;
+	}
+	
+	public Set<Long> getUsingBundleIds() {
+		return usingBundles;
+	}
+
+	public void addProperty(String key, String value) {
+		this.properties.put(key, value);
+	}
+
+	public void addUsingBundle(Long id) {
+		this.usingBundles.add(id);
+	}
+
+	public Long getBundleId() {
+		return bundleId;
+	}
+
+	public Type getType() {
+		return type;
+	}
+	
+	@Override
+	public int hashCode() {
+		int hashCode = 17;
+		hashCode = 31 * hashCode + clazzes.hashCode();
+		hashCode = 31 * hashCode + type.hashCode();
+		return hashCode;
+	}
+
+	@Override
+	public boolean equals(Object other) {
+		if (this == other) {
+			return true;
+		}
+		if (!(other instanceof ServiceReference)) {
+			return false;
+		}
+		ServiceReference that = (ServiceReference) other;
+		if (!Arrays.equals(this.clazzes, that.clazzes)) {
+			return false;
+		}
+		if (this.type != that.type) {
+			return false;
+		}
+		if (this.type != null && !this.type.equals(that.type)) {
+			return false;
+		}
+		return true;
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/admin/osgijmx/ServicesData.java b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/admin/osgijmx/ServicesData.java
new file mode 100644
index 0000000..071e7fe
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/admin/osgijmx/ServicesData.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2011 SAP AG
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SAP AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.integration.internal.admin.osgijmx;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.management.openmbean.CompositeData;
+import javax.management.openmbean.TabularData;
+
+import org.osgi.jmx.framework.ServiceStateMBean;
+
+/**
+ * @author Kaloyan Raev
+ */
+public class ServicesData {
+	
+	private Map<Long, ServiceInfo> map = new HashMap<Long, ServicesData.ServiceInfo>();
+
+	public ServicesData(ServiceStateMBean serviceStateMBean) throws IOException {
+		TabularData data = serviceStateMBean.listServices();
+		
+		Set<List> keys = (Set<List>) data.keySet();
+		for (List key : keys) {
+			CompositeData serviceInfo = data.get(((Collection) key).toArray());
+			Long serviceId = (Long) serviceInfo.get(ServiceStateMBean.IDENTIFIER);
+			Long bundleId = (Long) serviceInfo.get(ServiceStateMBean.BUNDLE_IDENTIFIER);
+			String[] objectClass = (String[]) serviceInfo.get(ServiceStateMBean.OBJECT_CLASS);
+			Long[] usingBundles = (Long[]) serviceInfo.get(ServiceStateMBean.USING_BUNDLES);
+			map.put(serviceId, new ServiceInfo(serviceId, bundleId, objectClass, usingBundles));
+		}
+	}
+	
+	public ServiceInfo getService(Long serviceId) {
+		return map.get(serviceId);
+	}
+	
+	public class ServiceInfo {
+		
+		private Long serviceId;
+		private Long bundleId;
+		private String[] objectClass;
+		private Long[] usingBundles;
+		
+		ServiceInfo(Long serviceId, Long bundleId, String[] objectClass, Long[] usingBundles) {
+			this.serviceId = serviceId;
+			this.bundleId = bundleId;
+			this.objectClass = objectClass;
+			this.usingBundles = usingBundles;
+		}
+
+		public Long getServiceId() {
+			return serviceId;
+		}
+
+		public Long getBundleId() {
+			return bundleId;
+		}
+
+		public String[] getObjectClass() {
+			return objectClass;
+		}
+
+		public Long[] getUsingBundles() {
+			return usingBundles;
+		}
+		
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/messages.properties b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/messages.properties
new file mode 100644
index 0000000..1db8267
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.integration/src/org/eclipse/libra/framework/editor/integration/internal/messages.properties
@@ -0,0 +1,11 @@
+################################################################################

+# Copyright (c) 2011 SAP AG

+# All rights reserved. This program and the accompanying materials

+# are made available under the terms of the Eclipse Public License v1.0

+# which accompanies this distribution, and is available at

+# http://www.eclipse.org/legal/epl-v10.html

+#

+# Contributors:

+#     Kaloyan Raev, SAP AG - initial content

+################################################################################

+IntegrationPlugin_FrameworkNotStarted=OSGi Framework not started.

diff --git a/plugins/org.eclipse.libra.framework.editor.ui/.classpath b/plugins/org.eclipse.libra.framework.editor.ui/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/.project b/plugins/org.eclipse.libra.framework.editor.ui/.project
new file mode 100644
index 0000000..2dd96cc
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.libra.framework.editor.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.libra.framework.editor.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..5ef1156
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Wed Oct 05 20:16:27 EEST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.libra.framework.editor.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..72c88c6
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,44 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.libra.framework.editor.ui
+Bundle-Version: 0.1.0.qualifier
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.libra.framework.editor.ui.console;version="0.1.0";
+  uses:="org.eclipse.libra.framework.editor.ui.internal.overview,
+   org.eclipse.libra.framework.editor.ui.internal,
+   org.eclipse.swt.widgets,
+   org.eclipse.ui.forms,
+   org.eclipse.ui.forms.widgets",
+ org.eclipse.libra.framework.editor.ui.dependencies;version="0.1.0";
+  uses:="org.eclipse.jface.action,
+   org.eclipse.core.runtime,
+   org.eclipse.core.runtime.jobs,
+   org.eclipse.libra.framework.editor.ui.internal,
+   org.eclipse.libra.framework.editor.core.model,
+   org.eclipse.ui,
+   org.eclipse.swt.widgets,
+   org.eclipse.zest.core.viewers",
+ org.eclipse.libra.framework.editor.ui.overview;version="0.1.0";
+  uses:="org.eclipse.libra.framework.editor.ui.internal,
+   org.eclipse.libra.framework.editor.core.model,
+   org.eclipse.ui,
+   org.eclipse.swt.widgets"
+Require-Bundle: org.eclipse.core.filesystem;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.debug.core;bundle-version="[1.0.0,4.0.0)",
+ org.eclipse.pde.ui;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.browser;bundle-version="[3.1.0,4.0.0)",
+ org.eclipse.ui.forms;bundle-version="[3.3.0,4.0.0)",
+ org.eclipse.ui.ide;bundle-version="[3.3.0,4.0.0)",
+ org.eclipse.wst.server.core;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.wst.server.ui;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.zest.core;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.zest.layouts;bundle-version="[1.0.0,2.0.0)"
+Import-Package: org.eclipse.libra.framework.editor.core;version="0.1.0",
+ org.eclipse.libra.framework.editor.core.model;version="0.1.0"
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.libra.framework.editor.ui.internal.EditorUIPlugin
+Bundle-Vendor: %Bundle-Vendor
+Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/build.properties b/plugins/org.eclipse.libra.framework.editor.ui/build.properties
new file mode 100644
index 0000000..aa1a008
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.properties
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/plugin.properties b/plugins/org.eclipse.libra.framework.editor.ui/plugin.properties
new file mode 100644
index 0000000..7610509
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2011 SAP AG.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     Kaloyan Raev (SAP AG) - initial API and implementation
+###############################################################################
+Bundle-Name = OSGi Framework Editor UI (Incubation)
+Bundle-Vendor = Eclipse Web Tools Platform
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/pom.xml b/plugins/org.eclipse.libra.framework.editor.ui/pom.xml
new file mode 100644
index 0000000..92afb80
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/pom.xml
@@ -0,0 +1,33 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<artifactId>org.eclipse.libra_parent</artifactId>
+		<groupId>org.eclipse.libra</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>../../development/org.eclipse.libra.releng/pom.xml</relativePath>
+	</parent>
+
+	<artifactId>org.eclipse.libra.framework.editor.ui</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<name>OSGi Framework Editor UI Plug-in</name>
+	<version>0.1.0-SNAPSHOT</version>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-source-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>findbugs-maven-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-pmd-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+</project>
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/console/ServerConsoleEditorPage.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/console/ServerConsoleEditorPage.java
new file mode 100644
index 0000000..7bc9c9c
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/console/ServerConsoleEditorPage.java
@@ -0,0 +1,237 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - moving to Eclipse Libra project and enhancements
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.ui.console;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.libra.framework.editor.core.IOSGiFrameworkConsole;
+import org.eclipse.libra.framework.editor.ui.internal.AbstractBundleEditorPage;
+import org.eclipse.libra.framework.editor.ui.internal.EditorUIPlugin;
+import org.eclipse.libra.framework.editor.ui.internal.SearchTextHistory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.IFormColors;
+import org.eclipse.ui.forms.ManagedForm;
+import org.eclipse.ui.forms.widgets.ExpandableComposite;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.internal.browser.ImageResource;
+import org.eclipse.wst.server.ui.ServerUICore;
+
+
+/**
+ * @author Christian Dupuis
+ * @author Kaloyan Raev
+ */
+@SuppressWarnings("restriction")
+public class ServerConsoleEditorPage extends AbstractBundleEditorPage {
+
+	private Text commandText;
+	
+	private StyledText manifestText;
+
+	private IToolBarManager toolBarManager;
+
+	private Action backAction;
+
+	private Action forwardAction;
+
+	private Action refreshAction;
+
+	private final SearchTextHistory history = new SearchTextHistory();
+
+	@Override
+	protected void createBundleContent(Composite parent) {
+
+		mform = new ManagedForm(parent);
+		setManagedForm(mform);
+		sform = mform.getForm();
+		FormToolkit toolkit = mform.getToolkit();
+		sform.setText("Server Console");
+		sform.setImage(ServerUICore.getLabelProvider().getImage(getServer()));
+		sform.setExpandHorizontal(true);
+		sform.setExpandVertical(true);
+		toolkit.decorateFormHeading(sform.getForm());
+
+		Composite body = sform.getBody();
+		GridLayout layout = new GridLayout(1, false);
+		layout.marginLeft = 6;
+		layout.marginTop = 6;
+		layout.marginRight = 6;
+		body.setLayout(layout);
+
+		Section manifestSection = toolkit.createSection(sform.getBody(), ExpandableComposite.TITLE_BAR
+				| Section.DESCRIPTION);
+		manifestSection.setText("Commands");
+		manifestSection.setDescription("Execute commands on server.");
+		layout = new GridLayout();
+		manifestSection.setLayout(layout);
+		manifestSection.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+		Composite manifestComposite = toolkit.createComposite(manifestSection);
+		layout = new GridLayout();
+		layout.marginLeft = 6;
+		layout.marginTop = 6;
+		layout.numColumns = 3;
+		manifestComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
+		manifestComposite.setLayout(layout);
+		manifestSection.setClient(manifestComposite);
+
+		Label commandLabel = toolkit.createLabel(manifestComposite, "Command:");
+		commandLabel.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
+		GridDataFactory.fillDefaults().grab(true, false).span(3, 1).applyTo(commandLabel);
+		commandText = toolkit.createText(manifestComposite, "", SWT.CANCEL | SWT.SEARCH);
+		GridDataFactory.fillDefaults().grab(true, false).applyTo(commandText);
+
+		commandText.addKeyListener(new KeyListener() {
+
+			public void keyPressed(KeyEvent e) {
+				if (e.character == SWT.CR || e.character == SWT.LF) {
+					history.add(commandText.getText());
+					String cmdLine = commandText.getText();
+					executeCommand(cmdLine);
+				}
+				else if (e.keyCode == SWT.ARROW_UP) {
+					String command = history.back();
+					commandText.setText(command);
+					commandText.setSelection(command.length());
+					e.doit = false;
+				}
+				else if (e.keyCode == SWT.ARROW_DOWN) {
+					String command = history.forward();
+					commandText.setText(command);
+					commandText.setSelection(command.length());
+					e.doit = false;
+				}
+			}
+
+			public void keyReleased(KeyEvent e) {
+			}
+		});
+
+		Button commandButton = toolkit.createButton(manifestComposite, "Execute", SWT.PUSH);
+		commandButton.addSelectionListener(new SelectionAdapter() {
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				history.add(commandText.getText());
+				String cmdLine = commandText.getText();
+				executeCommand(cmdLine);
+			}
+		});
+		Button clearButton = toolkit.createButton(manifestComposite, "Clear", SWT.PUSH);
+		clearButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				manifestText.setText("");
+			}
+		});
+
+		manifestText = new StyledText(manifestComposite, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+		manifestText.setWordWrap(false);
+		manifestText.setFont(JFaceResources.getTextFont());
+		GridData data = new GridData(GridData.FILL_BOTH);
+		data.horizontalSpan = 3;
+		manifestText.setLayoutData(data);
+
+		Label helpLabel = toolkit.createLabel(manifestComposite, "Type 'help' to get a list of supported commands.");
+		GridDataFactory.fillDefaults().grab(true, false).span(3, 1).applyTo(helpLabel);
+
+		toolBarManager = sform.getToolBarManager();
+
+		backAction = new Action("Back") {
+			@Override
+			public void run() {
+				commandText.setText(history.back());
+				String cmdLine = commandText.getText();
+				executeCommand(cmdLine);
+			}
+		};
+		backAction.setImageDescriptor(ImageResource
+				.getImageDescriptor(org.eclipse.ui.internal.browser.ImageResource.IMG_ELCL_NAV_BACKWARD));
+		backAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_NAV_BACKWARD));
+		backAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_NAV_BACKWARD));
+		backAction.setEnabled(false);
+		toolBarManager.add(backAction);
+
+		forwardAction = new Action("Forward") {
+			@Override
+			public void run() {
+				commandText.setText(history.forward());
+				String cmdLine = commandText.getText();
+				executeCommand(cmdLine);
+			}
+		};
+		forwardAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_NAV_FORWARD));
+		forwardAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_NAV_FORWARD));
+		forwardAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_NAV_FORWARD));
+		forwardAction.setEnabled(false);
+		toolBarManager.add(forwardAction);
+
+		refreshAction = new Action("Refresh from server", ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_NAV_REFRESH)) {
+
+			@Override
+			public void run() {
+				String cmdLine = history.current();
+				if (cmdLine != null) {
+					executeCommand(cmdLine);
+				}
+			}
+
+		};
+		toolBarManager.add(refreshAction);
+		sform.updateToolBar();
+	}
+	
+	private void executeCommand(String cmdLine) {
+		clearStatus();
+		
+		IOSGiFrameworkConsole console = (IOSGiFrameworkConsole) getServer().getOriginal()
+				.loadAdapter(IOSGiFrameworkConsole.class, null);
+		
+		if (console == null) {
+			IStatus status = EditorUIPlugin.newErrorStatus("Console editor part is not integrated with the runtime.");
+			EditorUIPlugin.log(status);
+			setStatus(status);
+		}
+		
+		try {
+			String result = console.executeCommand(cmdLine);
+			manifestText.append("osgi> " + cmdLine + "\n");
+			manifestText.append(result + "\n");
+			forwardAction.setEnabled(history.canForward());
+			backAction.setEnabled(history.canBack());
+			toolBarManager.update(true);
+			manifestText.setTopIndex(manifestText.getLineCount() - 1);
+		} catch (CoreException e) {
+			EditorUIPlugin.log(e);
+			setStatus(EditorUIPlugin.newErrorStatus("Failed to execute command. See Error Log for details."));
+		}
+		
+		commandText.setText("");
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/dependencies/BundleDependencyEditorPage.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/dependencies/BundleDependencyEditorPage.java
new file mode 100644
index 0000000..acb669e
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/dependencies/BundleDependencyEditorPage.java
@@ -0,0 +1,499 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - moving to Eclipse Libra project and enhancements
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.ui.dependencies;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.libra.framework.editor.core.IOSGiFrameworkAdmin;
+import org.eclipse.libra.framework.editor.core.model.IBundle;
+import org.eclipse.libra.framework.editor.ui.internal.AbstractBundleEditorPage;
+import org.eclipse.libra.framework.editor.ui.internal.EditorUIPlugin;
+import org.eclipse.libra.framework.editor.ui.internal.SearchControl;
+import org.eclipse.libra.framework.editor.ui.internal.SearchTextHistory;
+import org.eclipse.libra.framework.editor.ui.internal.dependencies.BundleDependencyContentProvider;
+import org.eclipse.libra.framework.editor.ui.internal.dependencies.BundleDependencyLabelProvider;
+import org.eclipse.libra.framework.editor.ui.internal.dependencies.FocusedBundleDependencyLayoutAlgorithm;
+import org.eclipse.libra.framework.editor.ui.overview.BundleInformationEditorPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Spinner;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.forms.IFormColors;
+import org.eclipse.ui.forms.ManagedForm;
+import org.eclipse.ui.forms.widgets.ExpandableComposite;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.internal.browser.ImageResource;
+import org.eclipse.wst.server.ui.ServerUICore;
+import org.eclipse.wst.server.ui.internal.editor.ServerEditorPartInput;
+import org.eclipse.wst.server.ui.internal.editor.ServerResourceCommandManager;
+import org.eclipse.zest.core.viewers.AbstractZoomableViewer;
+import org.eclipse.zest.core.viewers.GraphViewer;
+import org.eclipse.zest.core.viewers.IZoomableWorkbenchPart;
+import org.eclipse.zest.core.viewers.ZoomContributionViewItem;
+import org.eclipse.zest.core.widgets.ZestStyles;
+import org.eclipse.zest.layouts.LayoutAlgorithm;
+import org.eclipse.zest.layouts.LayoutStyles;
+import org.eclipse.zest.layouts.algorithms.CompositeLayoutAlgorithm;
+import org.eclipse.zest.layouts.algorithms.HorizontalShift;
+import org.eclipse.zest.layouts.algorithms.RadialLayoutAlgorithm;
+
+
+/**
+ * @author Christian Dupuis
+ * @author Kaloyan Raev
+ */
+@SuppressWarnings("restriction")
+public class BundleDependencyEditorPage extends AbstractBundleEditorPage implements IZoomableWorkbenchPart {
+
+	private GraphViewer viewer;
+
+	private BundleDependencyContentProvider contentProvider;
+
+	private BundleDependencyLabelProvider labelProvider;
+
+	private ZoomContributionViewItem zoomContributionItem;
+
+	private SearchControl searchControl;
+
+	private Action refreshAction;
+
+	private IToolBarManager toolBarManager;
+
+	private final SearchTextHistory history = new SearchTextHistory();
+
+	private Action forwardAction;
+
+	private Action backAction;
+
+	private ServerResourceCommandManager commandManager;
+
+	protected void createBundleContent(Composite parent) {
+		mform = new ManagedForm(parent);
+		setManagedForm(mform);
+		sform = mform.getForm();
+		FormToolkit toolkit = mform.getToolkit();
+		sform.setText("Bundle Dependency Graph");
+		sform.setImage(ServerUICore.getLabelProvider().getImage(getServer()));
+		sform.setExpandHorizontal(true);
+		sform.setExpandVertical(true);
+		toolkit.decorateFormHeading(sform.getForm());
+
+		Composite body = sform.getBody();
+		GridLayout layout = new GridLayout(2, false);
+		layout.marginHeight = 0;
+		layout.marginWidth = 0;
+		body.setLayout(layout);
+
+		Composite configComposite = toolkit.createComposite(body);
+		layout.marginLeft = 6;
+		layout.marginTop = 6;
+		layout.numColumns = 2;
+		configComposite.setLayoutData(new GridData(GridData.FILL_VERTICAL));
+		configComposite.setLayout(layout);
+
+		Section expandableComposite = toolkit.createSection(configComposite, ExpandableComposite.TITLE_BAR
+				| ExpandableComposite.FOCUS_TITLE);
+		layout = new GridLayout();
+		expandableComposite.setLayout(layout);
+		expandableComposite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
+		expandableComposite.setFont(body.getFont());
+		expandableComposite.setBackground(body.getBackground());
+		expandableComposite.setText("Configuration");
+
+		Composite composite = toolkit.createComposite(expandableComposite, SWT.NONE);
+		layout = new GridLayout();
+		layout.numColumns = 1;
+		layout.marginHeight = 0;
+		layout.marginRight = 0;
+		composite.setLayout(layout);
+		expandableComposite.setClient(composite);
+
+		final Button servicesButton = toolkit.createButton(composite, "Services", SWT.RADIO);
+		servicesButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				contentProvider.setShowServices(servicesButton.getSelection());
+				new BundleDependencyUpdateJob(false).schedule(200);
+			}
+		});
+
+		final Button packagesButton = toolkit.createButton(composite, "Packages", SWT.RADIO);
+		packagesButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				contentProvider.setShowPackage(packagesButton.getSelection());
+				new BundleDependencyUpdateJob(false).schedule(200);
+			}
+		});
+		packagesButton.setSelection(true);
+
+		new Label(composite, SWT.NONE);
+		Label dependenciesLabel = toolkit.createLabel(composite, "Dependencies");
+		dependenciesLabel.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
+
+		toolkit.createLabel(composite, "Incoming");
+
+		final Spinner incomingSpinner = new Spinner(composite, SWT.NONE);
+		incomingSpinner.setMinimum(0);
+		incomingSpinner.setIncrement(1);
+		incomingSpinner.setMaximum(20);
+		incomingSpinner.setSelection(1);
+		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_END);
+//		data.widthHint = 20;
+		incomingSpinner.setLayoutData(data);
+		incomingSpinner.addModifyListener(new ModifyListener() {
+
+			public void modifyText(ModifyEvent e) {
+				contentProvider.setIncomingDependencyDegree(incomingSpinner.getSelection());
+				new BundleDependencyUpdateJob(false).schedule(200);
+			}
+		});
+
+		toolkit.createLabel(composite, "Outgoing");
+
+		final Spinner outgoingSpinner = new Spinner(composite, SWT.NONE);
+		outgoingSpinner.setMinimum(0);
+		outgoingSpinner.setIncrement(1);
+		outgoingSpinner.setMaximum(20);
+		outgoingSpinner.setSelection(1);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_END);
+//		data.widthHint = 20;
+		outgoingSpinner.setLayoutData(data);
+		outgoingSpinner.addModifyListener(new ModifyListener() {
+
+			public void modifyText(ModifyEvent e) {
+				contentProvider.setOutgoingDependencyDegree(outgoingSpinner.getSelection());
+				new BundleDependencyUpdateJob(false).schedule(200);
+			}
+		});
+
+		Label separator = new Label(configComposite, SWT.NONE);
+		// separator.setBackground(toolkit.getColors().getColor(IFormColors.TB_BG));
+		separator.setForeground(toolkit.getColors().getColor(IFormColors.H_BOTTOM_KEYLINE1));
+		data = new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.FILL_VERTICAL);
+		data.widthHint = 1;
+		separator.setLayoutData(data);
+
+		toolkit.paintBordersFor(expandableComposite);
+
+		layout = new GridLayout(2, false);
+		layout.marginHeight = 0;
+		layout.marginWidth = 0;
+		body.setLayout(layout);
+
+		viewer = new GraphViewer(body, SWT.NONE);
+		viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		viewer.setConnectionStyle(ZestStyles.CONNECTIONS_DIRECTED);
+
+		CompositeLayoutAlgorithm layoutAlgorithm = new CompositeLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING
+				| LayoutStyles.ENFORCE_BOUNDS, //
+				new LayoutAlgorithm[] { // 
+				new RadialLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING | LayoutStyles.ENFORCE_BOUNDS), //
+						new HorizontalShift(LayoutStyles.NO_LAYOUT_NODE_RESIZING | LayoutStyles.ENFORCE_BOUNDS) });
+		searchControl = new SearchControl("Find", getManagedForm());
+		contentProvider = new BundleDependencyContentProvider(viewer, searchControl);
+
+		FocusedBundleDependencyLayoutAlgorithm la = new FocusedBundleDependencyLayoutAlgorithm(
+				LayoutStyles.NO_LAYOUT_NODE_RESIZING | LayoutStyles.ENFORCE_BOUNDS, layoutAlgorithm, contentProvider);
+		viewer.setLayoutAlgorithm(la);
+
+		viewer.setContentProvider(contentProvider);
+		viewer.addSelectionChangedListener(contentProvider);
+		viewer.setFilters(new ViewerFilter[] {});
+		labelProvider = new BundleDependencyLabelProvider(contentProvider, toolkit);
+		viewer.setLabelProvider(labelProvider);
+		viewer.addDoubleClickListener(new IDoubleClickListener() {
+
+			public void doubleClick(DoubleClickEvent event) {
+				Object selection = ((IStructuredSelection) event.getSelection()).getFirstElement();
+				if (selection instanceof IBundle) {
+					IBundle bundle = (IBundle) selection;
+					setSelection(bundle);
+				}
+			}
+			
+		});
+
+		toolBarManager = sform.getToolBarManager();
+		toolBarManager.add(searchControl);
+
+		backAction = new Action("Back") {
+			@Override
+			public void run() {
+				searchControl.getSearchText().setText(history.back());
+				setEnabled(history.canBack());
+				forwardAction.setEnabled(history.canForward());
+				toolBarManager.update(true);
+				new BundleDependencyUpdateJob(true).schedule();
+			}
+		};
+		backAction.setImageDescriptor(ImageResource
+				.getImageDescriptor(org.eclipse.ui.internal.browser.ImageResource.IMG_ELCL_NAV_BACKWARD));
+		backAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_NAV_BACKWARD));
+		backAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_NAV_BACKWARD));
+		backAction.setEnabled(false);
+		toolBarManager.add(backAction);
+
+		forwardAction = new Action("Forward") {
+			@Override
+			public void run() {
+				searchControl.getSearchText().setText(history.forward());
+				setEnabled(history.canForward());
+				backAction.setEnabled(history.canBack());
+				toolBarManager.update(true);
+				new BundleDependencyUpdateJob(true).schedule();
+			}
+		};
+		forwardAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_NAV_FORWARD));
+		forwardAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_NAV_FORWARD));
+		forwardAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_NAV_FORWARD));
+		forwardAction.setEnabled(false);
+		toolBarManager.add(forwardAction);
+
+		refreshAction = new Action("Refresh from server", ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_NAV_REFRESH)) {
+
+			@Override
+			public void run() {
+				IRunnableWithProgress runnable = new IRunnableWithProgress() {
+
+					public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+						monitor.beginTask("Updating bundle status from server", 1);
+						Display.getDefault().asyncExec(new Runnable() {
+							public void run() {
+								clearStatus();
+								
+								IOSGiFrameworkAdmin admin = (IOSGiFrameworkAdmin) getServer().getOriginal()
+										.loadAdapter(IOSGiFrameworkAdmin.class, monitor);
+								
+								if (admin == null) {
+									IStatus status = EditorUIPlugin.newErrorStatus("Bundle Dependency Graph editor part is not integrated with the runtime.");
+									EditorUIPlugin.log(status);
+									setStatus(status);
+								}
+								
+								try {
+									Map<Long, IBundle> allBundles = admin.getBundles(monitor);
+									refresh(allBundles);
+								} catch (CoreException e) {
+									EditorUIPlugin.log(e);
+									setStatus(e.getStatus());
+								}
+							}
+						});
+						monitor.worked(1);
+					}
+				};
+
+				try {
+					IRunnableContext context = new ProgressMonitorDialog(Display.getCurrent().getActiveShell());
+					context.run(true, true, runnable);
+				}
+				catch (InvocationTargetException e1) {
+				}
+				catch (InterruptedException e2) {
+				}
+			}
+
+		};
+		toolBarManager.add(refreshAction);
+
+		sform.updateToolBar();
+		initPopupMenu();
+
+		searchControl.getSearchText().addKeyListener(new KeyListener() {
+
+			public void keyPressed(KeyEvent e) {
+				if (e.character == SWT.CR || e.character == SWT.LF) {
+					if (!"type filter text".equals(searchControl.getSearchText().getText())) {
+						history.add(searchControl.getSearchText().getText());
+						forwardAction.setEnabled(history.canForward());
+						backAction.setEnabled(history.canBack());
+						toolBarManager.update(true);
+						new BundleDependencyUpdateJob(true).schedule();
+					}
+				}
+			}
+
+			public void keyReleased(KeyEvent e) {
+			}
+		});
+
+		searchControl.getSearchText().addModifyListener(new ModifyListener() {
+
+			public void modifyText(ModifyEvent e) {
+				if ("".equals(searchControl.getSearchText().getText())) {
+					new BundleDependencyUpdateJob(true).schedule();
+				}
+			}
+		});
+
+	}
+	
+	private void setSelection(IBundle bundle) {
+		setSelection(bundle.getSymbolicName(), bundle.getVersion());
+	}
+	
+	private void setSelection(String bundle, String version) {
+		String filterText = bundle + " (" + version + ")";
+		searchControl.getSearchText().setText(filterText);
+		history.add(filterText);
+		forwardAction.setEnabled(history.canForward());
+		backAction.setEnabled(history.canBack());
+		toolBarManager.update(true);
+		new BundleDependencyUpdateJob(true).schedule();
+	}
+
+	public AbstractZoomableViewer getZoomableViewer() {
+		return viewer;
+	}
+
+	private void initPopupMenu() {
+		zoomContributionItem = new ZoomContributionViewItem(this);
+
+		MenuManager menuMgr = new MenuManager("#PopupMenu");
+		menuMgr.setRemoveAllWhenShown(true);
+		menuMgr.addMenuListener(new IMenuListener() {
+			public void menuAboutToShow(IMenuManager manager) {
+				fillContextMenu(manager);
+			}
+		});
+
+		Menu menu = menuMgr.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(menuMgr, viewer);
+	}
+
+	void fillContextMenu(IMenuManager manager) {
+		manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+
+		if (!viewer.getSelection().isEmpty()) {
+			manager.add(new Action("Show Bundle Overview") {
+				@Override
+				public void run() {
+					Object obj = ((IStructuredSelection) viewer.getSelection()).getFirstElement();
+					if (obj instanceof IBundle) {
+						openDependencyPage((IBundle) obj);
+					}
+				}
+			});
+			manager.add(new Separator());
+		}
+		manager.add(zoomContributionItem);
+	}
+
+	public void init(IEditorSite site, IEditorInput input) {
+		super.init(site, input);
+		commandManager = ((ServerEditorPartInput) input).getServerCommandManager();
+	}
+
+	public void showDependenciesForBundle(String bundle, String version) {
+		setSelection(bundle, version);
+	}
+
+	public void openDependencyPage(IBundle bundle) {
+		BundleInformationEditorPage infoPage = openInformationPage();
+		if (infoPage != null) {
+			commandManager.getServerEditor().setActiveEditor(infoPage);
+			infoPage.showOverviewForBundle(bundle);
+		}
+	}
+	
+	public void refresh(Map<Long, IBundle> bundles) {
+		if (bundles != null && !bundles.equals(viewer.getInput())) {
+			contentProvider.setBundles(bundles);
+			viewer.setInput(bundles.values());
+			
+			BundleInformationEditorPage infoPage = openInformationPage();
+			if (infoPage != null) {
+				infoPage.refresh(bundles);
+			}
+		}
+	}
+	
+	private BundleInformationEditorPage openInformationPage() {
+		IEditorPart[] parts = commandManager.getServerEditor().findEditors(getEditorInput());
+		for (IEditorPart part : parts) {
+			if (part instanceof BundleInformationEditorPage) {
+				return (BundleInformationEditorPage) part;
+			}
+		}
+		return null;
+	}
+
+	@Override
+	protected void enablePage() {
+		super.enablePage();
+		setInfoStatus("Click the 'Refresh' button for fetching data from server.");
+	}
+
+	class BundleDependencyUpdateJob extends Job {
+
+		private final boolean deleteSelection;
+
+		public BundleDependencyUpdateJob(boolean deleteSelection) {
+			super("Updating Bundle Dependency Graph");
+			this.deleteSelection = deleteSelection;
+		}
+
+		@Override
+		protected IStatus run(IProgressMonitor monitor) {
+			Display.getDefault().asyncExec(new Runnable() {
+
+				public void run() {
+					contentProvider.clearSelection();
+					if (deleteSelection) {
+						viewer.setSelection(new StructuredSelection());
+					}
+					viewer.refresh(true);
+					viewer.getGraphControl().applyLayout();
+				}
+			});
+			return Status.OK_STATUS;
+		}
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/AbstractBundleEditorPage.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/AbstractBundleEditorPage.java
new file mode 100644
index 0000000..26f6027
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/AbstractBundleEditorPage.java
@@ -0,0 +1,231 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - enhancements and bug fixes
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.ui.internal;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.forms.ManagedForm;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.IServerListener;
+import org.eclipse.wst.server.core.ServerEvent;
+import org.eclipse.wst.server.ui.editor.ServerEditorPart;
+import org.eclipse.wst.server.ui.internal.ImageResource;
+import org.eclipse.wst.server.ui.internal.Messages;
+import org.eclipse.wst.server.ui.internal.view.servers.StartAction;
+import org.eclipse.wst.server.ui.internal.view.servers.StopAction;
+
+/**
+ * @author Christian Dupuis
+ * @author Kaloyan Raev
+ */
+@SuppressWarnings("restriction")
+public abstract class AbstractBundleEditorPage extends ServerEditorPart {
+
+	class PageEnablementServerListener implements IServerListener {
+
+		public void serverChanged(final ServerEvent event) {
+			if ((event.getKind() & ServerEvent.SERVER_CHANGE) != 0 && (event.getKind() & ServerEvent.STATE_CHANGE) != 0) {
+				getSite().getShell().getDisplay().asyncExec(new Runnable() {
+
+					public void run() {
+						if (event.getState() == IServer.STATE_STARTED) {
+							enablePage();
+						}
+						else {
+							disablePage();
+						}
+						sform.getToolBarManager().update(true);
+					}
+				});
+			}
+		}
+	}
+
+	class StartServerAction extends Action {
+
+		private final String launchMode;
+
+		public StartServerAction(String launchMode) {
+			this.launchMode = launchMode;
+			if (launchMode == ILaunchManager.RUN_MODE) {
+				setToolTipText(Messages.actionStartToolTip);
+				setText(Messages.actionStart);
+				setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START));
+				setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START));
+				setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START));
+			}
+			else if (launchMode == ILaunchManager.DEBUG_MODE) {
+				setToolTipText(Messages.actionDebugToolTip);
+				setText(Messages.actionDebug);
+				setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_DEBUG));
+				setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_DEBUG));
+				setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_DEBUG));
+			}
+		}
+
+		@Override
+		public void run() {
+			if (getServer().getOriginal().canStart(launchMode).isOK()) {
+				StartAction.start(getServer().getOriginal(), launchMode, getSite().getShell());
+			}
+		}
+
+	}
+
+	class StopServerAction extends Action {
+
+		public StopServerAction() {
+			setToolTipText(Messages.actionStopToolTip);
+			setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_STOP));
+			setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_STOP));
+			setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_STOP));
+		}
+
+		@Override
+		public void run() {
+			if (getServer().getOriginal().canStop().isOK()) {
+				StopAction.stop(getServer().getOriginal(), getSite().getShell());
+			}
+		}
+
+	}
+
+	private StartServerAction debugAction;
+
+	private StartServerAction runAction;
+
+	private IServerListener serverListener;
+
+	private StopServerAction stopAction;
+
+	protected ManagedForm mform;
+
+	protected ScrolledForm sform;
+
+	public final void createPartControl(Composite parent) {
+
+		createBundleContent(parent);
+
+		IToolBarManager toolBarManager = sform.getToolBarManager();
+
+		if (toolBarManager.getItems().length > 0) {
+			toolBarManager.add(new Separator());
+		}
+
+		debugAction = new StartServerAction(ILaunchManager.DEBUG_MODE);
+		toolBarManager.add(debugAction);
+		runAction = new StartServerAction(ILaunchManager.RUN_MODE);
+		toolBarManager.add(runAction);
+		stopAction = new StopServerAction();
+		toolBarManager.add(stopAction);
+		toolBarManager.update(true);
+
+		if (server.getOriginal().getServerState() != IServer.STATE_STARTED) {
+			disablePage();
+		}
+		else {
+			enablePage();
+		}
+	}
+
+	public void dispose() {
+		getServer().getOriginal().removeServerListener(serverListener);
+		super.dispose();
+	}
+
+	public void init(IEditorSite site, IEditorInput input) {
+		super.init(site, input);
+		serverListener = new PageEnablementServerListener();
+		getServer().getOriginal().addServerListener(serverListener);
+	}
+
+	public void setFocus() {
+	}
+
+	protected abstract void createBundleContent(Composite parent);
+
+	protected void disablePage() {
+		setInfoStatus("Server '" + getServer().getName() + "' is not running.");
+		setEnabled(sform.getForm().getBody(), false);
+		runAction.setEnabled(true);
+		debugAction.setEnabled(true);
+		stopAction.setEnabled(false);
+	}
+
+	protected void enablePage() {
+		clearStatus();
+		setEnabled(sform.getForm().getBody(), true);
+		runAction.setEnabled(false);
+		debugAction.setEnabled(false);
+		stopAction.setEnabled(true);
+	}
+
+	protected void setEnabled(Control control, boolean enabled) {
+		control.setEnabled(enabled);
+		if (control instanceof Composite) {
+			for (Control childControl : ((Composite) control).getChildren()) {
+				setEnabled(childControl, enabled);
+			}
+		}
+	}
+	
+	/**
+	 * Sets the status message of the editor. 
+	 * 
+	 * @param status status message to set. 
+	 */
+	public void setStatus(IStatus status) {
+		sform.getForm().setMessage(status.getMessage(), getMessageType(status));
+	}
+	
+	/**
+	 * Sets the status message of the editor with the provide info message. 
+	 * 
+	 * @param message info message to set. 
+	 */
+	public void setInfoStatus(String message) {
+		sform.getForm().setMessage(message, IMessageProvider.INFORMATION);
+	}
+	
+	/**
+	 * Clears the status message of the editor.
+	 */
+	public void clearStatus() {
+		sform.getForm().setMessage(null);
+	}
+	
+	/**
+	 * Converts an IStatus message type to Form message type. 
+	 */
+	private int getMessageType(IStatus status) {
+		switch (status.getSeverity()) {
+		case IStatus.ERROR:
+			return IMessageProvider.ERROR;
+		case IStatus.WARNING:
+			return IMessageProvider.WARNING;
+		case IStatus.INFO:
+			return IMessageProvider.INFORMATION;
+		default:
+			return IMessageProvider.NONE;
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/EditorUIPlugin.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/EditorUIPlugin.java
new file mode 100644
index 0000000..e3e4870
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/EditorUIPlugin.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2011 SAP AG
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SAP AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.ui.internal;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+/**
+ * @author Kaloyan Raev
+ */
+public class EditorUIPlugin extends AbstractUIPlugin {
+	
+	public static final String PLUGIN_ID = "org.eclipse.libra.framework.editor";
+
+	private static EditorUIPlugin plugin = null;
+
+	public EditorUIPlugin() {
+		super();
+		plugin = this;
+	}
+
+	public static EditorUIPlugin getDefault() {
+		if (plugin == null) {
+			plugin = new EditorUIPlugin();
+		}
+		return plugin;
+	}
+	
+	/**
+	 * Constructs new IStatus object from the given String message. 
+	 * 
+	 * @param message the message to create the IStatus object from. 
+	 */
+	public static IStatus newErrorStatus(String message) {
+		return new Status(IStatus.ERROR, PLUGIN_ID, message);
+	}
+
+	/**
+	 * Constructs new IStatus object from the given Throwable object. 
+	 * 
+	 * @param t the Throwable object to create the IStatus message from. 
+	 */
+	public static IStatus newErrorStatus(Throwable t) {
+		return new Status(IStatus.ERROR, PLUGIN_ID, t.getMessage(), t);
+	}
+	
+	/**
+	 * Logs the specified status with this plug-in's log.
+	 * 
+	 * @param status status to log
+	 */
+	public static void log(IStatus status) {
+		getDefault().getLog().log(status);
+	}
+	
+	/**
+	 * Logs the specified throwable with this plug-in's log.
+	 * 
+	 * @param t throwable to log
+	 */
+	public static void log(Throwable t) {
+		if (t instanceof CoreException) {
+			log(((CoreException) t).getStatus());
+		} else {
+			log(newErrorStatus(t));
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/SearchControl.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/SearchControl.java
new file mode 100644
index 0000000..ab7a419
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/SearchControl.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2009 SpringSource, a divison of VMware, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.ui.internal;
+
+import org.eclipse.jface.action.ControlContribution;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+/**
+ * @author Christian Dupuis
+ */
+public class SearchControl extends ControlContribution {
+
+	private final IManagedForm managedForm;
+
+	private Text searchText;
+
+	public SearchControl(String id, IManagedForm managedForm) {
+		super(id);
+		this.managedForm = managedForm;
+	}
+
+	public Text getSearchText() {
+		return searchText;
+	}
+
+	protected Control createControl(Composite parent) {
+		if (parent instanceof ToolBar) {
+			parent.setCursor(null);
+		}
+
+		FormToolkit toolkit = managedForm.getToolkit();
+		Composite composite = toolkit.createComposite(parent);
+
+		GridLayout layout = new GridLayout(3, false);
+		layout.marginHeight = 0;
+		layout.marginWidth = 0;
+		layout.verticalSpacing = 0;
+
+		composite.setLayout(layout);
+		composite.setBackground(null);
+
+		searchText = toolkit.createText(composite, "", SWT.SINGLE | SWT.BORDER | SWT.SEARCH | SWT.CANCEL);
+		searchText.setData(FormToolkit.KEY_DRAW_BORDER, Boolean.TRUE);
+		searchText.setLayoutData(new GridData(200, -1));
+		searchText.setText("type filter text");
+
+		toolkit.paintBordersFor(composite);
+
+		return composite;
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/SearchTextHistory.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/SearchTextHistory.java
new file mode 100644
index 0000000..3c7850c
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/SearchTextHistory.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - enhancements and bug fixes
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.ui.internal;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Christian Dupuis
+ * @author Kaloyan Raev
+ */
+public class SearchTextHistory {
+
+	private static final int MAX_HISTORY = 10;
+
+	private List<String> history= new ArrayList<String>();
+
+	private int index = 0;
+
+	public void add(String text) {
+		int found = -1;
+        int size = history.size();
+        for (int i = 0; i < size; i++) {
+            String s = (String) history.get(i);
+            if (s.equals(text)) {
+                found = i;
+                break;
+            }
+        }
+
+        if (found == -1) {
+            if (size >= MAX_HISTORY)
+                history.remove(size - 1);
+            history.add(0, text);
+        } else if (found != 0) {
+            history.remove(found);
+            history.add(0, text);
+        }
+        index = 0;
+	}
+
+	public String back() {
+		if (canBack()) {
+			String text = history.get(index);
+			index++;
+			return text;
+		}
+		return null;
+	}
+
+	public String forward() {
+		if (canForward()) {
+			index--;
+			String text = history.get(index);
+			return text;
+		}
+		return null;
+	}
+
+	public boolean canForward() {
+		return index > 0;
+	}
+
+	public boolean canBack() {
+		return index < history.size();
+	}
+
+	public String current() {
+		return (history.size() == 0) ? null : history.get(0);
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/BundleDependency.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/BundleDependency.java
new file mode 100644
index 0000000..b2c18bf
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/BundleDependency.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - moving to Eclipse Libra project and enhancements
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.ui.internal.dependencies;
+
+import org.eclipse.libra.framework.editor.core.model.IBundle;
+
+/**
+ * @author Christian Dupuis
+ * @author Kaloyan Raev
+ */
+public abstract class BundleDependency {
+
+	private final IBundle exportingBundle;
+
+	private final IBundle importingBundle;
+
+	public BundleDependency(IBundle exportingBundle, IBundle importingBundle) {
+		this.exportingBundle = exportingBundle;
+		this.importingBundle = importingBundle;
+	}
+
+	public IBundle getExportingBundle() {
+		return exportingBundle;
+	}
+
+	public IBundle getImportingBundle() {
+		return importingBundle;
+	}
+
+	@Override
+	public int hashCode() {
+		int hashCode = 17;
+		hashCode = 31 * hashCode + exportingBundle.hashCode();
+		hashCode = 31 * hashCode + importingBundle.hashCode();
+		return hashCode;
+	}
+
+	@Override
+	public boolean equals(Object other) {
+		if (this == other) {
+			return true;
+		}
+		if (!(other instanceof BundleDependency)) {
+			return false;
+		}
+		BundleDependency that = (BundleDependency) other;
+		if (this.exportingBundle != that.exportingBundle) {
+			return false;
+		}
+		if (this.exportingBundle != null && !this.exportingBundle.equals(that.exportingBundle)) {
+			return false;
+		}
+		if (this.importingBundle != that.importingBundle) {
+			return false;
+		}
+		if (this.importingBundle != null && !this.importingBundle.equals(that.importingBundle)) {
+			return false;
+		}
+		return true;
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/BundleDependencyContentProvider.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/BundleDependencyContentProvider.java
new file mode 100644
index 0000000..e56709e
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/BundleDependencyContentProvider.java
@@ -0,0 +1,479 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - moving to Eclipse Libra project and enhancements
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.ui.internal.dependencies;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.libra.framework.editor.core.model.IBundle;
+import org.eclipse.libra.framework.editor.core.model.IPackageImport;
+import org.eclipse.libra.framework.editor.core.model.IServiceReference;
+import org.eclipse.libra.framework.editor.ui.internal.SearchControl;
+import org.eclipse.ui.internal.ide.StringMatcher;
+import org.eclipse.zest.core.viewers.GraphViewer;
+import org.eclipse.zest.core.viewers.IGraphContentProvider;
+
+/**
+ * @author Christian Dupuis
+ * @author Kaloyan Raev
+ */
+@SuppressWarnings("restriction")
+public class BundleDependencyContentProvider implements IGraphContentProvider, ISelectionChangedListener {
+
+	private static final Object[] NO_ELEMENTS = new Object[0];
+
+	private Map<Long, IBundle> bundles;
+
+	private BundleDependencyContentResult contentResult;
+
+	private Map<IBundle, Set<BundleDependency>> dependenciesByBundle;
+
+	private int incomingDependencyDegree = 1;
+
+	private int outgoingDependencyDegree = 1;
+
+	private final SearchControl searchControl;
+
+	private Set<BundleDependency> selectedDependencies = new HashSet<BundleDependency>();
+
+	private boolean showPackage = true;
+
+	private boolean showServices = false;
+
+	private final GraphViewer viewer;
+
+	public BundleDependencyContentProvider(GraphViewer viewer, SearchControl control) {
+		this.viewer = viewer;
+		this.searchControl = control;
+	}
+
+	public void clearSelection() {
+		for (BundleDependency dep : selectedDependencies) {
+			viewer.unReveal(dep);
+		}
+		selectedDependencies.clear();
+		for (Object node : viewer.getNodeElements()) {
+			viewer.update(node, null);
+		}
+
+		for (Object connection : viewer.getConnectionElements()) {
+			viewer.update(connection, null);
+		}
+	}
+
+	public void dispose() {
+	}
+
+	public BundleDependencyContentResult getContentResult() {
+		return this.contentResult;
+	}
+
+	public Object getDestination(Object rel) {
+		if (rel instanceof BundleDependency) {
+			return ((BundleDependency) rel).getExportingBundle();
+		}
+		return null;
+	}
+
+	@SuppressWarnings( { "unchecked" })
+	public Object[] getElements(Object input) {
+		if (input instanceof Collection) {
+			dependenciesByBundle = new HashMap<IBundle, Set<BundleDependency>>();
+			Set<IBundle> bundles = new HashSet<IBundle>((Collection<IBundle>) input);
+			if (!"type filter text".equals(searchControl.getSearchText().getText())
+					&& searchControl.getSearchText().getText().trim().length() > 0) {
+				String searchText = searchControl.getSearchText().getText().trim() + "*";
+				StringMatcher matcher = new StringMatcher(searchText, true, false);
+				for (IBundle dep : new HashSet<IBundle>(bundles)) {
+					boolean filter = true;
+					if (matcher.match(dep.getSymbolicName())) {
+						filter = false;
+					}
+					if (matcher.match(dep.getSymbolicName() + " (" + dep.getVersion() + ")")) {
+						filter = false;
+					}
+					if (filter) {
+						bundles.remove(dep);
+					}
+				}
+			}
+			this.contentResult = new BundleDependencyContentResult(bundles);
+
+			Set<BundleDependency> dependencies = new HashSet<BundleDependency>();
+			if (showPackage) {
+				Set<IBundle> bundlesToProcess = new HashSet<IBundle>(bundles);
+				Set<IBundle> alreadyProcessedBundles = new HashSet<IBundle>();
+				int degree = 0;
+
+				do {
+					degree++;
+					Set<IBundle> copy = new HashSet<IBundle>(bundlesToProcess);
+					bundlesToProcess = new HashSet<IBundle>();
+					for (IBundle b : copy) {
+						bundlesToProcess.addAll(addOutgoingPackageDependencies(dependencies, b, degree,
+								alreadyProcessedBundles));
+					}
+				} while (bundlesToProcess.size() > 0);
+
+				bundlesToProcess = new HashSet<IBundle>(bundles);
+				alreadyProcessedBundles = new HashSet<IBundle>();
+				degree = 0;
+
+				do {
+					degree++;
+					Set<IBundle> copy = new HashSet<IBundle>(bundlesToProcess);
+					bundlesToProcess = new HashSet<IBundle>();
+					for (IBundle b : copy) {
+						bundlesToProcess.addAll(addIncomingPackageDependencies(dependencies, b, degree,
+								alreadyProcessedBundles));
+					}
+				} while (bundlesToProcess.size() > 0);
+			}
+			else if (showServices) {
+				Set<IBundle> bundlesToProcess = new HashSet<IBundle>(bundles);
+				Set<IBundle> alreadyProcessedBundles = new HashSet<IBundle>();
+				int degree = 0;
+
+				do {
+					degree++;
+					Set<IBundle> copy = new HashSet<IBundle>(bundlesToProcess);
+					bundlesToProcess = new HashSet<IBundle>();
+					for (IBundle b : copy) {
+						bundlesToProcess.addAll(addOutgoingServiceDependencies(dependencies, b, degree,
+								alreadyProcessedBundles));
+					}
+				} while (bundlesToProcess.size() > 0);
+
+				bundlesToProcess = new HashSet<IBundle>(bundles);
+				alreadyProcessedBundles = new HashSet<IBundle>();
+				degree = 0;
+
+				do {
+					degree++;
+					Set<IBundle> copy = new HashSet<IBundle>(bundlesToProcess);
+					bundlesToProcess = new HashSet<IBundle>();
+					for (IBundle b : copy) {
+						bundlesToProcess.addAll(addIncomingServiceDependencies(dependencies, b, degree,
+								alreadyProcessedBundles));
+					}
+				} while (bundlesToProcess.size() > 0);
+			}
+
+			if ("type filter text".equals(searchControl.getSearchText().getText())
+					|| searchControl.getSearchText().getText().trim().length() == 0) {
+				this.contentResult = null;
+			}
+
+			return dependencies.toArray(new BundleDependency[dependencies.size()]);
+		}
+		return NO_ELEMENTS;
+	}
+
+	public Object getSource(Object rel) {
+		if (rel instanceof BundleDependency) {
+			return ((BundleDependency) rel).getImportingBundle();
+		}
+		return null;
+	}
+
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+	}
+
+	public boolean isSelected(IBundle bundle) {
+		for (BundleDependency dep : selectedDependencies) {
+			if (dep.getExportingBundle().equals(bundle)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public boolean isSelected(BundleDependency deb) {
+		return (selectedDependencies != null && selectedDependencies.contains(deb));
+	}
+
+	@SuppressWarnings("unchecked")
+	public void selectionChanged(SelectionChangedEvent event) {
+		for (BundleDependency dep : selectedDependencies) {
+			viewer.unReveal(dep);
+		}
+		selectedDependencies = new HashSet<BundleDependency>();
+		Set<Object> newSelection = new HashSet<Object>();
+		Iterator<Object> iterator = ((IStructuredSelection) event.getSelection()).iterator();
+		while (iterator.hasNext()) {
+			Object selectedObject = iterator.next();
+			if (selectedObject instanceof IBundle) {
+				newSelection.add(selectedObject);
+				if (dependenciesByBundle.containsKey(selectedObject)) {
+					for (BundleDependency dep : dependenciesByBundle.get(selectedObject)) {
+						selectedDependencies.add(dep);
+						newSelection.add(dep.getExportingBundle());
+					}
+				}
+			}
+			else if (selectedObject instanceof BundleDependency) {
+				BundleDependency dep = (BundleDependency) selectedObject;
+				selectedDependencies.add(dep);
+				newSelection.add(dep.getExportingBundle());
+				newSelection.add(dep.getImportingBundle());
+			}
+		}
+
+		// viewer.setSelection(new StructuredSelection((Object[]) newSelection
+		// .toArray(new Object[newSelection.size()])), true);
+
+		for (Object node : viewer.getNodeElements()) {
+			viewer.update(node, null);
+		}
+
+		for (Object connection : viewer.getConnectionElements()) {
+			viewer.update(connection, null);
+		}
+
+		for (BundleDependency dep : selectedDependencies) {
+			viewer.reveal(dep);
+		}
+
+		// viewer.getGraphControl().redraw();
+	}
+
+	public void setBundles(Map<Long, IBundle> bundles) {
+		this.bundles = new HashMap<Long, IBundle>(bundles);
+	}
+
+	public void setIncomingDependencyDegree(int degree) {
+		this.incomingDependencyDegree = degree;
+	}
+
+	public void setOutgoingDependencyDegree(int degree) {
+		this.outgoingDependencyDegree = degree;
+	}
+
+	public void setShowPackage(boolean showPackage) {
+		this.showPackage = showPackage;
+	}
+
+	public void setShowServices(boolean showServices) {
+		this.showServices = showServices;
+	}
+
+	private Set<IBundle> addIncomingPackageDependencies(Set<BundleDependency> dependencies, IBundle bundle, int degree,
+			Set<IBundle> processedBundles) {
+
+		if (processedBundles.contains(bundle)) {
+			return Collections.emptySet();
+		}
+		processedBundles.add(bundle);
+
+		Set<IBundle> dependentBundles = new HashSet<IBundle>();
+		if (incomingDependencyDegree >= degree) {
+			String id = bundle.getId();
+
+			for (IBundle dependantBundle : this.bundles.values()) {
+				for (IPackageImport packageImport : dependantBundle.getPackageImports()) {
+					if (packageImport.getSupplierId().equals(id)) {
+
+						Set<BundleDependency> bundleDependencies = null;
+						if (dependenciesByBundle.containsKey(dependantBundle)) {
+							bundleDependencies = dependenciesByBundle.get(dependantBundle);
+						}
+						else {
+							bundleDependencies = new HashSet<BundleDependency>();
+							dependenciesByBundle.put(dependantBundle, bundleDependencies);
+						}
+
+						PackageBundleDependency bundleDependency = null;
+
+						for (BundleDependency dep : bundleDependencies) {
+							if (dep.getExportingBundle().equals(bundle) && dep instanceof PackageBundleDependency) {
+								bundleDependency = (PackageBundleDependency) dep;
+								break;
+							}
+						}
+
+						if (bundleDependency == null) {
+							bundleDependency = new PackageBundleDependency(bundle, dependantBundle);
+							bundleDependencies.add(bundleDependency);
+							dependencies.add(bundleDependency);
+						}
+						contentResult.addIncomingDependency(degree, dependantBundle);
+
+						bundleDependency.addPackageImport(packageImport);
+						dependentBundles.add(dependantBundle);
+					}
+				}
+			}
+		}
+		if (incomingDependencyDegree > degree) {
+			return dependentBundles;
+		}
+		return Collections.emptySet();
+	}
+
+	private Set<IBundle> addIncomingServiceDependencies(Set<BundleDependency> dependencies, IBundle bundle, int degree,
+			Set<IBundle> processedBundles) {
+
+		if (processedBundles.contains(bundle)) {
+			return Collections.emptySet();
+		}
+		processedBundles.add(bundle);
+
+		Set<IBundle> dependentBundles = new HashSet<IBundle>();
+		if (incomingDependencyDegree >= degree) {
+			for (IServiceReference pe : bundle.getRegisteredServices()) {
+				for (Long id : pe.getUsingBundleIds()) {
+					IBundle dependantBundle = this.bundles.get(id);
+
+					Set<BundleDependency> bundleDependencies = null;
+					if (dependenciesByBundle.containsKey(bundle)) {
+						bundleDependencies = dependenciesByBundle.get(bundle);
+					}
+					else {
+						bundleDependencies = new HashSet<BundleDependency>();
+						dependenciesByBundle.put(bundle, bundleDependencies);
+					}
+
+					ServiceReferenceBundleDependency bundleDependency = null;
+
+					for (BundleDependency dep : bundleDependencies) {
+						if (dep.getExportingBundle().equals(dependantBundle)
+								&& dep instanceof ServiceReferenceBundleDependency) {
+							bundleDependency = (ServiceReferenceBundleDependency) dep;
+							break;
+						}
+					}
+
+					if (bundleDependency == null) {
+						bundleDependency = new ServiceReferenceBundleDependency(bundle, dependantBundle);
+						bundleDependencies.add(bundleDependency);
+						dependencies.add(bundleDependency);
+					}
+					contentResult.addIncomingDependency(degree, dependantBundle);
+
+					bundleDependency.addServiceReferece(pe);
+					dependentBundles.add(dependantBundle);
+				}
+			}
+		}
+		if (incomingDependencyDegree > degree) {
+			return dependentBundles;
+		}
+		return Collections.emptySet();
+	}
+
+	private Set<IBundle> addOutgoingPackageDependencies(Set<BundleDependency> dependencies, IBundle bundle, int degree,
+			Set<IBundle> processedBundles) {
+
+		if (processedBundles.contains(bundle)) {
+			return Collections.emptySet();
+		}
+		processedBundles.add(bundle);
+
+		Set<IBundle> dependentBundles = new HashSet<IBundle>();
+		if (outgoingDependencyDegree >= degree) {
+			for (IPackageImport pe : bundle.getPackageImports()) {
+				IBundle dependantBundle = this.bundles.get(Long.valueOf(pe.getSupplierId()));
+
+				Set<BundleDependency> bundleDependencies = null;
+				if (dependenciesByBundle.containsKey(bundle)) {
+					bundleDependencies = dependenciesByBundle.get(bundle);
+				}
+				else {
+					bundleDependencies = new HashSet<BundleDependency>();
+					dependenciesByBundle.put(bundle, bundleDependencies);
+				}
+
+				PackageBundleDependency bundleDependency = null;
+
+				for (BundleDependency dep : bundleDependencies) {
+					if (dep.getExportingBundle().equals(dependantBundle) && dep instanceof PackageBundleDependency) {
+						bundleDependency = (PackageBundleDependency) dep;
+						break;
+					}
+				}
+
+				if (bundleDependency == null) {
+					bundleDependency = new PackageBundleDependency(dependantBundle, bundle);
+					bundleDependencies.add(bundleDependency);
+					dependencies.add(bundleDependency);
+				}
+				contentResult.addOutgoingDependency(degree, dependantBundle);
+
+				bundleDependency.addPackageImport(pe);
+				dependentBundles.add(dependantBundle);
+			}
+		}
+		if (outgoingDependencyDegree > degree) {
+			return dependentBundles;
+		}
+		return Collections.emptySet();
+	}
+
+	private Set<IBundle> addOutgoingServiceDependencies(Set<BundleDependency> dependencies, IBundle bundle, int degree,
+			Set<IBundle> processedBundles) {
+
+		if (processedBundles.contains(bundle)) {
+			return Collections.emptySet();
+		}
+		processedBundles.add(bundle);
+
+		Set<IBundle> dependentBundles = new HashSet<IBundle>();
+		if (outgoingDependencyDegree >= degree) {
+			for (IServiceReference pe : bundle.getServicesInUse()) {
+				IBundle dependantBundle = this.bundles.get(pe.getBundleId());
+
+				Set<BundleDependency> bundleDependencies = null;
+				if (dependenciesByBundle.containsKey(bundle)) {
+					bundleDependencies = dependenciesByBundle.get(bundle);
+				}
+				else {
+					bundleDependencies = new HashSet<BundleDependency>();
+					dependenciesByBundle.put(bundle, bundleDependencies);
+				}
+
+				ServiceReferenceBundleDependency bundleDependency = null;
+
+				for (BundleDependency dep : bundleDependencies) {
+					if (dep.getExportingBundle().equals(dependantBundle)
+							&& dep instanceof ServiceReferenceBundleDependency) {
+						bundleDependency = (ServiceReferenceBundleDependency) dep;
+						break;
+					}
+				}
+
+				if (bundleDependency == null) {
+					bundleDependency = new ServiceReferenceBundleDependency(dependantBundle, bundle);
+					bundleDependencies.add(bundleDependency);
+					dependencies.add(bundleDependency);
+				}
+				contentResult.addOutgoingDependency(degree, dependantBundle);
+
+				bundleDependency.addServiceReferece(pe);
+				dependentBundles.add(dependantBundle);
+			}
+		}
+		if (outgoingDependencyDegree > degree) {
+			return dependentBundles;
+		}
+		return Collections.emptySet();
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/BundleDependencyContentResult.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/BundleDependencyContentResult.java
new file mode 100644
index 0000000..14110fb
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/BundleDependencyContentResult.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - moving to Eclipse Libra project and enhancements
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.ui.internal.dependencies;
+
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.eclipse.libra.framework.editor.core.model.IBundle;
+
+/**
+ * @author Christian Dupuis
+ * @author Kaloyan Raev
+ */
+public class BundleDependencyContentResult {
+
+	private final Set<IBundle> bundles;
+
+	private final Map<Integer, Set<IBundle>> incomingDependencies = new HashMap<Integer, Set<IBundle>>();
+
+	private final Map<Integer, Set<IBundle>> outgoingDependencies = new HashMap<Integer, Set<IBundle>>();
+
+	public BundleDependencyContentResult(Set<IBundle> bundles) {
+		this.bundles = bundles;
+	}
+
+	public void addIncomingDependency(Integer level, IBundle bundleDependency) {
+		if (!incomingDependencies.containsKey(level)) {
+			incomingDependencies.put(level, new TreeSet<IBundle>(new Comparator<IBundle>() {
+
+				public int compare(IBundle o1, IBundle o2) {
+					return Long.valueOf(o1.getId()).compareTo(Long.valueOf(o2.getId()));
+				}
+			}));
+		}
+		incomingDependencies.get(level).add(bundleDependency);
+	}
+
+	public void addOutgoingDependency(Integer level, IBundle bundleDependency) {
+		if (!outgoingDependencies.containsKey(level)) {
+			outgoingDependencies.put(level, new TreeSet<IBundle>(new Comparator<IBundle>() {
+
+				public int compare(IBundle o1, IBundle o2) {
+					return Long.valueOf(o1.getId()).compareTo(Long.valueOf(o2.getId()));
+				}
+			}));
+		}
+		outgoingDependencies.get(level).add(bundleDependency);
+	}
+
+	public Set<IBundle> getBundles() {
+		return bundles;
+	}
+
+	public Map<Integer, Set<IBundle>> getIncomingDependencies() {
+		return incomingDependencies;
+	}
+
+	public Map<Integer, Set<IBundle>> getOutgoingDependencies() {
+		return outgoingDependencies;
+	}
+
+	public Integer getIncomingDegree() {
+		int degree = 0;
+		for (Integer integer : incomingDependencies.keySet()) {
+			degree = Math.max(degree, integer);
+		}
+		return degree;
+	}
+
+	public Integer getOutgoingDegree() {
+		int degree = 0;
+		for (Integer integer : outgoingDependencies.keySet()) {
+			degree = Math.max(degree, integer);
+		}
+		return degree;
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/BundleDependencyLabelProvider.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/BundleDependencyLabelProvider.java
new file mode 100644
index 0000000..fc9aa96
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/BundleDependencyLabelProvider.java
@@ -0,0 +1,160 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - moving to Eclipse Libra project and enhancements
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.ui.internal.dependencies;
+
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.libra.framework.editor.core.model.IBundle;
+import org.eclipse.pde.internal.ui.PDEPluginImages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.zest.core.viewers.IConnectionStyleProvider;
+import org.eclipse.zest.core.viewers.IEntityStyleProvider;
+import org.eclipse.zest.core.widgets.ZestStyles;
+
+/**
+ * @author Christian Dupuis
+ * @author Kaloyan Raev
+ */
+public class BundleDependencyLabelProvider implements ILabelProvider, IEntityStyleProvider, IConnectionStyleProvider,
+		ISelectionChangedListener {
+
+	private final Color blackColor = Display.getCurrent().getSystemColor(SWT.COLOR_BLACK);
+
+	private final Color colorBorder = new Color(null, 0, 0, 0);
+
+	private final Color colorRel = new Color(null, 150, 150, 255);
+
+	private final Color colorRelated = new Color(null, 236, 255, 122);
+
+	private final Color colorRelResolved = new Color(null, 255, 100, 100);
+
+	private final Color colorTestBackground = new Color(null, 255, 255, 255);
+
+	private final Color colorTestHighlight = new Color(null, 182, 217, 0);
+
+	private final BundleDependencyContentProvider contentProvider;
+
+	private final Color grayColor = Display.getCurrent().getSystemColor(SWT.COLOR_GRAY);
+
+	public BundleDependencyLabelProvider(BundleDependencyContentProvider contentProvider, FormToolkit formToolkit) {
+		this.contentProvider = contentProvider;
+	}
+
+	public void addListener(ILabelProviderListener listener) {
+	}
+
+	public void dispose() {
+		colorTestBackground.dispose();
+		colorTestHighlight.dispose();
+		colorRel.dispose();
+		colorRelResolved.dispose();
+		colorBorder.dispose();
+		colorRelated.dispose();
+	}
+
+	public boolean fisheyeNode(Object entity) {
+		return false;
+	}
+
+	public Color getBackgroundColour(Object entity) {
+		if (entity instanceof IBundle) {
+			if (contentProvider.isSelected((IBundle) entity)) {
+				return colorRelated;
+			}
+		}
+		return colorTestBackground;
+	}
+
+	public Color getBorderColor(Object entity) {
+		return colorBorder;
+	}
+
+	public Color getBorderHighlightColor(Object entity) {
+		return colorBorder;
+	}
+
+	public int getBorderWidth(Object entity) {
+		return 1;
+	}
+
+	public Color getColor(Object rel) {
+		if (rel instanceof BundleDependency) {
+			if (contentProvider.isSelected((BundleDependency) rel)) {
+				return blackColor;
+			}
+			else {
+				return grayColor;
+			}
+		}
+		return colorRel;
+	}
+
+	public int getConnectionStyle(Object rel) {
+		return ZestStyles.CONNECTIONS_DASH;
+	}
+
+	public Color getForegroundColour(Object entity) {
+		return colorBorder;
+	}
+
+	public Color getHighlightColor(Object rel) {
+		if (rel instanceof BundleDependency) {
+			return blackColor;
+		}
+		return colorTestHighlight;
+	}
+
+	public Image getImage(Object element) {
+		if (element instanceof IBundle) {
+			return PDEPluginImages.get(PDEPluginImages.OBJ_DESC_BUNDLE);
+		}
+		return null;
+	}
+
+	public int getLineWidth(Object rel) {
+		return 1;
+	}
+
+	public Color getNodeHighlightColor(Object entity) {
+		return colorTestHighlight;
+	}
+
+	public String getText(Object element) {
+		if (element instanceof IBundle) {
+			return ((IBundle) element).getSymbolicName() + " (" + ((IBundle) element).getVersion() + ")";
+		}
+		return null;
+	}
+
+	public IFigure getTooltip(Object entity) {
+		return null;
+	}
+
+	public boolean isLabelProperty(Object element, String property) {
+		return false;
+	}
+
+	public void removeListener(ILabelProviderListener listener) {
+
+	}
+
+	public void selectionChanged(SelectionChangedEvent event) {
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/BundleDependencyLayoutAlgorithm.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/BundleDependencyLayoutAlgorithm.java
new file mode 100644
index 0000000..d3bbd0b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/BundleDependencyLayoutAlgorithm.java
@@ -0,0 +1,241 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - moving to Eclipse Libra project and enhancements
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.ui.internal.dependencies;
+
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.libra.framework.editor.core.model.IBundle;
+import org.eclipse.zest.core.widgets.GraphNode;
+import org.eclipse.zest.core.widgets.ZestStyles;
+import org.eclipse.zest.layouts.LayoutEntity;
+import org.eclipse.zest.layouts.algorithms.AbstractLayoutAlgorithm;
+import org.eclipse.zest.layouts.dataStructures.InternalNode;
+import org.eclipse.zest.layouts.dataStructures.InternalRelationship;
+
+/**
+ * @author Christian Dupuis
+ * @author Kaloyan Raev
+ */
+public class BundleDependencyLayoutAlgorithm extends AbstractLayoutAlgorithm {
+
+	private final BundleDependencyContentProvider contentProvider;
+
+	public BundleDependencyLayoutAlgorithm(BundleDependencyContentProvider contentProvider) {
+		super(ZestStyles.NODES_NO_LAYOUT_RESIZE);
+		this.contentProvider = contentProvider;
+	}
+
+	@Override
+	protected void applyLayoutInternal(InternalNode[] entitiesToLayout, InternalRelationship[] relationshipsToConsider,
+			double boundsX, double boundsY, double boundsWidth, double boundsHeight) {
+
+		BundleDependencyContentResult contentResult = this.contentProvider.getContentResult();
+		Set<IBundle> rootBundles = contentResult.getBundles();
+
+		Set<IBundle> bundlesProcessed = new HashSet<IBundle>();
+
+		if (contentResult != null) {
+			Set<ColumnHolder> columnNodes = new HashSet<ColumnHolder>();
+			double columnWith = 0;
+			double currentX = boundsX + 0;
+			double currentY = boundsY + 10;
+			double maxY = boundsHeight;
+			int columns = 0;
+
+			// Start with the incoming dependencies
+			int degree = contentResult.getIncomingDegree();
+			while (degree > 0) {
+				Set<InternalNode> degreeNodes = new HashSet<InternalNode>();
+				Set<IBundle> deps = contentResult.getIncomingDependencies().get(degree);
+				for (IBundle bundle : deps) {
+					if (!bundlesProcessed.contains(bundle)
+							&& !rootBundles.contains(bundle)
+							&& lowestRanking(bundle, contentResult.getIncomingDegree(), contentResult
+									.getIncomingDependencies()) == degree) {
+						for (InternalNode node : entitiesToLayout) {
+							LayoutEntity obj = node.getLayoutEntity();
+							IBundle graphBundle = (IBundle) ((GraphNode) obj.getGraphData()).getData();
+							if (graphBundle.equals(bundle)) {
+								columnWith = Math.max(columnWith, node.getWidthInLayout());
+								node.setLocation(currentX, currentY);
+								bundlesProcessed.add(bundle);
+								currentY = currentY + node.getHeightInLayout() + 15;
+								degreeNodes.add(node);
+								maxY = Math.max(currentY, maxY);
+								break;
+							}
+						}
+					}
+				}
+
+				for (InternalNode node : degreeNodes) {
+					if (node.getWidthInLayout() < columnWith) {
+						double x = (columnWith - node.getWidthInLayout()) / 2;
+						node.setLocation(node.getLayoutEntity().getXInLayout() + x, node.getLayoutEntity()
+								.getYInLayout());
+					}
+				}
+
+				ColumnHolder holder = new ColumnHolder();
+				holder.index = columns;
+				holder.y = currentY;
+				holder.nodes = degreeNodes;
+				columnNodes.add(holder);
+				columns++;
+				currentY = boundsY + 10;
+				if (degreeNodes.size() > 0) {
+					currentX = currentX + columnWith + 30;
+				}
+				degree--;
+				columnWith = 0;
+			}
+
+			Set<InternalNode> rootNodes = new HashSet<InternalNode>();
+			for (IBundle bundle : rootBundles) {
+				for (InternalNode node : entitiesToLayout) {
+					LayoutEntity obj = node.getLayoutEntity();
+					IBundle graphBundle = (IBundle) ((GraphNode) obj.getGraphData()).getData();
+					if (graphBundle.equals(bundle)) {
+						columnWith = Math.max(columnWith, node.getWidthInLayout());
+						node.setLocation(currentX, currentY);
+						bundlesProcessed.add(bundle);
+						currentY = currentY + node.getHeightInLayout() + 15;
+						maxY = Math.max(currentY, maxY);
+						rootNodes.add(node);
+						break;
+					}
+				}
+			}
+			for (InternalNode node : rootNodes) {
+				if (node.getWidthInLayout() < columnWith) {
+					double x = (columnWith - node.getWidthInLayout()) / 2;
+					node.setLocation(node.getLayoutEntity().getXInLayout() + x, node.getLayoutEntity().getYInLayout());
+				}
+			}
+
+			ColumnHolder holder = new ColumnHolder();
+			holder.index = columns;
+			holder.y = currentY;
+			holder.nodes = rootNodes;
+			columnNodes.add(holder);
+
+			currentY = boundsY + 10;
+			currentX = currentX + columnWith + 30;
+
+			int maxDegree = contentResult.getOutgoingDegree();
+			degree = 1;
+			while (degree <= maxDegree) {
+				Set<InternalNode> degreeNodes = new HashSet<InternalNode>();
+				Set<IBundle> deps = contentResult.getOutgoingDependencies().get(degree);
+				for (IBundle bundle : deps) {
+					if (!bundlesProcessed.contains(bundle)
+							&& !rootBundles.contains(bundle)
+							&& lowestRanking(bundle, contentResult.getOutgoingDegree(), contentResult
+									.getOutgoingDependencies()) == degree) {
+						for (InternalNode node : entitiesToLayout) {
+							LayoutEntity obj = node.getLayoutEntity();
+							IBundle graphBundle = (IBundle) ((GraphNode) obj.getGraphData()).getData();
+							if (graphBundle.equals(bundle)) {
+								columnWith = Math.max(columnWith, node.getWidthInLayout());
+								node.setLocation(currentX, currentY);
+								bundlesProcessed.add(bundle);
+								currentY = currentY + node.getHeightInLayout() + 15;
+								maxY = Math.max(currentY, maxY);
+								degreeNodes.add(node);
+								break;
+							}
+						}
+					}
+				}
+				for (InternalNode node : degreeNodes) {
+					if (node.getWidthInLayout() < columnWith) {
+						double x = (columnWith - node.getWidthInLayout()) / 2;
+						node.setLocation(node.getLayoutEntity().getXInLayout() + x, node.getLayoutEntity()
+								.getYInLayout());
+					}
+				}
+				holder = new ColumnHolder();
+				holder.index = columns;
+				holder.y = currentY;
+				holder.nodes = degreeNodes;
+				columnNodes.add(holder);
+				currentY = boundsY + 10;
+				currentX = currentX + columnWith + 30;
+				degree++;
+				columnWith = 0;
+			}
+
+			for (ColumnHolder column : columnNodes) {
+				if (column.y <= maxY) {
+					double y = (maxY - column.y) / 2;
+					for (InternalNode node : column.nodes) {
+						node.setLocation(node.getLayoutEntity().getXInLayout(), node.getLayoutEntity().getYInLayout()
+								+ y);
+					}
+				}
+			}
+
+		}
+	}
+
+	private int lowestRanking(IBundle bundle, int maxDegree, Map<Integer, Set<IBundle>> bundles) {
+		int ranking = 1;
+		while (ranking <= maxDegree) {
+			for (IBundle b : bundles.get(ranking)) {
+				if (b.equals(bundle)) {
+					return ranking;
+				}
+			}
+			ranking++;
+		}
+		return ranking;
+	}
+
+	@Override
+	protected int getCurrentLayoutStep() {
+		return 1;
+	}
+
+	@Override
+	protected int getTotalNumberOfLayoutSteps() {
+		return 1;
+	}
+
+	@Override
+	protected boolean isValidConfiguration(boolean asynchronous, boolean continuous) {
+		return true;
+	}
+
+	@Override
+	protected void postLayoutAlgorithm(InternalNode[] entitiesToLayout, InternalRelationship[] relationshipsToConsider) {
+	}
+
+	@Override
+	protected void preLayoutAlgorithm(InternalNode[] entitiesToLayout, InternalRelationship[] relationshipsToConsider,
+			double x, double y, double width, double height) {
+	}
+
+	@Override
+	public void setLayoutArea(double x, double y, double width, double height) {
+	}
+
+	class ColumnHolder {
+		protected double y;
+
+		protected int index;
+
+		protected Set<InternalNode> nodes;
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/FocusedBundleDependencyLayoutAlgorithm.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/FocusedBundleDependencyLayoutAlgorithm.java
new file mode 100644
index 0000000..c68cffa
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/FocusedBundleDependencyLayoutAlgorithm.java
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright (c) 2009 SpringSource, a divison of VMware, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.ui.internal.dependencies;
+
+import java.util.Comparator;
+import java.util.List;
+
+import org.eclipse.zest.layouts.Filter;
+import org.eclipse.zest.layouts.InvalidLayoutConfiguration;
+import org.eclipse.zest.layouts.LayoutAlgorithm;
+import org.eclipse.zest.layouts.LayoutEntity;
+import org.eclipse.zest.layouts.LayoutRelationship;
+import org.eclipse.zest.layouts.algorithms.CompositeLayoutAlgorithm;
+import org.eclipse.zest.layouts.progress.ProgressListener;
+
+/**
+ * @author Christian Dupuis
+ */
+public class FocusedBundleDependencyLayoutAlgorithm implements LayoutAlgorithm {
+
+	private final BundleDependencyLayoutAlgorithm focusedLayoutAlgorithm;
+
+	private final CompositeLayoutAlgorithm layoutAlgorithm;
+
+	private final BundleDependencyContentProvider contentProvider;
+
+	public FocusedBundleDependencyLayoutAlgorithm(int styles, CompositeLayoutAlgorithm layoutAlgorithm,
+			BundleDependencyContentProvider contentProvider) {
+		this.contentProvider = contentProvider;
+		this.layoutAlgorithm = layoutAlgorithm;
+		this.focusedLayoutAlgorithm = new BundleDependencyLayoutAlgorithm(contentProvider);
+	}
+
+	public void addEntity(LayoutEntity entity) {
+		layoutAlgorithm.addEntity(entity);
+		focusedLayoutAlgorithm.addEntity(entity);
+	}
+
+	public void addProgressListener(ProgressListener listener) {
+		layoutAlgorithm.addProgressListener(listener);
+		focusedLayoutAlgorithm.addProgressListener(listener);
+	}
+
+	public void addRelationship(LayoutRelationship relationship) {
+		layoutAlgorithm.addRelationship(relationship);
+		focusedLayoutAlgorithm.addRelationship(relationship);
+	}
+
+	public void applyLayout(LayoutEntity[] entitiesToLayout, LayoutRelationship[] relationshipsToConsider, double x,
+			double y, double width, double height, boolean asynchronous, boolean continuous)
+			throws InvalidLayoutConfiguration {
+		if (contentProvider.getContentResult() != null) {
+			focusedLayoutAlgorithm.applyLayout(entitiesToLayout, relationshipsToConsider, x, y, width, height,
+					asynchronous, continuous);
+		}
+		else {
+			layoutAlgorithm.applyLayout(entitiesToLayout, relationshipsToConsider, x, y, width, height, asynchronous,
+					continuous);
+		}
+	}
+
+	public double getEntityAspectRatio() {
+		return layoutAlgorithm.getEntityAspectRatio();
+	}
+
+	public int getStyle() {
+		return layoutAlgorithm.getStyle();
+	}
+
+	public boolean isRunning() {
+		return layoutAlgorithm.isRunning();
+	}
+
+	public void removeEntity(LayoutEntity entity) {
+		layoutAlgorithm.removeEntity(entity);
+		focusedLayoutAlgorithm.removeEntity(entity);
+	}
+
+	public void removeProgressListener(ProgressListener listener) {
+		layoutAlgorithm.removeProgressListener(listener);
+		focusedLayoutAlgorithm.removeProgressListener(listener);
+	}
+
+	public void removeRelationship(LayoutRelationship relationship) {
+		layoutAlgorithm.removeRelationship(relationship);
+		focusedLayoutAlgorithm.removeRelationship(relationship);
+	}
+
+	@SuppressWarnings("unchecked")
+	public void removeRelationships(List relationships) {
+		layoutAlgorithm.removeRelationships(relationships);
+		focusedLayoutAlgorithm.removeRelationships(relationships);
+	}
+
+	@SuppressWarnings("unchecked")
+	public void setComparator(Comparator comparator) {
+		layoutAlgorithm.setComparator(comparator);
+		focusedLayoutAlgorithm.setComparator(comparator);
+	}
+
+	public void setEntityAspectRatio(double ratio) {
+		layoutAlgorithm.setEntityAspectRatio(ratio);
+		focusedLayoutAlgorithm.setEntityAspectRatio(ratio);
+	}
+
+	public void setFilter(Filter filter) {
+		layoutAlgorithm.setFilter(filter);
+		focusedLayoutAlgorithm.setFilter(filter);
+	}
+
+	public void setStyle(int style) {
+		layoutAlgorithm.setStyle(style);
+		focusedLayoutAlgorithm.setStyle(style);
+	}
+
+	public void stop() {
+		layoutAlgorithm.stop();
+		focusedLayoutAlgorithm.stop();
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/PackageBundleDependency.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/PackageBundleDependency.java
new file mode 100644
index 0000000..91c5f69
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/PackageBundleDependency.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - moving to Eclipse Libra project and enhancements
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.ui.internal.dependencies;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.libra.framework.editor.core.model.IBundle;
+import org.eclipse.libra.framework.editor.core.model.IPackageImport;
+
+/**
+ * @author Christian Dupuis
+ * @author Kaloyan Raev
+ */
+public class PackageBundleDependency extends BundleDependency {
+
+	private final Set<IPackageImport> packageImport = new HashSet<IPackageImport>();
+
+	public PackageBundleDependency(IBundle exportingBundle, IBundle importingBundle) {
+		super(exportingBundle, importingBundle);
+	}
+
+	public void addPackageImport(IPackageImport pe) {
+		packageImport.add(pe);
+	}
+
+	@Override
+	public int hashCode() {
+		int hashCode = 17;
+		hashCode = 31 * hashCode + packageImport.hashCode();
+		return 31 * hashCode + super.hashCode();
+	}
+
+	@Override
+	public boolean equals(Object other) {
+		if (this == other) {
+			return true;
+		}
+		if (!(other instanceof PackageBundleDependency)) {
+			return false;
+		}
+		PackageBundleDependency that = (PackageBundleDependency) other;
+		if (!this.packageImport.equals(that.packageImport)) { // null safe guaranteed by the final modifier
+			return false;
+		}
+		return super.equals(other);
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/ServiceReferenceBundleDependency.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/ServiceReferenceBundleDependency.java
new file mode 100644
index 0000000..6f435b0
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/dependencies/ServiceReferenceBundleDependency.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - moving to Eclipse Libra project and enhancements
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.ui.internal.dependencies;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.libra.framework.editor.core.model.IBundle;
+import org.eclipse.libra.framework.editor.core.model.IServiceReference;
+
+/**
+ * @author Christian Dupuis
+ * @author Kaloyan Raev
+ */
+public class ServiceReferenceBundleDependency extends BundleDependency {
+
+	private final Set<IServiceReference> serviceReference = new HashSet<IServiceReference>();;
+
+	public ServiceReferenceBundleDependency(IBundle exportingBundle, IBundle importingBundle) {
+		super(exportingBundle, importingBundle);
+	}
+
+	public void addServiceReferece(IServiceReference reference) {
+		serviceReference.add(reference);
+	}
+
+	@Override
+	public int hashCode() {
+		int hashCode = 17;
+		hashCode = 31 * hashCode + serviceReference.hashCode();
+		return 31 * hashCode + super.hashCode();
+	}
+
+	@Override
+	public boolean equals(Object other) {
+		if (this == other) {
+			return true;
+		}
+		if (!(other instanceof ServiceReferenceBundleDependency)) {
+			return false;
+		}
+		ServiceReferenceBundleDependency that = (ServiceReferenceBundleDependency) other;
+		if (!this.serviceReference.equals(that.serviceReference)) { // null safe guaranteed by the final modifier
+			return false;
+		}
+		return super.equals(other);
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/overview/BundleInformationDetailsPart.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/overview/BundleInformationDetailsPart.java
new file mode 100644
index 0000000..6a2b6ba
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/overview/BundleInformationDetailsPart.java
@@ -0,0 +1,814 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - moving to Eclipse Libra project and enhancements
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.ui.internal.overview;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.zip.ZipFile;
+
+import org.eclipse.core.filesystem.EFS;
+import org.eclipse.core.filesystem.IFileStore;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.content.IContentType;
+import org.eclipse.core.runtime.content.IContentTypeManager;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.libra.framework.editor.core.model.IBundle;
+import org.eclipse.libra.framework.editor.core.model.IPackageExport;
+import org.eclipse.libra.framework.editor.core.model.IPackageImport;
+import org.eclipse.libra.framework.editor.core.model.IServiceReference;
+import org.eclipse.libra.framework.editor.ui.internal.EditorUIPlugin;
+import org.eclipse.libra.framework.editor.ui.internal.overview.BundleInformationDetailsPart.ServicesContentProvider.ServicesHolder;
+import org.eclipse.pde.internal.ui.PDEPlugin;
+import org.eclipse.pde.internal.ui.PDEPluginImages;
+import org.eclipse.pde.internal.ui.editor.JarEntryEditorInput;
+import org.eclipse.pde.internal.ui.editor.JarEntryFile;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Cursor;
+import org.eclipse.swt.graphics.FontMetrics;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Link;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.ui.IEditorDescriptor;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.FilteredTree;
+import org.eclipse.ui.dialogs.PatternFilter;
+import org.eclipse.ui.forms.AbstractFormPart;
+import org.eclipse.ui.forms.IDetailsPage;
+import org.eclipse.ui.forms.IFormColors;
+import org.eclipse.ui.forms.IFormPart;
+import org.eclipse.ui.forms.widgets.ExpandableComposite;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.ide.FileStoreEditorInput;
+import org.osgi.framework.Constants;
+
+/**
+ * @author Christian Dupuis
+ * @author Kaloyan Raev
+ */
+@SuppressWarnings("restriction")
+public class BundleInformationDetailsPart extends AbstractFormPart implements IDetailsPage {
+
+	class PackageExportContentProvider implements ITreeContentProvider {
+
+		private IBundle bundle;
+
+		public void dispose() {
+
+		}
+
+		public Object[] getChildren(Object parentElement) {
+			if (parentElement instanceof IPackageExport) {
+				Set<IBundle> bundles = new HashSet<IBundle>();
+				String name = ((IPackageExport) parentElement).getName();
+				String version = ((IPackageExport) parentElement).getVersion();
+				String id = bundle.getId();
+
+				for (IBundle bundle : BundleInformationDetailsPart.this.bundles.values()) {
+					for (IPackageImport pi : bundle.getPackageImports()) {
+						if (pi.getSupplierId().equals(id) && pi.getName().equals(name)
+								&& pi.getVersion().equals(version)) {
+							bundles.add(bundle);
+						}
+					}
+				}
+				return bundles.toArray(new IBundle[bundles.size()]);
+			}
+			return new Object[0];
+		}
+
+		public Object[] getElements(Object inputElement) {
+			if (bundle.getPackageExports().size() > 0) {
+				return bundle.getPackageExports().toArray();
+			}
+			return new Object[] { "<no exported packages>" };
+		}
+
+		public Object getParent(Object element) {
+			return null;
+		}
+
+		public boolean hasChildren(Object element) {
+			return getChildren(element).length > 0;
+		}
+
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			bundle = (IBundle) newInput;
+		}
+	}
+
+	class PackageImportContentProvider implements ITreeContentProvider {
+
+		private IBundle bundle;
+
+		public void dispose() {
+
+		}
+
+		public Object[] getChildren(Object parentElement) {
+			if (parentElement instanceof IPackageImport) {
+				String supplierId = ((IPackageImport) parentElement).getSupplierId();
+				return new Object[] { bundles.get(Long.valueOf(supplierId)) };
+			}
+			return new Object[0];
+		}
+
+		public Object[] getElements(Object inputElement) {
+			if (bundle.getPackageImports().size() > 0) {
+				return bundle.getPackageImports().toArray();
+			}
+			return new Object[] { "<no imported packages>" };
+		}
+
+		public Object getParent(Object element) {
+			return null;
+		}
+
+		public boolean hasChildren(Object element) {
+			return getChildren(element).length > 0;
+		}
+
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			bundle = (IBundle) newInput;
+		}
+	}
+
+	class PackageLabelProvider extends LabelProvider {
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see
+		 * org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
+		 */
+		@Override
+		public Image getImage(Object element) {
+			if (element instanceof IPackageImport) {
+				return PDEPluginImages.get(PDEPluginImages.OBJ_DESC_PACKAGE);
+			}
+			else if (element instanceof IPackageExport) {
+				return PDEPluginImages.get(PDEPluginImages.OBJ_DESC_PACKAGE);
+			}
+			else if (element instanceof IBundle) {
+				return PDEPluginImages.get(PDEPluginImages.OBJ_DESC_BUNDLE);
+			}
+			return super.getImage(element);
+		}
+
+		@Override
+		public String getText(Object element) {
+			if (element instanceof IPackageImport) {
+				return ((IPackageImport) element).getName() + " (" + ((IPackageImport) element).getVersion() + ")";
+			}
+			else if (element instanceof IPackageExport) {
+				return ((IPackageExport) element).getName() + " (" + ((IPackageExport) element).getVersion() + ")";
+			}
+			else if (element instanceof IBundle) {
+				return ((IBundle) element).getSymbolicName() + " (" + ((IBundle) element).getVersion() + ")";
+			}
+			return super.getText(element);
+		}
+	}
+
+	class ServicePropertyComparator extends ViewerComparator {
+
+		@SuppressWarnings("unchecked")
+		@Override
+		public int compare(Viewer viewer, Object e1, Object e2) {
+			Map.Entry<String, String> p1 = (Entry<String, String>) e1;
+			Map.Entry<String, String> p2 = (Entry<String, String>) e2;
+			return p1.getKey().compareTo(p2.getKey());
+		}
+	}
+
+	class ServicePropertyContentProvider implements IStructuredContentProvider {
+
+		private IServiceReference ref;
+
+		public void dispose() {
+		}
+
+		public Object[] getElements(Object inputElement) {
+			if (ref != null) {
+				return ref.getProperties().entrySet().toArray();
+			}
+			return new Object[0];
+		}
+
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			if (newInput instanceof IServiceReference) {
+				ref = (IServiceReference) newInput;
+			}
+			else {
+				ref = null;
+			}
+		}
+
+	}
+
+	class ServicePropertyLabelProvider extends LabelProvider implements ITableLabelProvider {
+
+		public Image getColumnImage(Object element, int columnIndex) {
+			return null;
+		}
+
+		@SuppressWarnings("unchecked")
+		public String getColumnText(Object element, int columnIndex) {
+			Map.Entry<String, String> entry = (Entry<String, String>) element;
+			if (columnIndex == 0) {
+				return entry.getKey();
+			}
+			else if (columnIndex == 1) {
+				return entry.getValue();
+			}
+			return null;
+		}
+	}
+
+	class ServicesContentProvider implements ITreeContentProvider {
+
+		class ServicesHolder {
+
+			private final String label;
+
+			private final Set<IServiceReference> refs;
+
+			public ServicesHolder(Set<IServiceReference> refs, String label) {
+				this.refs = refs;
+				this.label = label;
+			}
+
+			/**
+			 * @return the label
+			 */
+			public String getLabel() {
+				return label;
+			}
+
+			public Set<IServiceReference> getRefs() {
+				return refs;
+			}
+		}
+
+		private IBundle bundle;
+
+		public void dispose() {
+
+		}
+
+		public Object[] getChildren(Object parentElement) {
+			if (parentElement instanceof ServicesHolder) {
+				return ((ServicesHolder) parentElement).getRefs().toArray();
+			}
+			else if (parentElement instanceof IServiceReference) {
+				Set<IBundle> bs = new HashSet<IBundle>();
+				IServiceReference ref = (IServiceReference) parentElement;
+				if (ref.getType() == IServiceReference.Type.IN_USE) {
+					bs.add(bundles.get(ref.getBundleId()));
+				}
+				else if (ref.getType() == IServiceReference.Type.REGISTERED) {
+					for (Long id : ref.getUsingBundleIds()) {
+						bs.add(bundles.get(id));
+					}
+				}
+				return bs.toArray();
+			}
+			return new Object[0];
+		}
+
+		public Object[] getElements(Object inputElement) {
+			Set<ServicesHolder> serviceHolder = new HashSet<ServicesHolder>();
+			if (bundle.getRegisteredServices().size() > 0) {
+				serviceHolder.add(new ServicesHolder(bundle.getRegisteredServices(), "Registered Services"));
+			}
+			if (bundle.getServicesInUse().size() > 0) {
+				serviceHolder.add(new ServicesHolder(bundle.getServicesInUse(), "Services in Use"));
+			}
+			if (serviceHolder.size() > 0) {
+				return serviceHolder.toArray();
+			}
+			return new Object[] { "<no registered or used services>" };
+		}
+
+		public Object getParent(Object element) {
+			return null;
+		}
+
+		public boolean hasChildren(Object element) {
+			return getChildren(element).length > 0;
+		}
+
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			bundle = (IBundle) newInput;
+		}
+	}
+
+	class ServicesLabelProvider extends LabelProvider {
+
+		@Override
+		public Image getImage(Object element) {
+			if (element instanceof IServiceReference) {
+				return PDEPlugin.getDefault().getLabelProvider().get(PDEPluginImages.DESC_EXTENSIONS_OBJ);
+			}
+			else if (element instanceof ServicesHolder) {
+				return PDEPlugin.getDefault().getLabelProvider().get(PDEPluginImages.DESC_EXTENSIONS_OBJ);
+			}
+			else if (element instanceof IBundle) {
+				return PDEPluginImages.get(PDEPluginImages.OBJ_DESC_BUNDLE);
+			}
+			return super.getImage(element);
+		}
+
+		@Override
+		public String getText(Object element) {
+			if (element instanceof IServiceReference) {
+				String id = ((IServiceReference) element).getProperties().get(Constants.SERVICE_ID);
+				if (id.length() > 0) {
+					return ((IServiceReference) element).getClazzes()[0] + " (" + id + ")";
+				}
+				return ((IServiceReference) element).getClazzes()[0];
+			}
+			else if (element instanceof IBundle) {
+				return ((IBundle) element).getSymbolicName() + " (" + ((IBundle) element).getVersion() + ")";
+			}
+			else if (element instanceof ServicesHolder) {
+				return ((ServicesHolder) element).getLabel();
+			}
+			return super.getText(element);
+		}
+	}
+
+	private IBundle bundle;
+
+	private Map<Long, IBundle> bundles;
+
+	private Text bundleSymbolicNameText;
+
+	private FilteredTree exportsTable;
+
+	private TreeViewer exportsTableViewer;
+
+	private Text idText;
+
+	private FilteredTree importsTable;
+
+	private TreeViewer importsTableViewer;
+
+	private Text locationText;
+
+	private Text manifestText;
+
+	private final BundleInformationMasterDetailsBlock masterDetailsBlock;
+
+	private Text providerText;
+
+	private Table servicePropertiesTable;
+
+	private TableViewer servicePropertiesTableViewer;
+
+	private FilteredTree servicesTable;
+
+	private TreeViewer servicesTableViewer;
+
+	private Text stateText;
+
+	private Text versionText;
+
+	public BundleInformationDetailsPart(BundleInformationMasterDetailsBlock bundleInformationMasterDetailsBlock) {
+		this.masterDetailsBlock = bundleInformationMasterDetailsBlock;
+	}
+
+	public void createContents(Composite parent) {
+		FormToolkit toolkit = getManagedForm().getToolkit();
+		GridLayout layout = new GridLayout();
+		layout.marginTop = -5;
+		layout.marginLeft = 6;
+		parent.setLayout(layout);
+
+		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
+		Section detailsSection = toolkit.createSection(parent, ExpandableComposite.TWISTIE
+				| ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR | Section.DESCRIPTION
+				| ExpandableComposite.FOCUS_TITLE);
+		detailsSection.setText("Bundle Details");
+		detailsSection.setDescription("Details about the selected bundle.");
+		detailsSection.setLayoutData(data);
+		createSectionToolbar(detailsSection, toolkit, new Action("Show dependency graph for bundle",
+				PDEPluginImages.DESC_COMGROUP_OBJ) {
+			@Override
+			public void run() {
+				masterDetailsBlock.openDependencyPage(bundle.getSymbolicName(), bundle.getVersion());
+			}
+		});
+
+		Composite detailsComposite = toolkit.createComposite(detailsSection);
+		layout = new GridLayout();
+		layout.numColumns = 4;
+		detailsComposite.setLayout(layout);
+
+		data = new GridData(GridData.FILL_BOTH);
+		data.minimumHeight = 100;
+		data.heightHint = 100;
+		detailsComposite.setLayoutData(data);
+
+		toolkit.paintBordersFor(detailsComposite);
+		detailsSection.setClient(detailsComposite);
+
+		Label idLabel = toolkit.createLabel(detailsComposite, "Id:");
+		idLabel.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
+		idText = toolkit.createText(detailsComposite, "");
+		idText.setEditable(false);
+		idText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+
+		Label stateLabel = toolkit.createLabel(detailsComposite, "State:");
+		stateLabel.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
+		stateText = toolkit.createText(detailsComposite, "", SWT.NONE);
+		stateText.setEditable(false);
+		stateText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+
+		Label bundleSymbolicNameLabel = toolkit.createLabel(detailsComposite, "Symbolic-Name:");
+		bundleSymbolicNameLabel.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
+		bundleSymbolicNameText = toolkit.createText(detailsComposite, "", SWT.NONE);
+		bundleSymbolicNameText.setEditable(false);
+		bundleSymbolicNameText
+				.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+		GridDataFactory.fillDefaults().grab(true, false).span(3, 1).applyTo(bundleSymbolicNameText);
+
+		Label versionLabel = toolkit.createLabel(detailsComposite, "Version:");
+		versionLabel.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
+		versionText = toolkit.createText(detailsComposite, "");
+		versionText.setEditable(false);
+		versionText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+
+		Label providerLabel = toolkit.createLabel(detailsComposite, "Provider:");
+		providerLabel.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
+		providerText = toolkit.createText(detailsComposite, "", SWT.NONE);
+		providerText.setEditable(false);
+		providerText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+
+		Label locationLabel = toolkit.createLabel(detailsComposite, "Location:");
+		locationLabel.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
+		locationText = toolkit.createText(detailsComposite, "", SWT.NONE);
+		locationText.setEditable(false);
+		locationText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+		GridDataFactory.fillDefaults().grab(true, false).span(3, 1).applyTo(locationText);
+
+		Link openDependenciesText = new Link(detailsComposite, SWT.NONE);
+		openDependenciesText.setText("<a href=\"open\">Show dependency graph for bundle</a>");
+		openDependenciesText.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				masterDetailsBlock.openDependencyPage(bundle.getSymbolicName(), bundle.getVersion());
+			}
+		});
+		GridDataFactory.fillDefaults().grab(true, false).span(4, 1).applyTo(openDependenciesText);
+
+		Section manifestSection = toolkit.createSection(parent, ExpandableComposite.TWISTIE
+				| ExpandableComposite.TITLE_BAR | Section.DESCRIPTION | ExpandableComposite.FOCUS_TITLE);
+		manifestSection.setText("Manifest");
+		manifestSection.setDescription("Displays the bundle manifest.");
+		manifestSection.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+
+		Composite manifestComposite = toolkit.createComposite(manifestSection);
+		layout = new GridLayout();
+		layout.numColumns = 1;
+		manifestComposite.setLayout(layout);
+		manifestComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
+		toolkit.paintBordersFor(manifestComposite);
+		manifestSection.setClient(manifestComposite);
+		createSectionToolbar(manifestSection, toolkit, new Action("Open MANIFEST.MF in editor",
+				PDEPluginImages.DESC_TOC_LEAFTOPIC_OBJ) {
+			@Override
+			public void run() {
+				openBundleEditor(bundle);
+			}
+		});
+
+		manifestText = toolkit.createText(manifestComposite, "", SWT.MULTI | SWT.WRAP);
+		manifestText.setEditable(false);
+		manifestText.setFont(JFaceResources.getTextFont());
+		GC gc = new GC(manifestText);
+		FontMetrics fm = gc.getFontMetrics();
+		int height = 10 * fm.getHeight();
+		gc.dispose();
+
+		data = new GridData(GridData.FILL_HORIZONTAL);
+		data.heightHint = manifestText.computeSize(SWT.DEFAULT, height).y;
+		manifestText.setLayoutData(data);
+
+		Link openManifestText = new Link(manifestComposite, SWT.NONE);
+		openManifestText.setText("<a href=\"open\">Open MANIFEST.MF in editor</a>");
+		openManifestText.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				openBundleEditor(bundle);
+			}
+		});
+
+		Section importsSection = toolkit.createSection(parent, ExpandableComposite.TWISTIE
+				| ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR | Section.DESCRIPTION
+				| ExpandableComposite.FOCUS_TITLE);
+		importsSection.setText("Package Imports");
+		importsSection.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+		importsSection.setDescription("Information about visible packages and consumers of those packages.");
+
+		Composite importsComposite = toolkit.createComposite(importsSection);
+		layout = new GridLayout();
+		layout.numColumns = 1;
+		importsComposite.setLayout(layout);
+		importsComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
+		toolkit.paintBordersFor(importsComposite);
+		importsSection.setClient(importsComposite);
+		ImageDescriptor collapseAllImageDescriptor = PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_ELCL_COLLAPSEALL);
+		createSectionToolbar(importsSection, toolkit, new Action("Collapse All", collapseAllImageDescriptor) {
+			@Override
+			public void run() {
+				importsTableViewer.collapseAll();
+			}
+		});
+
+		importsTable = new FilteredTree(importsComposite, SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER,
+				new PatternFilter());
+		data = new GridData(GridData.FILL_HORIZONTAL);
+		data.heightHint = 200;
+		importsTable.getViewer().getControl().setLayoutData(data);
+
+		importsTableViewer = importsTable.getViewer();
+		importsTableViewer.setContentProvider(new PackageImportContentProvider());
+		importsTableViewer.setLabelProvider(new PackageLabelProvider());
+		importsTableViewer.setAutoExpandLevel(2);
+
+		Section exportsSection = toolkit.createSection(parent, ExpandableComposite.TWISTIE
+				| ExpandableComposite.TITLE_BAR | Section.DESCRIPTION | ExpandableComposite.FOCUS_TITLE);
+		exportsSection.setText("Package Exports");
+		exportsSection.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+		exportsSection.setDescription("Information about exported packages and bundles that use these packages.");
+
+		Composite exportsComposite = toolkit.createComposite(exportsSection);
+		layout = new GridLayout();
+		layout.numColumns = 1;
+		exportsComposite.setLayout(layout);
+		exportsComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
+		toolkit.paintBordersFor(exportsComposite);
+		exportsSection.setClient(exportsComposite);
+		createSectionToolbar(exportsSection, toolkit, new Action("Collapse All", collapseAllImageDescriptor) {
+			@Override
+			public void run() {
+				exportsTableViewer.collapseAll();
+			}
+		});
+
+		exportsTable = new FilteredTree(exportsComposite, SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER,
+				new PatternFilter());
+		data = new GridData(GridData.FILL_HORIZONTAL);
+		data.heightHint = 200;
+		exportsTable.getViewer().getControl().setLayoutData(data);
+
+		exportsTableViewer = exportsTable.getViewer();
+		exportsTableViewer.setContentProvider(new PackageExportContentProvider());
+		exportsTableViewer.setLabelProvider(new PackageLabelProvider());
+		exportsTableViewer.setAutoExpandLevel(2);
+
+		Section servicesSection = toolkit.createSection(parent, ExpandableComposite.TWISTIE
+				| ExpandableComposite.TITLE_BAR | Section.DESCRIPTION | ExpandableComposite.FOCUS_TITLE);
+		servicesSection.setText("Services");
+		servicesSection.setDescription("Details about registered and in-use services.");
+		servicesSection.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+
+		Composite servicesComposite = toolkit.createComposite(servicesSection);
+		layout = new GridLayout();
+		layout.numColumns = 1;
+		servicesComposite.setLayout(layout);
+		servicesComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
+		toolkit.paintBordersFor(servicesComposite);
+		servicesSection.setClient(servicesComposite);
+		createSectionToolbar(servicesSection, toolkit, new Action("Collapse All", collapseAllImageDescriptor) {
+			@Override
+			public void run() {
+				servicesTableViewer.collapseAll();
+			}
+		});
+
+		servicesTable = new FilteredTree(servicesComposite, SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER,
+				new PatternFilter());
+		data = new GridData(GridData.FILL_HORIZONTAL);
+		data.heightHint = 200;
+		servicesTable.getViewer().getControl().setLayoutData(data);
+
+		servicesTableViewer = servicesTable.getViewer();
+		servicesTableViewer.setContentProvider(new ServicesContentProvider());
+		servicesTableViewer.setLabelProvider(new ServicesLabelProvider());
+		servicesTableViewer.setAutoExpandLevel(2);
+
+		servicesTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+			public void selectionChanged(SelectionChangedEvent event) {
+				servicePropertiesTableViewer.setInput(((IStructuredSelection) event.getSelection()).getFirstElement());
+			}
+		});
+
+		Label servicePropertiesLabel = toolkit.createLabel(servicesComposite, "Service Properties:");
+		servicePropertiesLabel.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
+
+		servicePropertiesTable = toolkit.createTable(servicesComposite, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL
+				| SWT.FULL_SELECTION);
+		data = new GridData(GridData.FILL_HORIZONTAL);
+		data.heightHint = 100;
+		servicePropertiesTable.setLayoutData(data);
+		servicePropertiesTable.setLinesVisible(true);
+		TableColumn keyColumn = new TableColumn(servicePropertiesTable, SWT.LEFT);
+		keyColumn.setText("Key");
+		keyColumn.setWidth(150);
+		TableColumn valueColumn = new TableColumn(servicePropertiesTable, SWT.LEFT);
+		valueColumn.setText("Value");
+		valueColumn.setWidth(450);
+		servicePropertiesTable.setHeaderVisible(true);
+
+		servicePropertiesTableViewer = new TableViewer(servicePropertiesTable);
+		servicePropertiesTableViewer.setContentProvider(new ServicePropertyContentProvider());
+		servicePropertiesTableViewer.setLabelProvider(new ServicePropertyLabelProvider());
+		servicePropertiesTableViewer.setComparator(new ServicePropertyComparator());
+
+	}
+
+	public void refresh(Map<Long, IBundle> bundles) {
+		this.bundles = bundles;
+	}
+
+	public void selectionChanged(IFormPart part, ISelection selection) {
+		bundle = (IBundle) ((IStructuredSelection) selection).getFirstElement();
+
+		idText.setText(bundle.getId());
+		stateText.setText(bundle.getState());
+		bundleSymbolicNameText.setText(bundle.getSymbolicName());
+		versionText.setText(bundle.getVersion());
+		String vendor = bundle.getHeaders().get("Bundle-Vendor");
+		providerText.setText((vendor == null) ? "" : vendor);
+		locationText.setText(bundle.getLocation());
+
+		importsTableViewer.setInput(bundle);
+		importsTableViewer.setAutoExpandLevel(2);
+
+		exportsTableViewer.setInput(bundle);
+		exportsTableViewer.setAutoExpandLevel(2);
+
+		StringBuilder builder = new StringBuilder();
+		for (Map.Entry<String, String> header : bundle.getHeaders().entrySet()) {
+			builder.append(header.getKey()).append(": ").append(header.getValue()).append(Text.DELIMITER);
+		}
+		manifestText.setText(builder.toString());
+
+		servicesTableViewer.setInput(bundle);
+		servicesTableViewer.setAutoExpandLevel(2);
+
+	}
+
+	private void createSectionToolbar(Section section, FormToolkit toolkit, Action... actions) {
+		ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
+		ToolBar toolbar = toolBarManager.createControl(section);
+		final Cursor handCursor = new Cursor(Display.getCurrent(), SWT.CURSOR_HAND);
+		toolbar.setCursor(handCursor);
+		// Cursor needs to be explicitly disposed
+		toolbar.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				if ((handCursor != null) && (handCursor.isDisposed() == false)) {
+					handCursor.dispose();
+				}
+			}
+		});
+
+		for (Action action : actions) {
+			toolBarManager.add(action);
+		}
+
+		toolBarManager.update(true);
+
+		section.setTextClient(toolbar);
+	}
+	
+
+	
+	private void openBundleEditor(IBundle bundle) {
+		try {
+			String fileName = "META-INF/MANIFEST.MF";
+			IEditorInput input = getEditorInput(getBundleRoot(bundle), fileName);
+			IEditorDescriptor desc = PlatformUI.getWorkbench().getEditorRegistry().getDefaultEditor(fileName, getContentType());
+			IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); 
+			page.openEditor(input, desc.getId());
+		} catch (Exception e) {
+			EditorUIPlugin.log(e);
+		}
+	}
+	
+	private File getBundleRoot(IBundle bundle) throws URISyntaxException {
+		String location = bundle.getLocation();
+		
+		// if location URI starts with "reference:" then remove it
+		if (location.startsWith("reference:")) {
+			location = location.substring("reference:".length());
+		}
+		
+		File bundleRoot;
+		if (location.startsWith("file:/")) {
+			// this is a valid file URI
+			bundleRoot = new File(new URI(location));
+		} else if (location.startsWith("file:")) {
+			// this is an invalid file URI, probably it's a standard file path
+			location = location.substring("file:".length());
+			bundleRoot = new File(location);
+		} else {
+			// not a file URI or a standard file path - very high chance to throw exception
+			bundleRoot = new File(new URI(location));
+		}
+		return bundleRoot;
+	}
+	
+	private IEditorInput getEditorInput(File bundleRoot, String filename) {
+		IEditorInput input = null;
+		if (bundleRoot.isFile()) {
+			try {
+				ZipFile zipFile = new ZipFile(bundleRoot);
+				if (zipFile.getEntry(filename) != null) {
+					input = new JarEntryEditorInput(new JarEntryFile(zipFile, filename));
+				}
+			}
+			catch (IOException e) {
+			}
+		}
+		else {
+			File file = new File(bundleRoot, filename);
+			if (file.exists()) {
+				IFileStore store;
+				try {
+					store = EFS.getStore(file.toURI());
+					input = new FileStoreEditorInput(store);
+				}
+				catch (CoreException e) {
+				}
+			}
+		}
+		return input;
+	}
+	
+	private IContentType getContentType() {
+		// first check if an add-on (like Virgo Tooling) has registered a specialized content type
+		IContentType type = Platform.getContentTypeManager().findContentTypeFor("META-INF/MANIFEST.MF");
+		if (type == null) {
+			// then check if PDE is available
+			type = Platform.getContentTypeManager().getContentType("org.eclipse.pde.bundleManifest");
+		}
+		if (type == null) {
+			// in worst case use the default plain text content type
+			type = Platform.getContentTypeManager().getContentType(IContentTypeManager.CT_TEXT);
+		}
+		return type;
+	}
+	
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/overview/BundleInformationMasterDetailsBlock.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/overview/BundleInformationMasterDetailsBlock.java
new file mode 100644
index 0000000..18af1c6
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/overview/BundleInformationMasterDetailsBlock.java
@@ -0,0 +1,296 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - moving to Eclipse Libra project and enhancements
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.ui.internal.overview;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.libra.framework.editor.core.model.IBundle;
+import org.eclipse.libra.framework.editor.ui.dependencies.BundleDependencyEditorPage;
+import org.eclipse.libra.framework.editor.ui.overview.BundleInformationEditorPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Sash;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.forms.DetailsPart;
+import org.eclipse.ui.forms.FormColors;
+import org.eclipse.ui.forms.IDetailsPage;
+import org.eclipse.ui.forms.IDetailsPageProvider;
+import org.eclipse.ui.forms.IFormColors;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.MasterDetailsBlock;
+import org.eclipse.ui.forms.widgets.ExpandableComposite;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.part.MultiPageEditorPart;
+import org.eclipse.wst.server.core.IServer;
+
+/**
+ * @author Christian Dupuis
+ * @author Steffen Pingel
+ * @author Kaloyan Raev
+ */
+public class BundleInformationMasterDetailsBlock extends MasterDetailsBlock {
+
+	private BundleInformationDetailsPart detailsPart;
+
+	private BundleInformationMasterPart masterPart;
+
+	private final MultiPageEditorPart serverEditor;
+
+	private final BundleInformationEditorPage editorPage;
+
+	private final IServer server;
+
+	public BundleInformationMasterDetailsBlock(BundleInformationEditorPage bundleInformationEditorPage,
+			MultiPageEditorPart serverEditor, IServer server) {
+		this.editorPage = bundleInformationEditorPage;
+		this.serverEditor = serverEditor;
+		this.server = server;
+	}
+
+	@Override
+	public void createContent(IManagedForm managedForm) {
+		final ScrolledForm form = managedForm.getForm();
+		FormToolkit toolkit = managedForm.getToolkit();
+		GridLayout layout = new GridLayout();
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		form.getBody().setLayout(layout);
+		sashForm = new MDSashForm(form.getBody(), SWT.NULL);
+		sashForm.setData("form", managedForm); //$NON-NLS-1$
+		toolkit.adapt(sashForm, false, false);
+		sashForm.setMenu(form.getBody().getMenu());
+		sashForm.setLayoutData(new GridData(GridData.FILL_BOTH));
+		createMasterPart(managedForm, sashForm);
+		createDetailsPart(managedForm, sashForm);
+		hookResizeListener();
+		createToolBarActions(managedForm);
+		form.updateToolBar();
+
+		layout = new GridLayout(1, true);
+		layout.marginTop = 6;
+		layout.marginLeft = 6;
+		managedForm.getForm().getBody().setLayout(layout);
+	}
+
+	private void createDetailsPart(final IManagedForm mform, Composite parent) {
+		super.detailsPart = new DetailsPart(mform, mform.getToolkit().createPageBook(parent, SWT.V_SCROLL));
+		mform.addPart(super.detailsPart);
+		registerPages(super.detailsPart);
+	}
+
+	@Override
+	protected void createMasterPart(final IManagedForm managedForm, Composite parent) {
+		masterPart = new BundleInformationMasterPart(parent, managedForm.getToolkit(), ExpandableComposite.TWISTIE
+				| ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR | Section.DESCRIPTION
+				| ExpandableComposite.FOCUS_TITLE, this);
+		managedForm.addPart(masterPart);
+		masterPart.createContents();
+	}
+
+	@Override
+	protected void createToolBarActions(IManagedForm managedForm) {
+
+	}
+
+	@Override
+	protected void registerPages(DetailsPart detailsPart) {
+		this.detailsPart = new BundleInformationDetailsPart(this);
+		detailsPart.setPageProvider(new IDetailsPageProvider() {
+			
+			public Object getPageKey(Object object) {
+				if (object instanceof IBundle) {
+					return IBundle.class;
+				}
+				return object.getClass();
+			}
+			
+			public IDetailsPage getPage(Object key) {
+				if (key.equals(IBundle.class)) {
+					return BundleInformationMasterDetailsBlock.this.detailsPart;
+				}
+				return null;
+			}
+		});
+	}
+
+	/**
+	 * @param bundles
+	 */
+	public void refresh(Map<Long, IBundle> bundles) {
+		if (masterPart.refresh(bundles)) {
+			detailsPart.refresh(bundles);
+			
+			BundleDependencyEditorPage depPage = getDependencyPage();
+			if (depPage != null) {
+				depPage.refresh(bundles);
+			}
+		}
+	}
+
+	private void hookResizeListener() {
+		Listener listener = ((MDSashForm) sashForm).listener;
+		Control[] children = sashForm.getChildren();
+		for (Control element : children) {
+			if (element instanceof Sash) {
+				continue;
+			}
+			element.addListener(SWT.Resize, listener);
+		}
+	}
+
+	private void onSashPaint(Event e) {
+		Sash sash = (Sash) e.widget;
+		IManagedForm form = (IManagedForm) sash.getParent().getData("form"); //$NON-NLS-1$
+		FormColors colors = form.getToolkit().getColors();
+		boolean vertical = (sash.getStyle() & SWT.VERTICAL) != 0;
+		GC gc = e.gc;
+		Boolean hover = (Boolean) sash.getData("hover"); //$NON-NLS-1$
+		gc.setBackground(colors.getColor(IFormColors.TB_BG));
+		gc.setForeground(colors.getColor(IFormColors.TB_BORDER));
+		Point size = sash.getSize();
+		if (vertical) {
+			if (hover != null) {
+				gc.fillRectangle(0, 0, size.x, size.y);
+				// else
+				// gc.drawLine(1, 0, 1, size.y-1);
+			}
+		}
+		else {
+			if (hover != null) {
+				gc.fillRectangle(0, 0, size.x, size.y);
+				// else
+				// gc.drawLine(0, 1, size.x-1, 1);
+			}
+		}
+	}
+
+	class MDSashForm extends SashForm {
+
+		List<Sash> sashes = new ArrayList<Sash>();
+
+		Listener listener = new Listener() {
+			public void handleEvent(Event e) {
+				switch (e.type) {
+				case SWT.MouseEnter:
+					e.widget.setData("hover", Boolean.TRUE); //$NON-NLS-1$
+					((Control) e.widget).redraw();
+					break;
+				case SWT.MouseExit:
+					e.widget.setData("hover", null); //$NON-NLS-1$
+					((Control) e.widget).redraw();
+					break;
+				case SWT.Paint:
+					onSashPaint(e);
+					break;
+				case SWT.Resize:
+					hookSashListeners();
+					break;
+				}
+			}
+		};
+
+		public MDSashForm(Composite parent, int style) {
+			super(parent, style);
+		}
+
+		public void layout(boolean changed) {
+			super.layout(changed);
+			hookSashListeners();
+		}
+
+		public void layout(Control[] children) {
+			super.layout(children);
+			hookSashListeners();
+		}
+
+		private void hookSashListeners() {
+			purgeSashes();
+			Control[] children = getChildren();
+			for (Control element : children) {
+				if (element instanceof Sash) {
+					Sash sash = (Sash) element;
+					if (sashes.contains(sash)) {
+						continue;
+					}
+					sash.addListener(SWT.Paint, listener);
+					sash.addListener(SWT.MouseEnter, listener);
+					sash.addListener(SWT.MouseExit, listener);
+					sashes.add(sash);
+				}
+			}
+		}
+
+		private void purgeSashes() {
+			for (Iterator<Sash> iter = sashes.iterator(); iter.hasNext();) {
+				Sash sash = iter.next();
+				if (sash.isDisposed()) {
+					iter.remove();
+				}
+			}
+		}
+	}
+
+	public void clear() {
+		masterPart.clear();
+	}
+	
+	private BundleDependencyEditorPage getDependencyPage() {
+		IEditorPart[] parts = serverEditor.findEditors(editorPage.getEditorInput());
+		for (IEditorPart part : parts) {
+			if (part instanceof BundleDependencyEditorPage) {
+				return (BundleDependencyEditorPage) part;
+			}
+		}
+		return null;
+	}
+
+	public void openDependencyPage(String bundle, String version) {
+		BundleDependencyEditorPage depPage = getDependencyPage();
+		if (depPage != null) {
+			serverEditor.setActiveEditor(depPage);
+			depPage.showDependenciesForBundle(bundle, version);
+		}
+	}
+
+	/**
+	 * @return the server
+	 */
+	public IServer getServer() {
+		return server;
+	}
+
+	public void setSelectedBundle(IBundle bundle) {
+		masterPart.setSelectedBundle(bundle);
+	}
+
+	public void refresh() {
+		masterPart.updateButtonState();
+	}
+	
+	public BundleInformationEditorPage getEditorPage() {
+		return this.editorPage;
+	}
+	
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/overview/BundleInformationMasterPart.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/overview/BundleInformationMasterPart.java
new file mode 100644
index 0000000..317afc2
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/overview/BundleInformationMasterPart.java
@@ -0,0 +1,518 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - moving to Eclipse Libra project and enhancements
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.ui.internal.overview;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.libra.framework.editor.core.IOSGiFrameworkAdmin;
+import org.eclipse.libra.framework.editor.core.model.IBundle;
+import org.eclipse.libra.framework.editor.ui.internal.EditorUIPlugin;
+import org.eclipse.pde.internal.ui.PDEPluginImages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Cursor;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.ui.forms.SectionPart;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.internal.browser.ImageResource;
+import org.eclipse.ui.internal.ide.StringMatcher;
+
+
+/**
+ * @author Christian Dupuis
+ * @author Steffen Pingel
+ * @author Kaloyan Raev
+ */
+@SuppressWarnings("restriction")
+public class BundleInformationMasterPart extends SectionPart {
+
+	private static final String TYPE_FILTER_TEXT = "type filter text";
+
+	private final FormToolkit toolkit;
+
+	private StructuredViewer bundleTableViewer;
+
+	private Table bundleTable;
+
+	private Button startButton;
+
+	private Button stopButton;
+
+	private Button refreshButton;
+
+	private Button updateButton;
+
+	private Text filterText;
+
+	private TableColumn idColumn;
+
+	private TableColumn symbolicNameColumn;
+
+	private TableColumn statusColumn;
+
+	private final BundleInformationMasterDetailsBlock masterDetailsBlock;
+
+	public BundleInformationMasterPart(Composite parent, FormToolkit toolkit, int style,
+			BundleInformationMasterDetailsBlock masterDetailsBlock) {
+		super(parent, toolkit, style);
+		this.toolkit = toolkit;
+		this.masterDetailsBlock = masterDetailsBlock;
+	}
+
+	protected void createContents() {
+		Section section = getSection();
+		section.setText("Bundle Status");
+		section.setDescription("Information about installed bundles on server.");
+		section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+		createSectionToolbar(section, toolkit);
+
+		Composite composite = toolkit.createComposite(section);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 2;
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+		toolkit.paintBordersFor(composite);
+		section.setClient(composite);
+
+		filterText = toolkit.createText(composite, TYPE_FILTER_TEXT, SWT.SEARCH | SWT.CANCEL);
+		filterText.addModifyListener(new ModifyListener() {
+
+			public void modifyText(ModifyEvent e) {
+				bundleTableViewer.refresh();
+			}
+		});
+		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
+		filterText.setLayoutData(data);
+
+		toolkit.createLabel(composite, "", SWT.NONE);
+
+		bundleTable = toolkit.createTable(composite, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
+		data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
+		data.heightHint = 550;
+		bundleTable.setLayoutData(data);
+		bundleTable.setLinesVisible(true);
+		TableColumn imageColumn = new TableColumn(bundleTable, SWT.LEFT);
+		imageColumn.setWidth(23);
+		idColumn = new TableColumn(bundleTable, SWT.RIGHT);
+		idColumn.setText("Id");
+		idColumn.setWidth(50);
+		idColumn.addListener(SWT.Selection, new SortingListener());
+		symbolicNameColumn = new TableColumn(bundleTable, SWT.LEFT);
+		symbolicNameColumn.setText("Symbolic-Name");
+		symbolicNameColumn.setWidth(280);
+		symbolicNameColumn.addListener(SWT.Selection, new SortingListener());
+		statusColumn = new TableColumn(bundleTable, SWT.CENTER);
+		statusColumn.setText("Status");
+		statusColumn.setWidth(70);
+		statusColumn.addListener(SWT.Selection, new SortingListener());
+
+		bundleTableViewer = new TableViewer(bundleTable);
+		bundleTableViewer.setContentProvider(new BundleStatusContentProvider());
+		bundleTableViewer.setLabelProvider(new BundleStatusLabelProvider());
+
+		bundleTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			public void selectionChanged(SelectionChangedEvent event) {
+				getManagedForm().fireSelectionChanged(BundleInformationMasterPart.this, event.getSelection());
+			}
+		});
+		bundleTableViewer.addFilter(new ViewerFilter() {
+
+			@Override
+			public boolean select(Viewer viewer, Object parentElement, Object element) {
+				if (element instanceof IBundle && filterText.getText().length() > 0
+						&& !TYPE_FILTER_TEXT.equals(filterText.getText())) {
+					StringMatcher matcher = new StringMatcher(filterText.getText() + "*", true, false);
+					return (matcher.match(((IBundle) element).getSymbolicName()));
+				}
+				return true;
+			}
+		});
+		bundleTable.setHeaderVisible(true);
+		bundleTableViewer.setComparator(new BundleSorter(SORT_COLUMN.ID, SWT.UP));
+
+		Composite buttonComposite = new Composite(composite, SWT.NONE);
+		buttonComposite.setLayout(new GridLayout(1, true));
+		data = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
+		buttonComposite.setLayoutData(data);
+
+		startButton = toolkit.createButton(buttonComposite, "Start", SWT.PUSH);
+		data = new GridData(GridData.FILL_HORIZONTAL);
+		data.widthHint = 70;
+		startButton.setLayoutData(data);
+		startButton.addSelectionListener(new SelectionAdapter() {
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				executeServerCommand("start");
+			}
+
+		});
+
+		stopButton = toolkit.createButton(buttonComposite, "Stop", SWT.PUSH);
+		stopButton.setLayoutData(data);
+		stopButton.addSelectionListener(new SelectionAdapter() {
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				executeServerCommand("stop");
+			}
+
+		});
+
+		refreshButton = toolkit.createButton(buttonComposite, "Refresh", SWT.PUSH);
+		refreshButton.setLayoutData(data);
+		refreshButton.addSelectionListener(new SelectionAdapter() {
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				executeServerCommand("refresh");
+			}
+
+		});
+
+		updateButton = toolkit.createButton(buttonComposite, "Update", SWT.PUSH);
+		updateButton.setLayoutData(data);
+		updateButton.addSelectionListener(new SelectionAdapter() {
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				executeServerCommand("update");
+			}
+
+		});
+
+		bundleTableViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
+			public void selectionChanged(SelectionChangedEvent event) {
+				updateButtonState();
+			}
+		});
+		updateButtonState();
+	}
+
+	void updateButtonState() {
+		boolean bundleSelected = getSelectedBundle() != null;
+		startButton.setEnabled(bundleSelected);
+		stopButton.setEnabled(bundleSelected);
+		refreshButton.setEnabled(bundleSelected);
+		updateButton.setEnabled(bundleSelected);
+	}
+	
+	private IBundle getSelectedBundle() {
+		Object selectedObject = ((IStructuredSelection) bundleTableViewer
+				.getSelection()).getFirstElement();
+		if (selectedObject instanceof IBundle) {
+			return (IBundle) selectedObject;
+		}
+		return null;
+	}
+
+	private void executeServerCommand(final String command) {
+		IBundle bundle = getSelectedBundle();
+		if (bundle != null) {
+			final long bundleId = Long.parseLong(bundle.getId());
+			Job commandJob = new Job("Execute server command '" + command + "'") {
+
+				@Override
+				protected IStatus run(final IProgressMonitor monitor) {
+					final IOSGiFrameworkAdmin admin = (IOSGiFrameworkAdmin) masterDetailsBlock.getServer()
+							.loadAdapter(IOSGiFrameworkAdmin.class, null);
+					try {
+						if ("start".equals(command)) {
+							admin.startBundle(bundleId);
+						} else if ("stop".equals(command)) {
+							admin.stopBundle(bundleId);
+						} else if ("refresh".equals(command)) {
+							admin.refreshBundle(bundleId);
+						} else if ("update".equals(command)) {
+							admin.updateBundle(bundleId);
+						}
+	
+						Display.getDefault().asyncExec(new Runnable() {
+							public void run() {
+								try {
+									masterDetailsBlock.refresh(admin.getBundles(monitor));
+								} catch (CoreException e) {
+									EditorUIPlugin.log(e);
+								}
+							}
+						});
+	
+						return Status.OK_STATUS;
+					} catch (CoreException e) {
+						return e.getStatus();
+					}
+				}
+			};
+			commandJob.setSystem(true);
+			commandJob.schedule();
+		}
+	}
+
+	private void createSectionToolbar(Section section, FormToolkit toolkit) {
+		ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
+		ToolBar toolbar = toolBarManager.createControl(section);
+		final Cursor handCursor = new Cursor(Display.getCurrent(), SWT.CURSOR_HAND);
+		toolbar.setCursor(handCursor);
+		// Cursor needs to be explicitly disposed
+		toolbar.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				if ((handCursor != null) && (handCursor.isDisposed() == false)) {
+					handCursor.dispose();
+				}
+			}
+		});
+
+		toolBarManager.add(new Action("Refresh", ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_NAV_REFRESH)) {
+
+			@Override
+			public void run() {
+
+				IRunnableWithProgress runnable = new IRunnableWithProgress() {
+
+					public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+						monitor.beginTask("Updating bundle status from server", 1);
+						Display.getDefault().asyncExec(new Runnable() {
+							public void run() {
+								masterDetailsBlock.getEditorPage().clearStatus();
+								
+								IOSGiFrameworkAdmin admin = (IOSGiFrameworkAdmin) masterDetailsBlock.getServer()
+										.loadAdapter(IOSGiFrameworkAdmin.class, monitor);
+								
+								if (admin == null) {
+									IStatus status = EditorUIPlugin.newErrorStatus("Bundle Overview editor part is not integrated with the runtime.");
+									EditorUIPlugin.log(status);
+									masterDetailsBlock.getEditorPage().setStatus(status);
+								}
+								
+								try {
+									masterDetailsBlock.refresh(admin.getBundles(monitor));
+								} catch (CoreException e) {
+									EditorUIPlugin.log(e);
+									masterDetailsBlock.getEditorPage().setStatus(e.getStatus());
+								}
+							}
+						});
+						monitor.worked(1);
+					}
+				};
+
+				try {
+					IRunnableContext context = new ProgressMonitorDialog(Display.getCurrent().getActiveShell());
+					context.run(true, true, runnable);
+				}
+				catch (InvocationTargetException e1) {
+				}
+				catch (InterruptedException e2) {
+				}
+
+			}
+
+		});
+
+		toolBarManager.update(true);
+
+		section.setTextClient(toolbar);
+	}
+
+	public boolean refresh(Map<Long, IBundle> bundles) {
+		if (bundles != null && !bundles.equals(bundleTableViewer.getInput())) {
+			super.refresh();
+			bundleTableViewer.setInput(bundles);
+			return true;
+		}
+		return false;
+	}
+
+	public void clear() {
+		bundleTableViewer.setInput(null);
+	}
+
+	class BundleStatusContentProvider implements IStructuredContentProvider {
+
+		private Map<Long, IBundle> bundles;
+
+		public Object[] getElements(Object inputElement) {
+			if (bundles != null) {
+				return bundles.values().toArray();
+			}
+			return new Object[0];
+		}
+
+		public void dispose() {
+		}
+
+		@SuppressWarnings("unchecked")
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			if (newInput instanceof Map) {
+				bundles = (Map<Long, IBundle>) newInput;
+			}
+			else {
+				bundles = null;
+			}
+		}
+
+	}
+
+	class BundleStatusLabelProvider extends LabelProvider implements ITableLabelProvider {
+
+		public Image getColumnImage(Object element, int columnIndex) {
+			switch (columnIndex) {
+			case 0:
+				return PDEPluginImages.get(PDEPluginImages.OBJ_DESC_BUNDLE);
+			default:
+				return null;
+			}
+		}
+
+		public String getColumnText(Object element, int columnIndex) {
+			IBundle bundle = (IBundle) element;
+			switch (columnIndex) {
+			case 1:
+				return bundle.getId();
+			case 2:
+				return bundle.getSymbolicName() + " (" + bundle.getVersion() + ")";
+			case 3:
+				return bundle.getState();
+			default:
+				return "";
+			}
+		}
+	}
+
+	class BundleStatusComparator extends ViewerComparator {
+		@Override
+		public void sort(Viewer viewer, Object[] elements) {
+			Arrays.sort(elements, new Comparator<Object>() {
+
+				public int compare(Object o1, Object o2) {
+					return Long.valueOf(((IBundle) o1).getId()).compareTo(Long.valueOf(((IBundle) o2).getId()));
+				}
+			});
+		}
+	}
+
+	class SortingListener implements Listener {
+
+		public void handleEvent(Event event) {
+			// determine new sort column and direction
+			TableColumn sortColumn = bundleTable.getSortColumn();
+			TableColumn currentColumn = (TableColumn) event.widget;
+			int dir = bundleTable.getSortDirection();
+			if (sortColumn == currentColumn) {
+				dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
+			}
+			else {
+				bundleTable.setSortColumn(currentColumn);
+				dir = SWT.UP;
+			}
+			// sort the data based on column and direction
+			SORT_COLUMN sortIdentifier = null;
+			if (currentColumn == idColumn) {
+				sortIdentifier = SORT_COLUMN.ID;
+			}
+			if (currentColumn == statusColumn) {
+				sortIdentifier = SORT_COLUMN.STATUS;
+			}
+			if (currentColumn == symbolicNameColumn) {
+				sortIdentifier = SORT_COLUMN.NAME;
+			}
+			bundleTable.setSortDirection(dir);
+			bundleTableViewer.setComparator(new BundleSorter(sortIdentifier, dir));
+			bundleTableViewer.refresh();
+		}
+	}
+
+	class BundleSorter extends ViewerComparator {
+
+		private final SORT_COLUMN sortColumn;
+
+		private final int dir;
+
+		public BundleSorter(SORT_COLUMN sortCoLumn, int dir) {
+			this.sortColumn = sortCoLumn;
+			this.dir = dir;
+		}
+
+		@Override
+		public int compare(Viewer viewer, Object e1, Object e2) {
+			IBundle b1 = (IBundle) e1;
+			IBundle b2 = (IBundle) e2;
+			int compare = 0;
+			switch (sortColumn) {
+			case ID:
+				compare = Long.valueOf(b1.getId()).compareTo(Long.valueOf(b2.getId()));
+				break;
+			case STATUS:
+				compare = b1.getState().compareTo(b2.getState());
+				break;
+			case NAME:
+				compare = b1.getSymbolicName().compareTo(b2.getSymbolicName());
+				break;
+			}
+			if (this.dir == SWT.DOWN) {
+				compare = compare * -1;
+			}
+			return compare;
+		}
+	}
+
+	enum SORT_COLUMN {
+		ID, STATUS, NAME
+	}
+
+	public void setSelectedBundle(IBundle bundle) {
+		this.bundleTableViewer.setSelection(new StructuredSelection(bundle));
+		this.bundleTableViewer.reveal(bundle);
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/overview/BundleInformationEditorPage.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/overview/BundleInformationEditorPage.java
new file mode 100644
index 0000000..94c0bdc
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/overview/BundleInformationEditorPage.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 SpringSource, a divison of VMware, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SpringSource, a division of VMware, Inc. - initial API and implementation
+ *     SAP AG - moving to Eclipse Libra project and enhancements
+ *******************************************************************************/
+package org.eclipse.libra.framework.editor.ui.overview;
+
+import java.util.Map;
+
+import org.eclipse.libra.framework.editor.core.model.IBundle;
+import org.eclipse.libra.framework.editor.ui.internal.AbstractBundleEditorPage;
+import org.eclipse.libra.framework.editor.ui.internal.overview.BundleInformationMasterDetailsBlock;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.forms.ManagedForm;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.wst.server.ui.ServerUICore;
+import org.eclipse.wst.server.ui.internal.editor.ServerEditorPartInput;
+import org.eclipse.wst.server.ui.internal.editor.ServerResourceCommandManager;
+
+
+/**
+ * @author Christian Dupuis
+ * @author Steffen Pingel
+ * @author Kaloyan Raev
+ */
+@SuppressWarnings("restriction")
+public class BundleInformationEditorPage extends AbstractBundleEditorPage {
+
+	private BundleInformationMasterDetailsBlock masterDetailsBlock;
+
+	private ServerResourceCommandManager commandManager;
+
+	protected void createBundleContent(Composite parent) {
+		if (mform == null) {
+			mform = new ManagedForm(parent);
+		}
+
+		FormToolkit toolkit = getFormToolkit(parent.getDisplay());
+
+		sform = mform.getForm();
+		sform.getForm().setSeparatorVisible(true);
+		sform.getForm().setText("Bundle Information");
+		sform.setExpandHorizontal(true);
+		sform.setExpandVertical(true);
+		sform.setImage(ServerUICore.getLabelProvider().getImage(getServer()));
+		toolkit.decorateFormHeading(sform.getForm());
+
+		masterDetailsBlock = new BundleInformationMasterDetailsBlock(this, commandManager.getServerEditor(),
+				getServer().getOriginal());
+		masterDetailsBlock.createContent(mform);
+
+	}
+
+	@Override
+	protected void enablePage() {
+		super.enablePage();
+		setInfoStatus("Click the 'Refresh' button for fetching data from server.");
+		masterDetailsBlock.refresh();
+	}
+	
+	protected void disablePage() {
+		super.disablePage();
+		masterDetailsBlock.clear();
+	}
+
+	public void init(IEditorSite site, IEditorInput input) {
+		super.init(site, input);
+		commandManager = ((ServerEditorPartInput) input).getServerCommandManager();
+	}
+
+	public void showOverviewForBundle(final IBundle bundle) {
+		masterDetailsBlock.setSelectedBundle(bundle);
+	}
+
+	public void refresh(Map<Long, IBundle> bundles) {
+		masterDetailsBlock.refresh(bundles);
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/.classpath b/plugins/org.eclipse.libra.framework.equinox.ui/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/.cvsignore b/plugins/org.eclipse.libra.framework.equinox.ui/.cvsignore
new file mode 100644
index 0000000..4571f2d
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/.cvsignore
@@ -0,0 +1,8 @@
+bin
+build.xml
+org.eclipse.jst.server.tomcat.ui_3.0.0.jar
+tomcatui.jar
+temp.folder
+@dot
+src.zip
+javaCompiler...args
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/.options b/plugins/org.eclipse.libra.framework.equinox.ui/.options
new file mode 100644
index 0000000..d88b03b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/.options
@@ -0,0 +1,4 @@
+# Debugging options for the org.eclipse.jst.server.tomcat.ui plugin
+
+# Turn on general debugging
+org.eclipse.jst.server.tomcat.ui/debug=true
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/.project b/plugins/org.eclipse.libra.framework.equinox.ui/.project
new file mode 100644
index 0000000..ff0f7a4
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.libra.framework.equinox.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.libra.framework.equinox.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..c8be432
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Fri Nov 10 17:11:35 HST 2006
+eclipse.preferences.version=1
+encoding/<project>=ISO-8859-1
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.libra.framework.equinox.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..87e641f
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,74 @@
+#Sat Oct 16 21:03:45 EEST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=error
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.testsuite,*.deploy,*.location,*.execution,*.datapool,*.artifact,*.html,*.svg
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=disabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=error
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=error
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=error
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.incompatibleJDKLevel=warning
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.libra.framework.equinox.ui/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..584bdff
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,4 @@
+#Fri Nov 10 18:06:11 HST 2006
+eclipse.preferences.version=1
+internal.default.compliance=user
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?>\n<templates/>
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.libra.framework.equinox.ui/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..0e06e96
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,15 @@
+#Mon Jan 15 21:56:48 EST 2007
+compilers.incompatible-environment=0
+compilers.p.build=0
+compilers.p.deprecated=1
+compilers.p.missing-packages=2
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=0
+compilers.p.unknown-class=0
+compilers.p.unknown-element=1
+compilers.p.unknown-resource=0
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.use-project=true
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.libra.framework.equinox.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..72ff9a5
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,29 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.libra.framework.equinox.ui;singleton:=true
+Bundle-Version: 0.1.0.qualifier
+Bundle-Activator: org.eclipse.libra.framework.equinox.ui.EquinoxUIPlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.core.expressions;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.forms;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.debug.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.jdt.debug.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.jdt.launching;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.wst.server.core;bundle-version="[1.0.204,2.0.0)",
+ org.eclipse.jst.server.core;bundle-version="[1.0.103,2.0.0)",
+ org.eclipse.jst.server.ui;bundle-version="[1.0.103,2.0.0)",
+ org.eclipse.wst.common.project.facet.ui;bundle-version="[1.1.0,2.0.0)",
+ org.eclipse.wst.server.ui,
+ org.eclipse.pde.core,
+ org.eclipse.pde.ui,
+ org.eclipse.libra.framework.core,
+ org.eclipse.libra.framework.ui,
+ org.eclipse.libra.framework.equinox
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/about.html b/plugins/org.eclipse.libra.framework.equinox.ui/about.html
new file mode 100644
index 0000000..8f31159
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>March 25, 2011</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/build.properties b/plugins/org.eclipse.libra.framework.equinox.ui/build.properties
new file mode 100644
index 0000000..5016daa
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/build.properties
@@ -0,0 +1,22 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+bin.includes = plugin.xml,\
+               plugin.properties,\
+               icons/,\
+               .,\
+               META-INF/,\
+               about.html
+bin.excludes = bin/**,\
+               @dot/**,\
+               temp.folder/**
+source.. = src/
+
+
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/icons/obj16/equinox.gif b/plugins/org.eclipse.libra.framework.equinox.ui/icons/obj16/equinox.gif
new file mode 100644
index 0000000..f22fde1
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/icons/obj16/equinox.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/icons/obj16/mime_extension.gif b/plugins/org.eclipse.libra.framework.equinox.ui/icons/obj16/mime_extension.gif
new file mode 100644
index 0000000..c585010
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/icons/obj16/mime_extension.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/icons/obj16/mime_mapping.gif b/plugins/org.eclipse.libra.framework.equinox.ui/icons/obj16/mime_mapping.gif
new file mode 100644
index 0000000..0a8e4bf
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/icons/obj16/mime_mapping.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/icons/obj16/port.gif b/plugins/org.eclipse.libra.framework.equinox.ui/icons/obj16/port.gif
new file mode 100644
index 0000000..7a354b7
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/icons/obj16/port.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/icons/obj16/project_missing.gif b/plugins/org.eclipse.libra.framework.equinox.ui/icons/obj16/project_missing.gif
new file mode 100644
index 0000000..0cb4c16
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/icons/obj16/project_missing.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/icons/obj16/web_module.gif b/plugins/org.eclipse.libra.framework.equinox.ui/icons/obj16/web_module.gif
new file mode 100644
index 0000000..bf20f70
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/icons/obj16/web_module.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/icons/wizban/felix_wiz.png b/plugins/org.eclipse.libra.framework.equinox.ui/icons/wizban/felix_wiz.png
new file mode 100644
index 0000000..05d4925
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/icons/wizban/felix_wiz.png
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/plugin.properties b/plugins/org.eclipse.libra.framework.equinox.ui/plugin.properties
new file mode 100644
index 0000000..7c765f4
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/plugin.properties
@@ -0,0 +1,21 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+pluginName=Equinox UI Support
+providerName=Eteration A.S.
+
+configurationEditorOSGiModulesPage=Modules
+configurationEditorTargetPage=Target Platform Profile
+
+cleanWorkDir=Clean Equinox Work Directory...
+cleanModuleWorkDir=Clean Module Work Directory...
+
+publisherContextFixLabel=Update context paths
+publisherContextFixDescription=Prompt to update module contexts when they are out of sync.
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/plugin.xml b/plugins/org.eclipse.libra.framework.equinox.ui/plugin.xml
new file mode 100644
index 0000000..ea09df2
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/plugin.xml
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<!--
+      Copyright (c) 2010 Eteration A.S. and others.
+      All rights reserved. This program and the accompanying materials
+      are made available under the terms of the Eclipse Public License v1.0
+      which accompanies this distribution, and is available at
+      http://www.eclipse.org/legal/epl-v10.html
+     
+      Contributors:
+         Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ -->
+
+<plugin>
+   <extension point="org.eclipse.wst.server.ui.serverImages">
+
+      <image
+         id="org.eclipse.libra.framework.equinox.30x"
+         icon="icons/obj16/equinox.gif"
+         typeIds="org.eclipse.libra.framework.equinox.serverType.30x"/>
+
+      <image
+         id="org.eclipse.libra.framework.equinox.runtimeType.30x"
+         icon="icons/obj16/equinox.gif"
+         typeIds="org.eclipse.libra.framework.equinox.runtimeType.30x"/>
+   </extension>
+   
+   <extension point="org.eclipse.core.expressions.propertyTesters">
+      <propertyTester
+         id="org.eclipse.libra.framework.equinox.ui.propertyTester"
+         namespace="org.eclipse.libra.framework.equinox.ui"
+         properties="hasConfiguration"
+         type="java.lang.Object"
+         class="org.eclipse.libra.framework.equinox.ui.internal.ConfigurationPropertyTester">
+      </propertyTester>
+   </extension>
+
+   <extension point="org.eclipse.wst.server.ui.editorPages">
+      <page
+         id="org.eclipse.libra.framework.equinox.ui.editor.osgimodule"
+         order="20"
+         name="%configurationEditorOSGiModulesPage"
+         typeIds="org.eclipse.libra.framework.equinox.serverType.*"
+         class="org.eclipse.libra.framework.ui.internal.editor.ConfigurationOSGiModuleEditorPart">
+         <enablement>
+           <test property="org.eclipse.libra.framework.equinox.ui.hasConfiguration" value="true"/>
+         </enablement>
+      </page>
+   </extension>
+
+   <extension point="org.eclipse.wst.server.ui.editorPages">
+      <page
+         id="org.eclipse.libra.framework.equinox.ui.editor.osgimodule"
+         order="22"
+         name="Target Platform Profile"
+         typeIds="org.eclipse.libra.framework.equinox.serverType.*"
+         class="org.eclipse.libra.framework.ui.internal.editor.TargetDefinitionEditorPart">
+         <enablement>
+           <test property="org.eclipse.libra.framework.equinox.ui.hasConfiguration" value="true"/>
+         </enablement>
+      </page>
+   </extension>
+
+   <extension point="org.eclipse.wst.server.ui.editorPageSections">
+      <section
+         id="org.eclipse.libra.framework.equinox.editor.instance"
+         order="0"
+         insertionId="org.eclipse.wst.server.editor.overview.left"
+         typeIds="org.eclipse.libra.framework.equinox.serverType.*"
+         class="org.eclipse.libra.framework.ui.internal.editor.FrameworkInstanceLocationEditorSection"/>
+
+   </extension>
+   
+    <extension point="org.eclipse.wst.server.ui.editorPageSections">
+      <section
+         id="org.eclipse.libra.framework.equinox.editor.instance.javaprofile"
+         order="0"
+         insertionId="org.eclipse.wst.server.editor.overview.right"
+         typeIds="org.eclipse.libra.framework.equinox.serverType.*"
+         class="org.eclipse.libra.framework.equinox.ui.internal.JavaProfileEditorSection"/>
+      <section
+         id="org.eclipse.libra.framework.equinox.editor.instance.jmxconsole"
+         order="0"
+         insertionId="org.eclipse.wst.server.editor.overview.right"
+         typeIds="org.eclipse.libra.framework.equinox.serverType.*"
+         class="org.eclipse.libra.framework.ui.JMXPropertiesEditorSection"/>
+
+   </extension>
+    
+   <extension point="org.eclipse.wst.server.ui.wizardFragments">
+      <fragment
+         id="org.eclipse.libra.framework.equinox.30x"
+         typeIds="org.eclipse.libra.framework.equinox.runtimeType.30x"
+         class="org.eclipse.libra.framework.ui.OSGIFrameworkWizardFragment"/>
+   </extension>
+
+  <extension point="org.eclipse.debug.ui.launchConfigurationTypeImages">
+    <launchConfigurationTypeImage
+      id="org.eclipse.libra.framework.equinox.30x.launchConfig.image"
+      configTypeID="org.eclipse.libra.framework.equinox.launchConfigurationType"
+      icon="icons/obj16/equinox.gif">
+    </launchConfigurationTypeImage>
+  </extension>
+
+  <extension point="org.eclipse.debug.ui.launchConfigurationTabGroups">
+    <launchConfigurationTabGroup
+      id="org.eclipse.libra.framework.equinox.ui.launchConfigurationTabGroup"
+      type="org.eclipse.libra.framework.equinox.launchConfigurationType"
+      class="org.eclipse.libra.framework.ui.GenericOSGILaunchConfigurationTabGroup">
+    </launchConfigurationTabGroup>
+  </extension>
+
+  <extension point="org.eclipse.wst.common.project.facet.ui.images">
+    <image runtime-component-type="org.eclipse.libra.framework.equinox.runtimeType"
+      path="icons/obj16/equinox.gif"/>
+  </extension>
+
+
+
+  <extension point="org.eclipse.ui.popupMenus">
+    <objectContribution
+      adaptable="true"
+      id="org.eclipse.libra.framework.equinox.ui.serveractions"
+      objectClass="org.eclipse.wst.server.core.IServer">
+      <visibility>
+          <objectState name="serverType" value="org.eclipse.libra.framework.equinox.serverType.*"/>
+      </visibility>
+      <action 
+        class="org.eclipse.libra.framework.ui.internal.actions.CleanWorkDirAction"
+        enablesFor="1"
+        id="org.eclipse.libra.framework.equinox.ui.cleanserverworkdir"
+        label="%cleanWorkDir">
+      </action>
+    </objectContribution>
+    <objectContribution
+      adaptable="true"
+      id="org.eclipse.libra.framework.equinox.ui.serveractions"
+      objectClass="org.eclipse.wst.server.ui.internal.view.servers.ModuleServer">
+      <visibility>
+        <and>
+          <objectState name="serverType" value="org.eclipse.libra.framework.equinox.serverType.*"/>
+          <objectState name="moduleType" value="osgi.bundle"/>
+        </and>
+      </visibility>
+      <action
+        class="org.eclipse.libra.framework.ui.internal.actions.CleanWorkDirAction"
+        enablesFor="1"
+        id="org.eclipse.libra.framework.equinox.ui.cleanmoduleworkdir"
+        label="%cleanModuleWorkDir">
+      </action>
+    </objectContribution>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.publishers">
+     <publisher
+        id="org.eclipse.libra.framework.equinox.ui.context"
+        typeIds="org.eclipse.libra.framework.equinox.serverType.*"
+        name="%publisherContextFixLabel"
+        description="%publisherContextFixDescription"
+        order=""
+        class="org.eclipse.libra.framework.ui.internal.ModulePublisherDelegate"/>
+  </extension>
+</plugin>
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/pom.xml b/plugins/org.eclipse.libra.framework.equinox.ui/pom.xml
new file mode 100644
index 0000000..0eba08d
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/pom.xml
@@ -0,0 +1,33 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<artifactId>org.eclipse.libra_parent</artifactId>
+		<groupId>org.eclipse.libra</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>../../development/org.eclipse.libra.releng/pom.xml</relativePath>
+	</parent>
+
+	<artifactId>org.eclipse.libra.framework.equinox.ui</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<name>OSGi Frameworks Equinox Adapter UI Plug-in</name>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-source-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>findbugs-maven-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-pmd-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/src/org/eclipse/libra/framework/equinox/ui/EquinoxUIPlugin.java b/plugins/org.eclipse.libra.framework.equinox.ui/src/org/eclipse/libra/framework/equinox/ui/EquinoxUIPlugin.java
new file mode 100644
index 0000000..5a3468a
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/src/org/eclipse/libra/framework/equinox/ui/EquinoxUIPlugin.java
@@ -0,0 +1,59 @@
+package org.eclipse.libra.framework.equinox.ui;
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+
+public class EquinoxUIPlugin extends AbstractUIPlugin {
+	protected static EquinoxUIPlugin singleton;
+	public static final String PLUGIN_ID = "org.eclipse.libra.framework.equinox.ui";
+
+	public EquinoxUIPlugin() {
+		super();
+		singleton = this;
+	}
+
+	/**
+	 * Returns the singleton instance of this plugin.
+	 * @return org.eclipse.jst.server.tomcat.internal.TomcatUIPlugin
+	 */
+	public static EquinoxUIPlugin getInstance() {
+		return singleton;
+	}
+
+	/**
+	 * Convenience method for logging.
+	 *
+	 * @param status org.eclipse.core.runtime.IStatus
+	 */
+	public static void log(IStatus status) {
+		getInstance().getLog().log(status);
+	}
+
+	/**
+	 * Convenience method to get a Display. The method first checks, if
+	 * the thread calling this method has an associated display. If so, this
+	 * display is returned. Otherwise the method returns the default display.
+	 * 
+	 * @return the display
+	 */
+	public static Display getStandardDisplay() {
+		Display display = Display.getCurrent();
+		if (display == null)
+			display = Display.getDefault();
+		return display;		
+	}	
+	
+}
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/src/org/eclipse/libra/framework/equinox/ui/internal/ConfigurationPropertyTester.java b/plugins/org.eclipse.libra.framework.equinox.ui/src/org/eclipse/libra/framework/equinox/ui/internal/ConfigurationPropertyTester.java
new file mode 100644
index 0000000..b3a72cb
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/src/org/eclipse/libra/framework/equinox/ui/internal/ConfigurationPropertyTester.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.equinox.ui.internal;
+
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.libra.framework.core.FrameworkInstanceDelegate;
+import org.eclipse.libra.framework.equinox.IEquinoxFrameworkInstance;
+import org.eclipse.wst.server.core.IServerAttributes;
+
+/**
+ * 
+ */
+public class ConfigurationPropertyTester extends PropertyTester {
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
+	 */
+	public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+		try {
+			IServerAttributes server = (IServerAttributes) receiver;
+			FrameworkInstanceDelegate equinox = (FrameworkInstanceDelegate) server.loadAdapter(IEquinoxFrameworkInstance.class, null);
+			if (equinox != null)
+				return equinox != null;
+		} catch (Exception e) {
+			// ignore
+		}
+		return false;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.equinox.ui/src/org/eclipse/libra/framework/equinox/ui/internal/JavaProfileEditorSection.java b/plugins/org.eclipse.libra.framework.equinox.ui/src/org/eclipse/libra/framework/equinox/ui/internal/JavaProfileEditorSection.java
new file mode 100644
index 0000000..9a735e9
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox.ui/src/org/eclipse/libra/framework/equinox/ui/internal/JavaProfileEditorSection.java
@@ -0,0 +1,229 @@
+/*******************************************************************************
+ *    Copyright (c) 2011 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *       Naci Dai 
+ *******************************************************************************/
+
+package org.eclipse.libra.framework.equinox.ui.internal;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.libra.framework.core.IOSGIExecutionEnvironment;
+import org.eclipse.libra.framework.core.IOSGIFrameworkInstance;
+import org.eclipse.libra.framework.core.TargetDefinitionUtil;
+import org.eclipse.libra.framework.equinox.IEquinoxFrameworkInstance;
+import org.eclipse.libra.framework.ui.ContextIds;
+import org.eclipse.libra.framework.ui.Messages;
+import org.eclipse.libra.framework.ui.Trace;
+import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
+import org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService;
+import org.eclipse.pde.internal.ui.SWTFactory;
+import org.eclipse.pde.internal.ui.wizards.target.EditTargetDefinitionWizard;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.IFormColors;
+import org.eclipse.ui.forms.widgets.ExpandableComposite;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.help.IWorkbenchHelpSystem;
+import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.ui.editor.ServerEditorSection;
+
+@SuppressWarnings("restriction")
+public class JavaProfileEditorSection extends ServerEditorSection {
+	protected Section section;
+	protected IEquinoxFrameworkInstance frameworkInstance;
+
+	protected PropertyChangeListener listener;
+	private Combo javaProfileCombo;
+
+	// Avoid hardcoding this at some point
+	// private final static String METADATADIR = ".metadata";
+
+	protected boolean updating = false;
+
+	public JavaProfileEditorSection() {
+		super();
+	}
+
+	/**
+	 * Add listeners to detect undo changes and publishing of the server.
+	 */
+	protected void addChangeListeners() {
+		listener = new PropertyChangeListener() {
+			public void propertyChange(PropertyChangeEvent event) {
+				if (updating)
+					return;
+				updating = true;
+				if (IOSGIFrameworkInstance.PROPERTY_JAVA_PROFILE
+						.equals(event.getPropertyName())) {
+					validate();
+				}
+				updating = false;
+			}
+		};
+		server.addPropertyChangeListener(listener);
+
+	}
+
+	/**
+	 * Creates the SWT controls for this workbench part.
+	 * 
+	 * @param parent
+	 *            the parent control
+	 */
+	public void createSection(Composite parent) {
+		super.createSection(parent);
+		FormToolkit toolkit = getFormToolkit(parent.getDisplay());
+		section = toolkit.createSection(parent, ExpandableComposite.TWISTIE
+				| ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR
+				| Section.DESCRIPTION | ExpandableComposite.FOCUS_TITLE);
+		section.setText(Messages.javaProfileSection);
+		section.setDescription(Messages.javaProfileSectionDescription);
+		section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL
+				| GridData.VERTICAL_ALIGN_FILL));
+
+		Composite composite = toolkit.createComposite(section);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 3;
+		layout.marginHeight = 5;
+		layout.marginWidth = 10;
+		layout.verticalSpacing = 5;
+		layout.horizontalSpacing = 15;
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL
+				| GridData.VERTICAL_ALIGN_FILL));
+		IWorkbenchHelpSystem whs = PlatformUI.getWorkbench().getHelpSystem();
+		whs.setHelp(composite, ContextIds.FRAMEWORK_INSTANCE_EDITOR);
+		whs.setHelp(section, ContextIds.FRAMEWORK_INSTANCE_EDITOR);
+		toolkit.paintBordersFor(composite);
+		section.setClient(composite);
+
+		// Java Profiles Selection
+		Label label = createLabel(toolkit, composite,
+				Messages.javaProfileSection);
+		GridData data = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
+		label.setLayoutData(data);
+		String[] envList =IOSGIExecutionEnvironment.getExecutionEnvironmentIds();
+		javaProfileCombo = SWTFactory.createCombo(composite, SWT.SINGLE
+				| SWT.BORDER | SWT.READ_ONLY, 1, envList);
+		javaProfileCombo.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				frameworkInstance.setJavaProfile(javaProfileCombo.getText());
+			}
+		});
+
+		initialize();
+	}
+
+	protected Label createLabel(FormToolkit toolkit, Composite parent,
+			String text) {
+		Label label = toolkit.createLabel(parent, text);
+		label.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
+		return label;
+	}
+
+	/**
+	 * @see ServerEditorSection#dispose()
+	 */
+	public void dispose() {
+
+	}
+
+	/**
+	 * @see ServerEditorSection#init(IEditorSite, IEditorInput)
+	 */
+	public void init(IEditorSite site, IEditorInput input) {
+		super.init(site, input);
+
+		// Cache workspace and default deploy paths
+		if (server != null) {
+			frameworkInstance = (IEquinoxFrameworkInstance) server.loadAdapter(
+					IEquinoxFrameworkInstance.class, null);
+			addChangeListeners();
+		}
+		initialize();
+	}
+
+	/**
+	 * Initialize the fields in this editor.
+	 */
+	protected void initialize() {
+		if (frameworkInstance == null)
+			return;
+		updating = true;
+
+		IRuntime runtime = server.getRuntime();
+		String id = frameworkInstance.getJavaPofile();
+
+		if (javaProfileCombo != null) {
+			String[] envList =IOSGIExecutionEnvironment.getExecutionEnvironmentIds();
+			int i = 0;
+			for (String e : envList) {
+				if (id.equals(e)) {
+					javaProfileCombo.select(i);
+					break;
+				}
+				i++;
+			}
+		}
+		updating = false;
+		validate();
+	}
+
+	protected void validate() {
+		if (frameworkInstance != null) {
+			// Validate
+		}
+		// All is okay, clear any previous error
+		setErrorMessage(null);
+	}
+
+	protected void handleEdit() {
+
+		try {
+			if (frameworkInstance != null
+					&& frameworkInstance.getFrameworkInstanceConfiguration() != null) {
+
+				ITargetDefinition original = frameworkInstance
+						.getFrameworkInstanceConfiguration()
+						.getTargetDefinition();
+
+				EditTargetDefinitionWizard wizard = new EditTargetDefinitionWizard(
+						original, true);
+				wizard.setWindowTitle(Messages.configurationEditorTargetDefinitionTitle);
+				WizardDialog dialog = new WizardDialog(this.getShell(), wizard);
+				if (dialog.open() == Window.OK) {
+					// Replace all references to the original with the new
+					// target
+					ITargetDefinition newTarget = wizard.getTargetDefinition();
+					frameworkInstance.getFrameworkInstanceConfiguration()
+							.setTargetDefinition(newTarget);
+					ITargetPlatformService service = TargetDefinitionUtil.getTargetPlatformService();
+					service.saveTargetDefinition(newTarget);
+				}
+			}
+		} catch (CoreException e) {
+			Trace.trace(Trace.SEVERE,
+					"failed to update target platform definition");
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.equinox/.classpath b/plugins/org.eclipse.libra.framework.equinox/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.libra.framework.equinox/.project b/plugins/org.eclipse.libra.framework.equinox/.project
new file mode 100644
index 0000000..86bb63b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.libra.framework.equinox</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.libra.framework.equinox/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.libra.framework.equinox/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..64203b9
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Fri Oct 22 10:43:27 EEST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.libra.framework.equinox/META-INF/MANIFEST.MF b/plugins/org.eclipse.libra.framework.equinox/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..9372c83
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/META-INF/MANIFEST.MF
@@ -0,0 +1,31 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.libra.framework.equinox;singleton:=true
+Bundle-Version: 0.1.0.qualifier
+Bundle-Activator: org.eclipse.libra.framework.equinox.EquinoxPlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.jdt.launching,
+ org.eclipse.debug.core,
+ org.eclipse.pde.ui,
+ org.eclipse.pde,
+ org.eclipse.wst.server.core,
+ org.eclipse.wst.server.ui,
+ org.eclipse.jst.server.core,
+ org.eclipse.jdt.core,
+ org.eclipse.jst.common.project.facet.core,
+ org.eclipse.wst.common.modulecore,
+ org.eclipse.equinox.frameworkadmin,
+ org.eclipse.libra.framework.core
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ActivationPolicy: lazy
+Import-Package: org.eclipse.core.resources,
+ org.eclipse.debug.core,
+ org.eclipse.jdt.launching.sourcelookup,
+ org.eclipse.pde.core.plugin,
+ org.eclipse.pde.ui.launcher
+Export-Package: org.eclipse.libra.framework.equinox,
+ org.eclipse.libra.framework.equinox.internal
diff --git a/plugins/org.eclipse.libra.framework.equinox/about.html b/plugins/org.eclipse.libra.framework.equinox/about.html
new file mode 100644
index 0000000..7d9511d
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>September 21, 2011</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.equinox/build.properties b/plugins/org.eclipse.libra.framework.equinox/build.properties
new file mode 100644
index 0000000..81e3c06
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/build.properties
@@ -0,0 +1,16 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties
diff --git a/plugins/org.eclipse.libra.framework.equinox/plugin.properties b/plugins/org.eclipse.libra.framework.equinox/plugin.properties
new file mode 100644
index 0000000..90310c7
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/plugin.properties
@@ -0,0 +1,25 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+pluginName=Equinox Support
+providerName=Eteration A.S.
+
+# --------------- Runtime Types ---------------
+libra=Eclipse Libra
+runtimeTypeEquinox30Label=Equinox 3.6+ OSGi Service Platform
+runtimeTypeEquinox30Description=Equinox 3.6+ OSGi Service Platform supports OSGi R4.
+
+
+# --------------- Runtime Instance ---------------
+runtimeInstanceTypeEquinox30Label=Equinox 3.6+ Runtime Instance
+runtimeInstanceTypeEquinox30Description=Publishes and runs osgi bundle projects on local equinox platform.
+
+equinoxLaunchConfigurationType=Equinox
+
diff --git a/plugins/org.eclipse.libra.framework.equinox/plugin.xml b/plugins/org.eclipse.libra.framework.equinox/plugin.xml
new file mode 100644
index 0000000..03aa599
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/plugin.xml
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?><!--
+      Copyright (c) 2010 Eteration A.S. and others.
+      All rights reserved. This program and the accompanying materials
+      are made available under the terms of the Eclipse Public License v1.0
+      which accompanies this distribution, and is available at
+      http://www.eclipse.org/legal/epl-v10.html
+     
+      Contributors:
+         Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ -->
+
+<plugin>
+
+   
+   <extension
+         point="org.eclipse.wst.server.core.runtimeTypes">
+
+      <runtimeType
+            id="org.eclipse.libra.framework.equinox.runtimeType.30x"
+            name="%runtimeTypeEquinox30Label"
+            description="%runtimeTypeEquinox30Description"
+            vendor="%libra"
+            version="3.6"
+            class="org.eclipse.libra.framework.equinox.EquinoxFramework">
+		    <moduleType
+		         types="osgi.bundle"
+		         versions="4.2"/>     
+		    <moduleType
+		         types="java"
+		         versions="1.6"/>  
+		    <moduleType
+		         types="java"
+		         versions="1.5"/>     
+      </runtimeType>
+   </extension>
+
+
+  <extension point="org.eclipse.wst.server.core.runtimeLocators">
+    <runtimeLocator
+       id="org.eclipse.libra.framework.equinox.runtime.locator"
+       typeIds="org.eclipse.libra.framework.equinox.runtimeType.*"
+       class="org.eclipse.libra.framework.core.OSGIFrameworkLocatorDelegate"/>
+  </extension>
+
+  <extension point="org.eclipse.jst.server.core.runtimeClasspathProviders">
+     <runtimeClasspathProvider
+        id="org.eclipse.libra.framework.equinox.runtimeTarget"
+        runtimeTypeIds="org.eclipse.libra.framework.equinox.runtimeType.*"
+        class="org.eclipse.libra.framework.equinox.internal.EquinoxFrameworkClasspathProvider"/>
+   </extension>
+   
+   
+   <extension
+         point="org.eclipse.wst.server.core.serverTypes">
+      <serverType
+            id="org.eclipse.libra.framework.equinox.serverType.30x"
+            name="%runtimeInstanceTypeEquinox30Label"
+            description="%runtimeInstanceTypeEquinox30Description"
+            supportsRemoteHosts="false"
+            runtime="true"
+            startTimeout="120000"
+            stopTimeout="120000"
+            initialState="stopped"
+            startBeforePublish="false"
+            synchronousStart="true"
+            hasConfiguration="true"
+            launchConfigId="org.eclipse.libra.framework.equinox.launchConfigurationType"
+            runtimeTypeId="org.eclipse.libra.framework.equinox.runtimeType.30x"           
+            class="org.eclipse.libra.framework.equinox.EquinoxFrameworkInstance"
+            behaviourClass="org.eclipse.libra.framework.equinox.internal.EquinoxFrameworkInstanceBehavior">
+      </serverType>
+   </extension>
+
+
+  <extension point="org.eclipse.wst.server.core.serverLocators">
+    <serverLocator
+       id="org.eclipse.libra.framework.equinox.server.locator"
+       supportsRemoteHosts="false"
+       typeIds="org.eclipse.libra.framework.equinox.serverType.*"
+       class="org.eclipse.libra.framework.core.OSGIFrameworkInstanceLocatorDelegate"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.launchableAdapters">
+     <launchableAdapter
+        class="org.eclipse.libra.framework.core.launching.LaunchableAdapterDelegate"
+        id="org.eclipse.libra.framework.equinox.osgi"/>
+  </extension>
+
+  <extension point="org.eclipse.debug.core.sourcePathComputers">
+     <sourcePathComputer
+        id="org.eclipse.libra.framework.equinox.sourcePathComputer"
+        class="org.eclipse.libra.framework.core.internal.debug.OSGIRuntimeSourcePathComputerDelegate"/>
+  </extension>
+
+  <extension point="org.eclipse.debug.core.launchConfigurationTypes">
+     <launchConfigurationType
+        id="org.eclipse.libra.framework.equinox.launchConfigurationType"
+        name="%equinoxLaunchConfigurationType"
+        delegate="org.eclipse.libra.framework.core.launching.LaunchConfigurationDelegate"
+        modes="run, debug, profile"
+        sourceLocatorId="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"
+        sourcePathComputerId="org.eclipse.libra.framework.equinox.sourcePathComputer"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.publishTasks">
+     <publishTask
+        id="org.eclipse.libra.framework.equinox.publishTask"
+        typeIds="org.eclipse.libra.framework.equinox.serverType.*"
+        class="org.eclipse.libra.framework.core.publish.PublishTask"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.common.project.facet.core.runtimes">
+    <runtime-component-type
+       id="org.eclipse.libra.framework.equinox.runtimeType"/>
+
+    <runtime-component-version
+       type="org.eclipse.libra.framework.equinox.runtimeType"
+       version="3.6"/>
+
+    <adapter>
+      <runtime-component
+         id="org.eclipse.libra.framework.equinox.runtimeType"/>
+      <factory
+         class="org.eclipse.jst.server.core.internal.RuntimeClasspathProvider$Factory"/>
+      <type
+         class="org.eclipse.jst.common.project.facet.core.IClasspathProvider"/>
+    </adapter>
+
+  <supported>
+    <runtime-component id="org.eclipse.libra.framework.equinox.runtimeType"/>
+    <facet id="osgi.bundle" />
+  </supported>
+  </extension>
+  
+  <extension point="org.eclipse.wst.common.project.facet.core.defaultFacets">
+    <default-facets>
+    <runtime-component id="org.eclipse.libra.framework.equinox.runtimeType">
+         </runtime-component>
+         <facet
+               id="osgi.bundle" version="4.2">
+         </facet>
+    </default-facets>
+  </extension>
+  
+  <extension point="org.eclipse.jst.server.core.runtimeFacetMappings">
+    <runtimeFacetMapping
+      runtimeTypeId="org.eclipse.libra.framework.equinox.runtimeType.30x"
+      runtime-component="org.eclipse.libra.framework.equinox.runtimeType"
+      version="3.6"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.installableRuntimes">
+  
+   <runtime
+      id="org.eclipse.libra.framework.equinox.runtimeType.30x"
+      licenseUrl="http://www.apache.org/licenses/LICENSE-2.0.txt"
+      archiveUrl="http://download.eclipse.org/equinox/drops/R-3.6.2-201102101200/equinox-SDK-3.6.2.zip"
+      archivePath="equinox-SDK-3.6.2"
+      os="win32"/>
+   <runtime
+      id="org.eclipse.libra.framework.equinox.runtimeType.30x"
+      licenseUrl="http://www.apache.org/licenses/LICENSE-1.1"
+      archiveUrl="http://download.eclipse.org/equinox/drops/R-3.6.2-201102101200/equinox-SDK-3.6.2.zip"
+      archivePath="equinox-SDK-3.6.2"
+      os="linux"/>
+      
+   <runtime
+      id="org.eclipse.libra.framework.equinox.runtimeType.30x"
+      licenseUrl="http://www.apache.org/licenses/LICENSE-1.1"
+      archiveUrl="http://download.eclipse.org/equinox/drops/R-3.6.2-201102101200/equinox-SDK-3.6.2.zip"
+      archivePath="equinox-SDK-3.6.2"
+      os="macosx"/>
+  </extension>
+
+
+</plugin>
diff --git a/plugins/org.eclipse.libra.framework.equinox/pom.xml b/plugins/org.eclipse.libra.framework.equinox/pom.xml
new file mode 100644
index 0000000..031ea2a
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/pom.xml
@@ -0,0 +1,33 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<artifactId>org.eclipse.libra_parent</artifactId>
+		<groupId>org.eclipse.libra</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>../../development/org.eclipse.libra.releng/pom.xml</relativePath>
+	</parent>
+
+	<artifactId>org.eclipse.libra.framework.equinox</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<name>OSGi Frameworks Equinox Adapter Plug-in</name>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-source-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>findbugs-maven-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-pmd-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/EquinoxFramework.java b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/EquinoxFramework.java
new file mode 100644
index 0000000..89844c3
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/EquinoxFramework.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.equinox;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.libra.framework.core.FrameworkDelegate;
+import org.eclipse.libra.framework.core.IOSGIFrameworkWorkingCopy;
+import org.eclipse.wst.server.core.IRuntimeType;
+
+
+public class EquinoxFramework extends FrameworkDelegate implements
+		IOSGIFrameworkWorkingCopy, IEquinoxFramework {
+	public EquinoxFramework() {
+	}
+	
+
+	public IEquinoxVersionHandler getVersionHandler() {
+		IRuntimeType type = getRuntime().getRuntimeType();
+		return EquinoxPlugin.getEquinoxVersionHandler(type.getId());
+	}
+
+	@SuppressWarnings("rawtypes")
+	public List getFrameworkClasspath(IPath configPath) {
+		IPath installPath = getRuntime().getLocation();
+		// If installPath is relative, convert to canonical path and hope for
+		// the best
+		if (!installPath.isAbsolute()) {
+			try {
+				String installLoc = (new File(installPath.toOSString()))
+						.getCanonicalPath();
+				installPath = new Path(installLoc);
+			} catch (IOException e) {
+				// Ignore if there is a problem
+			}
+		}
+		return getVersionHandler().getFrameworkClasspath(installPath, configPath);
+	}
+
+	/**
+	 * Verifies the Felix installation directory. If it is correct, true is
+	 * returned. Otherwise, the user is notified and false is returned.
+	 * 
+	 * @return boolean
+	 */
+	public IStatus verifyLocation() {
+		return getVersionHandler()
+				.verifyInstallPath(getRuntime().getLocation());
+	}
+	
+
+	public IStatus validate() {
+		IStatus status = super.validate();
+		if (!status.isOK())
+			return status;
+	
+		status = verifyLocation();
+		if (!status.isOK())
+			return status;
+		// return new Status(IStatus.ERROR, FelixPlugin.PLUGIN_ID, 0,
+		// Messages.errorInstallDir, null);
+		// don't accept trailing space since that can cause startup problems
+		if (getRuntime().getLocation().hasTrailingSeparator())
+			return new Status(IStatus.ERROR, EquinoxPlugin.PLUGIN_ID, 0,
+					Messages.errorInstallDirTrailingSlash, null);
+		if (getVMInstall() == null)
+			return new Status(IStatus.ERROR, EquinoxPlugin.PLUGIN_ID, 0,
+					Messages.errorJRE, null);
+	
+
+	
+		return Status.OK_STATUS;
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/EquinoxFrameworkInstance.java b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/EquinoxFrameworkInstance.java
new file mode 100644
index 0000000..0b53e01
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/EquinoxFrameworkInstance.java
@@ -0,0 +1,158 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.equinox;
+
+import java.io.File;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.libra.framework.core.FrameworkInstanceConfiguration;
+import org.eclipse.libra.framework.core.FrameworkInstanceDelegate;
+import org.eclipse.libra.framework.core.OSGIFrameworkInstanceBehaviorDelegate;
+import org.eclipse.libra.framework.core.TargetDefinitionUtil;
+import org.eclipse.libra.framework.core.Trace;
+import org.eclipse.libra.framework.equinox.internal.EquinoxFrameworkInstanceBehavior;
+import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
+import org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IRuntime;
+
+
+@SuppressWarnings("restriction")
+public class EquinoxFrameworkInstance extends FrameworkInstanceDelegate implements
+		IEquinoxFrameworkInstance {
+
+	protected transient IEquinoxVersionHandler versionHandler;
+
+	@Override
+	public IStatus canModifyModules(IModule[] add, IModule[] remove) {
+		IStatus status = super.canModifyModules(add, remove);
+		if (!status.isOK())
+			return status;
+
+		if (getEquinoxVersionHandler() == null)
+			return new Status(IStatus.ERROR, EquinoxPlugin.PLUGIN_ID, 0,
+					Messages.errorNoRuntime, null);
+
+		if (add != null) {
+			int size = add.length;
+			for (int i = 0; i < size; i++) {
+				IModule module = add[i];
+				IStatus status2 = getEquinoxVersionHandler().canAddModule(
+						module);
+				if (status2 != null && !status2.isOK())
+					return status2;
+			}
+		}
+		return Status.OK_STATUS;
+	}
+
+	@Override
+	public void setDefaults(IProgressMonitor monitor) {
+		super.setDefaults(monitor);
+		try {
+			getEquinoxConfiguration();
+		} catch (CoreException e) {
+			Trace.trace(Trace.SEVERE, "Can't setup for Equinox configuration.",
+					e);
+		}
+	}
+
+	@Override
+	public void importRuntimeConfiguration(IRuntime runtime,
+			IProgressMonitor monitor) throws CoreException {
+
+		super.importRuntimeConfiguration(runtime, monitor);
+		OSGIFrameworkInstanceBehaviorDelegate fsb = (OSGIFrameworkInstanceBehaviorDelegate) getServer()
+				.loadAdapter(EquinoxFrameworkInstanceBehavior.class, null);
+		if (fsb != null) {
+			IPath tempDir = fsb.getTempDirectory();
+			if (!tempDir.isAbsolute()) {
+				IPath rootPath = ResourcesPlugin.getWorkspace().getRoot()
+						.getLocation();
+				tempDir = rootPath.append(tempDir);
+			}
+			setInstanceDirectory(tempDir.toPortableString());
+		}
+
+		try {
+			getEquinoxConfiguration();
+		} catch (CoreException e) {
+			Trace.trace(Trace.SEVERE, "Can't setup for Equinox configuration.",
+					e);
+		}
+	}
+
+	public EquinoxFramework getEquinoxRuntime() {
+		if (getServer().getRuntime() == null)
+			return null;
+		return (EquinoxFramework) getServer().getRuntime().loadAdapter(
+				EquinoxFramework.class, null);
+	}
+
+	public IEquinoxVersionHandler getEquinoxVersionHandler() {
+		if (versionHandler == null) {
+			if (getServer().getRuntime() == null || getEquinoxRuntime() == null)
+				return null;
+
+			versionHandler = getEquinoxRuntime().getVersionHandler();
+		}
+		return versionHandler;
+	}
+
+	public FrameworkInstanceConfiguration getEquinoxConfiguration()
+			throws CoreException {
+
+		return getFrameworkInstanceConfiguration();
+
+	}
+
+	
+	
+	@Override
+	public ITargetDefinition createDefaultTarget() throws CoreException {
+		
+
+		
+		//IPath installPath = getServer().getRuntime().getLocation();
+		ITargetPlatformService service = TargetDefinitionUtil.getTargetPlatformService();
+
+		ITargetDefinition targetDefinition = service.newTarget();
+		targetDefinition.setName(getServer().getName());
+		targetDefinition.resolve(new NullProgressMonitor());
+
+		service.saveTargetDefinition(targetDefinition);
+		return targetDefinition;
+	}
+
+
+	
+	public String getFrameworkJarPath(){
+		IPath installPath = getServer().getRuntime().getLocation();
+		IPath plugins = installPath.append("plugins");
+		if (plugins.toFile().exists()) {
+			File[] files = plugins.toFile().listFiles();
+			for (File file : files) {
+				if (file.getName().indexOf("org.eclipse.osgi_") > -1) {
+					return file.getAbsolutePath();
+				}
+			}
+			
+		}
+		return null;
+	}
+	
+}
diff --git a/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/EquinoxHandler.java b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/EquinoxHandler.java
new file mode 100644
index 0000000..389fd83
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/EquinoxHandler.java
@@ -0,0 +1,356 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.equinox;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
+import org.eclipse.libra.framework.core.FrameworkCorePlugin;
+import org.eclipse.libra.framework.core.IOSGIExecutionEnvironment;
+import org.eclipse.libra.framework.core.Trace;
+import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.core.plugin.PluginRegistry;
+import org.eclipse.pde.core.plugin.TargetPlatform;
+import org.eclipse.pde.core.project.IBundleClasspathEntry;
+import org.eclipse.pde.core.project.IBundleProjectDescription;
+import org.eclipse.pde.internal.core.target.provisional.IResolvedBundle;
+import org.eclipse.wst.server.core.IModule;
+
+@SuppressWarnings("restriction")
+public class EquinoxHandler implements IEquinoxVersionHandler {
+
+	public IStatus verifyInstallPath(IPath location) {
+		boolean isFound = false;
+		IPath plugins = location.append("plugins");
+		if (plugins.toFile().exists()) {
+			File[] files = plugins.toFile().listFiles();
+			for (File file : files) {
+				if (file.getName().indexOf("org.eclipse.osgi_") > -1) {
+					isFound = true;
+					break;
+				}
+			}
+			if (isFound) {
+				return Status.OK_STATUS;
+			}
+		}
+		return new Status(IStatus.ERROR, EquinoxPlugin.PLUGIN_ID, 0,
+				Messages.warningCantReadConfig, null);
+	}
+
+	public String getFrameworkClass() {
+		return "org.eclipse.core.runtime.adaptor.EclipseStarter";
+	}
+
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public List getFrameworkClasspath(IPath installPath, IPath configPath) {
+
+		List cp = new ArrayList();
+		IPath plugins = installPath.append("plugins");
+
+		if (plugins.toFile().exists()) {
+			File[] files = plugins.toFile().listFiles();
+			for (File file : files) {
+				if (file.getName().indexOf("org.eclipse.osgi_") > -1) {
+					IPath path = plugins.append(file.getName());
+					cp.add(JavaRuntime.newArchiveRuntimeClasspathEntry(path));
+				}
+			}
+		}
+
+		return cp;
+	}
+
+	public String[] getFrameworkProgramArguments(IPath configPath,
+			boolean debug, boolean starting) {
+
+		ArrayList<String> programArgs = new ArrayList<String>();
+		programArgs.add("-dev");
+		programArgs.add("file:"+configPath.append("dev.properties").toOSString()); //$NON-NLS-1$
+		programArgs.add("-configuration");
+		programArgs.add(configPath.makeAbsolute().toOSString()); //$NON-NLS-1$
+		if (debug) {
+			programArgs.add("-debug"); //$NON-NLS-1$
+		}
+		programArgs.add("-os"); //$NON-NLS-1$
+		programArgs.add(TargetPlatform.getOS());
+		programArgs.add("-ws"); //$NON-NLS-1$
+		programArgs.add(TargetPlatform.getWS());
+		programArgs.add("-arch"); //$NON-NLS-1$
+		programArgs.add(TargetPlatform.getOSArch());
+		programArgs.add("-consoleLog"); //$NON-NLS-1$
+		programArgs.add("-console"); //$NON-NLS-1$
+		 
+		return (String[]) programArgs.toArray(new String[programArgs.size()]);
+	}
+
+	public String[] getExcludedFrameworkProgramArguments(boolean debug,
+			boolean starting) {
+		return null;
+	}
+
+	public String[] getFrameworkVMArguments(IPath installPath, boolean jmxEnabled, int jmxPort, String javaProfileID, IPath configPath, IPath deployPath, boolean isTestEnv) {
+		
+		//String configPathStr = deployPath.makeAbsolute().toOSString();
+		String profilePath =  deployPath.append("java.profile").toOSString();
+		Properties javaProfileProps = null;
+	
+		IExecutionEnvironment  environment[] = JavaRuntime.getExecutionEnvironmentsManager().getExecutionEnvironments();
+		for(IExecutionEnvironment e: environment){
+			if(javaProfileID.equals(e.getId())){
+				javaProfileProps = e.getProfileProperties();
+				break;
+			}
+		}
+		
+		try {
+			if(IOSGIExecutionEnvironment.JAVASE6_SERVER.toString().equals(javaProfileID)){
+				copyFile(this.getClass().getResourceAsStream("java6-server.profile"), new File(profilePath));				
+			}else if(javaProfileProps != null){
+				FileOutputStream os = new FileOutputStream(new File(profilePath));
+				javaProfileProps.store(os, "THIS FILE IS AUTO GENERATED");
+			}
+		} catch (IOException e) {
+			Trace.trace(Trace.SEVERE, "Could not set equinox VM arguments:"+e.getMessage(), e);
+		}
+		String vmArgs =""  ;
+		
+		//If there is a non-default java profile then set it.
+		if(javaProfileID != null && !javaProfileID.equals(IOSGIExecutionEnvironment.Default.toString()))
+			vmArgs += "-Dosgi.java.profile=file:"+profilePath; //$NON-NLS-1$ //$NON-NLS-2$
+
+		if(jmxEnabled)
+			return new String[] {"-Dcom.sun.management.jmxremote.port="+jmxPort, "-Dcom.sun.management.jmxremote.authenticate=false", "-Dcom.sun.management.jmxremote.ssl=false", "-Declipse.ignoreApp=true", "-Dosgi.noShutdown=true", vmArgs };
+		else
+			return new String[] { "-Declipse.ignoreApp=true", "-Dosgi.noShutdown=true", vmArgs };
+			
+	}
+
+	public IStatus canAddModule(IModule module) {
+		String id = module.getModuleType().getId();
+		// String version = module.getModuleType().getVersion();
+		if ("osgi.bundle".equals(id))
+			return Status.OK_STATUS;
+
+		return new Status(IStatus.ERROR, EquinoxPlugin.PLUGIN_ID, 0,
+				Messages.errorNotBundle, null);
+	}
+
+	public IStatus prepareFrameworkInstanceDirectory(IPath baseDir) {
+		return Status.OK_STATUS;
+	}
+
+	public IStatus prepareDeployDirectory(IPath deployPath) {
+
+		if (Trace.isTraceEnabled())
+			Trace.trace(Trace.FINER, "Creating runtime directory at "
+					+ deployPath.toOSString());
+
+		// Prepare a  directory structure
+		File temp = deployPath.append("plugins").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		temp = deployPath.append("auto").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		temp = deployPath.append("cache").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+
+		return Status.OK_STATUS;
+	}
+
+	public boolean supportsServeModulesWithoutPublish() {
+		return true;
+	}
+
+	public void prepareFrameworkConfigurationFile(IPath configPath,
+			String workspaceBundles, String frameworkJar, IResolvedBundle[] kernelBundles) {
+		String[] wsBundleIds =  workspaceBundles.split(" ");
+
+		prepareDevProperties(configPath, wsBundleIds);
+		prepareConfigIni(configPath, wsBundleIds, frameworkJar, kernelBundles);
+	}
+
+	private void prepareConfigIni(IPath configPath, String[] wsBundleIds, String frameworkJar,
+			IResolvedBundle[] krBundles) {
+		String propertyInstall = "";
+		for (String bundle : wsBundleIds) {
+			if (bundle.indexOf("@") != -1)
+				bundle = bundle.substring(0, bundle.indexOf("@"));
+			IPluginModelBase[] models = PluginRegistry.getWorkspaceModels();
+			for (IPluginModelBase iPluginModelBase : models) {
+				if (bundle
+						.indexOf(iPluginModelBase.getPluginBase().getId()) > -1) {
+					String bpath = iPluginModelBase.getInstallLocation();
+					if(bpath.endsWith("/"))
+						bpath = bpath.substring(0,bpath.length()-1);
+					if(iPluginModelBase.isFragmentModel())
+						propertyInstall += "reference:file:" + bpath+ ", ";
+					else
+						propertyInstall += "reference:file:" + bpath+ "@start, ";
+				}
+			}
+		}
+		
+		Properties properties = new Properties();
+		properties.setProperty(
+				"osgi.instance.area.default",
+				"file:"
+						+ configPath.toPortableString().substring(
+								0,
+								configPath.toPortableString().indexOf(
+										".metadata")));
+
+		properties.put("osgi.framework", frameworkJar);
+		properties.setProperty("osgi.configuration.cascaded", "false"); //$NON-NLS-1$ //$NON-NLS-2$
+		int start = 4;
+		properties.put(
+				"osgi.bundles.defaultStartLevel", Integer.toString(start)); //$NON-NLS-1$
+		for (int i = 0; i < krBundles.length; i++) {
+			String targetBundlePath = "reference:file:"+krBundles[i].getBundleInfo().getLocation().getRawPath();
+			if (targetBundlePath != null && !(targetBundlePath.trim().equalsIgnoreCase(""))) {
+				if (targetBundlePath.indexOf("org.eclipse.osgi_") > -1) 
+				  continue;
+				
+				File file = new File(targetBundlePath.substring(targetBundlePath.indexOf("/")));
+				if (file.isFile()) {
+					propertyInstall += targetBundlePath;
+					if(krBundles[i].isFragment())
+						propertyInstall +=  ", ";
+					else
+						propertyInstall += "@start, ";
+				} else {
+					for (String string2 : file.list()) {
+						if (string2.indexOf(".jar") > -1) {
+							propertyInstall += targetBundlePath + string2;
+							//String fbundleId = getBundleId(string2);
+							//IPluginModelBase modelBase = PluginRegistry.findModel(fbundleId);
+							if(krBundles[i].isFragment())
+								propertyInstall +=  ", ";
+							else
+								propertyInstall += "@start, ";
+						}
+					}
+				}
+			}
+
+		}
+		
+		properties.setProperty("osgi.bundles", propertyInstall);
+		properties.put("eclipse.ignoreApp", "true"); //$NON-NLS-1$ //$NON-NLS-2$
+		properties.put("osgi.noShutdown", "true"); //$NON-NLS-1$ //$NON-NLS-2$
+
+		try {
+			properties.store(
+					new FileOutputStream(configPath.append("config.ini")
+							.makeAbsolute().toFile()), "## AUTO GENERATED ##");
+		} catch (IOException e) {
+			Trace.trace(Trace.SEVERE, "Could not create equinox dev.properties configrutaion file:"+e.getMessage(), e);
+		}
+	}
+
+	private String getBundleId(String targetBundlePath) {
+		IPath kbPath = new Path(targetBundlePath);
+		String bundleId = kbPath.lastSegment();
+		if(bundleId.endsWith(".jar"))
+			bundleId = bundleId.substring(0,bundleId.length()-4);
+		int vversioNloc = bundleId.indexOf("_");
+		if(vversioNloc > 0)
+			bundleId = bundleId.substring(0, vversioNloc);
+		return bundleId;
+	}
+
+	private String[] prepareDevProperties(IPath configPath, String[] wsBundleIds) {
+		try {
+			// Create file
+			FileWriter fstream = new FileWriter(configPath.toPortableString()
+					+ "/dev.properties");
+			BufferedWriter out = new BufferedWriter(fstream);
+			out.write("#OSAMI AUTO GENERATED\n");
+			for (String bundle : wsBundleIds) {
+				if (bundle.indexOf("@") != -1)
+					bundle = bundle.substring(0, bundle.indexOf("@"));
+				IPluginModelBase[] models = PluginRegistry.getWorkspaceModels();
+				String modelId = "";
+				for (IPluginModelBase iPluginModelBase : models) {			
+					if (bundle.indexOf(iPluginModelBase.getPluginBase().getId()) > -1) {
+						IProject pluginProject = iPluginModelBase.getUnderlyingResource().getProject();
+						IJavaProject javaProject = JavaCore.create(pluginProject);
+						IBundleProjectDescription bundleProjectDescription = FrameworkCorePlugin.getDescription(pluginProject);
+						IPath bpath = new Path(iPluginModelBase.getInstallLocation());
+						IPath ploc  = pluginProject.getLocation();
+						if(bpath.equals(ploc))
+							bpath = pluginProject.getFullPath();
+						else
+							bpath = bpath.makeRelativeTo(ploc.removeLastSegments(1));
+						IBundleClasspathEntry[] allCPEntry = bundleProjectDescription.getBundleClasspath();
+						modelId = iPluginModelBase.getPluginBase().getId();
+						out.write("\n"+modelId + "=");
+						for(IBundleClasspathEntry bcpe: allCPEntry){
+							if(bcpe.getSourcePath() != null && bcpe.getBinaryPath() == null)
+								out.write(" "+ ploc.removeLastSegments(1).append(javaProject.getOutputLocation()) +",");
+							else if(bcpe.getSourcePath() != null && bcpe.getBinaryPath() != null)
+								out.write(" "+bcpe.getBinaryPath().toOSString() +",");
+							else if(bcpe.getLibrary() != null && bcpe.getLibrary().toOSString().endsWith(".jar") )
+								out.write(" "+bcpe.getLibrary().toOSString() +",");
+							else 
+								out.write(" "+javaProject.getOutputLocation().makeRelativeTo(pluginProject.getFullPath()) +",");
+						}
+						
+					}
+				}
+			}
+			out.close();
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Could not create equinox dev.properties configuration file:"+e.getMessage(), e);
+		}
+		return wsBundleIds;
+	}
+	
+	
+	private  void copyFile(InputStream source, File destFile) throws IOException {
+
+
+		FileOutputStream destination = null;
+		 try {
+		  destination = new FileOutputStream(destFile);
+		  int c;
+		  while((c = source.read()) != -1){
+			  destination.write(c);
+		  }
+		 }
+		 finally {
+		  if(source != null) {
+		   source.close();
+		  }
+		  if(destination != null) {
+		   destination.close();
+		  }
+		}
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/EquinoxPlugin.java b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/EquinoxPlugin.java
new file mode 100644
index 0000000..9bedf86
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/EquinoxPlugin.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.equinox;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+
+public class EquinoxPlugin extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.libra.framework.equinox"; //$NON-NLS-1$
+
+	// The shared instance
+	private static EquinoxPlugin plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public EquinoxPlugin() {
+		super();
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static EquinoxPlugin getDefault() {
+		return plugin;
+	}
+	
+	
+
+	public static String getPreference(String id) {
+		return Platform.getPreferencesService().getString(PLUGIN_ID, id, "", null);
+	}
+	
+	public static void setPreference(String id, String value) {
+		(new DefaultScope()).getNode(PLUGIN_ID).put(id, value);
+	}
+	
+	public static IEquinoxVersionHandler getEquinoxVersionHandler(String id) {
+//		if (id.indexOf("runtime") > 0)
+//			id = id.substring(0, 30) + id.substring(38);
+//		if (true)//"abc".equals(id))
+			return new EquinoxHandler();
+	}
+
+
+}
diff --git a/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/IEquinoxFramework.java b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/IEquinoxFramework.java
new file mode 100644
index 0000000..2174bec
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/IEquinoxFramework.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.equinox;
+
+import org.eclipse.libra.framework.core.IOSGIFramework;
+
+
+public interface IEquinoxFramework extends IOSGIFramework {
+	
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/IEquinoxFrameworkInstance.java b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/IEquinoxFrameworkInstance.java
new file mode 100644
index 0000000..3e766d8
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/IEquinoxFrameworkInstance.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.equinox;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.libra.framework.core.FrameworkInstanceConfiguration;
+import org.eclipse.libra.framework.core.IOSGIFrameworkInstance;
+
+
+
+public interface IEquinoxFrameworkInstance  extends IOSGIFrameworkInstance {
+
+	
+	public FrameworkInstanceConfiguration getEquinoxConfiguration() throws CoreException;
+	
+
+}
diff --git a/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/IEquinoxVersionHandler.java b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/IEquinoxVersionHandler.java
new file mode 100644
index 0000000..ad8a6d0
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/IEquinoxVersionHandler.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.equinox;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.pde.internal.core.target.provisional.IResolvedBundle;
+import org.eclipse.wst.server.core.IModule;
+
+@SuppressWarnings("restriction")
+public interface IEquinoxVersionHandler {
+
+	public abstract boolean supportsServeModulesWithoutPublish();
+
+	public abstract IStatus prepareDeployDirectory(IPath deployPath);
+
+	public abstract IStatus prepareFrameworkInstanceDirectory(IPath baseDir);
+
+	public abstract IStatus canAddModule(IModule module);
+
+	public abstract String[] getFrameworkVMArguments(IPath installPath, boolean jmxEnabled, int portNumber, String javaProfileID, IPath configPath,
+			IPath deployPath, boolean isTestEnv);
+
+	public abstract String[] getExcludedFrameworkProgramArguments(boolean debug,
+			boolean starting);
+
+	public abstract String[] getFrameworkProgramArguments(IPath configPath,
+			boolean debug, boolean starting);
+
+	@SuppressWarnings("rawtypes")
+	public abstract List getFrameworkClasspath(IPath installPath, IPath configPath);
+
+	public abstract String getFrameworkClass();
+
+	public abstract IStatus verifyInstallPath(IPath location);
+
+	public abstract void prepareFrameworkConfigurationFile(IPath confDir,String workspaceBundles, String frameworkJar, IResolvedBundle[] kernelBundles);
+
+}
diff --git a/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/Messages.java b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/Messages.java
new file mode 100644
index 0000000..21a983d
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/Messages.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.equinox;
+
+import org.eclipse.osgi.util.NLS;
+/**
+ * Translated messages.
+ */
+public class Messages extends NLS {
+
+	public static String errorInstallDirTrailingSlash = null;
+	public static String errorJRE;
+	public static String warningCantReadConfig;
+	public static String warningCantReadBundle;
+	public static String errorNotBundle;
+	public static String errorOSGiBundlesOnly;
+	public static String errorNoRuntime;
+	
+	public static String publishServerTask;
+	public static String errorConfigurationProjectClosed;
+	public static String errorNoConfiguration;
+	public static String loadingTask;
+	public static String errorCouldNotLoadConfiguration;
+	public static String configurationEditorActionAddOsgiModule;
+
+	static {
+		NLS.initializeMessages(EquinoxPlugin.PLUGIN_ID + ".Messages", Messages.class);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/Messages.properties b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/Messages.properties
new file mode 100644
index 0000000..88dac69
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/Messages.properties
@@ -0,0 +1,20 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+
+# --------------- General UI ---------------
+
+errorInstallDirTrailingSlash = Installation folder must not end with a slash
+errorJRE= Selected JRE is not valid;
+warningCantReadConfig=Cannot locate the correct conf folder.  Invalid Installation folder
+warningCantReadBundle=Cannot locate the correct bundle folder.  Invalid Installation folder
+errorNotBundle=Must be an osgi bundle
+errorOSGiBundlesOnly=Must be an osgi bundle
+errorNoRuntime=There is no runtime
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/internal/EquinoxConfigurationPublishHelper.java b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/internal/EquinoxConfigurationPublishHelper.java
new file mode 100644
index 0000000..a0ee01c
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/internal/EquinoxConfigurationPublishHelper.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.equinox.internal;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.libra.framework.core.OSGIFrameworkInstanceBehaviorDelegate;
+import org.eclipse.libra.framework.core.publish.PublishHelper;
+
+
+
+public class EquinoxConfigurationPublishHelper extends PublishHelper{
+	public OSGIFrameworkInstanceBehaviorDelegate behavior;
+
+	public EquinoxConfigurationPublishHelper(OSGIFrameworkInstanceBehaviorDelegate behavior) {
+		this.behavior = behavior;
+	}
+	
+	protected IPath getPublishFolder() {
+		IPath configPath = behavior.getBaseDirectory();
+
+		configPath = configPath.append("plugins").makeAbsolute();
+		return configPath;
+	}
+
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/internal/EquinoxFrameworkClasspathProvider.java b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/internal/EquinoxFrameworkClasspathProvider.java
new file mode 100644
index 0000000..bf6b058
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/internal/EquinoxFrameworkClasspathProvider.java
@@ -0,0 +1,44 @@
+package org.eclipse.libra.framework.equinox.internal;
+
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jst.server.core.RuntimeClasspathProviderDelegate;
+import org.eclipse.wst.server.core.IRuntime;
+
+public class EquinoxFrameworkClasspathProvider extends
+		RuntimeClasspathProviderDelegate {
+	/**
+	 * @see RuntimeClasspathProviderDelegate#resolveClasspathContainer(IProject,
+	 *      IRuntime)
+	 */
+	public IClasspathEntry[] resolveClasspathContainer(IProject project,
+			IRuntime runtime) {
+		IPath installPath = runtime.getLocation();
+
+		if (installPath == null)
+			return new IClasspathEntry[0];
+
+		List<IClasspathEntry> list = new ArrayList<IClasspathEntry>();
+
+		IPath path = installPath.append("bundle");
+		addLibraryEntries(list, path.toFile(), true);
+
+		return (IClasspathEntry[]) list
+				.toArray(new IClasspathEntry[list.size()]);
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/internal/EquinoxFrameworkInstanceBehavior.java b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/internal/EquinoxFrameworkInstanceBehavior.java
new file mode 100644
index 0000000..cd83122
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/internal/EquinoxFrameworkInstanceBehavior.java
@@ -0,0 +1,167 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.equinox.internal;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.libra.framework.core.FrameworkInstanceConfiguration;
+import org.eclipse.libra.framework.core.OSGIFrameworkInstanceBehaviorDelegate;
+import org.eclipse.libra.framework.core.ProgressUtil;
+import org.eclipse.libra.framework.core.Trace;
+import org.eclipse.libra.framework.equinox.EquinoxFrameworkInstance;
+import org.eclipse.libra.framework.equinox.IEquinoxFrameworkInstance;
+import org.eclipse.libra.framework.equinox.IEquinoxVersionHandler;
+import org.eclipse.libra.framework.equinox.Messages;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
+
+
+public class EquinoxFrameworkInstanceBehavior extends
+		OSGIFrameworkInstanceBehaviorDelegate {
+
+	protected transient EquinoxConfigurationPublishHelper publishHelper = new EquinoxConfigurationPublishHelper(
+			this);
+
+	/**
+	 * EquinoxFrameworkInstanceBehavior.
+	 */
+	public EquinoxFrameworkInstanceBehavior() {
+		super();
+	}
+	
+	public IEquinoxVersionHandler getEquinoxVersionHandler() {
+		return getEquinoxRuntimeInstance().getEquinoxVersionHandler();
+	}
+
+	public EquinoxFrameworkInstance getEquinoxRuntimeInstance() {
+		return (EquinoxFrameworkInstance) getServer().loadAdapter(EquinoxFrameworkInstance.class, null);
+	}
+
+	public String getFrameworkClass() {
+		return getEquinoxVersionHandler().getFrameworkClass();
+	}
+
+	public String[] getFrameworkProgramArguments(boolean starting) {
+		return getEquinoxVersionHandler().getFrameworkProgramArguments(
+				getBaseDirectory(), getFrameworkInstance().isDebug(), starting);
+	}
+
+	public String[] getExcludedFrameworkProgramArguments(boolean starting) {
+		return getEquinoxVersionHandler().getExcludedFrameworkProgramArguments(
+				getFrameworkInstance().isDebug(), starting);
+	}
+
+	public String[] getFrameworkVMArguments() {
+		IPath installPath = getServer().getRuntime().getLocation();
+		// If installPath is relative, convert to canonical path and hope for
+		// the best
+		if (!installPath.isAbsolute()) {
+			try {
+				String installLoc = (new File(installPath.toOSString()))
+						.getCanonicalPath();
+				installPath = new Path(installLoc);
+			} catch (IOException e) {
+				// Ignore if there is a problem
+			}
+		}
+
+		IPath deployPath = getBaseDirectory();
+		// If deployPath is relative, convert to canonical path and hope for the
+		// best
+		if (!deployPath.isAbsolute()) {
+			try {
+				String deployLoc = (new File(deployPath.toOSString()))
+						.getCanonicalPath();
+				deployPath = new Path(deployLoc);
+			} catch (IOException e) {
+				// Ignore if there is a problem
+			}
+		}
+		String javaProfileID = ((IEquinoxFrameworkInstance)this.getFrameworkInstance()).getJavaPofile();
+		int jmxPort = ((IEquinoxFrameworkInstance)this.getFrameworkInstance()).getJMXPort();
+		boolean jmxEnabled = ((IEquinoxFrameworkInstance)this.getFrameworkInstance()).getJMXEnabled();
+		
+		return getEquinoxVersionHandler().getFrameworkVMArguments(installPath, jmxEnabled,jmxPort,javaProfileID, null, deployPath, false);
+	}
+	
+	protected void publishServer(int kind, IProgressMonitor monitor)
+			throws CoreException {
+		if (getServer().getRuntime() == null)
+			return;
+
+		IPath confDir = getBaseDirectory();
+		IStatus status = getEquinoxVersionHandler().prepareDeployDirectory(
+				confDir);
+
+		if (status != null && !status.isOK())
+			throw new CoreException(status);
+
+		monitor = ProgressUtil.getMonitorFor(monitor);
+		monitor.beginTask(Messages.publishServerTask, 600);
+
+		// TODO OSAMI 1) Cleanup 2) Backup and Publish,
+
+		// if (status != null && !status.isOK())
+		// throw new CoreException(status);
+
+		monitor.done();
+
+		setServerPublishState(IServer.PUBLISH_STATE_NONE);
+	}
+
+	@SuppressWarnings("rawtypes")
+	protected void publishModules(int kind, List modules, List deltaKind2,
+			MultiStatus multi, IProgressMonitor monitor) {
+
+
+		IPath confDir = getBaseDirectory();
+
+		FrameworkInstanceConfiguration equinoxConfiguration;
+		try {
+			equinoxConfiguration = getEquinoxRuntimeInstance().getEquinoxConfiguration();
+			publishHelper.exportBundles(modules, equinoxConfiguration, confDir);
+			String frameworkJarPath = "reference:file:"+getEquinoxRuntimeInstance().getFrameworkJarPath();
+			getEquinoxVersionHandler().prepareFrameworkConfigurationFile(confDir,
+					publishHelper.getServerModules(modules,"reference:file:", " " ),
+					frameworkJarPath, publishHelper.getTargetBundles(equinoxConfiguration));
+
+		} catch (CoreException e) {
+			Trace.trace(Trace.SEVERE, "Publishing failed", e);
+		}
+	}
+
+	protected void publishModule(int kind, int deltaKind, IModule[] moduleTree,
+			IProgressMonitor monitor) throws CoreException {
+		if (getServer().getServerState() != IServer.STATE_STOPPED) {
+			if (deltaKind == ServerBehaviourDelegate.ADDED
+					|| deltaKind == ServerBehaviourDelegate.REMOVED)
+				setServerRestartState(true);
+		}
+
+		Properties p = loadModulePublishLocations();
+
+		setModulePublishState(moduleTree, IServer.PUBLISH_STATE_NONE);
+
+		saveModulePublishLocations(p);
+	}
+	
+	
+}
diff --git a/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/internal/EquinoxFrameworkInstanceLocator.java b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/internal/EquinoxFrameworkInstanceLocator.java
new file mode 100644
index 0000000..4facbeb
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/internal/EquinoxFrameworkInstanceLocator.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.equinox.internal;
+
+import org.eclipse.libra.framework.core.OSGIFrameworkLocatorDelegate;
+
+public class EquinoxFrameworkInstanceLocator extends OSGIFrameworkLocatorDelegate {
+
+	protected static final String[] runtimeTypes = new String[] {
+	"org.eclipse.libra.framework.equinox"};
+	
+
+	public static String[] getRuntimeTypes() {
+			return runtimeTypes;
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/java6-server.profile b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/java6-server.profile
new file mode 100644
index 0000000..9ebb1e1
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/java6-server.profile
@@ -0,0 +1,211 @@
+org.osgi.framework.system.packages = \
+ com.sun.org.apache.xalan.internal.res,\
+ com.sun.org.apache.xml.internal.utils,\
+ com.sun.org.apache.xpath.internal,\
+ com.sun.org.apache.xpath.internal.jaxp,\
+ com.sun.org.apache.xpath.internal.objects,\
+ javax.accessibility,\
+ javax.activation,\
+ javax.activation;version="1.1.1",\
+ javax.activity,\
+ javax.annotation,\
+ javax.annotation;version="1.0.0",\
+ javax.annotation.processing,\
+ javax.crypto,\
+ javax.crypto.interfaces,\
+ javax.crypto.spec,\
+ javax.imageio,\
+ javax.imageio.event,\
+ javax.imageio.metadata,\
+ javax.imageio.plugins.bmp,\
+ javax.imageio.plugins.jpeg,\
+ javax.imageio.spi,\
+ javax.imageio.stream,\
+ javax.jws,\
+ javax.jws;version="2.0",\
+ javax.jws.soap,\
+ javax.jws.soap;version="2.0",\
+ javax.lang.model,\
+ javax.lang.model.element,\
+ javax.lang.model.type,\
+ javax.lang.model.util,\
+ javax.management,\
+ javax.management.loading,\
+ javax.management.modelmbean,\
+ javax.management.monitor,\
+ javax.management.openmbean,\
+ javax.management.relation,\
+ javax.management.remote,\
+ javax.management.remote.rmi,\
+ javax.management.timer,\
+ javax.naming,\
+ javax.naming.directory,\
+ javax.naming.event,\
+ javax.naming.ldap,\
+ javax.naming.spi,\
+ javax.net,\
+ javax.net.ssl,\
+ javax.print,\
+ javax.print.attribute,\
+ javax.print.attribute.standard,\
+ javax.print.event,\
+ javax.rmi,\
+ javax.rmi.CORBA,\
+ javax.rmi.ssl,\
+ javax.script,\
+ javax.script;version="1.1",\
+ javax.security.auth,\
+ javax.security.auth.callback,\
+ javax.security.auth.kerberos,\
+ javax.security.auth.login,\
+ javax.security.auth.spi,\
+ javax.security.auth.x500,\
+ javax.security.cert,\
+ javax.security.sasl,\
+ javax.sound.midi,\
+ javax.sound.midi.spi,\
+ javax.sound.sampled,\
+ javax.sound.sampled.spi,\
+ javax.sql,\
+ javax.sql.rowset,\
+ javax.sql.rowset.serial,\
+ javax.sql.rowset.spi,\
+ javax.swing,\
+ javax.swing.border,\
+ javax.swing.colorchooser,\
+ javax.swing.event,\
+ javax.swing.filechooser,\
+ javax.swing.plaf,\
+ javax.swing.plaf.basic,\
+ javax.swing.plaf.metal,\
+ javax.swing.plaf.multi,\
+ javax.swing.plaf.synth,\
+ javax.swing.table,\
+ javax.swing.text,\
+ javax.swing.text.html,\
+ javax.swing.text.html.parser,\
+ javax.swing.text.rtf,\
+ javax.swing.tree,\
+ javax.swing.undo,\
+ javax.tools,\
+ javax.transaction,\
+ javax.transaction;version="1.0.1",\
+ javax.transaction;version="1.1.0",\
+ javax.transaction.xa,\
+ javax.transaction.xa;version="1.0.1",\
+ javax.transaction.xa;version="1.1.0",\
+ javax.xml,\
+ javax.xml;version="1.0.1",\
+ javax.xml.bind,\
+ javax.xml.bind;version="2.0",\
+ javax.xml.bind.annotation,\
+ javax.xml.bind.annotation;version="2.0",\
+ javax.xml.bind.annotation.adapters,\
+ javax.xml.bind.annotation.adapters;version="2.0",\
+ javax.xml.bind.attachment,\
+ javax.xml.bind.attachment;version="2.0",\
+ javax.xml.bind.helpers,\
+ javax.xml.bind.helpers;version="2.0",\
+ javax.xml.bind.util,\
+ javax.xml.bind.util;version="2.0",\
+ javax.xml.crypto,\
+ javax.xml.crypto;version="1.0",\
+ javax.xml.crypto.dom,\
+ javax.xml.crypto.dom;version="1.0",\
+ javax.xml.crypto.dsig,\
+ javax.xml.crypto.dsig;version="1.0",\
+ javax.xml.crypto.dsig.dom,\
+ javax.xml.crypto.dsig.dom;version="1.0",\
+ javax.xml.crypto.dsig.keyinfo,\
+ javax.xml.crypto.dsig.keyinfo;version="1.0",\
+ javax.xml.crypto.dsig.spec,\
+ javax.xml.crypto.dsig.spec;version="1.0",\
+ javax.xml.datatype,\
+ javax.xml.namespace,\
+ javax.xml.parsers,\
+ javax.xml.soap,\
+ javax.xml.soap;version="1.3.0",\
+ javax.xml.stream,\
+ javax.xml.stream;version="1.0.1",\
+ javax.xml.stream.events,\
+ javax.xml.stream.events;version="1.0.1",\
+ javax.xml.stream.util,\
+ javax.xml.stream.util;version="1.0.1",\
+ javax.xml.transform,\
+ javax.xml.transform.dom,\
+ javax.xml.transform.sax,\
+ javax.xml.transform.stax,\
+ javax.xml.transform.stream,\
+ javax.xml.validation,\
+ javax.xml.ws,\
+ javax.xml.ws;version="2.1.1",\
+ javax.xml.ws.handler,\
+ javax.xml.ws.handler;version="2.1.1",\
+ javax.xml.ws.handler.soap,\
+ javax.xml.ws.handler.soap;version="2.1.1",\
+ javax.xml.ws.http,\
+ javax.xml.ws.http;version="2.1.1",\
+ javax.xml.ws.soap,\
+ javax.xml.ws.soap;version="2.1.1",\
+ javax.xml.ws.spi,\
+ javax.xml.ws.spi;version="2.1.1",\
+ javax.xml.xpath,\
+ org.ietf.jgss,\
+ org.omg.CORBA,\
+ org.omg.CORBA_2_3,\
+ org.omg.CORBA_2_3.portable,\
+ org.omg.CORBA.DynAnyPackage,\
+ org.omg.CORBA.ORBPackage,\
+ org.omg.CORBA.portable,\
+ org.omg.CORBA.TypeCodePackage,\
+ org.omg.CosNaming,\
+ org.omg.CosNaming.NamingContextExtPackage,\
+ org.omg.CosNaming.NamingContextPackage,\
+ org.omg.Dynamic,\
+ org.omg.DynamicAny,\
+ org.omg.DynamicAny.DynAnyFactoryPackage,\
+ org.omg.DynamicAny.DynAnyPackage,\
+ org.omg.IOP,\
+ org.omg.IOP.CodecFactoryPackage,\
+ org.omg.IOP.CodecPackage,\
+ org.omg.Messaging,\
+ org.omg.PortableInterceptor,\
+ org.omg.PortableInterceptor.ORBInitInfoPackage,\
+ org.omg.PortableServer,\
+ org.omg.PortableServer.CurrentPackage,\
+ org.omg.PortableServer.POAManagerPackage,\
+ org.omg.PortableServer.POAPackage,\
+ org.omg.PortableServer.portable,\
+ org.omg.PortableServer.ServantLocatorPackage,\
+ org.omg.SendingContext,\
+ org.omg.stub.java.rmi,\
+ org.w3c.dom,\
+ org.w3c.dom.bootstrap,\
+ org.w3c.dom.css,\
+ org.w3c.dom.events,\
+ org.w3c.dom.html,\
+ org.w3c.dom.ls,\
+ org.w3c.dom.ranges,\
+ org.w3c.dom.stylesheets,\
+ org.w3c.dom.traversal,\
+ org.w3c.dom.views ,\
+ org.xml.sax,\
+ org.xml.sax.ext,\
+ org.xml.sax.helpers
+org.osgi.framework.bootdelegation = \
+ org.eclipse.virgo.osgi.extensions.*,\
+ org.eclipse.virgo.osgi.launcher.*,\
+ com.sun.*,\
+ javax.xml.*,\
+ org.apache.xerces.jaxp.*,\
+ org.w3c.*,\
+ org.xml.*,\
+ sun.*
+org.osgi.framework.executionenvironment = \
+ OSGi/Minimum-1.0,\
+ OSGi/Minimum-1.1,\
+ J2SE-1.3,\
+ J2SE-1.4,\
+ J2SE-1.5,\
+ JavaSE-1.6
+osgi.java.profile.name = Equinox-Kernel-Java6
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/.classpath b/plugins/org.eclipse.libra.framework.felix.ui/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/.cvsignore b/plugins/org.eclipse.libra.framework.felix.ui/.cvsignore
new file mode 100644
index 0000000..4571f2d
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/.cvsignore
@@ -0,0 +1,8 @@
+bin
+build.xml
+org.eclipse.jst.server.tomcat.ui_3.0.0.jar
+tomcatui.jar
+temp.folder
+@dot
+src.zip
+javaCompiler...args
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/.options b/plugins/org.eclipse.libra.framework.felix.ui/.options
new file mode 100644
index 0000000..d88b03b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/.options
@@ -0,0 +1,4 @@
+# Debugging options for the org.eclipse.jst.server.tomcat.ui plugin
+
+# Turn on general debugging
+org.eclipse.jst.server.tomcat.ui/debug=true
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/.project b/plugins/org.eclipse.libra.framework.felix.ui/.project
new file mode 100644
index 0000000..999cce4
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.libra.framework.felix.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.libra.framework.felix.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..c8be432
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Fri Nov 10 17:11:35 HST 2006
+eclipse.preferences.version=1
+encoding/<project>=ISO-8859-1
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.libra.framework.felix.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..87e641f
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,74 @@
+#Sat Oct 16 21:03:45 EEST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=error
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.testsuite,*.deploy,*.location,*.execution,*.datapool,*.artifact,*.html,*.svg
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=disabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=error
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=error
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=error
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.incompatibleJDKLevel=warning
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.libra.framework.felix.ui/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..584bdff
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,4 @@
+#Fri Nov 10 18:06:11 HST 2006
+eclipse.preferences.version=1
+internal.default.compliance=user
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?>\n<templates/>
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.libra.framework.felix.ui/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..0e06e96
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,15 @@
+#Mon Jan 15 21:56:48 EST 2007
+compilers.incompatible-environment=0
+compilers.p.build=0
+compilers.p.deprecated=1
+compilers.p.missing-packages=2
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=0
+compilers.p.unknown-class=0
+compilers.p.unknown-element=1
+compilers.p.unknown-resource=0
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.use-project=true
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.libra.framework.felix.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..1709673
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,29 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.libra.framework.felix.ui;singleton:=true
+Bundle-Version: 0.1.0.qualifier
+Bundle-Activator: org.eclipse.libra.framework.felix.ui.FelixUIPlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.core.expressions;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.forms;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.debug.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.jdt.debug.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.jdt.launching;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.wst.server.core;bundle-version="[1.0.204,2.0.0)",
+ org.eclipse.jst.server.core;bundle-version="[1.0.103,2.0.0)",
+ org.eclipse.jst.server.ui;bundle-version="[1.0.103,2.0.0)",
+ org.eclipse.wst.common.project.facet.ui;bundle-version="[1.1.0,2.0.0)",
+ org.eclipse.libra.framework.felix,
+ org.eclipse.wst.server.ui,
+ org.eclipse.pde.core,
+ org.eclipse.pde.ui,
+ org.eclipse.libra.framework.core,
+ org.eclipse.libra.framework.ui
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/about.html b/plugins/org.eclipse.libra.framework.felix.ui/about.html
new file mode 100644
index 0000000..8f31159
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>March 25, 2011</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/build.properties b/plugins/org.eclipse.libra.framework.felix.ui/build.properties
new file mode 100644
index 0000000..5016daa
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/build.properties
@@ -0,0 +1,22 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+bin.includes = plugin.xml,\
+               plugin.properties,\
+               icons/,\
+               .,\
+               META-INF/,\
+               about.html
+bin.excludes = bin/**,\
+               @dot/**,\
+               temp.folder/**
+source.. = src/
+
+
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/icons/obj16/felix.gif b/plugins/org.eclipse.libra.framework.felix.ui/icons/obj16/felix.gif
new file mode 100644
index 0000000..d126d8d
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/icons/obj16/felix.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/icons/obj16/mime_extension.gif b/plugins/org.eclipse.libra.framework.felix.ui/icons/obj16/mime_extension.gif
new file mode 100644
index 0000000..c585010
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/icons/obj16/mime_extension.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/icons/obj16/mime_mapping.gif b/plugins/org.eclipse.libra.framework.felix.ui/icons/obj16/mime_mapping.gif
new file mode 100644
index 0000000..0a8e4bf
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/icons/obj16/mime_mapping.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/icons/obj16/port.gif b/plugins/org.eclipse.libra.framework.felix.ui/icons/obj16/port.gif
new file mode 100644
index 0000000..7a354b7
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/icons/obj16/port.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/icons/obj16/project_missing.gif b/plugins/org.eclipse.libra.framework.felix.ui/icons/obj16/project_missing.gif
new file mode 100644
index 0000000..0cb4c16
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/icons/obj16/project_missing.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/icons/obj16/web_module.gif b/plugins/org.eclipse.libra.framework.felix.ui/icons/obj16/web_module.gif
new file mode 100644
index 0000000..bf20f70
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/icons/obj16/web_module.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/icons/wizban/felix_wiz.png b/plugins/org.eclipse.libra.framework.felix.ui/icons/wizban/felix_wiz.png
new file mode 100644
index 0000000..05d4925
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/icons/wizban/felix_wiz.png
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/plugin.properties b/plugins/org.eclipse.libra.framework.felix.ui/plugin.properties
new file mode 100644
index 0000000..c01f84b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/plugin.properties
@@ -0,0 +1,21 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+pluginName=Apache Felix UI Support
+providerName=Eteration A.S.
+
+configurationEditorOSGiModulesPage=Modules
+configurationEditorTargetPage=Target Platform Profile
+
+cleanFelixWorkDir=Clean Felix Work Directory...
+cleanFelixModuleWorkDir=Clean Module Work Directory...
+
+publisherContextFixLabel=Update context paths
+publisherContextFixDescription=Prompt to update module contexts when they are out of sync.
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/plugin.xml b/plugins/org.eclipse.libra.framework.felix.ui/plugin.xml
new file mode 100644
index 0000000..15fc814
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/plugin.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<!--
+      Copyright (c) 2010 Eteration A.S. and others.
+      All rights reserved. This program and the accompanying materials
+      are made available under the terms of the Eclipse Public License v1.0
+      which accompanies this distribution, and is available at
+      http://www.eclipse.org/legal/epl-v10.html
+     
+      Contributors:
+         Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ -->
+
+<plugin>
+   <extension point="org.eclipse.wst.server.ui.serverImages">
+      <image
+         id="org.eclipse.libra.framework.felix.20x"
+         icon="icons/obj16/felix.gif"
+         typeIds="org.eclipse.libra.framework.felix.serverType.20x"/>
+
+      <image
+         id="org.eclipse.libra.framework.felix.runtimeType.20x"
+         icon="icons/obj16/felix.gif"
+         typeIds="org.eclipse.libra.framework.felix.runtimeType.20x"/>
+
+
+      <image
+         id="org.eclipse.libra.framework.felix.30x"
+         icon="icons/obj16/felix.gif"
+         typeIds="org.eclipse.libra.framework.felix.serverType.30x"/>
+
+      <image
+         id="org.eclipse.libra.framework.felix.runtimeType.30x"
+         icon="icons/obj16/felix.gif"
+         typeIds="org.eclipse.libra.framework.felix.runtimeType.30x"/>
+   </extension>
+   
+   <extension point="org.eclipse.core.expressions.propertyTesters">
+      <propertyTester
+         id="org.eclipse.libra.framework.felix.ui.propertyTester"
+         namespace="org.eclipse.libra.framework.felix.ui"
+         properties="hasConfiguration"
+         type="java.lang.Object"
+         class="org.eclipse.libra.framework.felix.ui.internal.ConfigurationPropertyTester">
+      </propertyTester>
+   </extension>
+
+   <extension point="org.eclipse.wst.server.ui.editorPages">
+      <page
+         id="org.eclipse.libra.framework.felix.ui.editor.osgimodule"
+         order="20"
+         name="%configurationEditorOSGiModulesPage"
+         typeIds="org.eclipse.libra.framework.felix.serverType.*"
+         class="org.eclipse.libra.framework.ui.internal.editor.ConfigurationOSGiModuleEditorPart">
+         <enablement>
+           <test property="org.eclipse.libra.framework.felix.ui.hasConfiguration" value="true"/>
+         </enablement>
+      </page>
+   </extension>
+
+   <extension point="org.eclipse.wst.server.ui.editorPages">
+      <page
+         id="org.eclipse.libra.framework.felix.ui.editor.osgimodule"
+         order="22"
+         name="Target Platform Profile"
+         typeIds="org.eclipse.libra.framework.felix.serverType.*"
+         class="org.eclipse.libra.framework.ui.internal.editor.TargetDefinitionEditorPart">
+         <enablement>
+           <test property="org.eclipse.libra.framework.felix.ui.hasConfiguration" value="true"/>
+         </enablement>
+      </page>
+   </extension>
+
+   <extension point="org.eclipse.wst.server.ui.editorPageSections">
+      <section
+         id="org.eclipse.libra.framework.felix.editor.instance"
+         order="0"
+         insertionId="org.eclipse.wst.server.editor.overview.left"
+         typeIds="org.eclipse.libra.framework.felix.serverType.*"
+         class="org.eclipse.libra.framework.ui.internal.editor.FrameworkInstanceLocationEditorSection"/>
+      <section
+         id="org.eclipse.libra.framework.equinox.editor.instance"
+         order="0"
+         insertionId="org.eclipse.wst.server.editor.overview.right"
+         typeIds="org.eclipse.libra.framework.felix.serverType.*"
+         class="org.eclipse.libra.framework.ui.JMXPropertiesEditorSection"/>
+
+   </extension>
+   
+   <extension point="org.eclipse.wst.server.ui.wizardFragments">
+      <fragment
+         id="org.eclipse.libra.framework.felix.20x"
+         typeIds="org.eclipse.libra.framework.felix.runtimeType.20x"
+         class="org.eclipse.libra.framework.ui.OSGIFrameworkWizardFragment"/>
+      <fragment
+         id="org.eclipse.libra.framework.felix.30x"
+         typeIds="org.eclipse.libra.framework.felix.runtimeType.30x"
+         class="org.eclipse.libra.framework.ui.OSGIFrameworkWizardFragment"/>
+   </extension>
+
+  <extension point="org.eclipse.debug.ui.launchConfigurationTypeImages">
+    <launchConfigurationTypeImage
+      id="org.eclipse.libra.framework.felix.20x.launchConfig.image"
+      configTypeID="org.eclipse.libra.framework.felix.launchConfigurationType"
+      icon="icons/obj16/felix.gif">
+    </launchConfigurationTypeImage>
+    <launchConfigurationTypeImage
+      id="org.eclipse.libra.framework.felix.30x.launchConfig.image"
+      configTypeID="org.eclipse.libra.framework.felix.launchConfigurationType"
+      icon="icons/obj16/felix.gif">
+    </launchConfigurationTypeImage>
+  </extension>
+
+  <extension point="org.eclipse.debug.ui.launchConfigurationTabGroups">
+    <launchConfigurationTabGroup
+      id="org.eclipse.libra.framework.felix.ui.launchConfigurationTabGroup"
+      type="org.eclipse.libra.framework.felix.launchConfigurationType"
+      class="org.eclipse.libra.framework.ui.GenericOSGILaunchConfigurationTabGroup">
+    </launchConfigurationTabGroup>
+  </extension>
+
+  <extension point="org.eclipse.wst.common.project.facet.ui.images">
+    <image runtime-component-type="org.eclipse.libra.framework.felix.runtimeType"
+      path="icons/obj16/felix.gif"/>
+  </extension>
+
+
+
+  <extension point="org.eclipse.ui.popupMenus">
+    <objectContribution
+      adaptable="true"
+      id="org.eclipse.libra.framework.felix.ui.serveractions"
+      objectClass="org.eclipse.wst.server.core.IServer">
+      <visibility>
+          <objectState name="serverType" value="org.eclipse.libra.framework.felix.serverType.*"/>
+      </visibility>
+      <action 
+        class="org.eclipse.libra.framework.ui.internal.actions.CleanWorkDirAction"
+        enablesFor="1"
+        id="org.eclipse.libra.framework.felix.ui.cleanserverworkdir"
+        label="%cleanFelixWorkDir">
+      </action>
+    </objectContribution>
+    <objectContribution
+      adaptable="true"
+      id="org.eclipse.libra.framework.felix..ui.serveractions"
+      objectClass="org.eclipse.wst.server.ui.internal.view.servers.ModuleServer">
+      <visibility>
+        <and>
+          <objectState name="serverType" value="org.eclipse.libra.framework.felix.serverType.*"/>
+          <objectState name="moduleType" value="osgi.bundle"/>
+        </and>
+      </visibility>
+      <action
+        class="org.eclipse.libra.framework.ui.internal.actions.CleanWorkDirAction"
+        enablesFor="1"
+        id="org.eclipse.libra.framework.felix.ui.cleanmoduleworkdir"
+        label="%cleanFelixModuleWorkDir">
+      </action>
+    </objectContribution>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.publishers">
+     <publisher
+        id="org.eclipse.libra.framework.felix.ui.context"
+        typeIds="org.eclipse.libra.framework.felix.serverType.*"
+        name="%publisherContextFixLabel"
+        description="%publisherContextFixDescription"
+        order=""
+        class="org.eclipse.libra.framework.ui.internal.ModulePublisherDelegate"/>
+  </extension>
+</plugin>
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/pom.xml b/plugins/org.eclipse.libra.framework.felix.ui/pom.xml
new file mode 100644
index 0000000..771c484
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/pom.xml
@@ -0,0 +1,33 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<artifactId>org.eclipse.libra_parent</artifactId>
+		<groupId>org.eclipse.libra</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>../../development/org.eclipse.libra.releng/pom.xml</relativePath>
+	</parent>
+
+	<artifactId>org.eclipse.libra.framework.felix.ui</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<name>OSGi Frameworks Felix Adapter UI Plug-in</name>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-source-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>findbugs-maven-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-pmd-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/src/org/eclipse/libra/framework/felix/ui/FelixUIPlugin.java b/plugins/org.eclipse.libra.framework.felix.ui/src/org/eclipse/libra/framework/felix/ui/FelixUIPlugin.java
new file mode 100644
index 0000000..22cdc1e
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/src/org/eclipse/libra/framework/felix/ui/FelixUIPlugin.java
@@ -0,0 +1,59 @@
+package org.eclipse.libra.framework.felix.ui;
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+
+public class FelixUIPlugin extends AbstractUIPlugin {
+	protected static FelixUIPlugin singleton;
+	public static final String PLUGIN_ID = "org.eclipse.libra.framework.felix.ui";
+
+	public FelixUIPlugin() {
+		super();
+		singleton = this;
+	}
+
+	/**
+	 * Returns the singleton instance of this plugin.
+	 * @return org.eclipse.jst.server.tomcat.internal.TomcatUIPlugin
+	 */
+	public static FelixUIPlugin getInstance() {
+		return singleton;
+	}
+
+	/**
+	 * Convenience method for logging.
+	 *
+	 * @param status org.eclipse.core.runtime.IStatus
+	 */
+	public static void log(IStatus status) {
+		getInstance().getLog().log(status);
+	}
+
+	/**
+	 * Convenience method to get a Display. The method first checks, if
+	 * the thread calling this method has an associated display. If so, this
+	 * display is returned. Otherwise the method returns the default display.
+	 * 
+	 * @return the display
+	 */
+	public static Display getStandardDisplay() {
+		Display display = Display.getCurrent();
+		if (display == null)
+			display = Display.getDefault();
+		return display;		
+	}	
+	
+}
diff --git a/plugins/org.eclipse.libra.framework.felix.ui/src/org/eclipse/libra/framework/felix/ui/internal/ConfigurationPropertyTester.java b/plugins/org.eclipse.libra.framework.felix.ui/src/org/eclipse/libra/framework/felix/ui/internal/ConfigurationPropertyTester.java
new file mode 100644
index 0000000..7392385
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix.ui/src/org/eclipse/libra/framework/felix/ui/internal/ConfigurationPropertyTester.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.felix.ui.internal;
+
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.libra.framework.core.FrameworkInstanceDelegate;
+import org.eclipse.libra.framework.felix.IFelixFrameworkInstance;
+import org.eclipse.wst.server.core.IServerAttributes;
+
+/**
+ * 
+ */
+public class ConfigurationPropertyTester extends PropertyTester {
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
+	 */
+	public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+		try {
+			IServerAttributes server = (IServerAttributes) receiver;
+			FrameworkInstanceDelegate felix = (FrameworkInstanceDelegate) server.loadAdapter(IFelixFrameworkInstance.class, null);
+			if (felix != null)
+				return felix != null;
+		} catch (Exception e) {
+			// ignore
+		}
+		return false;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.felix/.classpath b/plugins/org.eclipse.libra.framework.felix/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.libra.framework.felix/.project b/plugins/org.eclipse.libra.framework.felix/.project
new file mode 100644
index 0000000..ecab378
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.libra.framework.felix</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.libra.framework.felix/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.libra.framework.felix/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..64203b9
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Fri Oct 22 10:43:27 EEST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.libra.framework.felix/META-INF/MANIFEST.MF b/plugins/org.eclipse.libra.framework.felix/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..1c3920b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/META-INF/MANIFEST.MF
@@ -0,0 +1,31 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.libra.framework.felix;singleton:=true
+Bundle-Version: 0.1.0.qualifier
+Bundle-Activator: org.eclipse.libra.framework.felix.FelixPlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.jdt.launching,
+ org.eclipse.debug.core,
+ org.eclipse.pde.ui,
+ org.eclipse.pde,
+ org.eclipse.wst.server.core,
+ org.eclipse.wst.server.ui,
+ org.eclipse.jst.server.core,
+ org.eclipse.jdt.core,
+ org.eclipse.jst.common.project.facet.core,
+ org.eclipse.wst.common.modulecore,
+ org.eclipse.equinox.frameworkadmin,
+ org.eclipse.libra.framework.core
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ActivationPolicy: lazy
+Import-Package: org.eclipse.core.resources,
+ org.eclipse.debug.core,
+ org.eclipse.jdt.launching.sourcelookup,
+ org.eclipse.pde.core.plugin,
+ org.eclipse.pde.ui.launcher
+Export-Package: org.eclipse.libra.framework.felix,
+ org.eclipse.libra.framework.felix.internal
diff --git a/plugins/org.eclipse.libra.framework.felix/about.html b/plugins/org.eclipse.libra.framework.felix/about.html
new file mode 100644
index 0000000..7d9511d
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>September 21, 2011</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.felix/build.properties b/plugins/org.eclipse.libra.framework.felix/build.properties
new file mode 100644
index 0000000..81e3c06
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/build.properties
@@ -0,0 +1,16 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties
diff --git a/plugins/org.eclipse.libra.framework.felix/plugin.properties b/plugins/org.eclipse.libra.framework.felix/plugin.properties
new file mode 100644
index 0000000..7fe2af4
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/plugin.properties
@@ -0,0 +1,31 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+pluginName=Apache Felix Support
+providerName=Eteration A.S.
+
+# --------------- Runtime Types ---------------
+libra=Eclipse Libra
+runtimeTypeFelix20Label=Apache Felix 2.0 OSGi Service Platform
+runtimeTypeFelix20Description=Apache Felix 2.0 OSGi Service Platform supports OSGi R3.
+
+runtimeTypeFelix30Label=Apache Felix 3.0 OSGi Service Platform
+runtimeTypeFelix30Description=Apache Felix 3.0 OSGi Service Platform supports OSGi R4.
+
+
+# --------------- Runtime Instance ---------------
+runtimeInstanceTypeFelix20Label=Apache Felix 2.0 Framework Instance
+runtimeInstanceTypeFelix20Description=Publishes and runs osgi bundle projects on local felix platform.
+
+runtimeInstanceTypeFelix30Label=Apache Felix 3.0 Framework Instance
+runtimeInstanceTypeFelix30Description=Publishes and runs osgi bundle projects on local felix platform.
+
+felixLaunchConfigurationType=Apache Felix
+
diff --git a/plugins/org.eclipse.libra.framework.felix/plugin.xml b/plugins/org.eclipse.libra.framework.felix/plugin.xml
new file mode 100644
index 0000000..2efd141
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/plugin.xml
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?><!--
+      Copyright (c) 2010 Eteration A.S. and others.
+      All rights reserved. This program and the accompanying materials
+      are made available under the terms of the Eclipse Public License v1.0
+      which accompanies this distribution, and is available at
+      http://www.eclipse.org/legal/epl-v10.html
+     
+      Contributors:
+         Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ -->
+<plugin>  
+   <extension
+         point="org.eclipse.wst.server.core.runtimeTypes">
+      <runtimeType
+            id="org.eclipse.libra.framework.felix.runtimeType.20x"
+            name="%runtimeTypeFelix20Label"
+            description="%runtimeTypeFelix20Description"
+            vendor="%libra"
+            version="2.0"
+            class="org.eclipse.libra.framework.felix.FelixFramework">
+		    <moduleType
+		         types="osgi.bundle"
+		         versions="4.2"/>     
+		        <moduleType
+		         types="java"
+		         versions="1.6"/>  
+		    <moduleType
+		         types="java"
+		         versions="1.5"/>
+      </runtimeType>
+      <runtimeType
+            id="org.eclipse.libra.framework.felix.runtimeType.30x"
+            name="%runtimeTypeFelix30Label"
+            description="%runtimeTypeFelix30Description"
+            vendor="%libra"
+            version="2.0"
+            class="org.eclipse.libra.framework.felix.FelixFramework">
+ 		    <moduleType
+		         types="osgi.bundle"
+		         versions="4.2"/>     
+		         <moduleType
+		         types="java"
+		         versions="1.6"/> 
+		    <moduleType
+		         types="java"
+		         versions="1.5"/>
+      </runtimeType>
+   </extension>
+
+
+  <extension point="org.eclipse.wst.server.core.runtimeLocators">
+    <runtimeLocator
+       id="org.eclipse.libra.framework.felix.runtime.locator"
+       typeIds="org.eclipse.libra.framework.felix.runtimeType.*"
+       class="org.eclipse.libra.framework.core.OSGIFrameworkLocatorDelegate"/>
+  </extension>
+
+  <extension point="org.eclipse.jst.server.core.runtimeClasspathProviders">
+     <runtimeClasspathProvider
+        id="org.eclipse.libra.framework.felix.runtimeTarget"
+        runtimeTypeIds="org.eclipse.libra.framework.felix.runtimeType.*"
+        class="org.eclipse.libra.framework.felix.internal.FelixRuntimeClasspathProvider"/>
+   </extension>
+   
+   
+   <extension
+         point="org.eclipse.wst.server.core.serverTypes">
+      <serverType
+            id="org.eclipse.libra.framework.felix.serverType.20x"
+            name="%runtimeInstanceTypeFelix20Label"
+            description="%runtimeInstanceTypeFelix20Description"
+            supportsRemoteHosts="false"
+            runtime="true"
+            startTimeout="120000"
+            stopTimeout="120000"
+            initialState="stopped"
+            startBeforePublish="false"
+            synchronousStart="true"
+            hasConfiguration="true"
+            launchConfigId="org.eclipse.libra.framework.felix.launchConfigurationType"
+            runtimeTypeId="org.eclipse.libra.framework.felix.runtimeType.20x"           
+            class="org.eclipse.libra.framework.felix.FelixFrameworkInstance"
+            behaviourClass="org.eclipse.libra.framework.felix.internal.FelixRuntimeInstanceBehavior">
+      </serverType>
+      <serverType
+            id="org.eclipse.libra.framework.felix.serverType.30x"
+            name="%runtimeInstanceTypeFelix30Label"
+            description="%runtimeInstanceTypeFelix30Description"
+            supportsRemoteHosts="false"
+            runtime="true"
+            startTimeout="120000"
+            stopTimeout="120000"
+            initialState="stopped"
+            startBeforePublish="false"
+            synchronousStart="true"
+            hasConfiguration="true"
+            launchConfigId="org.eclipse.libra.framework.felix.launchConfigurationType"
+            runtimeTypeId="org.eclipse.libra.framework.felix.runtimeType.30x"           
+            class="org.eclipse.libra.framework.felix.FelixFrameworkInstance"
+            behaviourClass="org.eclipse.libra.framework.felix.internal.FelixRuntimeInstanceBehavior">
+      </serverType>
+   </extension>
+
+
+  <extension point="org.eclipse.wst.server.core.serverLocators">
+    <serverLocator
+       id="org.eclipse.libra.framework.felix.server.locator"
+       supportsRemoteHosts="false"
+       typeIds="org.eclipse.libra.framework.felix.serverType.*"
+       class="org.eclipse.libra.framework.core.OSGIFrameworkInstanceLocatorDelegate"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.launchableAdapters">
+     <launchableAdapter
+        class="org.eclipse.libra.framework.core.launching.LaunchableAdapterDelegate"
+        id="org.eclipse.libra.framework.felix.osgi"/>
+  </extension>
+
+  <extension point="org.eclipse.debug.core.sourcePathComputers">
+     <sourcePathComputer
+        id="org.eclipse.libra.framework.felix.sourcePathComputer"
+        class="org.eclipse.libra.framework.core.internal.debug.OSGIRuntimeSourcePathComputerDelegate"/>
+  </extension>
+
+  <extension point="org.eclipse.debug.core.launchConfigurationTypes">
+     <launchConfigurationType
+        id="org.eclipse.libra.framework.felix.launchConfigurationType"
+        name="%felixLaunchConfigurationType"
+        delegate="org.eclipse.libra.framework.core.launching.LaunchConfigurationDelegate"
+        modes="run, debug, profile"
+        sourceLocatorId="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"
+        sourcePathComputerId="org.eclipse.libra.framework.felix.sourcePathComputer"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.publishTasks">
+     <publishTask
+        id="org.eclipse.libra.framework.felix.publishTask"
+        typeIds="org.eclipse.libra.framework.felix.serverType.*"
+        class="org.eclipse.libra.framework.core.publish.PublishTask"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.common.project.facet.core.runtimes">
+    <runtime-component-type
+       id="org.eclipse.libra.framework.felix.runtimeType"/>
+
+    <runtime-component-version
+       type="org.eclipse.libra.framework.felix.runtimeType"
+       version="2.0"/>
+    <runtime-component-version
+       type="org.eclipse.libra.framework.felix.runtimeType"
+       version="3.0"/>
+
+    <adapter>
+      <runtime-component
+         id="org.eclipse.libra.framework.felix.runtimeType"/>
+      <factory
+         class="org.eclipse.jst.server.core.internal.RuntimeClasspathProvider$Factory"/>
+      <type
+         class="org.eclipse.jst.common.project.facet.core.IClasspathProvider"/>
+    </adapter>
+  <supported>
+    <runtime-component id="org.eclipse.libra.framework.felix.runtimeType"/>
+    <facet id="osgi.bundle" />
+  </supported>
+      
+  </extension>
+                    
+  <extension point="org.eclipse.wst.common.project.facet.core.defaultFacets">
+    <default-facets>
+    <runtime-component id="org.eclipse.libra.framework.felix.runtimeType">
+         </runtime-component>
+         <facet
+               id="osgi.bundle" version="4.2">
+         </facet>
+    </default-facets>
+  </extension>
+  
+  <extension point="org.eclipse.jst.server.core.runtimeFacetMappings">
+    <runtimeFacetMapping
+      runtimeTypeId="org.eclipse.libra.framework.felix.runtimeType.20x"
+      runtime-component="org.eclipse.libra.framework.felix.runtimeType"
+      version="2.0"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.installableRuntimes">
+    <runtime
+      id="org.eclipse.libra.framework.felix.runtimeType.20x"
+      licenseUrl="http://www.apache.org/licenses/LICENSE-2.0.txt"
+      archiveUrl="http://archive.apache.org/dist/felix/org.apache.felix.main.distribution-2.0.5.zip"
+      archivePath="org.apache.felix.main.distribution-2.0.5"
+      os="win32"/>
+   <runtime
+      id="org.eclipse.libra.framework.felix.runtimeType.20x"
+      licenseUrl="http://www.apache.org/licenses/LICENSE-1.1"
+      archiveUrl="http://archive.apache.org/dist/felix/org.apache.felix.main.distribution-2.0.5.tar.gz"
+      archivePath="org.apache.felix.main.distribution-2.0.5"
+      os="linux"/>
+    <runtime
+      id="org.eclipse.libra.framework.felix.runtimeType.20x"
+      licenseUrl="http://www.apache.org/licenses/LICENSE-1.1"
+      archiveUrl="http://archive.apache.org/dist/felix/org.apache.felix.main.distribution-2.0.5.tar.gz"
+      archivePath="org.apache.felix.main.distribution-2.0.5"
+      os="macosx"/>
+   <runtime
+      id="org.eclipse.libra.framework.felix.runtimeType.30x"
+      licenseUrl="http://www.apache.org/licenses/LICENSE-2.0.txt"
+      archiveUrl="http://archive.apache.org/dist/felix/org.apache.felix.main.distribution-3.0.4.zip"
+      archivePath="org.apache.felix.main.distribution-3.0.4"
+      os="win32"/>
+   <runtime
+      id="org.eclipse.libra.framework.felix.runtimeType.30x"
+      licenseUrl="http://www.apache.org/licenses/LICENSE-1.1"
+      archiveUrl="http://archive.apache.org/dist/felix/org.apache.felix.main.distribution-3.0.4.tar.gz"
+      archivePath="org.apache.felix.main.distribution-3.0.4"
+      os="linux"/>
+   <runtime
+      id="org.eclipse.libra.framework.felix.runtimeType.30x"
+      licenseUrl="http://www.apache.org/licenses/LICENSE-1.1"
+      archiveUrl="http://archive.apache.org/dist/felix/org.apache.felix.main.distribution-3.0.4.tar.gz"
+      archivePath="org.apache.felix.main.distribution-3.0.4"
+      os="macosx"/>      
+  </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.libra.framework.felix/pom.xml b/plugins/org.eclipse.libra.framework.felix/pom.xml
new file mode 100644
index 0000000..61dcdde
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/pom.xml
@@ -0,0 +1,33 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<artifactId>org.eclipse.libra_parent</artifactId>
+		<groupId>org.eclipse.libra</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>../../development/org.eclipse.libra.releng/pom.xml</relativePath>
+	</parent>
+
+	<artifactId>org.eclipse.libra.framework.felix</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<name>OSGi Frameworks Felix Adapter Plug-in</name>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-source-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>findbugs-maven-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-pmd-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/plugins/org.eclipse.libra.framework.felix/schema/org.eclipse.libra.runtime.felix.exsd b/plugins/org.eclipse.libra.framework.felix/schema/org.eclipse.libra.runtime.felix.exsd
new file mode 100644
index 0000000..4804632
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/schema/org.eclipse.libra.runtime.felix.exsd
@@ -0,0 +1,99 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.libra.framework.felix" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.libra.framework.felix" id="org.eclipse.libra.framework.felix" name="Felix"/>
+      </appinfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="client">
+      <complexType>
+         <attribute name="class" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.libra.framework.felix.IConfig"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/Felix2Handler.java b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/Felix2Handler.java
new file mode 100644
index 0000000..ff0b61b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/Felix2Handler.java
@@ -0,0 +1,193 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.felix;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.libra.framework.core.Trace;
+import org.eclipse.wst.server.core.IModule;
+
+
+public class Felix2Handler implements IFelixVersionHandler {
+
+
+
+	public IStatus verifyInstallPath(IPath location) {
+
+		File f = location.append("conf").toFile();
+		if(f == null || !f.exists())
+			return new Status(IStatus.ERROR, FelixPlugin.PLUGIN_ID,
+					0, Messages.warningCantReadConfig, null);
+		File[] conf = f.listFiles();
+		if (conf != null) {
+			int size = conf.length;
+			for (int i = 0; i < size; i++) {
+				if (!f.canRead())
+					return new Status(IStatus.WARNING, FelixPlugin.PLUGIN_ID,
+							0, Messages.warningCantReadConfig, null);
+			}
+		}
+
+		return Status.OK_STATUS;
+	}
+
+	public String getFrameworkClass() {
+		return "org.apache.felix.main.Main";
+	}
+
+
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public List getFrameworkClasspath(IPath installPath, IPath configPath) {
+
+		List cp = new ArrayList();
+
+		IPath binPath = installPath.append("bin");
+		if (binPath.toFile().exists()) {
+			IPath path = binPath.append("felix.jar");
+			cp.add(JavaRuntime.newArchiveRuntimeClasspathEntry(path));
+		}
+
+		return cp;
+	}
+
+
+	public String[] getFrameworkProgramArguments(IPath configPath, boolean debug,
+			boolean starting) {
+		return new String[]{configPath.append("cache").makeAbsolute().toPortableString()};
+	}
+
+
+	public String[] getExcludedFrameworkProgramArguments(boolean debug,
+			boolean starting) {
+		return null;
+	}
+
+
+	public String[] getFrameworkVMArguments(IPath installPath, IPath configPath,
+			IPath deployPath, boolean isTestEnv, boolean jmxEnabled, int jmxPort) {
+		
+		String configPathStr = deployPath.makeAbsolute().append("config.properties").toPortableString(); //$NON-NLS-1$
+		String vmArgs = "-Dfelix.config.properties=file:" + configPathStr; //$NON-NLS-1$
+	
+		//String configPathStr = deployPath.makeAbsolute().toOSString();
+		String profilePath =  deployPath.append("java.profile").toOSString();
+	
+
+		String vmArgs2 =""  ;
+		try {
+			copyFile(this.getClass().getResourceAsStream("java6-server.profile"), new File(profilePath));
+				vmArgs2 += "-Dosgi.java.profile=file:"+profilePath; //$NON-NLS-1$ //$NON-NLS-2$
+		} catch (IOException e) {
+			Trace.trace(Trace.SEVERE, "Could not set equinox VM arguments:"+e.getMessage(), e);
+		}
+	
+
+
+		if(jmxEnabled)
+			return new String[]{"-Dcom.sun.management.jmxremote.port="+jmxPort, "-Dcom.sun.management.jmxremote.authenticate=false", "-Dcom.sun.management.jmxremote.ssl=false", vmArgs, vmArgs2};
+		else
+			return new String[]{ vmArgs, vmArgs2};
+	}
+
+	private  void copyFile(InputStream source, File destFile) throws IOException {
+
+
+		FileOutputStream destination = null;
+		 try {
+		  destination = new FileOutputStream(destFile);
+		  int c;
+		  while((c = source.read()) != -1){
+			  destination.write(c);
+		  }
+		 }
+		 finally {
+		  if(source != null) {
+		   source.close();
+		  }
+		  if(destination != null) {
+		   destination.close();
+		  }
+		}
+	}
+	
+	public IStatus canAddModule(IModule module) {
+		String id =  module.getModuleType().getId();
+		//String version = module.getModuleType().getVersion();
+		if ("osgi.bundle".equals(id) )
+			return Status.OK_STATUS;
+
+		return new Status(IStatus.ERROR, FelixPlugin.PLUGIN_ID, 0,
+				Messages.errorNotBundle, null);
+	}
+
+
+	public IStatus prepareFrameworkInstanceDirectory(IPath baseDir) {
+		return Status.OK_STATUS;//TomcatVersionHelper.createCatalinaInstanceDirectory(baseDir);
+	}
+
+
+	public IStatus prepareDeployDirectory(IPath deployPath) {
+		
+		if (Trace.isTraceEnabled())
+			Trace.trace(Trace.FINER, "Creating runtime directory at " + deployPath.toOSString());
+		
+
+		// Prepare a felix directory structure
+		File temp = deployPath.append("plugins").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		temp = deployPath.append("auto").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		temp = deployPath.append("cache").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+
+		return Status.OK_STATUS;		
+	}
+
+
+
+	public boolean supportsServeModulesWithoutPublish() {
+		return true;
+	}
+
+	public void prepareFrameworkConfigurationFile(IPath configPath,	String workspaceBundles, String kernelBundles) {
+			Properties properties = new Properties();
+
+			properties.setProperty("felix.auto.deploy.dir",configPath.append("auto").makeAbsolute().toPortableString());
+			properties.setProperty("felix.auto.deploy.action", "install,start");
+			properties.setProperty("org.osgi.framework.startlevel.beginning", "2");
+			properties.setProperty("felix.auto.install.1", kernelBundles);
+			properties.setProperty("felix.auto.start.1", kernelBundles);
+			properties.setProperty("felix.auto.install.2", workspaceBundles);
+			properties.setProperty("felix.auto.start.2", workspaceBundles);
+			properties.setProperty("org.osgi.framework.storage", "file:"
+					+ configPath.append("auto").makeAbsolute().toPortableString());
+			properties.setProperty("org.osgi.framework.storage.clean","onFirstInit");
+
+			try {
+				properties.store(new FileOutputStream(configPath.append("config.properties").makeAbsolute().toFile()), "## AUTO GENERATED ##");
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+}
diff --git a/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/FelixFramework.java b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/FelixFramework.java
new file mode 100644
index 0000000..efb7a6c
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/FelixFramework.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.felix;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.libra.framework.core.FrameworkDelegate;
+import org.eclipse.libra.framework.core.IOSGIFrameworkWorkingCopy;
+import org.eclipse.wst.server.core.IRuntimeType;
+
+
+public class FelixFramework extends FrameworkDelegate implements
+		IOSGIFrameworkWorkingCopy, IFelixFramework {
+	public FelixFramework() {
+	}
+	
+
+	public IFelixVersionHandler getVersionHandler() {
+		IRuntimeType type = getRuntime().getRuntimeType();
+		return FelixPlugin.getFelixVersionHandler(type.getId());
+	}
+
+	@SuppressWarnings("rawtypes")
+	public List getFrameworkClasspath(IPath configPath) {
+		IPath installPath = getRuntime().getLocation();
+		// If installPath is relative, convert to canonical path and hope for
+		// the best
+		if (!installPath.isAbsolute()) {
+			try {
+				String installLoc = (new File(installPath.toOSString()))
+						.getCanonicalPath();
+				installPath = new Path(installLoc);
+			} catch (IOException e) {
+				// Ignore if there is a problem
+			}
+		}
+		return getVersionHandler().getFrameworkClasspath(installPath, configPath);
+	}
+
+	/**
+	 * Verifies the Felix installation directory. If it is correct, true is
+	 * returned. Otherwise, the user is notified and false is returned.
+	 * 
+	 * @return boolean
+	 */
+	public IStatus verifyLocation() {
+		return getVersionHandler()
+				.verifyInstallPath(getRuntime().getLocation());
+	}
+	
+
+	public IStatus validate() {
+		IStatus status = super.validate();
+		if (!status.isOK())
+			return status;
+	
+		status = verifyLocation();
+		if (!status.isOK())
+			return status;
+		// return new Status(IStatus.ERROR, FelixPlugin.PLUGIN_ID, 0,
+		// Messages.errorInstallDir, null);
+		// don't accept trailing space since that can cause startup problems
+		if (getRuntime().getLocation().hasTrailingSeparator())
+			return new Status(IStatus.ERROR, FelixPlugin.PLUGIN_ID, 0,
+					Messages.errorInstallDirTrailingSlash, null);
+		if (getVMInstall() == null)
+			return new Status(IStatus.ERROR, FelixPlugin.PLUGIN_ID, 0,
+					Messages.errorJRE, null);
+	
+		
+	
+		File f = getRuntime().getLocation().append("conf").toFile();
+		File[] conf = f.listFiles();
+		if (conf != null) {
+			int size = conf.length;
+			for (int i = 0; i < size; i++) {
+				if (!f.canRead())
+					return new Status(IStatus.WARNING, FelixPlugin.PLUGIN_ID,
+							0, Messages.warningCantReadConfig, null);
+			}
+		}
+	
+	
+		f = getRuntime().getLocation().append("bundle").toFile();
+		File[] bundle = f.listFiles();
+		if (bundle != null) {
+			int size = bundle.length;
+			for (int i = 0; i < size; i++) {
+				if (!f.canRead())
+					return new Status(IStatus.WARNING, FelixPlugin.PLUGIN_ID,
+							0, Messages.warningCantReadBundle, null);
+			}
+		}
+		
+		return Status.OK_STATUS;
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/FelixFrameworkInstance.java b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/FelixFrameworkInstance.java
new file mode 100644
index 0000000..b0c2578
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/FelixFrameworkInstance.java
@@ -0,0 +1,146 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.felix;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.libra.framework.core.FrameworkInstanceConfiguration;
+import org.eclipse.libra.framework.core.FrameworkInstanceDelegate;
+import org.eclipse.libra.framework.core.OSGIFrameworkInstanceBehaviorDelegate;
+import org.eclipse.libra.framework.core.TargetDefinitionUtil;
+import org.eclipse.libra.framework.core.Trace;
+import org.eclipse.libra.framework.felix.internal.FelixRuntimeInstanceBehavior;
+import org.eclipse.pde.internal.core.target.provisional.IBundleContainer;
+import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
+import org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IRuntime;
+
+@SuppressWarnings("restriction")
+public class FelixFrameworkInstance extends FrameworkInstanceDelegate implements
+		IFelixFrameworkInstance {
+
+	protected transient IFelixVersionHandler versionHandler;
+
+	@Override
+	public IStatus canModifyModules(IModule[] add, IModule[] remove) {
+		IStatus status = super.canModifyModules(add, remove);
+		if (!status.isOK())
+			return status;
+
+		if (getFelixVersionHandler() == null)
+			return new Status(IStatus.ERROR, FelixPlugin.PLUGIN_ID, 0,
+					Messages.errorNoRuntime, null);
+
+		if (add != null) {
+			int size = add.length;
+			for (int i = 0; i < size; i++) {
+				IModule module = add[i];
+				IStatus status2 = getFelixVersionHandler().canAddModule(module);
+				if (status2 != null && !status2.isOK())
+					return status2;
+			}
+		}
+		return Status.OK_STATUS;
+	}
+
+	@Override
+	public void setDefaults(IProgressMonitor monitor) {
+		super.setDefaults(monitor);
+		try {
+			getFelixConfiguration();
+		} catch (CoreException e) {
+			Trace.trace(Trace.SEVERE, "Can't setup for Felix configuration.",e);
+		}
+	}
+	@Override
+	public void importRuntimeConfiguration(IRuntime runtime,
+			IProgressMonitor monitor) throws CoreException {
+
+		super.importRuntimeConfiguration(runtime, monitor);
+		OSGIFrameworkInstanceBehaviorDelegate fsb = (OSGIFrameworkInstanceBehaviorDelegate)getServer().loadAdapter(FelixRuntimeInstanceBehavior.class, null);
+		if(fsb != null ){
+			IPath tempDir = fsb.getTempDirectory();
+			if (!tempDir.isAbsolute()) {
+					IPath rootPath = ResourcesPlugin.getWorkspace().getRoot().getLocation();
+					tempDir = rootPath.append(tempDir);
+			}
+			setInstanceDirectory(tempDir.toPortableString());
+		}
+		
+		try {
+			getFelixConfiguration();
+		} catch (CoreException e) {
+			Trace.trace(Trace.SEVERE, "Can't setup for Felix configuration.",e);
+		}
+	}
+	
+	
+	public FelixFramework getFelixRuntime() {
+		if (getServer().getRuntime() == null)
+			return null;
+		return (FelixFramework) getServer().getRuntime().loadAdapter(
+				FelixFramework.class, null);
+	}
+
+	public IFelixVersionHandler getFelixVersionHandler() {
+		if (versionHandler == null) {
+			if (getServer().getRuntime() == null || getFelixRuntime() == null)
+				return null;
+
+			versionHandler = getFelixRuntime().getVersionHandler();
+		}
+		return versionHandler;
+	}
+
+	public FrameworkInstanceConfiguration getFelixConfiguration() throws CoreException {
+
+		return getFrameworkInstanceConfiguration();
+
+	}
+
+
+	private IBundleContainer[] getDefaultBundleContainers(IPath installPath) {
+		IBundleContainer[] containers = new IBundleContainer[2];
+		ITargetPlatformService service = TargetDefinitionUtil.getTargetPlatformService();
+
+		containers[0] = service.newDirectoryContainer(
+				installPath.append("bin").makeAbsolute()
+						.toPortableString());
+		containers[1] = service.newDirectoryContainer(
+				installPath.append("bundle").makeAbsolute()
+						.toPortableString());
+		return containers;
+		
+	}
+
+
+	@Override
+	public ITargetDefinition createDefaultTarget() throws CoreException {
+		IPath installPath = getServer().getRuntime().getLocation();
+
+		ITargetPlatformService service = TargetDefinitionUtil.getTargetPlatformService();
+
+		ITargetDefinition targetDefinition = service.newTarget();
+		targetDefinition.setName(getServer().getName());
+		IBundleContainer[] containers = getDefaultBundleContainers(installPath);
+		
+		targetDefinition.setBundleContainers(containers);
+		service.saveTargetDefinition(targetDefinition);
+		return targetDefinition;
+	}
+
+
+}
diff --git a/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/FelixPlugin.java b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/FelixPlugin.java
new file mode 100644
index 0000000..c67bf88
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/FelixPlugin.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.felix;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+
+public class FelixPlugin extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.libra.framework.felix"; //$NON-NLS-1$
+
+	// The shared instance
+	private static FelixPlugin plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public FelixPlugin() {
+		super();
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static FelixPlugin getDefault() {
+		return plugin;
+	}
+	
+	
+
+	public static String getPreference(String id) {
+		return Platform.getPreferencesService().getString(PLUGIN_ID, id, "", null);
+	}
+	
+	public static void setPreference(String id, String value) {
+		(new DefaultScope()).getNode(PLUGIN_ID).put(id, value);
+	}
+	
+	public static IFelixVersionHandler getFelixVersionHandler(String id) {
+//		if (id.indexOf("runtime") > 0)
+//			id = id.substring(0, 30) + id.substring(38);
+//		if (true)//"abc".equals(id))
+			return new Felix2Handler();
+	}
+
+
+}
diff --git a/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/IFelixFramework.java b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/IFelixFramework.java
new file mode 100644
index 0000000..702c18e
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/IFelixFramework.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.felix;
+
+import org.eclipse.libra.framework.core.IOSGIFramework;
+
+
+public interface IFelixFramework extends IOSGIFramework {
+	
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/IFelixFrameworkInstance.java b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/IFelixFrameworkInstance.java
new file mode 100644
index 0000000..1939a86
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/IFelixFrameworkInstance.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.felix;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.libra.framework.core.FrameworkInstanceConfiguration;
+import org.eclipse.libra.framework.core.IOSGIFrameworkInstance;
+
+
+
+public interface IFelixFrameworkInstance  extends IOSGIFrameworkInstance {
+
+	public FrameworkInstanceConfiguration getFelixConfiguration() throws CoreException;
+
+}
diff --git a/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/IFelixVersionHandler.java b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/IFelixVersionHandler.java
new file mode 100644
index 0000000..5b22c83
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/IFelixVersionHandler.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.felix;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.wst.server.core.IModule;
+
+public interface IFelixVersionHandler {
+
+	public abstract boolean supportsServeModulesWithoutPublish();
+
+	public abstract IStatus prepareDeployDirectory(IPath deployPath);
+
+	public abstract IStatus prepareFrameworkInstanceDirectory(IPath baseDir);
+
+	public abstract IStatus canAddModule(IModule module);
+
+	public abstract String[] getFrameworkVMArguments(IPath installPath, IPath configPath,
+			IPath deployPath, boolean isTestEnv, boolean jmxEnabled, int jmxPort);
+
+	public abstract String[] getExcludedFrameworkProgramArguments(boolean debug,
+			boolean starting);
+
+	public abstract String[] getFrameworkProgramArguments(IPath configPath,
+			boolean debug, boolean starting);
+
+	@SuppressWarnings("rawtypes")
+	public abstract List getFrameworkClasspath(IPath installPath, IPath configPath);
+
+	public abstract String getFrameworkClass();
+
+	public abstract IStatus verifyInstallPath(IPath location);
+
+	public abstract void prepareFrameworkConfigurationFile(IPath confDir,String workspaceBundles, String kernelBundles);
+
+}
diff --git a/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/Messages.java b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/Messages.java
new file mode 100644
index 0000000..cd95e52
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/Messages.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.felix;
+
+import org.eclipse.osgi.util.NLS;
+/**
+ * Translated messages.
+ */
+public class Messages extends NLS {
+
+	public static String errorInstallDirTrailingSlash = null;
+	public static String errorJRE;
+	public static String warningCantReadConfig;
+	public static String warningCantReadBundle;
+	public static String errorNotBundle;
+	public static String errorOSGiBundlesOnly;
+	public static String errorNoRuntime;
+	
+	public static String publishServerTask;
+	public static String errorConfigurationProjectClosed;
+	public static String errorNoConfiguration;
+	public static String loadingTask;
+	public static String errorCouldNotLoadConfiguration;
+	public static String configurationEditorActionAddOsgiModule;
+
+	static {
+		NLS.initializeMessages(FelixPlugin.PLUGIN_ID + ".Messages", Messages.class);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/Messages.properties b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/Messages.properties
new file mode 100644
index 0000000..88dac69
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/Messages.properties
@@ -0,0 +1,20 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+
+# --------------- General UI ---------------
+
+errorInstallDirTrailingSlash = Installation folder must not end with a slash
+errorJRE= Selected JRE is not valid;
+warningCantReadConfig=Cannot locate the correct conf folder.  Invalid Installation folder
+warningCantReadBundle=Cannot locate the correct bundle folder.  Invalid Installation folder
+errorNotBundle=Must be an osgi bundle
+errorOSGiBundlesOnly=Must be an osgi bundle
+errorNoRuntime=There is no runtime
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/internal/FelixConfigurationPublishHelper.java b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/internal/FelixConfigurationPublishHelper.java
new file mode 100644
index 0000000..7d61e00
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/internal/FelixConfigurationPublishHelper.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.felix.internal;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.libra.framework.core.OSGIFrameworkInstanceBehaviorDelegate;
+import org.eclipse.libra.framework.core.publish.PublishHelper;
+
+
+
+public class FelixConfigurationPublishHelper extends PublishHelper{
+	public OSGIFrameworkInstanceBehaviorDelegate behavior;
+
+	public FelixConfigurationPublishHelper(OSGIFrameworkInstanceBehaviorDelegate behavior) {
+		this.behavior = behavior;
+	}
+	
+	protected IPath getPublishFolder() {
+		IPath configPath = behavior.getBaseDirectory();
+		configPath = configPath.append("plugins").makeAbsolute();
+		return configPath;
+	}
+
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/internal/FelixRuntimeClasspathProvider.java b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/internal/FelixRuntimeClasspathProvider.java
new file mode 100644
index 0000000..c46678d
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/internal/FelixRuntimeClasspathProvider.java
@@ -0,0 +1,44 @@
+package org.eclipse.libra.framework.felix.internal;
+
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jst.server.core.RuntimeClasspathProviderDelegate;
+import org.eclipse.wst.server.core.IRuntime;
+
+public class FelixRuntimeClasspathProvider extends
+		RuntimeClasspathProviderDelegate {
+	/**
+	 * @see RuntimeClasspathProviderDelegate#resolveClasspathContainer(IProject,
+	 *      IRuntime)
+	 */
+	public IClasspathEntry[] resolveClasspathContainer(IProject project,
+			IRuntime runtime) {
+		IPath installPath = runtime.getLocation();
+
+		if (installPath == null)
+			return new IClasspathEntry[0];
+
+		List<IClasspathEntry> list = new ArrayList<IClasspathEntry>();
+		// String runtimeId = runtime.getRuntimeType().getId();
+		IPath path = installPath.append("osgi");
+		addLibraryEntries(list, path.toFile(), true);
+
+		return (IClasspathEntry[]) list
+				.toArray(new IClasspathEntry[list.size()]);
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/internal/FelixRuntimeInstanceBehavior.java b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/internal/FelixRuntimeInstanceBehavior.java
new file mode 100644
index 0000000..e87e682
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/internal/FelixRuntimeInstanceBehavior.java
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.felix.internal;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.libra.framework.core.FrameworkInstanceConfiguration;
+import org.eclipse.libra.framework.core.OSGIFrameworkInstanceBehaviorDelegate;
+import org.eclipse.libra.framework.core.ProgressUtil;
+import org.eclipse.libra.framework.core.Trace;
+import org.eclipse.libra.framework.felix.FelixFrameworkInstance;
+import org.eclipse.libra.framework.felix.IFelixFrameworkInstance;
+import org.eclipse.libra.framework.felix.IFelixVersionHandler;
+import org.eclipse.libra.framework.felix.Messages;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
+
+
+public class FelixRuntimeInstanceBehavior extends
+		OSGIFrameworkInstanceBehaviorDelegate {
+
+	protected transient FelixConfigurationPublishHelper publishHelper = new FelixConfigurationPublishHelper(
+			this);
+
+	/**
+	 * FelixRuntimeInstanceBehavior.
+	 */
+	public FelixRuntimeInstanceBehavior() {
+		super();
+	}
+	
+	public IFelixVersionHandler getFelixVersionHandler() {
+		return getFelixRuntimeInstance().getFelixVersionHandler();
+	}
+
+	public FelixFrameworkInstance getFelixRuntimeInstance() {
+		return (FelixFrameworkInstance) getServer().loadAdapter(FelixFrameworkInstance.class, null);
+	}
+
+	public String getFrameworkClass() {
+		return getFelixVersionHandler().getFrameworkClass();
+	}
+
+	public String[] getFrameworkProgramArguments(boolean starting) {
+		return getFelixVersionHandler().getFrameworkProgramArguments(
+				getBaseDirectory(), getFrameworkInstance().isDebug(), starting);
+	}
+
+	public String[] getExcludedFrameworkProgramArguments(boolean starting) {
+		return getFelixVersionHandler().getExcludedFrameworkProgramArguments(
+				getFrameworkInstance().isDebug(), starting);
+	}
+
+	public String[] getFrameworkVMArguments() {
+		IPath installPath = getServer().getRuntime().getLocation();
+		// If installPath is relative, convert to canonical path and hope for
+		// the best
+		if (!installPath.isAbsolute()) {
+			try {
+				String installLoc = (new File(installPath.toOSString()))
+						.getCanonicalPath();
+				installPath = new Path(installLoc);
+			} catch (IOException e) {
+				// Ignore if there is a problem
+			}
+		}
+
+		IPath deployPath = getBaseDirectory();
+		// If deployPath is relative, convert to canonical path and hope for the
+		// best
+		if (!deployPath.isAbsolute()) {
+			try {
+				String deployLoc = (new File(deployPath.toOSString()))
+						.getCanonicalPath();
+				deployPath = new Path(deployLoc);
+			} catch (IOException e) {
+				// Ignore if there is a problem
+			}
+		}
+		
+		int jmxPort = ((IFelixFrameworkInstance)this.getFrameworkInstance()).getJMXPort();
+		boolean jmxEnabled =  ((IFelixFrameworkInstance)this.getFrameworkInstance()).getJMXEnabled();
+		return getFelixVersionHandler().getFrameworkVMArguments(installPath, null, deployPath, false, jmxEnabled, jmxPort);
+	}
+	
+	protected void publishServer(int kind, IProgressMonitor monitor)
+			throws CoreException {
+		if (getServer().getRuntime() == null)
+			return;
+
+		IPath confDir = getBaseDirectory();
+		IStatus status = getFelixVersionHandler().prepareDeployDirectory(
+				confDir);
+
+		if (status != null && !status.isOK())
+			throw new CoreException(status);
+
+		monitor = ProgressUtil.getMonitorFor(monitor);
+		monitor.beginTask(Messages.publishServerTask, 600);
+
+		// TODO OSAMI 1) Cleanup 2) Backup and Publish,
+
+		// if (status != null && !status.isOK())
+		// throw new CoreException(status);
+
+		monitor.done();
+
+		setServerPublishState(IServer.PUBLISH_STATE_NONE);
+	}
+
+	@SuppressWarnings("rawtypes")
+	protected void publishModules(int kind, List modules, List deltaKind2,
+			MultiStatus multi, IProgressMonitor monitor) {
+
+
+		IPath confDir = getBaseDirectory();
+
+		FrameworkInstanceConfiguration felixConfiguration;
+		
+		try {
+			felixConfiguration = getFelixRuntimeInstance().getFelixConfiguration();
+			
+			
+			publishHelper.exportBundles(modules, felixConfiguration, confDir);
+			getFelixVersionHandler().prepareFrameworkConfigurationFile(confDir,
+					publishHelper.getServerModules(modules,"reference:file:", " " ),
+					publishHelper.getTargetBundles(felixConfiguration,"reference:file:", " "));
+
+		} catch (CoreException e) {
+			Trace.trace(Trace.SEVERE, "Publishing failed", e);
+		}
+	}
+
+	protected void publishModule(int kind, int deltaKind, IModule[] moduleTree,
+			IProgressMonitor monitor) throws CoreException {
+		if (getServer().getServerState() != IServer.STATE_STOPPED) {
+			if (deltaKind == ServerBehaviourDelegate.ADDED
+					|| deltaKind == ServerBehaviourDelegate.REMOVED)
+				setServerRestartState(true);
+		}
+
+		Properties p = loadModulePublishLocations();
+
+		// TODO OSAMI PUBLISH
+
+		setModulePublishState(moduleTree, IServer.PUBLISH_STATE_NONE);
+
+		saveModulePublishLocations(p);
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/internal/FelixRuntimeInstanceLocator.java b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/internal/FelixRuntimeInstanceLocator.java
new file mode 100644
index 0000000..983eaf8
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/internal/FelixRuntimeInstanceLocator.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.felix.internal;
+
+import org.eclipse.libra.framework.core.OSGIFrameworkLocatorDelegate;
+
+public class FelixRuntimeInstanceLocator extends OSGIFrameworkLocatorDelegate {
+
+	protected static final String[] runtimeTypes = new String[] {
+	"org.eclipse.libra.framework.felix"};
+	
+	public static String[] getRuntimeTypes() {
+			return runtimeTypes;
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/java6-server.profile b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/java6-server.profile
new file mode 100644
index 0000000..9ebb1e1
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/java6-server.profile
@@ -0,0 +1,211 @@
+org.osgi.framework.system.packages = \
+ com.sun.org.apache.xalan.internal.res,\
+ com.sun.org.apache.xml.internal.utils,\
+ com.sun.org.apache.xpath.internal,\
+ com.sun.org.apache.xpath.internal.jaxp,\
+ com.sun.org.apache.xpath.internal.objects,\
+ javax.accessibility,\
+ javax.activation,\
+ javax.activation;version="1.1.1",\
+ javax.activity,\
+ javax.annotation,\
+ javax.annotation;version="1.0.0",\
+ javax.annotation.processing,\
+ javax.crypto,\
+ javax.crypto.interfaces,\
+ javax.crypto.spec,\
+ javax.imageio,\
+ javax.imageio.event,\
+ javax.imageio.metadata,\
+ javax.imageio.plugins.bmp,\
+ javax.imageio.plugins.jpeg,\
+ javax.imageio.spi,\
+ javax.imageio.stream,\
+ javax.jws,\
+ javax.jws;version="2.0",\
+ javax.jws.soap,\
+ javax.jws.soap;version="2.0",\
+ javax.lang.model,\
+ javax.lang.model.element,\
+ javax.lang.model.type,\
+ javax.lang.model.util,\
+ javax.management,\
+ javax.management.loading,\
+ javax.management.modelmbean,\
+ javax.management.monitor,\
+ javax.management.openmbean,\
+ javax.management.relation,\
+ javax.management.remote,\
+ javax.management.remote.rmi,\
+ javax.management.timer,\
+ javax.naming,\
+ javax.naming.directory,\
+ javax.naming.event,\
+ javax.naming.ldap,\
+ javax.naming.spi,\
+ javax.net,\
+ javax.net.ssl,\
+ javax.print,\
+ javax.print.attribute,\
+ javax.print.attribute.standard,\
+ javax.print.event,\
+ javax.rmi,\
+ javax.rmi.CORBA,\
+ javax.rmi.ssl,\
+ javax.script,\
+ javax.script;version="1.1",\
+ javax.security.auth,\
+ javax.security.auth.callback,\
+ javax.security.auth.kerberos,\
+ javax.security.auth.login,\
+ javax.security.auth.spi,\
+ javax.security.auth.x500,\
+ javax.security.cert,\
+ javax.security.sasl,\
+ javax.sound.midi,\
+ javax.sound.midi.spi,\
+ javax.sound.sampled,\
+ javax.sound.sampled.spi,\
+ javax.sql,\
+ javax.sql.rowset,\
+ javax.sql.rowset.serial,\
+ javax.sql.rowset.spi,\
+ javax.swing,\
+ javax.swing.border,\
+ javax.swing.colorchooser,\
+ javax.swing.event,\
+ javax.swing.filechooser,\
+ javax.swing.plaf,\
+ javax.swing.plaf.basic,\
+ javax.swing.plaf.metal,\
+ javax.swing.plaf.multi,\
+ javax.swing.plaf.synth,\
+ javax.swing.table,\
+ javax.swing.text,\
+ javax.swing.text.html,\
+ javax.swing.text.html.parser,\
+ javax.swing.text.rtf,\
+ javax.swing.tree,\
+ javax.swing.undo,\
+ javax.tools,\
+ javax.transaction,\
+ javax.transaction;version="1.0.1",\
+ javax.transaction;version="1.1.0",\
+ javax.transaction.xa,\
+ javax.transaction.xa;version="1.0.1",\
+ javax.transaction.xa;version="1.1.0",\
+ javax.xml,\
+ javax.xml;version="1.0.1",\
+ javax.xml.bind,\
+ javax.xml.bind;version="2.0",\
+ javax.xml.bind.annotation,\
+ javax.xml.bind.annotation;version="2.0",\
+ javax.xml.bind.annotation.adapters,\
+ javax.xml.bind.annotation.adapters;version="2.0",\
+ javax.xml.bind.attachment,\
+ javax.xml.bind.attachment;version="2.0",\
+ javax.xml.bind.helpers,\
+ javax.xml.bind.helpers;version="2.0",\
+ javax.xml.bind.util,\
+ javax.xml.bind.util;version="2.0",\
+ javax.xml.crypto,\
+ javax.xml.crypto;version="1.0",\
+ javax.xml.crypto.dom,\
+ javax.xml.crypto.dom;version="1.0",\
+ javax.xml.crypto.dsig,\
+ javax.xml.crypto.dsig;version="1.0",\
+ javax.xml.crypto.dsig.dom,\
+ javax.xml.crypto.dsig.dom;version="1.0",\
+ javax.xml.crypto.dsig.keyinfo,\
+ javax.xml.crypto.dsig.keyinfo;version="1.0",\
+ javax.xml.crypto.dsig.spec,\
+ javax.xml.crypto.dsig.spec;version="1.0",\
+ javax.xml.datatype,\
+ javax.xml.namespace,\
+ javax.xml.parsers,\
+ javax.xml.soap,\
+ javax.xml.soap;version="1.3.0",\
+ javax.xml.stream,\
+ javax.xml.stream;version="1.0.1",\
+ javax.xml.stream.events,\
+ javax.xml.stream.events;version="1.0.1",\
+ javax.xml.stream.util,\
+ javax.xml.stream.util;version="1.0.1",\
+ javax.xml.transform,\
+ javax.xml.transform.dom,\
+ javax.xml.transform.sax,\
+ javax.xml.transform.stax,\
+ javax.xml.transform.stream,\
+ javax.xml.validation,\
+ javax.xml.ws,\
+ javax.xml.ws;version="2.1.1",\
+ javax.xml.ws.handler,\
+ javax.xml.ws.handler;version="2.1.1",\
+ javax.xml.ws.handler.soap,\
+ javax.xml.ws.handler.soap;version="2.1.1",\
+ javax.xml.ws.http,\
+ javax.xml.ws.http;version="2.1.1",\
+ javax.xml.ws.soap,\
+ javax.xml.ws.soap;version="2.1.1",\
+ javax.xml.ws.spi,\
+ javax.xml.ws.spi;version="2.1.1",\
+ javax.xml.xpath,\
+ org.ietf.jgss,\
+ org.omg.CORBA,\
+ org.omg.CORBA_2_3,\
+ org.omg.CORBA_2_3.portable,\
+ org.omg.CORBA.DynAnyPackage,\
+ org.omg.CORBA.ORBPackage,\
+ org.omg.CORBA.portable,\
+ org.omg.CORBA.TypeCodePackage,\
+ org.omg.CosNaming,\
+ org.omg.CosNaming.NamingContextExtPackage,\
+ org.omg.CosNaming.NamingContextPackage,\
+ org.omg.Dynamic,\
+ org.omg.DynamicAny,\
+ org.omg.DynamicAny.DynAnyFactoryPackage,\
+ org.omg.DynamicAny.DynAnyPackage,\
+ org.omg.IOP,\
+ org.omg.IOP.CodecFactoryPackage,\
+ org.omg.IOP.CodecPackage,\
+ org.omg.Messaging,\
+ org.omg.PortableInterceptor,\
+ org.omg.PortableInterceptor.ORBInitInfoPackage,\
+ org.omg.PortableServer,\
+ org.omg.PortableServer.CurrentPackage,\
+ org.omg.PortableServer.POAManagerPackage,\
+ org.omg.PortableServer.POAPackage,\
+ org.omg.PortableServer.portable,\
+ org.omg.PortableServer.ServantLocatorPackage,\
+ org.omg.SendingContext,\
+ org.omg.stub.java.rmi,\
+ org.w3c.dom,\
+ org.w3c.dom.bootstrap,\
+ org.w3c.dom.css,\
+ org.w3c.dom.events,\
+ org.w3c.dom.html,\
+ org.w3c.dom.ls,\
+ org.w3c.dom.ranges,\
+ org.w3c.dom.stylesheets,\
+ org.w3c.dom.traversal,\
+ org.w3c.dom.views ,\
+ org.xml.sax,\
+ org.xml.sax.ext,\
+ org.xml.sax.helpers
+org.osgi.framework.bootdelegation = \
+ org.eclipse.virgo.osgi.extensions.*,\
+ org.eclipse.virgo.osgi.launcher.*,\
+ com.sun.*,\
+ javax.xml.*,\
+ org.apache.xerces.jaxp.*,\
+ org.w3c.*,\
+ org.xml.*,\
+ sun.*
+org.osgi.framework.executionenvironment = \
+ OSGi/Minimum-1.0,\
+ OSGi/Minimum-1.1,\
+ J2SE-1.3,\
+ J2SE-1.4,\
+ J2SE-1.5,\
+ JavaSE-1.6
+osgi.java.profile.name = Equinox-Kernel-Java6
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/.classpath b/plugins/org.eclipse.libra.framework.jonas.ui/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/.cvsignore b/plugins/org.eclipse.libra.framework.jonas.ui/.cvsignore
new file mode 100644
index 0000000..4571f2d
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/.cvsignore
@@ -0,0 +1,8 @@
+bin
+build.xml
+org.eclipse.jst.server.tomcat.ui_3.0.0.jar
+tomcatui.jar
+temp.folder
+@dot
+src.zip
+javaCompiler...args
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/.options b/plugins/org.eclipse.libra.framework.jonas.ui/.options
new file mode 100644
index 0000000..d88b03b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/.options
@@ -0,0 +1,4 @@
+# Debugging options for the org.eclipse.jst.server.tomcat.ui plugin
+
+# Turn on general debugging
+org.eclipse.jst.server.tomcat.ui/debug=true
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/.project b/plugins/org.eclipse.libra.framework.jonas.ui/.project
new file mode 100644
index 0000000..5fca971
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.libra.framework.jonas.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/.settings/com.chronon.sb.browser.launcher.prefs b/plugins/org.eclipse.libra.framework.jonas.ui/.settings/com.chronon.sb.browser.launcher.prefs
new file mode 100644
index 0000000..743101a
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/.settings/com.chronon.sb.browser.launcher.prefs
@@ -0,0 +1,6 @@
+#Fri May 27 10:43:13 EEST 2011
+auto.defaultPkgs=
+auto.excludePkgs=
+auto.partialPkgs=
+eclipse.preferences.version=1
+isManual=false
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.libra.framework.jonas.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..c8be432
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Fri Nov 10 17:11:35 HST 2006
+eclipse.preferences.version=1
+encoding/<project>=ISO-8859-1
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.libra.framework.jonas.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..87e641f
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,74 @@
+#Sat Oct 16 21:03:45 EEST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=error
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.testsuite,*.deploy,*.location,*.execution,*.datapool,*.artifact,*.html,*.svg
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=disabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=error
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=error
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=error
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.incompatibleJDKLevel=warning
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.libra.framework.jonas.ui/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..584bdff
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,4 @@
+#Fri Nov 10 18:06:11 HST 2006
+eclipse.preferences.version=1
+internal.default.compliance=user
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?>\n<templates/>
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.libra.framework.jonas.ui/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..0e06e96
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,15 @@
+#Mon Jan 15 21:56:48 EST 2007
+compilers.incompatible-environment=0
+compilers.p.build=0
+compilers.p.deprecated=1
+compilers.p.missing-packages=2
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=0
+compilers.p.unknown-class=0
+compilers.p.unknown-element=1
+compilers.p.unknown-resource=0
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.use-project=true
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.libra.framework.jonas.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..dfae400
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,29 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.libra.framework.jonas.ui;singleton:=true
+Bundle-Version: 0.1.0.qualifier
+Bundle-Activator: org.eclipse.libra.framework.jonas.ui.JonasUIPlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.core.expressions;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.forms;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.debug.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.jdt.debug.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.jdt.launching;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.wst.server.core;bundle-version="[1.0.204,2.0.0)",
+ org.eclipse.jst.server.core;bundle-version="[1.0.103,2.0.0)",
+ org.eclipse.jst.server.ui;bundle-version="[1.0.103,2.0.0)",
+ org.eclipse.wst.common.project.facet.ui;bundle-version="[1.1.0,2.0.0)",
+ org.eclipse.libra.framework.jonas,
+ org.eclipse.wst.server.ui,
+ org.eclipse.pde.core,
+ org.eclipse.pde.ui,
+ org.eclipse.libra.framework.core,
+ org.eclipse.libra.framework.ui
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/about.html b/plugins/org.eclipse.libra.framework.jonas.ui/about.html
new file mode 100644
index 0000000..8f31159
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>March 25, 2011</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/build.properties b/plugins/org.eclipse.libra.framework.jonas.ui/build.properties
new file mode 100644
index 0000000..5016daa
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/build.properties
@@ -0,0 +1,22 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+bin.includes = plugin.xml,\
+               plugin.properties,\
+               icons/,\
+               .,\
+               META-INF/,\
+               about.html
+bin.excludes = bin/**,\
+               @dot/**,\
+               temp.folder/**
+source.. = src/
+
+
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/icons/obj16/jonas.gif b/plugins/org.eclipse.libra.framework.jonas.ui/icons/obj16/jonas.gif
new file mode 100644
index 0000000..10cfff1
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/icons/obj16/jonas.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/icons/obj16/mime_extension.gif b/plugins/org.eclipse.libra.framework.jonas.ui/icons/obj16/mime_extension.gif
new file mode 100644
index 0000000..c585010
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/icons/obj16/mime_extension.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/icons/obj16/mime_mapping.gif b/plugins/org.eclipse.libra.framework.jonas.ui/icons/obj16/mime_mapping.gif
new file mode 100644
index 0000000..0a8e4bf
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/icons/obj16/mime_mapping.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/icons/obj16/port.gif b/plugins/org.eclipse.libra.framework.jonas.ui/icons/obj16/port.gif
new file mode 100644
index 0000000..7a354b7
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/icons/obj16/port.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/icons/obj16/project_missing.gif b/plugins/org.eclipse.libra.framework.jonas.ui/icons/obj16/project_missing.gif
new file mode 100644
index 0000000..0cb4c16
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/icons/obj16/project_missing.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/icons/obj16/web_module.gif b/plugins/org.eclipse.libra.framework.jonas.ui/icons/obj16/web_module.gif
new file mode 100644
index 0000000..bf20f70
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/icons/obj16/web_module.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/icons/wizban/felix_wiz.png b/plugins/org.eclipse.libra.framework.jonas.ui/icons/wizban/felix_wiz.png
new file mode 100644
index 0000000..05d4925
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/icons/wizban/felix_wiz.png
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/plugin.properties b/plugins/org.eclipse.libra.framework.jonas.ui/plugin.properties
new file mode 100644
index 0000000..02477b3
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/plugin.properties
@@ -0,0 +1,21 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+pluginName=Apache Jonas UI Support
+providerName=Eteration A.S.
+
+configurationEditorOSGiModulesPage=Modules
+configurationEditorTargetPage=Target Platform Profile
+
+cleanJonasWorkDir=Clean Jonas Work Directory...
+cleanJonasModuleWorkDir=Clean Module Work Directory...
+
+publisherContextFixLabel=Update context paths
+publisherContextFixDescription=Prompt to update module contexts when they are out of sync.
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/plugin.xml b/plugins/org.eclipse.libra.framework.jonas.ui/plugin.xml
new file mode 100644
index 0000000..b776da6
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/plugin.xml
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<!--
+      Copyright (c) 2010 Eteration A.S. and others.
+      All rights reserved. This program and the accompanying materials
+      are made available under the terms of the Eclipse Public License v1.0
+      which accompanies this distribution, and is available at
+      http://www.eclipse.org/legal/epl-v10.html
+     
+      Contributors:
+         Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ -->
+
+<plugin>
+   <extension point="org.eclipse.wst.server.ui.serverImages">
+      <image
+         id="org.eclipse.libra.framework.jonas"
+         icon="icons/obj16/jonas.gif"
+         typeIds="org.eclipse.libra.framework.jonas.serverType"/>
+
+      <image
+         id="org.eclipse.libra.framework.jonas.runtimeType"
+         icon="icons/obj16/jonas.gif"
+         typeIds="org.eclipse.libra.framework.jonas.runtimeType"/>
+
+   </extension>
+   
+   <extension point="org.eclipse.core.expressions.propertyTesters">
+      <propertyTester
+         id="org.eclipse.libra.framework.jonas.ui.propertyTester"
+         namespace="org.eclipse.libra.framework.jonas.ui"
+         properties="hasConfiguration"
+         type="java.lang.Object"
+         class="org.eclipse.libra.framework.jonas.ui.internal.ConfigurationPropertyTester">
+      </propertyTester>
+   </extension>
+
+   <extension point="org.eclipse.wst.server.ui.editorPages">
+      <page
+         id="org.eclipse.libra.framework.jonas.ui.editor.osgimodule"
+         order="20"
+         name="%configurationEditorOSGiModulesPage"
+         typeIds="org.eclipse.libra.framework.jonas.serverType"
+         class="org.eclipse.libra.framework.ui.internal.editor.ConfigurationOSGiModuleEditorPart">
+         <enablement>
+           <test property="org.eclipse.libra.framework.jonas.ui.hasConfiguration" value="true"/>
+         </enablement>
+      </page>
+   </extension>
+
+   <extension point="org.eclipse.wst.server.ui.editorPages">
+      <page
+         id="org.eclipse.libra.framework.jonas.ui.editor.osgimodule"
+         order="22"
+         name="Target Platform Profile"
+         typeIds="org.eclipse.libra.framework.jonas.serverType"
+         class="org.eclipse.libra.framework.ui.internal.editor.TargetDefinitionEditorPart">
+         <enablement>
+           <test property="org.eclipse.libra.framework.jonas.ui.hasConfiguration" value="true"/>
+         </enablement>
+      </page>
+   </extension>
+
+   <extension point="org.eclipse.wst.server.ui.editorPageSections">
+      <section
+         id="org.eclipse.libra.framework.jonas.editor.instance"
+         order="0"
+         insertionId="org.eclipse.wst.server.editor.overview.left"
+         typeIds="org.eclipse.libra.framework.jonas.serverType"
+         class="org.eclipse.libra.framework.ui.internal.editor.FrameworkInstanceLocationEditorSection"/>
+
+   </extension>
+   
+   <extension point="org.eclipse.wst.server.ui.wizardFragments">
+      <fragment
+         id="org.eclipse.libra.framework.jonas"
+         typeIds="org.eclipse.libra.framework.jonas.runtimeType"
+         class="org.eclipse.libra.framework.ui.OSGIFrameworkWizardFragment"/>
+   </extension>
+
+  <extension point="org.eclipse.debug.ui.launchConfigurationTypeImages">
+    <launchConfigurationTypeImage
+      id="org.eclipse.libra.framework.jonas.launchConfig.image"
+      configTypeID="org.eclipse.libra.framework.jonas.launchConfigurationType"
+      icon="icons/obj16/jonas.gif">
+    </launchConfigurationTypeImage>
+  </extension>
+
+  <extension point="org.eclipse.debug.ui.launchConfigurationTabGroups">
+    <launchConfigurationTabGroup
+      id="org.eclipse.libra.framework.jonas.ui.launchConfigurationTabGroup"
+      type="org.eclipse.libra.framework.jonas.launchConfigurationType"
+      class="org.eclipse.libra.framework.ui.GenericOSGILaunchConfigurationTabGroup">
+    </launchConfigurationTabGroup>
+  </extension>
+
+  <extension point="org.eclipse.wst.common.project.facet.ui.images">
+    <image runtime-component-type="org.eclipse.libra.framework.jonas.runtimeType"
+      path="icons/obj16/jonas.gif"/>
+  </extension>
+
+
+
+  <extension point="org.eclipse.ui.popupMenus">
+    <objectContribution
+      adaptable="true"
+      id="org.eclipse.libra.framework.jonas.ui.serveractions"
+      objectClass="org.eclipse.wst.server.core.IServer">
+      <visibility>
+          <objectState name="serverType" value="org.eclipse.libra.framework.jonas.serverType"/>
+      </visibility>
+      <action 
+        class="org.eclipse.libra.framework.ui.internal.actions.CleanWorkDirAction"
+        enablesFor="1"
+        id="org.eclipse.libra.framework.jonas.ui.cleanserverworkdir"
+        label="%cleanTomcatWorkDir">
+      </action>
+    </objectContribution>
+    <objectContribution
+      adaptable="true"
+      id="org.eclipse.libra.framework.jonas.ui.serveractions"
+      objectClass="org.eclipse.wst.server.ui.internal.view.servers.ModuleServer">
+      <visibility>
+        <and>
+          <objectState name="serverType" value="org.eclipse.libra.framework.jonas.serverType"/>
+          <objectState name="moduleType" value="osgi.bundle"/>
+        </and>
+      </visibility>
+      <action
+        class="org.eclipse.libra.framework.ui.internal.actions.CleanWorkDirAction"
+        enablesFor="1"
+        id="org.eclipse.libra.framework.jonas.ui.cleanmoduleworkdir"
+        label="%cleanTomcatModuleWorkDir">
+      </action>
+    </objectContribution>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.publishers">
+     <publisher
+        id="org.eclipse.libra.framework.jonas.ui.context"
+        typeIds="org.eclipse.libra.framework.jonas.serverType"
+        name="%publisherContextFixLabel"
+        description="%publisherContextFixDescription"
+        order=""
+        class="org.eclipse.libra.framework.ui.internal.ModulePublisherDelegate"/>
+  </extension>
+</plugin>
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/pom.xml b/plugins/org.eclipse.libra.framework.jonas.ui/pom.xml
new file mode 100644
index 0000000..b46b38e
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/pom.xml
@@ -0,0 +1,33 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<artifactId>org.eclipse.libra_parent</artifactId>
+		<groupId>org.eclipse.libra</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>../../development/org.eclipse.libra.releng/pom.xml</relativePath>
+	</parent>
+
+	<artifactId>org.eclipse.libra.framework.jonas.ui</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<name>OSGi Frameworks JOnAS Adapter UI Plug-in</name>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-source-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>findbugs-maven-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-pmd-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/src/org/eclipse/libra/framework/jonas/ui/JonasUIPlugin.java b/plugins/org.eclipse.libra.framework.jonas.ui/src/org/eclipse/libra/framework/jonas/ui/JonasUIPlugin.java
new file mode 100644
index 0000000..bab184c
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/src/org/eclipse/libra/framework/jonas/ui/JonasUIPlugin.java
@@ -0,0 +1,59 @@
+package org.eclipse.libra.framework.jonas.ui;
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+
+public class JonasUIPlugin extends AbstractUIPlugin {
+	protected static JonasUIPlugin singleton;
+	public static final String PLUGIN_ID = "org.eclipse.libra.framework.jonas.ui";
+
+	public JonasUIPlugin() {
+		super();
+		singleton = this;
+	}
+
+	/**
+	 * Returns the singleton instance of this plugin.
+	 * @return org.eclipse.jst.server.tomcat.internal.TomcatUIPlugin
+	 */
+	public static JonasUIPlugin getInstance() {
+		return singleton;
+	}
+
+	/**
+	 * Convenience method for logging.
+	 *
+	 * @param status org.eclipse.core.runtime.IStatus
+	 */
+	public static void log(IStatus status) {
+		getInstance().getLog().log(status);
+	}
+
+	/**
+	 * Convenience method to get a Display. The method first checks, if
+	 * the thread calling this method has an associated display. If so, this
+	 * display is returned. Otherwise the method returns the default display.
+	 * 
+	 * @return the display
+	 */
+	public static Display getStandardDisplay() {
+		Display display = Display.getCurrent();
+		if (display == null)
+			display = Display.getDefault();
+		return display;		
+	}	
+	
+}
diff --git a/plugins/org.eclipse.libra.framework.jonas.ui/src/org/eclipse/libra/framework/jonas/ui/internal/ConfigurationPropertyTester.java b/plugins/org.eclipse.libra.framework.jonas.ui/src/org/eclipse/libra/framework/jonas/ui/internal/ConfigurationPropertyTester.java
new file mode 100644
index 0000000..15ac808
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas.ui/src/org/eclipse/libra/framework/jonas/ui/internal/ConfigurationPropertyTester.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.jonas.ui.internal;
+
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.libra.framework.core.FrameworkInstanceDelegate;
+import org.eclipse.libra.framework.jonas.IJonasFrameworkInstance;
+import org.eclipse.wst.server.core.IServerAttributes;
+
+/**
+ * 
+ */
+public class ConfigurationPropertyTester extends PropertyTester {
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object,
+	 * java.lang.String, java.lang.Object[], java.lang.Object)
+	 */
+	public boolean test(Object receiver, String property, Object[] args,
+			Object expectedValue) {
+		try {
+			IServerAttributes server = (IServerAttributes) receiver;
+			FrameworkInstanceDelegate jonas = (FrameworkInstanceDelegate) server
+					.loadAdapter(IJonasFrameworkInstance.class, null);
+			if (jonas != null)
+				return jonas != null;
+		} catch (Exception e) {
+			// ignore
+		}
+		return false;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.jonas/.classpath b/plugins/org.eclipse.libra.framework.jonas/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.libra.framework.jonas/.project b/plugins/org.eclipse.libra.framework.jonas/.project
new file mode 100644
index 0000000..d0f0ab4
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.libra.framework.jonas</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.libra.framework.jonas/.settings/com.chronon.sb.browser.launcher.prefs b/plugins/org.eclipse.libra.framework.jonas/.settings/com.chronon.sb.browser.launcher.prefs
new file mode 100644
index 0000000..743101a
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/.settings/com.chronon.sb.browser.launcher.prefs
@@ -0,0 +1,6 @@
+#Fri May 27 10:43:13 EEST 2011
+auto.defaultPkgs=
+auto.excludePkgs=
+auto.partialPkgs=
+eclipse.preferences.version=1
+isManual=false
diff --git a/plugins/org.eclipse.libra.framework.jonas/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.libra.framework.jonas/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..64203b9
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Fri Oct 22 10:43:27 EEST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.libra.framework.jonas/META-INF/MANIFEST.MF b/plugins/org.eclipse.libra.framework.jonas/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..f88d1a2
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/META-INF/MANIFEST.MF
@@ -0,0 +1,35 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.libra.framework.jonas;singleton:=true
+Bundle-Version: 0.1.0.qualifier
+Bundle-Activator: org.eclipse.libra.framework.jonas.JonasPlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.jdt.launching,
+ org.eclipse.debug.core,
+ org.eclipse.pde.ui,
+ org.eclipse.pde,
+ org.eclipse.wst.server.core,
+ org.eclipse.wst.server.ui,
+ org.eclipse.jst.server.core,
+ org.eclipse.jdt.core,
+ org.eclipse.jst.common.project.facet.core,
+ org.eclipse.wst.common.modulecore,
+ org.eclipse.equinox.frameworkadmin,
+ org.eclipse.libra.framework.core,
+ org.apache.ant,
+ org.eclipse.ant.core,
+ org.eclipse.ant.launching
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ActivationPolicy: lazy
+Import-Package: org.eclipse.core.resources,
+ org.eclipse.debug.core,
+ org.eclipse.jdt.launching.sourcelookup,
+ org.eclipse.pde.core.plugin,
+ org.eclipse.pde.ui.launcher,
+ org.apache.tools.ant
+Export-Package: org.eclipse.libra.framework.jonas,
+ org.eclipse.libra.framework.jonas.internal
diff --git a/plugins/org.eclipse.libra.framework.jonas/about.html b/plugins/org.eclipse.libra.framework.jonas/about.html
new file mode 100644
index 0000000..7d9511d
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>September 21, 2011</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.jonas/build.properties b/plugins/org.eclipse.libra.framework.jonas/build.properties
new file mode 100644
index 0000000..81e3c06
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/build.properties
@@ -0,0 +1,16 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties
diff --git a/plugins/org.eclipse.libra.framework.jonas/plugin.properties b/plugins/org.eclipse.libra.framework.jonas/plugin.properties
new file mode 100644
index 0000000..37b9f5d
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/plugin.properties
@@ -0,0 +1,24 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+pluginName=OW2 JonAS Support
+providerName=Eteration A.S.
+
+# --------------- Runtime Types ---------------
+libra=Eclipse Libra
+runtimeTypeJonasLabel=OW2 Micro JOnAS OSGi Service Platform
+runtimeTypeJonasDescription=OW2 micro JOnAS OSGi Service Platform supports OSGi R4.
+
+# --------------- Runtime Instance ---------------
+runtimeInstanceTypeJonasLabel=OW2 Micro JOnAS Framework Instance
+runtimeInstanceTypeJonasDescription=Publishes and runs osgi bundle projects on local Jonas platform.
+
+jonasLaunchConfigurationType=OW2 JOnAS
+
diff --git a/plugins/org.eclipse.libra.framework.jonas/plugin.xml b/plugins/org.eclipse.libra.framework.jonas/plugin.xml
new file mode 100644
index 0000000..9bbe325
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/plugin.xml
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?><!--
+      Copyright (c) 2010 Eteration A.S. and others.
+      All rights reserved. This program and the accompanying materials
+      are made available under the terms of the Eclipse Public License v1.0
+      which accompanies this distribution, and is available at
+      http://www.eclipse.org/legal/epl-v10.html
+     
+      Contributors:
+         Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ -->
+<plugin>  
+   <extension
+         point="org.eclipse.wst.server.core.runtimeTypes">
+      <runtimeType
+            id="org.eclipse.libra.framework.jonas.runtimeType"
+            name="%runtimeTypeJonasLabel"
+            description="%runtimeTypeJonasDescription"
+            vendor="%libra"
+            version="2.0"
+            class="org.eclipse.libra.framework.jonas.JonasFramework">
+		    <moduleType
+		         types="osgi.bundle"
+		         versions="4.2"/>     
+		        <moduleType
+		         types="java"
+		         versions="1.6"/>  
+		    <moduleType
+		         types="java"
+		         versions="1.5"/>
+      </runtimeType>
+ </extension>
+  <extension point="org.eclipse.wst.server.core.runtimeLocators">
+    <runtimeLocator
+       id="org.eclipse.libra.framework.jonas.runtime.locator"
+       typeIds="org.eclipse.libra.framework.jonas.runtimeType.*"
+       class="org.eclipse.libra.framework.core.OSGIFrameworkLocatorDelegate"/>
+  </extension>
+
+  <extension point="org.eclipse.jst.server.core.runtimeClasspathProviders">
+     <runtimeClasspathProvider
+        id="org.eclipse.libra.framework.jonas.runtimeTarget"
+        runtimeTypeIds="org.eclipse.libra.framework.jonas.runtimeType"
+        class="org.eclipse.libra.framework.jonas.internal.JonasFrameworkClasspathProvider"/>
+   </extension>
+   
+   
+   <extension
+         point="org.eclipse.wst.server.core.serverTypes">
+      <serverType
+            id="org.eclipse.libra.framework.jonas.serverType"
+            name="%runtimeInstanceTypeJonasLabel"
+            description="%runtimeInstanceTypeJonasDescription"
+            supportsRemoteHosts="false"
+            runtime="true"
+            startTimeout="120000"
+            stopTimeout="120000"
+            initialState="stopped"
+            startBeforePublish="false"
+            hasConfiguration="true"
+            launchConfigId="org.eclipse.libra.framework.jonas.launchConfigurationType"
+            runtimeTypeId="org.eclipse.libra.framework.jonas.runtimeType"           
+            class="org.eclipse.libra.framework.jonas.JonasFrameworkInstance"
+            behaviourClass="org.eclipse.libra.framework.jonas.internal.JonasFrameworkInstanceBehavior">
+      </serverType>
+   </extension>
+
+
+  <extension point="org.eclipse.wst.server.core.serverLocators">
+    <serverLocator
+       id="org.eclipse.libra.framework.jonas.server.locator"
+       supportsRemoteHosts="false"
+       typeIds="org.eclipse.libra.framework.jonas.serverType"
+       class="org.eclipse.libra.framework.core.OSGIFrameworkInstanceLocatorDelegate"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.launchableAdapters">
+     <launchableAdapter
+        class="org.eclipse.libra.framework.core.launching.LaunchableAdapterDelegate"
+        id="org.eclipse.libra.framework.jonas.osgi"/>
+  </extension>
+
+  <extension point="org.eclipse.debug.core.sourcePathComputers">
+     <sourcePathComputer
+        id="org.eclipse.libra.framework.jonas.sourcePathComputer"
+        class="org.eclipse.libra.framework.core.internal.debug.OSGIFrameworkSourcePathComputerDelegate"/>
+  </extension>
+
+  <extension point="org.eclipse.debug.core.launchConfigurationTypes">
+     <launchConfigurationType
+        id="org.eclipse.libra.framework.jonas.launchConfigurationType"
+        name="%jonasLaunchConfigurationType"
+        delegate="org.eclipse.libra.framework.core.launching.LaunchConfigurationDelegate"
+        modes="run, debug, profile"
+        sourceLocatorId="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"
+        sourcePathComputerId="org.eclipse.libra.framework.jonas.sourcePathComputer"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.publishTasks">
+     <publishTask
+        id="org.eclipse.libra.framework.jonas.publishTask"
+        typeIds="org.eclipse.libra.framework.jonas.serverType"
+        class="org.eclipse.libra.framework.core.publish.PublishTask"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.common.project.facet.core.runtimes">
+    <runtime-component-type
+       id="org.eclipse.libra.framework.jonas.runtimeType"/>
+
+    <runtime-component-version
+       type="org.eclipse.libra.framework.jonas.runtimeType"
+       version="6.0"/>
+ 
+    <adapter>
+      <runtime-component
+         id="org.eclipse.libra.framework.jonas.runtimeType"/>
+      <factory
+         class="org.eclipse.jst.server.core.internal.RuntimeClasspathProvider$Factory"/>
+      <type
+         class="org.eclipse.jst.common.project.facet.core.IClasspathProvider"/>
+    </adapter>
+  <supported>
+    <runtime-component id="org.eclipse.libra.framework.jonas.runtimeType"/>
+    <facet id="osgi.bundle" />
+  </supported>
+      
+  </extension>
+                    
+  <extension point="org.eclipse.wst.common.project.facet.core.defaultFacets">
+    <default-facets>
+    <runtime-component id="org.eclipse.libra.framework.jonas.runtimeType">
+         </runtime-component>
+         <facet
+               id="osgi.bundle" version="4.2">
+         </facet>
+    </default-facets>
+  </extension>
+  
+  <extension point="org.eclipse.jst.server.core.runtimeFacetMappings">
+    <runtimeFacetMapping
+      runtimeTypeId="org.eclipse.libra.framework.jonas.runtimeType"
+      runtime-component="org.eclipse.libra.framework.jonas.runtimeType"
+      version="6.0"/>
+  </extension>
+  <extension point="org.eclipse.wst.server.core.installableRuntimes">
+    <runtime
+      id="org.eclipse.libra.framework.jonas.runtimeType"
+      licenseUrl="http://www.gnu.org/licenses/lgpl-2.1.html"
+      archiveUrl="http://download.forge.objectweb.org/jonas/micro-jonas-5.3.0-M2-bin.zip"
+      archivePath="micro-jonas-5.3.0-M2"
+      os="win32"/>
+   <runtime
+      id="org.eclipse.libra.framework.jonas.runtimeType"
+      licenseUrl="http://www.gnu.org/licenses/lgpl-2.1.html"
+      archiveUrl="http://download.forge.objectweb.org/jonas/micro-jonas-5.3.0-M2-bin.tar.gz"
+      archivePath="micro-jonas-5.3.0-M2"
+      os="linux"/>
+   <runtime
+      id="org.eclipse.libra.framework.jonas.runtimeType"
+      licenseUrl="http://www.gnu.org/licenses/lgpl-2.1.html"
+      archiveUrl="http://download.forge.objectweb.org/jonas/micro-jonas-5.3.0-M2-bin.tar.gz"
+      archivePath="micro-jonas-5.3.0-M2"
+      os="macosx"/>     
+  </extension>
+  
+</plugin>
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.jonas/pom.xml b/plugins/org.eclipse.libra.framework.jonas/pom.xml
new file mode 100644
index 0000000..f6f00f2
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/pom.xml
@@ -0,0 +1,33 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<artifactId>org.eclipse.libra_parent</artifactId>
+		<groupId>org.eclipse.libra</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>../../development/org.eclipse.libra.releng/pom.xml</relativePath>
+	</parent>
+
+	<artifactId>org.eclipse.libra.framework.jonas</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<name>OSGi Frameworks JOnAS Adapter Plug-in</name>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-source-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>findbugs-maven-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-pmd-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/plugins/org.eclipse.libra.framework.jonas/src/jonasbase.zip b/plugins/org.eclipse.libra.framework.jonas/src/jonasbase.zip
new file mode 100644
index 0000000..1eb0604
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/src/jonasbase.zip
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/IJonasFramework.java b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/IJonasFramework.java
new file mode 100644
index 0000000..d61702b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/IJonasFramework.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.jonas;
+
+import org.eclipse.libra.framework.core.IOSGIFramework;
+
+
+public interface IJonasFramework extends IOSGIFramework {
+	
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/IJonasFrameworkInstance.java b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/IJonasFrameworkInstance.java
new file mode 100644
index 0000000..a739e42
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/IJonasFrameworkInstance.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.jonas;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.libra.framework.core.FrameworkInstanceConfiguration;
+import org.eclipse.libra.framework.core.IOSGIFrameworkInstance;
+
+
+
+public interface IJonasFrameworkInstance  extends IOSGIFrameworkInstance {
+
+	public FrameworkInstanceConfiguration getJonasConfiguration() throws CoreException;
+
+}
diff --git a/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/IJonasVersionHandler.java b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/IJonasVersionHandler.java
new file mode 100644
index 0000000..0f5bcff
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/IJonasVersionHandler.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.jonas;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.wst.server.core.IModule;
+
+public interface IJonasVersionHandler {
+
+	public abstract boolean supportsServeModulesWithoutPublish();
+
+	public abstract IStatus prepareDeployDirectory(IPath deployPath);
+
+	public abstract IStatus prepareFrameworkInstanceDirectory(IPath baseDir);
+
+	public abstract IStatus canAddModule(IModule module);
+
+	public abstract String[] getFrameworkVMArguments(IPath installPath, IPath configPath,
+			IPath deployPath, boolean isTestEnv);
+
+	public abstract String[] getExcludedFrameworkProgramArguments(boolean debug,
+			boolean starting);
+
+	public abstract String[] getFrameworkProgramArguments(IPath configPath,
+			boolean debug, boolean starting);
+
+	@SuppressWarnings("rawtypes")
+	public abstract List getFrameworkClasspath(IPath installPath, IPath configPath);
+
+	public abstract String getFrameworkClass();
+
+	public abstract IStatus verifyInstallPath(IPath location);
+
+	public abstract void prepareFrameworkConfigurationFile(IPath confDir,String workspaceBundles, String kernelBundles);
+
+	public abstract void createJonasBase(IPath location, String instanceDirectory);
+
+}
diff --git a/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/JonasFramework.java b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/JonasFramework.java
new file mode 100644
index 0000000..a8d7664
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/JonasFramework.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.jonas;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.libra.framework.core.FrameworkDelegate;
+import org.eclipse.libra.framework.core.IOSGIFrameworkWorkingCopy;
+import org.eclipse.wst.server.core.IRuntimeType;
+
+
+public class JonasFramework extends FrameworkDelegate implements
+		IOSGIFrameworkWorkingCopy, IJonasFramework {
+	public JonasFramework() {
+	}
+	
+
+	public IJonasVersionHandler getVersionHandler() {
+		IRuntimeType type = getRuntime().getRuntimeType();
+		return JonasPlugin.getJonasVersionHandler(type.getId());
+	}
+
+	@SuppressWarnings("rawtypes")
+	public List getFrameworkClasspath(IPath configPath) {
+		IPath installPath = getRuntime().getLocation();
+		// If installPath is relative, convert to canonical path and hope for
+		// the best
+		if (!installPath.isAbsolute()) {
+			try {
+				String installLoc = (new File(installPath.toOSString()))
+						.getCanonicalPath();
+				installPath = new Path(installLoc);
+			} catch (IOException e) {
+				// Ignore if there is a problem
+			}
+		}
+		return getVersionHandler().getFrameworkClasspath(installPath, configPath);
+	}
+
+	/**
+	 * Verifies the Felix installation directory. If it is correct, true is
+	 * returned. Otherwise, the user is notified and false is returned.
+	 * 
+	 * @return boolean
+	 */
+	public IStatus verifyLocation() {
+		return getVersionHandler()
+				.verifyInstallPath(getRuntime().getLocation());
+	}
+	
+
+	public IStatus validate() {
+		IStatus status = super.validate();
+		if (!status.isOK())
+			return status;
+	
+		status = verifyLocation();
+		if (!status.isOK())
+			return status;
+		// return new Status(IStatus.ERROR, FelixPlugin.PLUGIN_ID, 0,
+		// Messages.errorInstallDir, null);
+		// don't accept trailing space since that can cause startup problems
+		if (getRuntime().getLocation().hasTrailingSeparator())
+			return new Status(IStatus.ERROR, JonasPlugin.PLUGIN_ID, 0,
+					Messages.errorInstallDirTrailingSlash, null);
+		if (getVMInstall() == null)
+			return new Status(IStatus.ERROR, JonasPlugin.PLUGIN_ID, 0,
+					Messages.errorJRE, null);
+	
+	
+		File f = getRuntime().getLocation().append("conf").toFile();
+		File[] conf = f.listFiles();
+		if (conf != null) {
+			int size = conf.length;
+			for (int i = 0; i < size; i++) {
+				if (!f.canRead())
+					return new Status(IStatus.WARNING, JonasPlugin.PLUGIN_ID,
+							0, Messages.warningCantReadConfig, null);
+			}
+		}
+		
+		return Status.OK_STATUS;
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/JonasFrameworkInstance.java b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/JonasFrameworkInstance.java
new file mode 100644
index 0000000..2fd733e
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/JonasFrameworkInstance.java
@@ -0,0 +1,169 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.jonas;
+
+import java.io.File;
+
+import org.apache.tools.ant.DirectoryScanner;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.libra.framework.core.FrameworkInstanceConfiguration;
+import org.eclipse.libra.framework.core.FrameworkInstanceDelegate;
+import org.eclipse.libra.framework.core.OSGIFrameworkInstanceBehaviorDelegate;
+import org.eclipse.libra.framework.core.TargetDefinitionUtil;
+import org.eclipse.libra.framework.core.Trace;
+import org.eclipse.libra.framework.jonas.internal.JonasFrameworkInstanceBehavior;
+import org.eclipse.pde.internal.core.target.provisional.IBundleContainer;
+import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
+import org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IRuntime;
+
+@SuppressWarnings("restriction")
+public class JonasFrameworkInstance extends FrameworkInstanceDelegate implements
+		IJonasFrameworkInstance {
+
+	protected transient IJonasVersionHandler versionHandler;
+
+	@Override
+	public IStatus canModifyModules(IModule[] add, IModule[] remove) {
+		IStatus status = super.canModifyModules(add, remove);
+		if (!status.isOK())
+			return status;
+
+		if (getJonasVersionHandler() == null)
+			return new Status(IStatus.ERROR, JonasPlugin.PLUGIN_ID, 0,
+					Messages.errorNoRuntime, null);
+
+		if (add != null) {
+			int size = add.length;
+			for (int i = 0; i < size; i++) {
+				IModule module = add[i];
+				IStatus status2 = getJonasVersionHandler().canAddModule(module);
+				if (status2 != null && !status2.isOK())
+					return status2;
+			}
+		}
+		return Status.OK_STATUS;
+	}
+
+	@Override
+	public void setDefaults(IProgressMonitor monitor) {
+		super.setDefaults(monitor);
+		try {
+			getJonasConfiguration();
+		} catch (CoreException e) {
+			Trace.trace(Trace.SEVERE, "Can't setup for Felix configuration.", e);
+		}
+	}
+
+	@Override
+	public void importRuntimeConfiguration(IRuntime runtime,
+			IProgressMonitor monitor) throws CoreException {
+
+		super.importRuntimeConfiguration(runtime, monitor);
+		OSGIFrameworkInstanceBehaviorDelegate fsb = (OSGIFrameworkInstanceBehaviorDelegate) getServer()
+				.loadAdapter(JonasFrameworkInstanceBehavior.class, null);
+		if (fsb != null) {
+			IPath tempDir = fsb.getTempDirectory();
+			if (!tempDir.isAbsolute()) {
+				IPath rootPath = ResourcesPlugin.getWorkspace().getRoot()
+						.getLocation();
+				tempDir = rootPath.append(tempDir);
+			}
+			setInstanceDirectory(tempDir.toPortableString());
+		}
+
+		try {
+			getJonasConfiguration();
+		} catch (CoreException e) {
+			Trace.trace(Trace.SEVERE, "Can't setup for Felix configuration.", e);
+		}
+	}
+
+	public JonasFramework getJonasRuntime() {
+		if (getServer().getRuntime() == null)
+			return null;
+		return (JonasFramework) getServer().getRuntime().loadAdapter(
+				JonasFramework.class, null);
+	}
+
+	public IJonasVersionHandler getJonasVersionHandler() {
+		if (versionHandler == null) {
+			if (getServer().getRuntime() == null || getJonasRuntime() == null)
+				return null;
+
+			versionHandler = getJonasRuntime().getVersionHandler();
+		}
+		return versionHandler;
+	}
+
+	public FrameworkInstanceConfiguration getJonasConfiguration()
+			throws CoreException {
+
+		return getFrameworkInstanceConfiguration();
+
+	}
+
+	@SuppressWarnings("restriction")
+	private IBundleContainer[] getDefaultBundleContainers(IPath installPath) {
+		try {
+			DirectoryScanner scanner = new DirectoryScanner();
+			String baseDir = installPath.append("repositories/maven2-internal").toOSString();
+			scanner.setBasedir(baseDir);
+			scanner.setIncludes(new String[]{"**/*.jar"});
+			scanner.scan();
+			String[] bundles = scanner.getIncludedFiles();
+			ITargetPlatformService service = TargetDefinitionUtil.getTargetPlatformService();
+
+			if(bundles != null && bundles.length>0){
+				
+				IBundleContainer[] containers = new IBundleContainer[bundles.length];
+				int i=0;	
+				for(String b: bundles){
+					File bundle = new File(b);
+					IPath baseDirFile = new Path(baseDir);
+					
+					containers[i] = service.newDirectoryContainer(baseDirFile.append(bundle.getParent()).toOSString());
+					i++;
+				}
+				return containers;
+			}
+		} catch (Throwable t) {
+			// TODO Auto-generated catch block
+			t.printStackTrace();
+		}
+		return new IBundleContainer[0];
+	}
+
+	@Override
+	public ITargetDefinition createDefaultTarget() throws CoreException {
+		IPath installPath = getServer().getRuntime().getLocation();
+		ITargetPlatformService service = TargetDefinitionUtil.getTargetPlatformService();
+
+		ITargetDefinition targetDefinition = service.newTarget();
+		targetDefinition.setName(getServer().getName());
+		IBundleContainer[] containers = getDefaultBundleContainers(installPath);
+
+		targetDefinition.setBundleContainers(containers);
+		service.saveTargetDefinition(targetDefinition);
+
+		return targetDefinition;
+	}
+
+	
+
+}
diff --git a/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/JonasHandler.java b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/JonasHandler.java
new file mode 100644
index 0000000..abc6855
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/JonasHandler.java
@@ -0,0 +1,181 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.jonas;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.libra.framework.jonas.internal.util.ZipUtil;
+import org.eclipse.wst.server.core.IModule;
+
+public class JonasHandler implements IJonasVersionHandler {
+
+	public IStatus verifyInstallPath(IPath location) {
+
+		File f = location.append("conf/jonas.properties").toFile();
+		if (f == null || !f.exists())
+			return new Status(IStatus.ERROR, JonasPlugin.PLUGIN_ID, 0,
+					Messages.warningCantReadConfig, null);
+		File[] conf = f.listFiles();
+		if (conf != null) {
+			int size = conf.length;
+			for (int i = 0; i < size; i++) {
+				if (!f.canRead())
+					return new Status(IStatus.WARNING, JonasPlugin.PLUGIN_ID,
+							0, Messages.warningCantReadConfig, null);
+			}
+		}
+
+		return Status.OK_STATUS;
+	}
+
+	public String getFrameworkClass() {
+		return "org.ow2.jonas.commands.admin.ClientAdmin";
+	}
+
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public List getFrameworkClasspath(IPath installPath, IPath configPath) {
+
+		List cp = new ArrayList();
+
+		IPath binPath = installPath.append("/lib/bootstrap");
+		if (binPath.toFile().exists()) {
+			IPath path = binPath.append("/felix-launcher.jar");
+			cp.add(JavaRuntime.newArchiveRuntimeClasspathEntry(path));
+			IPath path2 = binPath.append("/jonas-commands.jar");
+			cp.add(JavaRuntime.newArchiveRuntimeClasspathEntry(path2));
+			IPath path3 = binPath.append("/jonas-version.jar");
+			cp.add(JavaRuntime.newArchiveRuntimeClasspathEntry(path3));
+		}
+
+		return cp;
+	}
+
+	public String[] getFrameworkProgramArguments(IPath configPath, boolean debug,
+			boolean starting) {
+		return new String[] { "-start" };
+	}
+
+	public String[] getExcludedFrameworkProgramArguments(boolean debug,
+			boolean starting) {
+		return null;
+	}
+
+	public String[] getFrameworkVMArguments(IPath installPath, IPath configPath,
+			IPath deployPath, boolean isTestEnv) {
+
+		String configPathStr = deployPath.makeAbsolute().toOSString();
+		String vmArgs = "-Dfelix.config.properties=file:" + configPathStr + "/config.properties"; //$NON-NLS-1$ //$NON-NLS-2$
+		String jonasRoot = installPath.toOSString();
+		String jonasBase = deployPath.append("/jonasbase").toOSString();
+		return new String[] {
+				"-Djonas.root=" + jonasRoot,
+				"-Djonas.base=" + jonasBase,
+				"-Dipojo.log.level=ERROR",
+				"-Djava.security.policy=" + jonasBase + "/conf/java.policy",
+				"-Djava.security.auth.login.config=" + jonasBase
+						+ "/conf/jaas.config",
+				"-Djava.endorsed.dirs=" + jonasRoot + "/lib/endorsed",
+				"-Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB",
+				"-Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton",
+				"-Dorg.omg.PortableInterceptor.ORBInitializerClass.standard_init=org.jacorb.orb.standardInterceptors.IORInterceptorInitializer",
+				"-Dcom.sun.CORBA.ORBDynamicStubFactoryFactoryClass=com.sun.corba.se.impl.presentation.rmi.StubFactoryFactoryStaticImpl",
+				"-Djavax.xml.soap.SOAPConnectionFactory=com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnectionFactory",
+				"-Djavax.xml.soap.SOAPFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPFactory1_1Impl",
+				"-Djavax.xml.soap.MetaFactory=com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl",
+				"-Djavax.xml.soap.MessageFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl",
+				"-Djonas.felix.tui.enabled=true", "-Djonas.cache.clean=true" };
+	}
+
+	public IStatus canAddModule(IModule module) {
+		String id = module.getModuleType().getId();
+		// String version = module.getModuleType().getVersion();
+		if ("osgi.bundle".equals(id))
+			return Status.OK_STATUS;
+
+		return new Status(IStatus.ERROR, JonasPlugin.PLUGIN_ID, 0,
+				Messages.errorNotBundle, null);
+	}
+
+	public IStatus prepareFrameworkInstanceDirectory(IPath baseDir) {
+		return Status.OK_STATUS;// TomcatVersionHelper.createCatalinaInstanceDirectory(baseDir);
+	}
+
+	public IStatus prepareDeployDirectory(IPath deployPath) {
+
+		// if (Trace.isTraceEnabled())
+		// Trace.trace(Trace.FINER, "Creating runtime directory at "
+		// + deployPath.toOSString());
+		//
+		// // Prepare a felix directory structure
+		// File temp = deployPath.append("plugins").toFile();
+		// if (!temp.exists())
+		// temp.mkdirs();
+		// temp = deployPath.append("auto").toFile();
+		// if (!temp.exists())
+		// temp.mkdirs();
+		// temp = deployPath.append("cache").toFile();
+		// if (!temp.exists())
+		// temp.mkdirs();
+
+		return Status.OK_STATUS;
+	}
+
+	public boolean supportsServeModulesWithoutPublish() {
+		return true;
+	}
+
+	public void prepareFrameworkConfigurationFile(IPath configPath,
+			String workspaceBundles, String kernelBundles) {
+		// Properties properties = new Properties();
+		//
+		// properties.setProperty("felix.auto.deploy.dir",
+		// configPath.append("auto").makeAbsolute().toPortableString());
+		// properties.setProperty("felix.auto.deploy.action", "install,start");
+		// properties.setProperty("org.osgi.framework.startlevel.beginning",
+		// "2");
+		// properties.setProperty("felix.auto.install.1", kernelBundles);
+		// properties.setProperty("felix.auto.start.1", kernelBundles);
+		// properties.setProperty("felix.auto.install.2", workspaceBundles);
+		// properties.setProperty("felix.auto.start.2", workspaceBundles);
+		// properties.setProperty("org.osgi.framework.storage", "file:"
+		// + configPath.append("auto").makeAbsolute().toPortableString());
+		// properties.setProperty("org.osgi.framework.storage.clean",
+		// "onFirstInit");
+		//
+		// try {
+		// properties.store(
+		// new FileOutputStream(configPath.append("config.properties")
+		// .makeAbsolute().toFile()), "## AUTO GENERATED ##");
+		// } catch (IOException e) {
+		// e.printStackTrace();
+		// }
+	}
+
+	final int BUFFER = 2048;
+
+	public void createJonasBase(IPath location, String instanceDirectory) {
+		try {
+			ZipUtil.unzip(
+					this.getClass().getResourceAsStream("/jonasbase.zip"),
+					new File(instanceDirectory));
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/JonasPlugin.java b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/JonasPlugin.java
new file mode 100644
index 0000000..c2526cc
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/JonasPlugin.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.jonas;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+
+public class JonasPlugin extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.libra.framework.jonas"; //$NON-NLS-1$
+
+	// The shared instance
+	private static JonasPlugin plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public JonasPlugin() {
+		super();
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static JonasPlugin getDefault() {
+		return plugin;
+	}
+	
+	
+
+	public static String getPreference(String id) {
+		return Platform.getPreferencesService().getString(PLUGIN_ID, id, "", null);
+	}
+	
+	public static void setPreference(String id, String value) {
+		(new DefaultScope()).getNode(PLUGIN_ID).put(id, value);
+	}
+	
+	public static IJonasVersionHandler getJonasVersionHandler(String id) {
+//		if (id.indexOf("runtime") > 0)
+//			id = id.substring(0, 30) + id.substring(38);
+//		if (true)//"abc".equals(id))
+			return new JonasHandler();
+	}
+
+
+}
diff --git a/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/Messages.java b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/Messages.java
new file mode 100644
index 0000000..f510066
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/Messages.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.jonas;
+
+import org.eclipse.osgi.util.NLS;
+/**
+ * Translated messages.
+ */
+public class Messages extends NLS {
+
+	public static String errorInstallDirTrailingSlash = null;
+	public static String errorJRE;
+	public static String warningCantReadConfig;
+	public static String warningCantReadBundle;
+	public static String errorNotBundle;
+	public static String errorOSGiBundlesOnly;
+	public static String errorNoRuntime;
+	
+	public static String publishServerTask;
+	public static String errorConfigurationProjectClosed;
+	public static String errorNoConfiguration;
+	public static String loadingTask;
+	public static String errorCouldNotLoadConfiguration;
+	public static String configurationEditorActionAddOsgiModule;
+
+	static {
+		NLS.initializeMessages(JonasPlugin.PLUGIN_ID + ".Messages", Messages.class);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/Messages.properties b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/Messages.properties
new file mode 100644
index 0000000..88dac69
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/Messages.properties
@@ -0,0 +1,20 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+
+# --------------- General UI ---------------
+
+errorInstallDirTrailingSlash = Installation folder must not end with a slash
+errorJRE= Selected JRE is not valid;
+warningCantReadConfig=Cannot locate the correct conf folder.  Invalid Installation folder
+warningCantReadBundle=Cannot locate the correct bundle folder.  Invalid Installation folder
+errorNotBundle=Must be an osgi bundle
+errorOSGiBundlesOnly=Must be an osgi bundle
+errorNoRuntime=There is no runtime
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/internal/JonasConfigurationPublishHelper.java b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/internal/JonasConfigurationPublishHelper.java
new file mode 100644
index 0000000..ced6f86
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/internal/JonasConfigurationPublishHelper.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.jonas.internal;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.libra.framework.core.OSGIFrameworkInstanceBehaviorDelegate;
+import org.eclipse.libra.framework.core.publish.PublishHelper;
+
+
+
+public class JonasConfigurationPublishHelper extends PublishHelper{
+	public OSGIFrameworkInstanceBehaviorDelegate behavior;
+
+	public JonasConfigurationPublishHelper(OSGIFrameworkInstanceBehaviorDelegate behavior) {
+		this.behavior = behavior;
+	}
+	
+	protected IPath getPublishFolder() {
+		IPath configPath = behavior.getBaseDirectory();
+		//configPath = configPath.append("plugins").makeAbsolute();
+		return configPath;
+	}
+
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/internal/JonasFrameworkClasspathProvider.java b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/internal/JonasFrameworkClasspathProvider.java
new file mode 100644
index 0000000..36b67af
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/internal/JonasFrameworkClasspathProvider.java
@@ -0,0 +1,44 @@
+package org.eclipse.libra.framework.jonas.internal;
+
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jst.server.core.RuntimeClasspathProviderDelegate;
+import org.eclipse.wst.server.core.IRuntime;
+
+public class JonasFrameworkClasspathProvider extends
+		RuntimeClasspathProviderDelegate {
+	/**
+	 * @see RuntimeClasspathProviderDelegate#resolveClasspathContainer(IProject,
+	 *      IRuntime)
+	 */
+	public IClasspathEntry[] resolveClasspathContainer(IProject project,
+			IRuntime runtime) {
+		IPath installPath = runtime.getLocation();
+
+		if (installPath == null)
+			return new IClasspathEntry[0];
+
+		List<IClasspathEntry> list = new ArrayList<IClasspathEntry>();
+		// String runtimeId = runtime.getRuntimeType().getId();
+		IPath path = installPath.append("osgi");
+		addLibraryEntries(list, path.toFile(), true);
+
+		return (IClasspathEntry[]) list
+				.toArray(new IClasspathEntry[list.size()]);
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/internal/JonasFrameworkInstanceBehavior.java b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/internal/JonasFrameworkInstanceBehavior.java
new file mode 100644
index 0000000..9d0d6c6
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/internal/JonasFrameworkInstanceBehavior.java
@@ -0,0 +1,171 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.jonas.internal;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.libra.framework.core.FrameworkInstanceConfiguration;
+import org.eclipse.libra.framework.core.OSGIFrameworkInstanceBehaviorDelegate;
+import org.eclipse.libra.framework.core.ProgressUtil;
+import org.eclipse.libra.framework.core.Trace;
+import org.eclipse.libra.framework.jonas.IJonasVersionHandler;
+import org.eclipse.libra.framework.jonas.JonasFrameworkInstance;
+import org.eclipse.libra.framework.jonas.Messages;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
+
+
+public class JonasFrameworkInstanceBehavior extends
+		OSGIFrameworkInstanceBehaviorDelegate {
+
+	protected transient JonasConfigurationPublishHelper publishHelper = new JonasConfigurationPublishHelper(
+			this);
+
+	/**
+	 * FelixRuntimeInstanceBehavior.
+	 */
+	public JonasFrameworkInstanceBehavior() {
+		super();
+	}
+	
+	public IJonasVersionHandler getJonasVersionHandler() {
+		return getJonasRuntimeInstance().getJonasVersionHandler();
+	}
+
+	public JonasFrameworkInstance getJonasRuntimeInstance() {
+		return (JonasFrameworkInstance) getServer().loadAdapter(JonasFrameworkInstance.class, null);
+	}
+
+	public String getFrameworkClass() {
+		return getJonasVersionHandler().getFrameworkClass();
+	}
+
+	public String[] getFrameworkProgramArguments(boolean starting) {
+		return getJonasVersionHandler().getFrameworkProgramArguments(
+				getBaseDirectory(), getFrameworkInstance().isDebug(), starting);
+	}
+
+	public String[] getExcludedFrameworkProgramArguments(boolean starting) {
+		return getJonasVersionHandler().getExcludedFrameworkProgramArguments(
+				getFrameworkInstance().isDebug(), starting);
+	}
+
+	public String[] getFrameworkVMArguments() {
+		IPath installPath = getServer().getRuntime().getLocation();
+		// If installPath is relative, convert to canonical path and hope for
+		// the best
+		if (!installPath.isAbsolute()) {
+			try {
+				String installLoc = (new File(installPath.toOSString()))
+						.getCanonicalPath();
+				installPath = new Path(installLoc);
+			} catch (IOException e) {
+				// Ignore if there is a problem
+			}
+		}
+
+		IPath deployPath = getBaseDirectory();
+		// If deployPath is relative, convert to canonical path and hope for the
+		// best
+		if (!deployPath.isAbsolute()) {
+			try {
+				String deployLoc = (new File(deployPath.toOSString()))
+						.getCanonicalPath();
+				deployPath = new Path(deployLoc);
+			} catch (IOException e) {
+				// Ignore if there is a problem
+			}
+		}
+
+		return getJonasVersionHandler().getFrameworkVMArguments(installPath, null, deployPath, false);
+	}
+	
+	protected void publishServer(int kind, IProgressMonitor monitor)
+			throws CoreException {
+		if (getServer().getRuntime() == null)
+			return;
+
+		IPath confDir = getBaseDirectory();
+		getJonasVersionHandler().createJonasBase(getServer().getRuntime().getLocation(), this.getJonasRuntimeInstance().getInstanceDirectory());
+		IStatus status = getJonasVersionHandler().prepareDeployDirectory(
+				confDir);
+
+		if (status != null && !status.isOK())
+			throw new CoreException(status);
+
+		monitor = ProgressUtil.getMonitorFor(monitor);
+		monitor.beginTask(Messages.publishServerTask, 600);
+
+		// TODO OSAMI 1) Cleanup 2) Backup and Publish,
+
+		// if (status != null && !status.isOK())
+		// throw new CoreException(status);
+
+		monitor.done();
+
+		setServerPublishState(IServer.PUBLISH_STATE_NONE);
+	}
+
+	@SuppressWarnings("rawtypes")
+	protected void publishModules(int kind, List modules, List deltaKind2,
+			MultiStatus multi, IProgressMonitor monitor) {
+
+
+		IPath confDir = getBaseDirectory();
+
+		FrameworkInstanceConfiguration jonasConfiguration;
+		
+		try {
+			jonasConfiguration = getJonasRuntimeInstance().getJonasConfiguration();
+			IPath deployDir=confDir.append("/jonasbase/tmp");
+			IPath installDir=confDir.append("/jonasbase/deploy");
+			File deployPath=deployDir.toFile();
+			if(!deployPath.exists()){
+				deployPath.mkdir();
+			}
+			
+			publishHelper.exportBundles(modules, jonasConfiguration, installDir, deployDir);
+			getJonasVersionHandler().prepareFrameworkConfigurationFile(deployDir,
+					publishHelper.getServerModules(modules,"reference:file:", " " ),
+					publishHelper.getTargetBundles(jonasConfiguration,"reference:file:", " "));
+
+		} catch (CoreException e) {
+			Trace.trace(Trace.SEVERE, "Publishing failed", e);
+		}
+	}
+
+	protected void publishModule(int kind, int deltaKind, IModule[] moduleTree,
+			IProgressMonitor monitor) throws CoreException {
+		if (getServer().getServerState() != IServer.STATE_STOPPED) {
+			if (deltaKind == ServerBehaviourDelegate.ADDED
+					|| deltaKind == ServerBehaviourDelegate.REMOVED)
+				setServerRestartState(true);
+		}
+
+		Properties p = loadModulePublishLocations();
+
+		// TODO OSAMI PUBLISH
+
+		setModulePublishState(moduleTree, IServer.PUBLISH_STATE_NONE);
+
+		saveModulePublishLocations(p);
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/internal/JonasFrameworkInstanceLocator.java b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/internal/JonasFrameworkInstanceLocator.java
new file mode 100644
index 0000000..ca6aced
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/internal/JonasFrameworkInstanceLocator.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.jonas.internal;
+
+import org.eclipse.libra.framework.core.OSGIFrameworkLocatorDelegate;
+
+public class JonasFrameworkInstanceLocator extends OSGIFrameworkLocatorDelegate {
+
+	protected static final String[] runtimeTypes = new String[] {
+	"org.eclipse.libra.framework.jonas"};
+	
+	public static String[] getRuntimeTypes() {
+			return runtimeTypes;
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/internal/util/ZipUtil.java b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/internal/util/ZipUtil.java
new file mode 100644
index 0000000..8a4e980
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/internal/util/ZipUtil.java
@@ -0,0 +1,75 @@
+package org.eclipse.libra.framework.jonas.internal.util;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.jar.JarInputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+public class ZipUtil {
+	public static void unzip(InputStream in, File dest) throws IOException
+	   {
+	      if (!dest.exists())
+	      {
+	         dest.mkdirs();
+	      }
+	      if (!dest.isDirectory())
+	      {
+	         throw new IOException("Destination must be a directory.");
+	      }
+	      ZipInputStream jin = new ZipInputStream(in);
+	      byte[] buffer = new byte[1024];
+	      
+	      ZipEntry entry = jin.getNextEntry();
+	      while (entry != null)
+	      {
+	         String fileName = entry.getName();
+	         if (fileName.charAt(fileName.length() - 1) == '/')
+	         {
+	            fileName = fileName.substring(0, fileName.length() - 1);
+	         }
+	         if (fileName.charAt(0) == '/')
+	         {
+	            fileName = fileName.substring(1);
+	         }
+	         if (File.separatorChar != '/')
+	         {
+	            fileName = fileName.replace('/', File.separatorChar);
+	         }
+	         File file = new File(dest, fileName);
+	         if (entry.isDirectory())
+	         {
+	            // make sure the directory exists
+	            file.mkdirs();
+	            jin.closeEntry();
+	         } 
+	         else
+	         {
+	            // make sure the directory exists
+	            File parent = file.getParentFile();
+	            if (parent != null && !parent.exists())
+	            {
+	               parent.mkdirs();
+	            }
+	            
+	            // dump the file
+	            OutputStream out = new FileOutputStream(file);
+	            int len = 0;
+	            while ((len = jin.read(buffer, 0, buffer.length)) != -1)
+	            {
+	               out.write(buffer, 0, len);
+	            }
+	            out.flush();
+	            out.close();
+	            jin.closeEntry();
+	            file.setLastModified(entry.getTime());
+	         }
+	         entry = jin.getNextEntry();
+	      }
+	      
+	      jin.close();
+	   }
+}
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/.classpath b/plugins/org.eclipse.libra.framework.knopflerfish.ui/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/.project b/plugins/org.eclipse.libra.framework.knopflerfish.ui/.project
new file mode 100644
index 0000000..42a0458
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.libra.framework.knopflerfish.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.libra.framework.knopflerfish.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..c8be432
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Fri Nov 10 17:11:35 HST 2006
+eclipse.preferences.version=1
+encoding/<project>=ISO-8859-1
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.libra.framework.knopflerfish.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..87e641f
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,74 @@
+#Sat Oct 16 21:03:45 EEST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=error
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.testsuite,*.deploy,*.location,*.execution,*.datapool,*.artifact,*.html,*.svg
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=disabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=error
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=error
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=error
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.incompatibleJDKLevel=warning
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.libra.framework.knopflerfish.ui/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..584bdff
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,4 @@
+#Fri Nov 10 18:06:11 HST 2006
+eclipse.preferences.version=1
+internal.default.compliance=user
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?>\n<templates/>
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.libra.framework.knopflerfish.ui/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..0e06e96
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,15 @@
+#Mon Jan 15 21:56:48 EST 2007
+compilers.incompatible-environment=0
+compilers.p.build=0
+compilers.p.deprecated=1
+compilers.p.missing-packages=2
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=0
+compilers.p.unknown-class=0
+compilers.p.unknown-element=1
+compilers.p.unknown-resource=0
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.use-project=true
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.libra.framework.knopflerfish.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..31eaade
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,28 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.libra.framework.knopflerfish.ui;singleton:=true
+Bundle-Version: 0.1.0.qualifier
+Bundle-Activator: org.eclipse.libra.framework.knopflerfish.ui.KnopflerfishUIPlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.core.expressions;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.forms;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.debug.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.jdt.debug.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.jdt.launching;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.wst.server.core;bundle-version="[1.0.204,2.0.0)",
+ org.eclipse.jst.server.core;bundle-version="[1.0.103,2.0.0)",
+ org.eclipse.wst.common.project.facet.ui;bundle-version="[1.1.0,2.0.0)",
+ org.eclipse.wst.server.ui,
+ org.eclipse.pde.core,
+ org.eclipse.pde.ui,
+ org.eclipse.libra.framework.core,
+ org.eclipse.libra.framework.ui,
+ org.eclipse.libra.framework.knopflerfish
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/about.html b/plugins/org.eclipse.libra.framework.knopflerfish.ui/about.html
new file mode 100644
index 0000000..8f31159
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>March 25, 2011</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/build.properties b/plugins/org.eclipse.libra.framework.knopflerfish.ui/build.properties
new file mode 100644
index 0000000..5016daa
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/build.properties
@@ -0,0 +1,22 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+bin.includes = plugin.xml,\
+               plugin.properties,\
+               icons/,\
+               .,\
+               META-INF/,\
+               about.html
+bin.excludes = bin/**,\
+               @dot/**,\
+               temp.folder/**
+source.. = src/
+
+
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/obj16/knopflerfish.gif b/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/obj16/knopflerfish.gif
new file mode 100644
index 0000000..9f09561
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/obj16/knopflerfish.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/obj16/mime_extension.gif b/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/obj16/mime_extension.gif
new file mode 100644
index 0000000..c585010
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/obj16/mime_extension.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/obj16/mime_mapping.gif b/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/obj16/mime_mapping.gif
new file mode 100644
index 0000000..0a8e4bf
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/obj16/mime_mapping.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/obj16/port.gif b/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/obj16/port.gif
new file mode 100644
index 0000000..7a354b7
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/obj16/port.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/obj16/project_missing.gif b/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/obj16/project_missing.gif
new file mode 100644
index 0000000..0cb4c16
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/obj16/project_missing.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/obj16/web_module.gif b/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/obj16/web_module.gif
new file mode 100644
index 0000000..bf20f70
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/obj16/web_module.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/wizban/knopflerfish_wiz.png b/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/wizban/knopflerfish_wiz.png
new file mode 100644
index 0000000..05d4925
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/icons/wizban/knopflerfish_wiz.png
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/plugin.properties b/plugins/org.eclipse.libra.framework.knopflerfish.ui/plugin.properties
new file mode 100644
index 0000000..2ec5726
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/plugin.properties
@@ -0,0 +1,21 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+pluginName=Knopflerfish UI Support
+providerName=Eteration A.S.
+
+configurationEditorOSGiModulesPage=Modules
+configurationEditorTargetPage=Target Platform Profile
+
+cleanKnopflerfishWorkDir=Clean Knopflerfish Work Directory...
+cleanKnopflerfishModuleWorkDir=Clean Module Work Directory...
+
+publisherContextFixLabel=Update context paths
+publisherContextFixDescription=Prompt to update module contexts when they are out of sync.
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/plugin.xml b/plugins/org.eclipse.libra.framework.knopflerfish.ui/plugin.xml
new file mode 100644
index 0000000..98db270
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/plugin.xml
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<!--
+      Copyright (c) 2010 Eteration A.S. and others.
+      All rights reserved. This program and the accompanying materials
+      are made available under the terms of the Eclipse Public License v1.0
+      which accompanies this distribution, and is available at
+      http://www.eclipse.org/legal/epl-v10.html
+     
+      Contributors:
+         Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ -->
+
+<plugin>
+   <extension point="org.eclipse.wst.server.ui.serverImages">
+      <image
+         id="org.eclipse.libra.framework.knopflerfish.31"
+         icon="icons/obj16/knopflerfish.gif"
+         typeIds="org.eclipse.libra.framework.knopflerfish.serverType.31"/>
+
+      <image
+         id="org.eclipse.libra.framework.knopflerfish.runtimeType.31"
+         icon="icons/obj16/knopflerfish.gif"
+         typeIds="org.eclipse.libra.framework.knopflerfish.runtimeType.31"/>
+
+   </extension>
+   
+   <extension point="org.eclipse.core.expressions.propertyTesters">
+      <propertyTester
+         id="org.eclipse.libra.framework.knopflerfish.ui.propertyTester"
+         namespace="org.eclipse.libra.framework.knopflerfish.ui"
+         properties="hasConfiguration"
+         type="java.lang.Object"
+         class="org.eclipse.libra.framework.knopflerfish.ui.internal.ConfigurationPropertyTester">
+      </propertyTester>
+   </extension>
+
+   <extension point="org.eclipse.wst.server.ui.editorPages">
+      <page
+         id="org.eclipse.libra.framework.knopflerfish.ui.editor.osgimodule"
+         order="20"
+         name="%configurationEditorOSGiModulesPage"
+         typeIds="org.eclipse.libra.framework.knopflerfish.serverType.*"
+         class="org.eclipse.libra.framework.ui.internal.editor.ConfigurationOSGiModuleEditorPart">
+         <enablement>
+           <test property="org.eclipse.libra.framework.knopflerfish.ui.hasConfiguration" value="true"/>
+         </enablement>
+      </page>
+   </extension>
+
+   <extension point="org.eclipse.wst.server.ui.editorPages">
+      <page
+         id="org.eclipse.libra.framework.knopflerfish.ui.editor.osgimodule"
+         order="22"
+         name="Target Platform Profile"
+         typeIds="org.eclipse.libra.framework.knopflerfish.serverType.*"
+         class="org.eclipse.libra.framework.ui.internal.editor.TargetDefinitionEditorPart">
+         <enablement>
+           <test property="org.eclipse.libra.framework.knopflerfish.ui.hasConfiguration" value="true"/>
+         </enablement>
+      </page>
+   </extension>
+
+   <extension point="org.eclipse.wst.server.ui.editorPageSections">
+      <section
+         id="org.eclipse.libra.framework.knopflerfish.editor.instance"
+         order="0"
+         insertionId="org.eclipse.wst.server.editor.overview.left"
+         typeIds="org.eclipse.libra.framework.knopflerfish.serverType.*"
+         class="org.eclipse.libra.framework.ui.internal.editor.FrameworkInstanceLocationEditorSection"/>
+
+   </extension>
+   
+   <extension point="org.eclipse.wst.server.ui.wizardFragments">
+      <fragment
+         id="org.eclipse.libra.framework.knopflerfish.31"
+         typeIds="org.eclipse.libra.framework.knopflerfish.runtimeType.31"
+         class="org.eclipse.libra.framework.ui.OSGIFrameworkWizardFragment"/>
+   </extension>
+
+  <extension point="org.eclipse.debug.ui.launchConfigurationTypeImages">
+    <launchConfigurationTypeImage
+      id="org.eclipse.libra.framework.knopflerfish.31.launchConfig.image"
+      configTypeID="org.eclipse.libra.framework.knopflerfish.launchConfigurationType"
+      icon="icons/obj16/knopflerfish.gif">
+    </launchConfigurationTypeImage>
+  </extension>
+
+  <extension point="org.eclipse.debug.ui.launchConfigurationTabGroups">
+    <launchConfigurationTabGroup
+      id="org.eclipse.libra.framework.knopflerfish.ui.launchConfigurationTabGroup"
+      type="org.eclipse.libra.framework.knopflerfish.launchConfigurationType"
+      class="org.eclipse.libra.framework.ui.GenericOSGILaunchConfigurationTabGroup">
+    </launchConfigurationTabGroup>
+  </extension>
+
+  <extension point="org.eclipse.wst.common.project.facet.ui.images">
+    <image runtime-component-type="org.eclipse.libra.framework.knopflerfish.runtimeType"
+      path="icons/obj16/knopflerfish.gif"/>
+  </extension>
+
+
+
+  <extension point="org.eclipse.ui.popupMenus">
+    <objectContribution
+      adaptable="true"
+      id="org.eclipse.libra.framework.knopflerfish.ui.serveractions"
+      objectClass="org.eclipse.wst.server.core.IServer">
+      <visibility>
+          <objectState name="serverType" value="org.eclipse.libra.framework.knopflerfish.serverType.*"/>
+      </visibility>
+      <action 
+        class="org.eclipse.libra.framework.ui.internal.actions.CleanWorkDirAction"
+        enablesFor="1"
+        id="org.eclipse.libra.framework.knopflerfish.ui.cleanserverworkdir"
+        label="%cleanTomcatWorkDir">
+      </action>
+    </objectContribution>
+    <objectContribution
+      adaptable="true"
+      id="org.eclipse.libra.framework.knopflerfish..ui.serveractions"
+      objectClass="org.eclipse.wst.server.ui.internal.view.servers.ModuleServer">
+      <visibility>
+        <and>
+          <objectState name="serverType" value="org.eclipse.libra.framework.knopflerfish.serverType.*"/>
+          <objectState name="moduleType" value="osgi.bundle"/>
+        </and>
+      </visibility>
+      <action
+        class="org.eclipse.libra.framework.ui.internal.actions.CleanWorkDirAction"
+        enablesFor="1"
+        id="org.eclipse.libra.framework.knopflerfish.ui.cleanmoduleworkdir"
+        label="%cleanKnopflerfishModuleWorkDir">
+      </action>
+    </objectContribution>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.publishers">
+     <publisher
+        id="org.eclipse.libra.framework.knopflerfish.ui.context"
+        typeIds="org.eclipse.libra.framework.knopflerfish.serverType.*"
+        name="%publisherContextFixLabel"
+        description="%publisherContextFixDescription"
+        order=""
+        class="org.eclipse.libra.framework.ui.internal.ModulePublisherDelegate"/>
+  </extension>
+</plugin>
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/pom.xml b/plugins/org.eclipse.libra.framework.knopflerfish.ui/pom.xml
new file mode 100644
index 0000000..cf843e3
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/pom.xml
@@ -0,0 +1,33 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<artifactId>org.eclipse.libra_parent</artifactId>
+		<groupId>org.eclipse.libra</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>../../development/org.eclipse.libra.releng/pom.xml</relativePath>
+	</parent>
+
+	<artifactId>org.eclipse.libra.framework.knopflerfish.ui</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<name>OSGi Frameworks Knopflerfish Adapter UI Plug-in</name>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-source-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>findbugs-maven-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-pmd-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/src/org/eclipse/libra/framework/knopflerfish/ui/KnopflerfishUIPlugin.java b/plugins/org.eclipse.libra.framework.knopflerfish.ui/src/org/eclipse/libra/framework/knopflerfish/ui/KnopflerfishUIPlugin.java
new file mode 100644
index 0000000..56b184a
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/src/org/eclipse/libra/framework/knopflerfish/ui/KnopflerfishUIPlugin.java
@@ -0,0 +1,59 @@
+package org.eclipse.libra.framework.knopflerfish.ui;
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+
+public class KnopflerfishUIPlugin extends AbstractUIPlugin {
+	protected static KnopflerfishUIPlugin singleton;
+	public static final String PLUGIN_ID = "org.eclipse.libra.framework.knopflerfish.ui";
+
+
+
+
+	public KnopflerfishUIPlugin() {
+		super();
+		singleton = this;
+	}
+
+
+	public static KnopflerfishUIPlugin getInstance() {
+		return singleton;
+	}
+
+	/**
+	 * Convenience method for logging.
+	 *
+	 * @param status org.eclipse.core.runtime.IStatus
+	 */
+	public static void log(IStatus status) {
+		getInstance().getLog().log(status);
+	}
+
+	/**
+	 * Convenience method to get a Display. The method first checks, if
+	 * the thread calling this method has an associated display. If so, this
+	 * display is returned. Otherwise the method returns the default display.
+	 * 
+	 * @return the display
+	 */
+	public static Display getStandardDisplay() {
+		Display display = Display.getCurrent();
+		if (display == null)
+			display = Display.getDefault();
+		return display;		
+	}	
+	
+}
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish.ui/src/org/eclipse/libra/framework/knopflerfish/ui/internal/ConfigurationPropertyTester.java b/plugins/org.eclipse.libra.framework.knopflerfish.ui/src/org/eclipse/libra/framework/knopflerfish/ui/internal/ConfigurationPropertyTester.java
new file mode 100644
index 0000000..2ead64a
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish.ui/src/org/eclipse/libra/framework/knopflerfish/ui/internal/ConfigurationPropertyTester.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.knopflerfish.ui.internal;
+
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.libra.framework.core.FrameworkInstanceDelegate;
+import org.eclipse.libra.framework.knopflerfish.IKnopflerfishFramework;
+import org.eclipse.wst.server.core.IServerAttributes;
+
+/**
+ * 
+ */
+public class ConfigurationPropertyTester extends PropertyTester {
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
+	 */
+	public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+		try {
+			IServerAttributes server = (IServerAttributes) receiver;
+			FrameworkInstanceDelegate knopflerfish = (FrameworkInstanceDelegate) server.loadAdapter(IKnopflerfishFramework.class, null);
+			if (knopflerfish != null)
+				return knopflerfish != null;
+		} catch (Exception e) {
+			// ignore
+		}
+		return false;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/.classpath b/plugins/org.eclipse.libra.framework.knopflerfish/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/.project b/plugins/org.eclipse.libra.framework.knopflerfish/.project
new file mode 100644
index 0000000..e875150
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.libra.framework.knopflerfish</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.libra.framework.knopflerfish/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..64203b9
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Fri Oct 22 10:43:27 EEST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/META-INF/MANIFEST.MF b/plugins/org.eclipse.libra.framework.knopflerfish/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c306b5b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/META-INF/MANIFEST.MF
@@ -0,0 +1,31 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.libra.framework.knopflerfish;singleton:=true
+Bundle-Version: 0.1.0.qualifier
+Bundle-Activator: org.eclipse.libra.framework.knopflerfish.KnopflerfishPlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.jdt.launching,
+ org.eclipse.debug.core,
+ org.eclipse.pde.ui,
+ org.eclipse.pde,
+ org.eclipse.wst.server.core,
+ org.eclipse.wst.server.ui,
+ org.eclipse.jst.server.core,
+ org.eclipse.jdt.core,
+ org.eclipse.jst.common.project.facet.core,
+ org.eclipse.wst.common.modulecore,
+ org.eclipse.equinox.frameworkadmin,
+ org.eclipse.libra.framework.core
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ActivationPolicy: lazy
+Import-Package: org.eclipse.core.resources,
+ org.eclipse.debug.core,
+ org.eclipse.jdt.launching.sourcelookup,
+ org.eclipse.pde.core.plugin,
+ org.eclipse.pde.ui.launcher
+Export-Package: org.eclipse.libra.framework.knopflerfish,
+ org.eclipse.libra.framework.knopflerfish.internal
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/about.html b/plugins/org.eclipse.libra.framework.knopflerfish/about.html
new file mode 100644
index 0000000..7d9511d
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>September 21, 2011</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/build.properties b/plugins/org.eclipse.libra.framework.knopflerfish/build.properties
new file mode 100644
index 0000000..81e3c06
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/build.properties
@@ -0,0 +1,16 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/plugin.properties b/plugins/org.eclipse.libra.framework.knopflerfish/plugin.properties
new file mode 100644
index 0000000..577d04f
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/plugin.properties
@@ -0,0 +1,25 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+pluginName=Knopflerfish Support
+providerName=Eteration A.S.
+
+# --------------- Runtime Types ---------------
+libra=Eclipse Libra
+runtimeTypeKnopflerfish31Label=Knopflerfish 3.1- OSGi Service Platform
+runtimeTypeknopflerfish31Description=Knopflerfish 3.1- OSGi Service Platform supports OSGi R4.2
+
+
+# --------------- Runtime Instance ---------------
+runtimeInstanceTypeKnopflerfish31Label=Knopflerfish 3.1 Runtime Instance
+runtimeInstanceTypeKnopflerfish31Description=Publishes and runs osgi bundle projects on local knopflerfish platform.
+
+knopflerfishLaunchConfigurationType=Knopflerfish
+
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/plugin.xml b/plugins/org.eclipse.libra.framework.knopflerfish/plugin.xml
new file mode 100644
index 0000000..a14584c
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/plugin.xml
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?><!--
+      Copyright (c) 2010 Eteration A.S. and others.
+      All rights reserved. This program and the accompanying materials
+      are made available under the terms of the Eclipse Public License v1.0
+      which accompanies this distribution, and is available at
+      http://www.eclipse.org/legal/epl-v10.html
+     
+      Contributors:
+         Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ -->
+
+<plugin>
+
+   
+   <extension
+         point="org.eclipse.wst.server.core.runtimeTypes">
+      <runtimeType
+            id="org.eclipse.libra.framework.knopflerfish.runtimeType.31"
+            name="%runtimeTypeKnopflerfish31Label"
+            description="%runtimeTypeknopflerfish31Description"
+            vendor="%libra"
+            version="2.0"
+            class="org.eclipse.libra.framework.knopflerfish.KnopflerfishFramework">
+
+		    <moduleType
+		         types="osgi.bundle"
+		         versions="4.2"/>     
+		    <moduleType
+		         types="java"
+		         versions="1.6"/>  
+		    <moduleType
+		         types="java"
+		         versions="1.5"/>     
+      </runtimeType>
+   </extension>
+
+
+  <extension point="org.eclipse.wst.server.core.runtimeLocators">
+    <runtimeLocator
+       id="org.eclipse.libra.framework.knopflerfish.runtime.locator"
+       typeIds="org.eclipse.libra.framework.knopflerfish.runtimeType.*"
+       class="org.eclipse.libra.framework.core.OSGIFrameworkLocatorDelegate"/>
+  </extension>
+
+  <extension point="org.eclipse.jst.server.core.runtimeClasspathProviders">
+     <runtimeClasspathProvider
+        id="org.eclipse.libra.framework.knopflerfish.runtimeTarget"
+        runtimeTypeIds="org.eclipse.libra.framework.knopflerfish.runtimeType.*"
+        class="org.eclipse.libra.framework.knopflerfish.internal.KnopflerfishFrameworkClasspathProvider"/>
+   </extension>
+   
+   
+   <extension
+         point="org.eclipse.wst.server.core.serverTypes">
+      <serverType
+            id="org.eclipse.libra.framework.knopflerfish.serverType.31"
+            name="%runtimeInstanceTypeKnopflerfish31Label"
+            description="%runtimeInstanceTypeKnopflerfish31Description"
+            supportsRemoteHosts="false"
+            runtime="true"
+            startTimeout="120000"
+            stopTimeout="120000"
+            initialState="stopped"
+            startBeforePublish="false"
+            synchronousStart="true"
+            hasConfiguration="true"
+            launchConfigId="org.eclipse.libra.framework.knopflerfish.launchConfigurationType"
+            runtimeTypeId="org.eclipse.libra.framework.knopflerfish.runtimeType.31"           
+            class="org.eclipse.libra.framework.knopflerfish.KnopflerfishFrameworkInstance"
+            behaviourClass="org.eclipse.libra.framework.knopflerfish.internal.KnopflerfishFrameworkInstanceBehavior">
+      </serverType>
+   </extension>
+
+
+  <extension point="org.eclipse.wst.server.core.serverLocators">
+    <serverLocator
+       id="org.eclipse.libra.framework.knopflerfish.server.locator"
+       supportsRemoteHosts="false"
+       typeIds="org.eclipse.libra.framework.knopflerfish.serverType.*"
+       class="org.eclipse.libra.framework.core.OSGIFrameworkInstanceLocatorDelegate"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.launchableAdapters">
+     <launchableAdapter
+        class="org.eclipse.libra.framework.core.launching.LaunchableAdapterDelegate"
+        id="org.eclipse.libra.framework.knopflerfish.osgi"/>
+  </extension>
+
+  <extension point="org.eclipse.debug.core.sourcePathComputers">
+     <sourcePathComputer
+        id="org.eclipse.libra.framework.knopflerfish.sourcePathComputer"
+        class="org.eclipse.libra.framework.core.internal.debug.OSGIRuntimeSourcePathComputerDelegate"/>
+  </extension>
+
+  <extension point="org.eclipse.debug.core.launchConfigurationTypes">
+     <launchConfigurationType
+        id="org.eclipse.libra.framework.knopflerfish.launchConfigurationType"
+        name="%knopflerfishLaunchConfigurationType"
+        delegate="org.eclipse.libra.framework.core.launching.LaunchConfigurationDelegate"
+        modes="run, debug, profile"
+        sourceLocatorId="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"
+        sourcePathComputerId="org.eclipse.libra.framework.knopflerfish.sourcePathComputer"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.publishTasks">
+     <publishTask
+        id="org.eclipse.libra.framework.knopflerfish.publishTask"
+        typeIds="org.eclipse.libra.framework.knopflerfish.serverType.*"
+        class="org.eclipse.libra.framework.core.publish.PublishTask"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.common.project.facet.core.runtimes">
+    <runtime-component-type
+       id="org.eclipse.libra.framework.knopflerfish.runtimeType"/>
+
+    <runtime-component-version
+       type="org.eclipse.libra.framework.knopflerfish.runtimeType"
+       version="3.1"/>
+
+    <adapter>
+      <runtime-component
+         id="org.eclipse.libra.framework.knopflerfish.runtimeType"/>
+      <factory
+         class="org.eclipse.jst.server.core.internal.RuntimeClasspathProvider$Factory"/>
+      <type
+         class="org.eclipse.jst.common.project.facet.core.IClasspathProvider"/>
+    </adapter>
+
+  <supported>
+    <runtime-component id="org.eclipse.libra.framework.knopflerfish.runtimeType"/>
+    <facet id="osgi.bundle" />
+  </supported>
+
+  </extension>
+  
+  <extension point="org.eclipse.wst.common.project.facet.core.defaultFacets">
+    <default-facets>
+    <runtime-component id="org.eclipse.libra.framework.knopflerfish.runtimeType">
+         </runtime-component>
+         <facet
+               id="osgi.bundle" version="4.2">
+         </facet>
+    </default-facets>
+  </extension>
+  
+  <extension point="org.eclipse.jst.server.core.runtimeFacetMappings">
+    <runtimeFacetMapping
+      runtimeTypeId="org.eclipse.libra.framework.knopflerfish.runtimeType.31"
+      runtime-component="org.eclipse.libra.framework.knopflerfish.runtimeType"
+      version="3.1"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.installableRuntimes">
+    <runtime
+      id="org.eclipse.libra.framework.knopflerfish.runtimeType.31"
+      licenseUrl="http://www.knopflerfish.org/license.html"
+      archiveUrl="http://www.knopflerfish.org/releases/3.1.0/knopflerfish_osgi_sdk_3.1.0.jar"
+      archivePath="knopflerfish_osgi_sdk_3.1.0"
+      os="win32"/>
+   <runtime
+      id="org.eclipse.libra.framework.knopflerfish.runtimeType.31"
+      licenseUrl="http://www.knopflerfish.org/license.html"
+      archiveUrl="http://www.knopflerfish.org/releases/3.1.0/knopflerfish_osgi_sdk_3.1.0.jar"
+      archivePath="knopflerfish_osgi_sdk_3.1.0"
+      os="linux"/>
+   <runtime
+      id="org.eclipse.libra.framework.knopflerfish.runtimeType.31"
+      licenseUrl="http://www.knopflerfish.org/license.html"
+      archiveUrl="http://www.knopflerfish.org/releases/3.1.0/knopflerfish_osgi_sdk_3.1.0.jar"
+      archivePath="knopflerfish_osgi_sdk_3.1.0"
+      os="macosx"/>      
+  </extension>
+
+
+</plugin>
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/pom.xml b/plugins/org.eclipse.libra.framework.knopflerfish/pom.xml
new file mode 100644
index 0000000..23ab9be
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/pom.xml
@@ -0,0 +1,33 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<artifactId>org.eclipse.libra_parent</artifactId>
+		<groupId>org.eclipse.libra</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>../../development/org.eclipse.libra.releng/pom.xml</relativePath>
+	</parent>
+
+	<artifactId>org.eclipse.libra.framework.knopflerfish</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<name>OSGi Frameworks Knopflerfish Adapter Plug-in</name>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-source-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>findbugs-maven-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-pmd-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/IKnopflerfishFramework.java b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/IKnopflerfishFramework.java
new file mode 100644
index 0000000..3f529b2
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/IKnopflerfishFramework.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.knopflerfish;
+
+import org.eclipse.libra.framework.core.IOSGIFramework;
+
+
+public interface IKnopflerfishFramework extends IOSGIFramework {
+	
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/IKnopflerfishFrameworkInstance.java b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/IKnopflerfishFrameworkInstance.java
new file mode 100644
index 0000000..b7d3b32
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/IKnopflerfishFrameworkInstance.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.knopflerfish;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.libra.framework.core.FrameworkInstanceConfiguration;
+import org.eclipse.libra.framework.core.IOSGIFrameworkInstance;
+
+
+
+public interface IKnopflerfishFrameworkInstance  extends IOSGIFrameworkInstance {
+
+	public FrameworkInstanceConfiguration getKnopflerfishConfiguration() throws CoreException;
+
+}
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/IKnopflerfishVersionHandler.java b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/IKnopflerfishVersionHandler.java
new file mode 100644
index 0000000..c2a390d
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/IKnopflerfishVersionHandler.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.knopflerfish;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.libra.framework.core.FrameworkInstanceConfiguration;
+import org.eclipse.libra.framework.knopflerfish.internal.KnopflerfishConfigurationPublishHelper;
+import org.eclipse.wst.server.core.IModule;
+
+
+public interface IKnopflerfishVersionHandler {
+
+	public abstract boolean supportsServeModulesWithoutPublish();
+
+	public abstract IStatus prepareDeployDirectory(IPath deployPath);
+
+	public abstract IStatus prepareFrameworkInstanceDirectory(IPath baseDir);
+
+	public abstract IStatus canAddModule(IModule module);
+
+	public abstract String[] getFrameworkVMArguments(IPath installPath, IPath configPath,
+			IPath deployPath, boolean isTestEnv);
+
+	public abstract String[] getExcludedFrameworkProgramArguments(boolean debug,
+			boolean starting);
+
+	public abstract String[] getFrameworkProgramArguments(IPath configPath,
+			boolean debug, boolean starting);
+
+	@SuppressWarnings("rawtypes")
+	public abstract List getFrameworkClasspath(IPath installPath, IPath configPath);
+
+	public abstract String getFrameworkClass();
+
+	public abstract IStatus verifyInstallPath(IPath location);
+
+	public abstract void prepareFrameworkConfigurationFile(IPath installPath, IPath confDir, KnopflerfishConfigurationPublishHelper publishHelper, FrameworkInstanceConfiguration configuration);
+
+
+}
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/Knopflerfish31Handler.java b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/Knopflerfish31Handler.java
new file mode 100644
index 0000000..3be7c7f
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/Knopflerfish31Handler.java
@@ -0,0 +1,268 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.knopflerfish;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.libra.framework.core.FrameworkInstanceConfiguration;
+import org.eclipse.libra.framework.core.Trace;
+import org.eclipse.libra.framework.knopflerfish.internal.KnopflerfishConfigurationPublishHelper;
+import org.eclipse.wst.server.core.IModule;
+
+
+public class Knopflerfish31Handler implements IKnopflerfishVersionHandler {
+
+	public IStatus verifyInstallPath(IPath location) {
+
+		File f = location.append("osgi").toFile();
+		if (f == null || !f.exists())
+			return new Status(IStatus.ERROR, KnopflerfishPlugin.PLUGIN_ID, 0,
+					Messages.warningCantReadConfig, null);
+		File[] conf = f.listFiles();
+		if (conf != null) {
+			int size = conf.length;
+			for (int i = 0; i < size; i++) {
+				if (!f.canRead())
+					return new Status(IStatus.WARNING,
+							KnopflerfishPlugin.PLUGIN_ID, 0,
+							Messages.warningCantReadConfig, null);
+			}
+		}
+
+		File f2 = location.append("osgi").append("framework.jar").toFile();
+		if (f2 == null || !f2.exists())
+			return new Status(
+					IStatus.ERROR,
+					KnopflerfishPlugin.PLUGIN_ID,
+					0,
+					"Cannot locate framework.jar.  Invalid installation folder",
+					null);
+
+		return Status.OK_STATUS;
+	}
+
+	public String getFrameworkClass() {
+		return "org.knopflerfish.framework.Main";
+	}
+
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public List getFrameworkClasspath(IPath installPath, IPath configPath) {
+
+		List cp = new ArrayList();
+
+		IPath binPath = installPath.append("osgi");
+		if (binPath.toFile().exists()) {
+			IPath path = binPath.append("framework.jar");
+			cp.add(JavaRuntime.newArchiveRuntimeClasspathEntry(path));
+		}
+
+		return cp;
+	}
+
+	public String[] getFrameworkProgramArguments(IPath configPath, boolean debug,
+			boolean starting) {
+		return new String[] {
+				"-init",
+				"-xargs",
+				"file:"
+						+ configPath.append("osami.xargs").makeAbsolute()
+								.toOSString() };
+	}
+
+	public String[] getExcludedFrameworkProgramArguments(boolean debug,
+			boolean starting) {
+		return null;
+	}
+
+	public String[] getFrameworkVMArguments(IPath installPath, IPath configPath,
+			IPath deployPath, boolean isTestEnv) {
+
+		return new String[] {};
+	}
+
+	public IStatus canAddModule(IModule module) {
+		String id = module.getModuleType().getId();
+		// String version = module.getModuleType().getVersion();
+		if ("osami.bundle".equals(id))
+			return Status.OK_STATUS;
+
+		return new Status(IStatus.ERROR, KnopflerfishPlugin.PLUGIN_ID, 0,
+				Messages.errorNotBundle, null);
+	}
+
+	public IStatus prepareFrameworkInstanceDirectory(IPath baseDir) {
+		return Status.OK_STATUS;// TomcatVersionHelper.createCatalinaInstanceDirectory(baseDir);
+	}
+
+	public IStatus prepareDeployDirectory(IPath deployPath) {
+
+		if (Trace.isTraceEnabled())
+			Trace.trace(Trace.FINER, "Creating runtime directory at "
+					+ deployPath.toOSString());
+
+		// Prepare a felix directory structure
+		File temp = deployPath.append("plugins").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+
+		return Status.OK_STATUS;
+	}
+
+	public boolean supportsServeModulesWithoutPublish() {
+		return true;
+	}
+
+	private void writeXargs(IPath installPath, IPath confPath, PrintWriter out,
+			KnopflerfishConfigurationPublishHelper publishHelper,
+			FrameworkInstanceConfiguration configuration) {
+
+		out.println("#");
+		out.println("# Generated by OSAMI Tools");
+		out.println("# for Knopflerfish release 3.1.0");
+		out.println("# Copyright 2010 eteration a.s.");
+
+		out.println("# load common properties");
+		out.println("-xargs file:"
+				+ confPath.append("props.xargs").toOSString());
+
+		out.println("# Semicolon seprated list of base URLs for searching (completing)");
+		out.println("# bundle URLs in '-install URL' command line options and in the console.");
+		out.println("-Dorg.knopflerfish.gosg.jars=file:"
+				+ installPath.append("osgi").append("jars").toOSString());
+
+		out.println("-init");
+
+
+//		out.println("-istart  file:"+ installPath.append("osgi").append("jars").append("cm/cm_all-3.0.1.jar"));
+//		out.println("-istart  file:"+ installPath.append("osgi").append("jars").append("console/console_all-3.0.1.jar"));
+//		out.println("-istart  file:"+ installPath.append("osgi").append("jars").append("log/log_all-3.0.5.jar"));
+//		out.println("-istart  file:"+ installPath.append("osgi").append("jars").append("event/event_all-3.0.4.jar"));
+//		out.println("-istart  file:"+ installPath.append("osgi").append("jars").append("consoletty/consoletty-3.0.1.jar"));
+//		out.println("-istart  file:"+ installPath.append("osgi").append("jars").append("frameworkcommands/frameworkcommands-3.0.3.jar"));
+//		out.println("-istart  file:"+ installPath.append("osgi").append("jars").append("logcommands/logcommands-3.0.1.jar"));
+//		out.println("-istart  file:"+ installPath.append("osgi").append("jars").append("useradmin/useradmin_api-3.0.1.jar"));
+		
+
+		out.println("## Basic KF bundles");
+		out.println("-initlevel 3");
+		String kb[] = publishHelper.getTargetBundlePaths(configuration);
+		for (String kernelBundle : kb) {
+			out.println("-install file:" + kernelBundle);
+		}
+		for (String kernelBundle : kb) {
+			out.println("-start file:" + kernelBundle);
+		}
+		out.println("-startlevel 3");
+		
+//		out.println("## Workspace bundles");
+//		String wb[] = publishHelper.getWorkspaceBundlePaths(configuration);
+//		out.println("-initlevel 4");
+//		for (String workspaceBundle : wb) {
+//			out.println("-install file:" + workspaceBundle);
+//		}
+//		for (String workspaceBundle : wb) {
+//			out.println("-start file:" + workspaceBundle);
+//		}
+//
+//		out.println("-startlevel 4");
+		
+//		wb = publishHelper.getWorkspaceBundlePaths(configuration);
+//		for (String workspaceBundle : wb) {
+//			out.println("-start "+ workspaceBundle);
+//		}
+		
+
+		out.println("-launch");
+		out.println("");
+		out.flush();
+	}
+
+	private void writePropsXargs(PrintWriter out,
+			KnopflerfishConfigurationPublishHelper publishHelper,
+			FrameworkInstanceConfiguration configuration) {
+
+		out.println("#");
+		out.println("# Generated by OSAMI Tools");
+		out.println("# for Knopflerfish release 3.1.0");
+		out.println("# Copyright 2010 eteration a.s.");
+
+		out.println("# Common properties used by different init.xargs files");
+		out.println("-Forg.osgi.provisioning.spid=knopflerfish");
+		out.println("-Forg.knopflerfish.framework.debug.errors=true");
+		out.println("-Forg.knopflerfish.framework.bundlestorage.file.reference=true");
+		out.println("-Forg.knopflerfish.startlevel.use=true");
+
+		out.println("# Web server properties");
+		out.println("-Forg.knopflerfish.http.dnslookup=false");
+		out.println("-Forg.osgi.service.http.port=8080");
+
+		out.println("# Web server properties");
+		out.println("-Forg.knopflerfish.http.dnslookup=false");
+		out.println("-Forg.osgi.service.http.port=8080");
+
+		out.println("# Log service properties");
+		out.println("-Forg.knopflerfish.log.out=false");
+		out.println("-Forg.knopflerfish.log.level=info");
+		out.println("-Forg.knopflerfish.log.grabio=true");
+		out.println("-Forg.knopflerfish.log.file=true");
+		out.println("-Forg.knopflerfish.log.memory.size=250");
+
+		out.println("#consoletelnet properties");
+		out.println("-Forg.knopflerfish.consoletelnet.user=admin");
+		out.println("-Forg.knopflerfish.consoletelnet.pwd=admin");
+		out.println("-Forg.knopflerfish.consoletelnet.port=2323");
+		out.flush();
+
+	}
+
+	public void prepareFrameworkConfigurationFile(IPath installPath,
+			IPath confDir,
+			KnopflerfishConfigurationPublishHelper publishHelper,
+			FrameworkInstanceConfiguration configuration) {
+
+		OutputStream out = null;
+		try {
+			out = new FileOutputStream(confDir.append("osami.xargs")
+					.makeAbsolute().toFile());
+
+			PrintWriter pw = new PrintWriter(out);
+			writeXargs(installPath, confDir, pw, publishHelper, configuration);
+			out.flush();
+			out.close();
+
+			out = new FileOutputStream(confDir.append("props.xargs")
+					.makeAbsolute().toFile());
+			pw = new PrintWriter(out);
+			writePropsXargs(pw, publishHelper, configuration);
+			out.close();
+			out = null;
+
+		} catch (IOException e) {
+			e.printStackTrace();
+		} finally {
+			if (out != null)
+				try {
+					out.close();
+				} catch (IOException e) {
+				}
+		}
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/KnopflerfishFramework.java b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/KnopflerfishFramework.java
new file mode 100644
index 0000000..99ad5e0
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/KnopflerfishFramework.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.knopflerfish;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.libra.framework.core.FrameworkDelegate;
+import org.eclipse.libra.framework.core.IOSGIFrameworkWorkingCopy;
+import org.eclipse.wst.server.core.IRuntimeType;
+
+
+public class KnopflerfishFramework extends FrameworkDelegate implements
+		IOSGIFrameworkWorkingCopy, IKnopflerfishFramework {
+	public KnopflerfishFramework() {
+	}
+	
+
+	public IKnopflerfishVersionHandler getVersionHandler() {
+		IRuntimeType type = getRuntime().getRuntimeType();
+		return KnopflerfishPlugin.getFelixVersionHandler(type.getId());
+	}
+
+	@SuppressWarnings("rawtypes")
+	public List getFrameworkClasspath(IPath configPath) {
+		IPath installPath = getRuntime().getLocation();
+		// If installPath is relative, convert to canonical path and hope for
+		// the best
+		if (!installPath.isAbsolute()) {
+			try {
+				String installLoc = (new File(installPath.toOSString()))
+						.getCanonicalPath();
+				installPath = new Path(installLoc);
+			} catch (IOException e) {
+				// Ignore if there is a problem
+			}
+		}
+		return getVersionHandler().getFrameworkClasspath(installPath, configPath);
+	}
+
+	/**
+	 * Verifies the Felix installation directory. If it is correct, true is
+	 * returned. Otherwise, the user is notified and false is returned.
+	 * 
+	 * @return boolean
+	 */
+	public IStatus verifyLocation() {
+		return getVersionHandler()
+				.verifyInstallPath(getRuntime().getLocation());
+	}
+	
+
+	public IStatus validate() {
+		IStatus status = super.validate();
+		if (!status.isOK())
+			return status;
+	
+		status = verifyLocation();
+		if (!status.isOK())
+			return status;
+		// return new Status(IStatus.ERROR, FelixPlugin.PLUGIN_ID, 0,
+		// Messages.errorInstallDir, null);
+		// don't accept trailing space since that can cause startup problems
+		if (getRuntime().getLocation().hasTrailingSeparator())
+			return new Status(IStatus.ERROR, KnopflerfishPlugin.PLUGIN_ID, 0,
+					Messages.errorInstallDirTrailingSlash, null);
+		if (getVMInstall() == null)
+			return new Status(IStatus.ERROR, KnopflerfishPlugin.PLUGIN_ID, 0,
+					Messages.errorJRE, null);
+	
+		
+	
+		File f = getRuntime().getLocation().append("conf").toFile();
+		File[] conf = f.listFiles();
+		if (conf != null) {
+			int size = conf.length;
+			for (int i = 0; i < size; i++) {
+				if (!f.canRead())
+					return new Status(IStatus.WARNING, KnopflerfishPlugin.PLUGIN_ID,
+							0, Messages.warningCantReadConfig, null);
+			}
+		}
+	
+	
+		f = getRuntime().getLocation().append("bundle").toFile();
+		File[] bundle = f.listFiles();
+		if (bundle != null) {
+			int size = bundle.length;
+			for (int i = 0; i < size; i++) {
+				if (!f.canRead())
+					return new Status(IStatus.WARNING, KnopflerfishPlugin.PLUGIN_ID,
+							0, Messages.warningCantReadBundle, null);
+			}
+		}
+		
+		return Status.OK_STATUS;
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/KnopflerfishFrameworkInstance.java b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/KnopflerfishFrameworkInstance.java
new file mode 100644
index 0000000..dbd67d8
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/KnopflerfishFrameworkInstance.java
@@ -0,0 +1,224 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.knopflerfish;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.equinox.frameworkadmin.BundleInfo;
+import org.eclipse.libra.framework.core.FrameworkInstanceConfiguration;
+import org.eclipse.libra.framework.core.FrameworkInstanceDelegate;
+import org.eclipse.libra.framework.core.OSGIFrameworkInstanceBehaviorDelegate;
+import org.eclipse.libra.framework.core.TargetDefinitionUtil;
+import org.eclipse.libra.framework.core.Trace;
+import org.eclipse.libra.framework.knopflerfish.internal.KnopflerfishFrameworkInstanceBehavior;
+import org.eclipse.pde.internal.core.target.provisional.IBundleContainer;
+import org.eclipse.pde.internal.core.target.provisional.IResolvedBundle;
+import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
+import org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService;
+import org.eclipse.pde.internal.core.target.provisional.NameVersionDescriptor;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IRuntime;
+
+
+@SuppressWarnings("restriction")
+public class KnopflerfishFrameworkInstance extends FrameworkInstanceDelegate
+		implements IKnopflerfishFrameworkInstance {
+
+	protected transient IKnopflerfishVersionHandler versionHandler;
+
+	@Override
+	public IStatus canModifyModules(IModule[] add, IModule[] remove) {
+		IStatus status = super.canModifyModules(add, remove);
+		if (!status.isOK())
+			return status;
+
+		if (getKnopflerfishVersionHandler() == null)
+			return new Status(IStatus.ERROR, KnopflerfishPlugin.PLUGIN_ID, 0,
+					Messages.errorNoRuntime, null);
+
+		if (add != null) {
+			int size = add.length;
+			for (int i = 0; i < size; i++) {
+				IModule module = add[i];
+				IStatus status2 = getKnopflerfishVersionHandler().canAddModule(
+						module);
+				if (status2 != null && !status2.isOK())
+					return status2;
+			}
+		}
+		return Status.OK_STATUS;
+	}
+
+	@Override
+	public void setDefaults(IProgressMonitor monitor) {
+		super.setDefaults(monitor);
+		try {
+			getKnopflerfishConfiguration();
+		} catch (CoreException e) {
+			Trace.trace(Trace.SEVERE, "Can't setup for Felix configuration.", e);
+		}
+	}
+
+	@Override
+	public void importRuntimeConfiguration(IRuntime runtime,
+			IProgressMonitor monitor) throws CoreException {
+
+		super.importRuntimeConfiguration(runtime, monitor);
+		OSGIFrameworkInstanceBehaviorDelegate fsb = (OSGIFrameworkInstanceBehaviorDelegate) getServer()
+				.loadAdapter(KnopflerfishFrameworkInstanceBehavior.class, null);
+		if (fsb != null) {
+			IPath tempDir = fsb.getTempDirectory();
+			if (!tempDir.isAbsolute()) {
+				IPath rootPath = ResourcesPlugin.getWorkspace().getRoot()
+						.getLocation();
+				tempDir = rootPath.append(tempDir);
+			}
+			setInstanceDirectory(tempDir.toPortableString());
+		}
+
+		try {
+			getKnopflerfishConfiguration();
+		} catch (CoreException e) {
+			Trace.trace(Trace.SEVERE, "Can't setup for Felix configuration.", e);
+		}
+	}
+
+	public KnopflerfishFramework getKnopflerfishRuntime() {
+		if (getServer().getRuntime() == null)
+			return null;
+		return (KnopflerfishFramework) getServer().getRuntime().loadAdapter(
+				KnopflerfishFramework.class, null);
+	}
+
+	public IKnopflerfishVersionHandler getKnopflerfishVersionHandler() {
+		if (versionHandler == null) {
+			if (getServer().getRuntime() == null
+					|| getKnopflerfishRuntime() == null)
+				return null;
+
+			versionHandler = getKnopflerfishRuntime().getVersionHandler();
+		}
+		return versionHandler;
+	}
+
+	public FrameworkInstanceConfiguration getKnopflerfishConfiguration()
+			throws CoreException {
+
+		return getFrameworkInstanceConfiguration();
+
+	}
+
+
+	@Override
+	public ITargetDefinition createDefaultTarget() throws CoreException {
+		
+
+		IPath installPath = getServer().getRuntime().getLocation();
+		ITargetPlatformService service = TargetDefinitionUtil.getTargetPlatformService();
+
+		ITargetDefinition targetDefinition = service.newTarget();
+		targetDefinition.setName(getServer().getName());
+		IBundleContainer[] containers = getDefaultBundleContainers(installPath);
+
+		targetDefinition.setBundleContainers(containers);
+		targetDefinition.resolve(new NullProgressMonitor());
+
+		IResolvedBundle[] targetBundles = targetDefinition.getAllBundles();
+		List<NameVersionDescriptor> includedB = new ArrayList<NameVersionDescriptor>();
+		for (IResolvedBundle b : targetBundles) {
+			if (b.getStatus().getSeverity() == IStatus.OK) {
+
+				if (shouldInclude(b.getBundleInfo())) {
+					if (b.getStatus().getCode() == IResolvedBundle.STATUS_PLUGIN_DOES_NOT_EXIST) {
+						includedB.add(new NameVersionDescriptor(b
+								.getBundleInfo().getSymbolicName(), null,
+								NameVersionDescriptor.TYPE_PLUGIN));
+					} else {
+						includedB.add(new NameVersionDescriptor(b
+								.getBundleInfo().getSymbolicName(), null));
+					}
+				}
+
+			}
+
+		}
+		targetDefinition.setIncluded(includedB
+				.toArray(new NameVersionDescriptor[includedB.size()]));
+
+		service.saveTargetDefinition(targetDefinition);
+		return targetDefinition;
+	}
+
+	private boolean shouldInclude(BundleInfo bundleInfo) {
+		String bundles[] = {"log_api-3.0.5.jar",
+				"console_api-3.0.1.jar",
+				"cm_api-3.0.1.jar",
+				"log-3.0.5.jar",
+				"console-3.0.1.jar",
+				"consoletty-3.0.1.jar",
+				"frameworkcommands-3.0.3.jar",
+				"logcommands-3.0.1.jar",
+				"useradmin_api-3.0.1.jar"};
+		
+		for (String bundleName : bundles) {
+			if(bundleInfo.getLocation().toString().indexOf(bundleName)>0)
+				return true;
+		}
+		return false;
+	}
+
+	private IBundleContainer[] getDefaultBundleContainers(IPath installPath) {
+		IBundleContainer[] containers = new IBundleContainer[8];
+		ITargetPlatformService service = TargetDefinitionUtil.getTargetPlatformService();
+		containers[0] =  service.newDirectoryContainer(
+						installPath.append("osgi").makeAbsolute()
+								.toPortableString());
+		containers[1] = service.newDirectoryContainer(
+						installPath.append("osgi").append("jars").append("log")
+								.makeAbsolute().toPortableString());
+
+		containers[2] = service.newDirectoryContainer(
+						installPath.append("osgi").append("jars").append("console").makeAbsolute()
+								.toPortableString());
+
+		containers[3] = service.newDirectoryContainer(
+						installPath.append("osgi").append("jars").append("cm")
+								.makeAbsolute().toPortableString());
+		containers[4] = service.newDirectoryContainer(
+						installPath.append("osgi").append("jars")
+								.append("consoletty").makeAbsolute()
+								.toPortableString());
+		containers[5] = service.newDirectoryContainer(
+						installPath.append("osgi").append("jars")
+								.append("frameworkcommands").makeAbsolute()
+								.toPortableString());
+		containers[6] = service.newDirectoryContainer(
+						installPath.append("osgi").append("jars")
+								.append("logcommands").makeAbsolute()
+								.toPortableString());
+		containers[7] = service.newDirectoryContainer(
+						installPath.append("osgi").append("jars")
+								.append("useradmin").makeAbsolute()
+								.toPortableString());
+
+		return containers;
+
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/KnopflerfishPlugin.java b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/KnopflerfishPlugin.java
new file mode 100644
index 0000000..cc3644e
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/KnopflerfishPlugin.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.knopflerfish;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+
+public class KnopflerfishPlugin extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.libra.framework.knopflerfish"; //$NON-NLS-1$
+
+	// The shared instance
+	private static KnopflerfishPlugin plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public KnopflerfishPlugin() {
+		super();
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static KnopflerfishPlugin getDefault() {
+		return plugin;
+	}
+	
+	
+
+	public static String getPreference(String id) {
+		return Platform.getPreferencesService().getString(PLUGIN_ID, id, "", null);
+	}
+	
+	public static void setPreference(String id, String value) {
+		(new DefaultScope()).getNode(PLUGIN_ID).put(id, value);
+	}
+	
+	public static IKnopflerfishVersionHandler getFelixVersionHandler(String id) {
+//		if (id.indexOf("runtime") > 0)
+//			id = id.substring(0, 30) + id.substring(38);
+//		if (true)//"abc".equals(id))
+			return new Knopflerfish31Handler();
+	}
+
+
+}
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/Messages.java b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/Messages.java
new file mode 100644
index 0000000..eaedc01
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/Messages.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.knopflerfish;
+
+import org.eclipse.osgi.util.NLS;
+/**
+ * Translated messages.
+ */
+public class Messages extends NLS {
+
+	public static String errorInstallDirTrailingSlash = null;
+	public static String errorJRE;
+	public static String warningCantReadConfig;
+	public static String warningCantReadBundle;
+	public static String errorNotBundle;
+	public static String errorOSGiBundlesOnly;
+	public static String errorNoRuntime;
+	
+	public static String publishServerTask;
+	public static String errorConfigurationProjectClosed;
+	public static String errorNoConfiguration;
+	public static String loadingTask;
+	public static String errorCouldNotLoadConfiguration;
+	public static String configurationEditorActionAddOsgiModule;
+
+	static {
+		NLS.initializeMessages(KnopflerfishPlugin.PLUGIN_ID + ".Messages", Messages.class);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/Messages.properties b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/Messages.properties
new file mode 100644
index 0000000..7896a43
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/Messages.properties
@@ -0,0 +1,20 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+
+# --------------- General UI ---------------
+
+errorInstallDirTrailingSlash = Installation folder must not end with a slash
+errorJRE= Selected JRE is not valid;
+warningCantReadConfig=Cannot locate the correct osgi folder.  Invalid Installation folder
+warningCantReadBundle=Cannot locate the correct bundle folder.  Invalid Installation folder
+errorNotBundle=Must be an osgi bundle
+errorOSGiBundlesOnly=Must be an osgi bundle
+errorNoRuntime=There is no runtime
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/internal/KnopflerfishConfigurationPublishHelper.java b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/internal/KnopflerfishConfigurationPublishHelper.java
new file mode 100644
index 0000000..3f59b99
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/internal/KnopflerfishConfigurationPublishHelper.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.knopflerfish.internal;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.libra.framework.core.OSGIFrameworkInstanceBehaviorDelegate;
+import org.eclipse.libra.framework.core.publish.PublishHelper;
+
+
+
+public class KnopflerfishConfigurationPublishHelper extends PublishHelper{
+	public OSGIFrameworkInstanceBehaviorDelegate behavior;
+
+	public KnopflerfishConfigurationPublishHelper(OSGIFrameworkInstanceBehaviorDelegate behavior) {
+		this.behavior = behavior;
+	}
+	
+	protected IPath getPublishFolder() {
+		IPath configPath = behavior.getBaseDirectory();
+		configPath = configPath.append("plugins").makeAbsolute();
+		return configPath;
+	}
+
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/internal/KnopflerfishFrameworkClasspathProvider.java b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/internal/KnopflerfishFrameworkClasspathProvider.java
new file mode 100644
index 0000000..341a6e9
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/internal/KnopflerfishFrameworkClasspathProvider.java
@@ -0,0 +1,44 @@
+package org.eclipse.libra.framework.knopflerfish.internal;
+
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jst.server.core.RuntimeClasspathProviderDelegate;
+import org.eclipse.wst.server.core.IRuntime;
+
+public class KnopflerfishFrameworkClasspathProvider extends
+		RuntimeClasspathProviderDelegate {
+	/**
+	 * @see RuntimeClasspathProviderDelegate#resolveClasspathContainer(IProject,
+	 *      IRuntime)
+	 */
+	public IClasspathEntry[] resolveClasspathContainer(IProject project,
+			IRuntime runtime) {
+		IPath installPath = runtime.getLocation();
+
+		if (installPath == null)
+			return new IClasspathEntry[0];
+
+		List<IClasspathEntry> list = new ArrayList<IClasspathEntry>();
+		// String runtimeId = runtime.getRuntimeType().getId();
+		IPath path = installPath.append("bundle");
+		addLibraryEntries(list, path.toFile(), true);
+
+		return (IClasspathEntry[]) list
+				.toArray(new IClasspathEntry[list.size()]);
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/internal/KnopflerfishFrameworkInstanceBehavior.java b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/internal/KnopflerfishFrameworkInstanceBehavior.java
new file mode 100644
index 0000000..2596d2f
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/internal/KnopflerfishFrameworkInstanceBehavior.java
@@ -0,0 +1,173 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.knopflerfish.internal;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.libra.framework.core.FrameworkInstanceConfiguration;
+import org.eclipse.libra.framework.core.OSGIFrameworkInstanceBehaviorDelegate;
+import org.eclipse.libra.framework.core.ProgressUtil;
+import org.eclipse.libra.framework.core.Trace;
+import org.eclipse.libra.framework.knopflerfish.IKnopflerfishVersionHandler;
+import org.eclipse.libra.framework.knopflerfish.Knopflerfish31Handler;
+import org.eclipse.libra.framework.knopflerfish.KnopflerfishFrameworkInstance;
+import org.eclipse.libra.framework.knopflerfish.Messages;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
+
+
+public class KnopflerfishFrameworkInstanceBehavior extends
+		OSGIFrameworkInstanceBehaviorDelegate {
+
+	protected transient KnopflerfishConfigurationPublishHelper publishHelper = new KnopflerfishConfigurationPublishHelper(
+			this);
+
+	/**
+	 * FelixRuntimeInstanceBehavior.
+	 */
+	public KnopflerfishFrameworkInstanceBehavior() {
+		super();
+	}
+	
+	public IKnopflerfishVersionHandler getKnopflerfishVersionHandler() {
+		return getKnopflerfishRuntimeInstance().getKnopflerfishVersionHandler();
+	}
+
+	public KnopflerfishFrameworkInstance getKnopflerfishRuntimeInstance() {
+		return (KnopflerfishFrameworkInstance) getServer().loadAdapter(KnopflerfishFrameworkInstance.class, null);
+	}
+
+	public String getFrameworkClass() {
+		return getKnopflerfishVersionHandler().getFrameworkClass();
+	}
+
+	public String[] getFrameworkProgramArguments(boolean starting) {
+		return getKnopflerfishVersionHandler().getFrameworkProgramArguments(
+				getBaseDirectory(), getFrameworkInstance().isDebug(), starting);
+	}
+
+	public String[] getExcludedFrameworkProgramArguments(boolean starting) {
+		return getKnopflerfishVersionHandler().getExcludedFrameworkProgramArguments(
+				getFrameworkInstance().isDebug(), starting);
+	}
+
+	public String[] getFrameworkVMArguments() {
+		IPath installPath = getServer().getRuntime().getLocation();
+		// If installPath is relative, convert to canonical path and hope for
+		// the best
+		if (!installPath.isAbsolute()) {
+			try {
+				String installLoc = (new File(installPath.toOSString()))
+						.getCanonicalPath();
+				installPath = new Path(installLoc);
+			} catch (IOException e) {
+				// Ignore if there is a problem
+			}
+		}
+
+		IPath deployPath = getBaseDirectory();
+		// If deployPath is relative, convert to canonical path and hope for the
+		// best
+		if (!deployPath.isAbsolute()) {
+			try {
+				String deployLoc = (new File(deployPath.toOSString()))
+						.getCanonicalPath();
+				deployPath = new Path(deployLoc);
+			} catch (IOException e) {
+				// Ignore if there is a problem
+			}
+		}
+
+		return getKnopflerfishVersionHandler().getFrameworkVMArguments(installPath, null, deployPath, false);
+	}
+	
+	protected void publishServer(int kind, IProgressMonitor monitor)
+			throws CoreException {
+		if (getServer().getRuntime() == null)
+			return;
+
+		IPath confDir = getBaseDirectory();
+		IStatus status = getKnopflerfishVersionHandler().prepareDeployDirectory(
+				confDir);
+
+		if (status != null && !status.isOK())
+			throw new CoreException(status);
+
+		monitor = ProgressUtil.getMonitorFor(monitor);
+		monitor.beginTask(Messages.publishServerTask, 600);
+
+		// TODO OSAMI 1) Cleanup 2) Backup and Publish,
+
+		// if (status != null && !status.isOK())
+		// throw new CoreException(status);
+
+		monitor.done();
+
+		setServerPublishState(IServer.PUBLISH_STATE_NONE);
+	}
+
+	@SuppressWarnings("rawtypes")
+	protected void publishModules(int kind, List modules, List deltaKind2,
+			MultiStatus multi, IProgressMonitor monitor) {
+
+
+		IPath confDir = getBaseDirectory();
+		IPath installPath = getServer().getRuntime().getLocation();
+		// If installPath is relative, convert to canonical path and hope for
+		// the best
+		if (!installPath.isAbsolute()) {
+			try {
+				String installLoc = (new File(installPath.toOSString()))
+						.getCanonicalPath();
+				installPath = new Path(installLoc);
+			} catch (IOException e) {
+				// Ignore if there is a problem
+			}
+		}
+		
+		FrameworkInstanceConfiguration felixConfiguration;
+		try {
+			felixConfiguration = getKnopflerfishRuntimeInstance().getKnopflerfishConfiguration();
+			publishHelper.exportBundles(modules, felixConfiguration, confDir);
+			((Knopflerfish31Handler)getKnopflerfishVersionHandler()).prepareFrameworkConfigurationFile(installPath,confDir,publishHelper,felixConfiguration);
+
+		} catch (CoreException e) {
+			Trace.trace(Trace.SEVERE, "Publishing failed", e);
+		}
+	}
+
+	protected void publishModule(int kind, int deltaKind, IModule[] moduleTree,
+			IProgressMonitor monitor) throws CoreException {
+		if (getServer().getServerState() != IServer.STATE_STOPPED) {
+			if (deltaKind == ServerBehaviourDelegate.ADDED
+					|| deltaKind == ServerBehaviourDelegate.REMOVED)
+				setServerRestartState(true);
+		}
+
+		Properties p = loadModulePublishLocations();
+
+		// TODO OSAMI PUBLISH
+
+		setModulePublishState(moduleTree, IServer.PUBLISH_STATE_NONE);
+
+		saveModulePublishLocations(p);
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/internal/KnopflerfishFrameworkInstanceLocator.java b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/internal/KnopflerfishFrameworkInstanceLocator.java
new file mode 100644
index 0000000..8a76a8c
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/internal/KnopflerfishFrameworkInstanceLocator.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ *   Copyright (c) 2010 Eteration A.S. and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.libra.framework.knopflerfish.internal;
+
+import org.eclipse.libra.framework.core.OSGIFrameworkLocatorDelegate;
+
+public class KnopflerfishFrameworkInstanceLocator extends OSGIFrameworkLocatorDelegate {
+
+	protected static final String[] runtimeTypes = new String[] {
+	"org.eclipse.libra.framework.knopflerfish"};
+	
+
+	public static String[] getRuntimeTypes() {
+			return runtimeTypes;
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.ui/.classpath b/plugins/org.eclipse.libra.framework.ui/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.libra.framework.ui/.project b/plugins/org.eclipse.libra.framework.ui/.project
new file mode 100644
index 0000000..4026934
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.libra.framework.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.libra.framework.ui/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.libra.framework.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..c8be432
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Fri Nov 10 17:11:35 HST 2006
+eclipse.preferences.version=1
+encoding/<project>=ISO-8859-1
diff --git a/plugins/org.eclipse.libra.framework.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.libra.framework.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..87e641f
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,74 @@
+#Sat Oct 16 21:03:45 EEST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=error
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.testsuite,*.deploy,*.location,*.execution,*.datapool,*.artifact,*.html,*.svg
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=disabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=error
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=error
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=error
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.incompatibleJDKLevel=warning
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/plugins/org.eclipse.libra.framework.ui/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.libra.framework.ui/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..584bdff
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,4 @@
+#Fri Nov 10 18:06:11 HST 2006
+eclipse.preferences.version=1
+internal.default.compliance=user
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?>\n<templates/>
diff --git a/plugins/org.eclipse.libra.framework.ui/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.libra.framework.ui/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..0e06e96
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,15 @@
+#Mon Jan 15 21:56:48 EST 2007
+compilers.incompatible-environment=0
+compilers.p.build=0
+compilers.p.deprecated=1
+compilers.p.missing-packages=2
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=0
+compilers.p.unknown-class=0
+compilers.p.unknown-element=1
+compilers.p.unknown-resource=0
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.use-project=true
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.libra.framework.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.libra.framework.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..db100dd
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,35 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.libra.framework.ui;singleton:=true
+Bundle-Version: 0.1.0.qualifier
+Bundle-Activator: org.eclipse.libra.framework.ui.FrameworkUIPlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.libra.framework.ui,
+ org.eclipse.libra.framework.ui.internal,
+ org.eclipse.libra.framework.ui.internal.actions,
+ org.eclipse.libra.framework.ui.internal.editor
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.core.expressions;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.forms;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.debug.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.jdt.debug.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.jdt.launching;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.wst.server.core;bundle-version="[1.0.204,2.0.0)",
+ org.eclipse.jst.server.core;bundle-version="[1.0.103,2.0.0)",
+ org.eclipse.jst.server.ui;bundle-version="[1.0.103,2.0.0)",
+ org.eclipse.wst.common.project.facet.ui;bundle-version="[1.1.0,2.0.0)",
+ org.eclipse.wst.server.ui,
+ org.eclipse.pde.core,
+ org.eclipse.pde.ui,
+ org.eclipse.libra.framework.core,
+ org.eclipse.gef
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Import-Package: org.eclipse.libra.framework.editor.ui.console;version="[0.1.0,2.0.0)",
+ org.eclipse.libra.framework.editor.ui.dependencies;version="[0.1.0,2.0.0)",
+ org.eclipse.libra.framework.editor.ui.overview;version="[0.1.0,2.0.0)"
diff --git a/plugins/org.eclipse.libra.framework.ui/about.html b/plugins/org.eclipse.libra.framework.ui/about.html
new file mode 100644
index 0000000..8f31159
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>March 25, 2011</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.ui/build.properties b/plugins/org.eclipse.libra.framework.ui/build.properties
new file mode 100644
index 0000000..5016daa
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/build.properties
@@ -0,0 +1,22 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+bin.includes = plugin.xml,\
+               plugin.properties,\
+               icons/,\
+               .,\
+               META-INF/,\
+               about.html
+bin.excludes = bin/**,\
+               @dot/**,\
+               temp.folder/**
+source.. = src/
+
+
diff --git a/plugins/org.eclipse.libra.framework.ui/icons/obj16/bundle_obj.png b/plugins/org.eclipse.libra.framework.ui/icons/obj16/bundle_obj.png
new file mode 100644
index 0000000..a756f97
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/icons/obj16/bundle_obj.png
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.ui/icons/obj16/mime_extension.gif b/plugins/org.eclipse.libra.framework.ui/icons/obj16/mime_extension.gif
new file mode 100644
index 0000000..c585010
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/icons/obj16/mime_extension.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.ui/icons/obj16/mime_mapping.gif b/plugins/org.eclipse.libra.framework.ui/icons/obj16/mime_mapping.gif
new file mode 100644
index 0000000..0a8e4bf
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/icons/obj16/mime_mapping.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.ui/icons/obj16/port.gif b/plugins/org.eclipse.libra.framework.ui/icons/obj16/port.gif
new file mode 100644
index 0000000..7a354b7
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/icons/obj16/port.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.ui/icons/obj16/project_missing.gif b/plugins/org.eclipse.libra.framework.ui/icons/obj16/project_missing.gif
new file mode 100644
index 0000000..0cb4c16
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/icons/obj16/project_missing.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.ui/icons/obj16/web_module.gif b/plugins/org.eclipse.libra.framework.ui/icons/obj16/web_module.gif
new file mode 100644
index 0000000..bf20f70
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/icons/obj16/web_module.gif
Binary files differ
diff --git a/plugins/org.eclipse.libra.framework.ui/plugin.properties b/plugins/org.eclipse.libra.framework.ui/plugin.properties
new file mode 100644
index 0000000..3d40b9b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+#   Copyright (c) 2010 Eteration A.S. and others.
+#   All rights reserved. This program and the accompanying materials
+#   are made available under the terms of the Eclipse Public License v1.0
+#   which accompanies this distribution, and is available at
+#   http://www.eclipse.org/legal/epl-v10.html
+#  
+#   Contributors:
+#      Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+###############################################################################
+pluginName=OSGI Runtimes UI Support
+providerName=Eteration A.S.
diff --git a/plugins/org.eclipse.libra.framework.ui/plugin.xml b/plugins/org.eclipse.libra.framework.ui/plugin.xml
new file mode 100644
index 0000000..29fa0dc
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/plugin.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<!--
+      Copyright (c) 2010, 2011 Eteration A.S. and others.
+      All rights reserved. This program and the accompanying materials
+      are made available under the terms of the Eclipse Public License v1.0
+      which accompanies this distribution, and is available at
+      http://www.eclipse.org/legal/epl-v10.html
+     
+      Contributors:
+         Naci Dai and Murat Yener, Eteration A.S. - Initial API and implementation
+         Kaloyan Raev, SAP AG - integration with OSGi Framework Editor parts
+ -->
+
+<plugin>
+   <extension point="org.eclipse.wst.server.ui.serverImages">
+      <image
+         id="org.eclipse.wst.server.ui.web"
+         typeIds="osgi.bundle"
+         icon="icons/obj16/bundle_obj.png"/>
+   </extension>
+   <extension
+         point="org.eclipse.wst.server.ui.editorPages">
+      <page
+            class="org.eclipse.libra.framework.editor.ui.overview.BundleInformationEditorPage"
+            id="org.eclipse.libra.framework.editor.integration.bundleInformation"
+            name="Bundle Overview"
+            order="30"
+            typeIds="org.eclipse.libra.framework.*">
+      </page>
+      <page
+            class="org.eclipse.libra.framework.editor.ui.dependencies.BundleDependencyEditorPage"
+            id="org.eclipse.libra.framework.editor.integration.bundleDependency"
+            name="Bundle Dependency Graph"
+            order="40"
+            typeIds="org.eclipse.libra.framework.*">
+      </page>
+      <page
+            class="org.eclipse.libra.framework.editor.ui.console.ServerConsoleEditorPage"
+            id="org.eclipse.libra.framework.editor.integration.serverConsole"
+            name="Console"
+            order="50"
+            typeIds="org.eclipse.libra.framework.*">
+      </page>
+   </extension>
+</plugin>
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.ui/pom.xml b/plugins/org.eclipse.libra.framework.ui/pom.xml
new file mode 100644
index 0000000..e72a8ea
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/pom.xml
@@ -0,0 +1,33 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<artifactId>org.eclipse.libra_parent</artifactId>
+		<groupId>org.eclipse.libra</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>../../development/org.eclipse.libra.releng/pom.xml</relativePath>
+	</parent>
+
+	<artifactId>org.eclipse.libra.framework.ui</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<name>OSGi Frameworks Server Adapters UI Plug-in</name>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-source-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>findbugs-maven-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-pmd-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/CleanWorkDirDialog.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/CleanWorkDirDialog.java
new file mode 100644
index 0000000..d9176d5
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/CleanWorkDirDialog.java
@@ -0,0 +1,361 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.ui;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.IServer.IOperationListener;
+import org.eclipse.wst.server.core.ServerUtil;
+
+
+/**
+ * Dialog to confirm deletion of the work directory for a module on a
+ * server, or the work directory for the entire server.  Handling
+ * includes stopping and restarting the server if it is running at
+ * the time of the deletion. 
+ *
+ */
+public class CleanWorkDirDialog extends Dialog {
+	protected IServer server;
+	protected IModule module;
+	protected int state;
+	protected String mode;
+	protected IStatus completionStatus;
+	
+	/**
+	 * Creates a dialog instance confirm deletion of the work directory for a
+	 * module on a server, or the work directory for the entire server.
+	 * 
+	 * @param parentShell the parent shell, or <code>null</code> to create a
+	 *  top-level shell
+	 * @param server server on which to delete the work directory
+	 * @param module module whose work directory is to be deleted, or <code>null</code> if
+	 *  if these server's entire work directory is to be deleted.
+	 */
+	public CleanWorkDirDialog(Shell parentShell, IServer server, IModule module) {
+		super(parentShell);
+		
+		if (server == null)
+			throw new IllegalArgumentException();
+
+		this.server = server;
+		this.module = module;
+		
+	}
+	
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(Messages.confirmCleanWorkDirTitle);
+	}
+
+	protected Control createDialogArea(Composite parent) {
+		if (state < 0 || state == IServer.STATE_UNKNOWN) 
+			captureServerState();
+
+		// create a composite with standard margins and spacing
+		Composite composite = (Composite)super.createDialogArea(parent);
+		// Since there are only label widgets on this page, set the help on the parent
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ContextIds.FRAMEWORK_INSTANCE_CLEAN_WORK_DIR);
+
+		Label label = new Label(composite, SWT.WRAP);
+		if (state == IServer.STATE_STARTING || state == IServer.STATE_STOPPING || state == IServer.STATE_UNKNOWN) {
+			label.setText(NLS.bind(Messages.cleanServerStateChanging, server.getName()));
+		}
+		else {
+			if (module != null)
+				label.setText(NLS.bind(Messages.cleanModuleWorkDir, module.getName(), server.getName()));
+			else
+				label.setText(NLS.bind(Messages.cleanServerWorkDir, server.getName()));
+			GridData data = new GridData();
+			data.widthHint = 300;
+			label.setLayoutData(data);
+			
+			if (state == IServer.STATE_STARTED) {
+				label = new Label(composite, SWT.WRAP);
+				label.setText(Messages.cleanServerRunning);
+				data = new GridData();
+				data.widthHint = 300;
+				label.setLayoutData(data);
+			}
+		}
+		
+		applyDialogFont(composite);
+		return composite;
+	}
+	
+	protected void createButtonsForButtonBar(Composite parent) {
+		super.createButtonsForButtonBar(parent);
+
+		if (state < 0 || state == IServer.STATE_UNKNOWN) 
+			captureServerState();
+
+		// If server is transitioning, only allow Cancel
+		if (state == IServer.STATE_STARTING || state == IServer.STATE_STOPPING) {
+			Button button = getButton(IDialogConstants.OK_ID);
+			if (button != null)
+				button.setEnabled(false);
+		}
+	}
+
+	protected void okPressed() {
+		String jobName = NLS.bind(Messages.cleanServerTask,
+				module != null ? module.getName() : server.getName());
+		// Create job to perform the cleaning, including stopping and starting the server if necessary
+		CleanWorkDirJob job = new CleanWorkDirJob(jobName);
+		// Note: Since stop and start, if needed, will set scheduling rules in their jobs,
+		// don't set one here. Instead do the actual deletion in a child job too with the
+		// scheduling rule on that job, like stop and start.
+		job.schedule();
+		
+		super.okPressed();
+	}
+	
+	/*
+	 * Job to clean the appropriate Framework Instance work directory.  It includes
+	 * stopping and starting the framework if the instance is currently running.
+	 * The stopping, deletion, and starting are all done with child jobs,
+	 * each using the server scheduling rule.  Thus, this job should
+	 * not use this rule or it will block these child jobs. 
+	 */
+	class CleanWorkDirJob extends Job {
+		/**
+		 * @param name name for job
+		 */
+		public CleanWorkDirJob(String jobName) {
+			super(jobName);
+		}
+
+		/**
+		 * @see Job#belongsTo(Object)
+		 */
+		public boolean belongsTo(Object family) {
+			return ServerUtil.SERVER_JOB_FAMILY.equals(family);
+		}
+
+		protected IStatus run(IProgressMonitor monitor) {
+			final Object mutex = new Object();
+
+			if (module != null) {
+			}
+			
+			// If state has changed since dialog was open, abort
+			if (server.getServerState() != state) {
+				return newErrorStatus(
+						NLS.bind(Messages.errorCouldNotCleanStateChange, server.getName()), null);
+			}
+
+			IOperationListener listener = new IOperationListener() {
+				public void done(IStatus result) {
+					synchronized (mutex) {
+						completionStatus = result;
+						mutex.notifyAll();
+					}
+				}
+			};
+			
+			boolean restart = false;
+			IStatus status = Status.OK_STATUS;
+			// If server isn't stopped, try to stop, clean, and restart
+			if (state != IServer.STATE_STOPPED) {
+				status = server.canStop();
+				if (!status.isOK()) {
+					return wrapErrorStatus(status, 
+							NLS.bind(Messages.errorCouldNotCleanCantStop, server.getName()));
+				}
+
+				boolean done = false;
+				boolean force = false;
+				while (!done) {
+					// Stop the server and wait for completion
+					synchronized (mutex) {
+						server.stop(force, listener);
+
+						while (completionStatus == null) {
+							try {
+								mutex.wait();
+							} catch (InterruptedException e) {
+								// Ignore
+							}
+						}
+					}
+					// If forced, or there was an error (doesn't include timeout), or we are stopped, time to exit
+					if (force || !completionStatus.isOK() || server.getServerState() == IServer.STATE_STOPPED) {
+						done = true;
+					}
+					else {
+						force = FrameworkUIPlugin.queryCleanTermination(server);
+						completionStatus = null;
+					}
+				}
+			
+				if (!completionStatus.isOK()) {
+					// If stop job failed, assume error was displayed for that job
+					return Status.OK_STATUS;
+				}
+				if (server.getServerState() != IServer.STATE_STOPPED) {
+					return newErrorStatus(
+							NLS.bind(Messages.errorCouldNotCleanStopFailed, server.getName()), null);
+				}
+				restart = true;
+				completionStatus = null;
+			}
+			
+			DeleteWorkDirJob deleteJob = new DeleteWorkDirJob(getName(), module, restart);
+			deleteJob.setRule(ServerUtil.getServerSchedulingRule(server));
+
+			deleteJob.addJobChangeListener(new JobChangeAdapter() {
+				public void done(IJobChangeEvent event) {
+					synchronized (mutex) {
+						completionStatus = event.getResult();
+						mutex.notifyAll();
+					}
+
+				}
+			});
+
+			// Perform the work directory deletion job
+			synchronized (mutex) {
+				deleteJob.schedule();
+
+				while (completionStatus == null) {
+					try {
+						mutex.wait();
+					} catch (InterruptedException e) {
+						// Ignore
+					}
+				}
+			}
+			if (!completionStatus.isOK()) {
+				// If delete job failed, assume error was displayed for that job
+				return Status.OK_STATUS;
+			}
+			completionStatus = null;
+
+			if (restart) {
+				status = server.canStart(mode);
+				if (!status.isOK()) {
+					return wrapErrorStatus(status, 
+							NLS.bind(Messages.errorCleanCantRestart, server.getName()));
+				}
+
+				// Restart the server and wait for completion
+				synchronized (mutex) {
+					server.start(mode, listener);
+
+					while (completionStatus == null) {
+						try {
+							mutex.wait();
+						} catch (InterruptedException e) {
+							// Ignore
+						}
+					}
+				}
+				
+				if (!completionStatus.isOK()) {
+					// If start job failed, assume error was displayed for that job
+					return Status.OK_STATUS;
+				}
+			}
+			return status;
+		}
+	}
+	
+	/*
+	 * Job to actually delete the work directory.  This is done
+	 * in a separate job so it can be a "sibling" of potential
+	 * stop and start jobs. This allows it to have a server
+	 * scheduling rule.
+	 */
+	class DeleteWorkDirJob extends Job {
+		private IModule jobModule;
+		private boolean restart;
+		
+		/**
+		 * @param name name for job
+		 */
+		public DeleteWorkDirJob(String jobName, IModule am, boolean restart) {
+			super(jobName);
+			this.jobModule = am;
+			this.restart = restart;
+		}
+
+		/**
+		 * @see Job#belongsTo(Object)
+		 */
+		public boolean belongsTo(Object family) {
+			return ServerUtil.SERVER_JOB_FAMILY.equals(family);
+		}
+
+		protected IStatus run(IProgressMonitor monitor) {
+			
+			IStatus status = Status.OK_STATUS;
+			// If server isn't stopped, abort the attempt to delete the work directory
+			if (server.getServerState() != IServer.STATE_STOPPED) {
+				return newErrorStatus(
+						NLS.bind(Messages.errorCantDeleteServerNotStopped, 
+								jobModule != null ? module.getName() : server.getName()), null);
+			}				
+
+			//TODO  OSAMI -  Delete the work directory for runtime and clean cached items
+			
+			if (!status.isOK()) {
+				String cleanName = module != null ? module.getName() : server.getName();
+				return wrapErrorStatus(status,
+						restart ?
+								NLS.bind(Messages.errorErrorDuringCleanWasRunning, 
+										cleanName , server.getName()) :
+								NLS.bind(Messages.errorErrorDuringClean, cleanName));
+			}
+			return status;
+		}
+	}
+	
+	private void captureServerState() {
+		state = server.getServerState();
+		if (state != IServer.STATE_STOPPED) {
+			mode = server.getMode();
+		}
+	}
+
+	protected IStatus newErrorStatus(String message, Throwable throwable) {
+		return new Status(IStatus.ERROR, FrameworkUIPlugin.PLUGIN_ID, 0,
+				message, throwable);
+	}
+	
+	protected IStatus wrapErrorStatus(IStatus status, String message) {
+		MultiStatus ms = new MultiStatus(FrameworkUIPlugin.PLUGIN_ID, 0, message, null);
+		ms.add(status);
+		return ms;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/ContextIds.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/ContextIds.java
new file mode 100644
index 0000000..48dc38d
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/ContextIds.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+
+package org.eclipse.libra.framework.ui;
+
+
+/**
+ * Constant ids for context help.
+ */
+public interface ContextIds {
+	public static final String FRAMEWORK_INSTANCE_EDITOR = FrameworkUIPlugin.PLUGIN_ID + ".teig0000";
+	public static final String FRAMEWORK_INSTANCE_EDITOR_TEST_ENVIRONMENT = FrameworkUIPlugin.PLUGIN_ID + ".teig0002";
+	public static final String FRAMEWORK_INSTANCE_EDITOR_SECURE = FrameworkUIPlugin.PLUGIN_ID + ".teig0004";
+	public static final String FRAMEWORK_INSTANCE_EDITOR_DEBUG_MODE = FrameworkUIPlugin.PLUGIN_ID + ".teig0006";
+
+	public static final String CONFIGURATION_EDITOR_MODULES = FrameworkUIPlugin.PLUGIN_ID + ".tecw0000";
+	public static final String CONFIGURATION_EDITOR_MODULES_LIST = FrameworkUIPlugin.PLUGIN_ID + ".tecw0002";
+	public static final String CONFIGURATION_EDITOR_MODULES_ADD_PROJECT = FrameworkUIPlugin.PLUGIN_ID + ".tecw0004";
+	public static final String CONFIGURATION_EDITOR_MODULES_ADD_EXTERNAL = FrameworkUIPlugin.PLUGIN_ID + ".tecw0006";
+	public static final String CONFIGURATION_EDITOR_MODULES_EDIT = FrameworkUIPlugin.PLUGIN_ID + ".tecw0008";
+	public static final String CONFIGURATION_EDITOR_MODULES_REMOVE = FrameworkUIPlugin.PLUGIN_ID + ".tecw0010";
+
+	public static final String CONFIGURATION_EDITOR_MODULE_DIALOG = FrameworkUIPlugin.PLUGIN_ID + ".tdwm0000";
+	public static final String CONFIGURATION_EDITOR_MODULE_DIALOG_PROJECT = FrameworkUIPlugin.PLUGIN_ID + ".tdpr0002";
+	public static final String CONFIGURATION_EDITOR_MODULE_DIALOG_PATH = FrameworkUIPlugin.PLUGIN_ID + ".tdpr0004";
+	public static final String CONFIGURATION_EDITOR_MODULE_DIALOG_DOCBASE = FrameworkUIPlugin.PLUGIN_ID + ".tdpr0006";
+	public static final String CONFIGURATION_EDITOR_MODULE_DIALOG_RELOAD = FrameworkUIPlugin.PLUGIN_ID + ".tdpr0008";
+
+	public static final String CONFIGURATION_EDITOR_MAPPINGS = FrameworkUIPlugin.PLUGIN_ID + ".tecm0000";
+	public static final String CONFIGURATION_EDITOR_MAPPINGS_LIST = FrameworkUIPlugin.PLUGIN_ID + ".tecm0002";
+	public static final String CONFIGURATION_EDITOR_MAPPINGS_ADD = FrameworkUIPlugin.PLUGIN_ID + ".tecm0004";
+	public static final String CONFIGURATION_EDITOR_MAPPINGS_EDIT = FrameworkUIPlugin.PLUGIN_ID + ".tecm0006";
+	public static final String CONFIGURATION_EDITOR_MAPPINGS_REMOVE = FrameworkUIPlugin.PLUGIN_ID + ".tecm0008";
+
+	public static final String CONFIGURATION_EDITOR_MAPPING_DIALOG = FrameworkUIPlugin.PLUGIN_ID + ".tdmm0000";
+	public static final String CONFIGURATION_EDITOR_MAPPING_DIALOG_TYPE = FrameworkUIPlugin.PLUGIN_ID + ".tdmm0002";
+	public static final String CONFIGURATION_EDITOR_MAPPING_DIALOG_EXTENSION = FrameworkUIPlugin.PLUGIN_ID + ".tdmm0004";
+
+	public static final String CONFIGURATION_EDITOR_PORTS = FrameworkUIPlugin.PLUGIN_ID + ".tecp0000";
+	public static final String CONFIGURATION_EDITOR_PORTS_LIST = FrameworkUIPlugin.PLUGIN_ID + ".tecp0002";
+		
+	public static final String FRAMEWORK_COMPOSITE = FrameworkUIPlugin.PLUGIN_ID + ".twnr0000";
+
+	public static final String FRAMEWORK_INSTANCE_CLEAN_WORK_DIR = FrameworkUIPlugin.PLUGIN_ID + ".tvcp0000";
+	public static final String FRAMEWORK_INSTANCE_CLEAN_WORK_DIR_TERMINATE = FrameworkUIPlugin.PLUGIN_ID + ".tvcp0001";
+}
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/FrameworkUIPlugin.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/FrameworkUIPlugin.java
new file mode 100644
index 0000000..27ad9a7
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/FrameworkUIPlugin.java
@@ -0,0 +1,212 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+
+package org.eclipse.libra.framework.ui;
+
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.libra.framework.ui.internal.TerminationDialog;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.wst.server.core.IServer;
+
+
+
+public class FrameworkUIPlugin extends AbstractUIPlugin {
+	protected static FrameworkUIPlugin singleton;
+
+	protected Map imageDescriptors = new HashMap();
+
+	// base url for icons
+	private static URL ICON_BASE_URL;
+
+	private static final String URL_OBJ = "obj16/";
+	//private static final String URL_WIZBAN = "wizban/";
+
+	public static final String PLUGIN_ID = "org.eclipse.libra.framework.ui";
+
+	//public static final String IMG_WIZ_FELIX = "wizFelix";
+
+	public static final String IMG_WEB_MODULE = "webModule";
+	public static final String IMG_MIME_MAPPING = "mimeMapping";
+	public static final String IMG_MIME_EXTENSION = "mimeExtension";
+	public static final String IMG_PORT = "port";
+	public static final String IMG_PROJECT_MISSING = "projectMissing";
+
+
+	public static final String PREF_JDK_INSTALL_DIR = "jdkinstall";
+
+
+	public FrameworkUIPlugin() {
+		super();
+		singleton = this;
+	}
+
+	protected ImageRegistry createImageRegistry() {
+		ImageRegistry registry = new ImageRegistry();
+		
+		//registerImage(registry, IMG_WIZ_FELIX, URL_WIZBAN + "fmwk_wiz.png");
+		
+		registerImage(registry, IMG_WEB_MODULE, URL_OBJ + "web_module.gif");
+		registerImage(registry, IMG_MIME_MAPPING, URL_OBJ + "mime_mapping.gif");
+		registerImage(registry, IMG_MIME_EXTENSION, URL_OBJ + "mime_extension.gif");
+		registerImage(registry, IMG_PORT, URL_OBJ + "port.gif");
+		registerImage(registry, IMG_PROJECT_MISSING, URL_OBJ + "project_missing.gif");
+	
+		return registry;
+	}
+
+	/**
+	 * Return the image with the given key from the image registry.
+	 * @param key java.lang.String
+	 * @return org.eclipse.jface.parts.IImage
+	 */
+	public static Image getImage(String key) {
+		return getInstance().getImageRegistry().get(key);
+	}
+
+	/**
+	 * Return the image with the given key from the image registry.
+	 * @param key java.lang.String
+	 * @return org.eclipse.jface.parts.IImage
+	 */
+	public static ImageDescriptor getImageDescriptor(String key) {
+		try {
+			getInstance().getImageRegistry();
+			return (ImageDescriptor) getInstance().imageDescriptors.get(key);
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+	/**
+	 * Returns the singleton instance of this plugin.
+	 * @return org.eclipse.libra.framework.ui.FrameworkUIPlugin
+	 */
+	public static FrameworkUIPlugin getInstance() {
+		return singleton;
+	}
+
+	/**
+	 * Convenience method for logging.
+	 *
+	 * @param status org.eclipse.core.runtime.IStatus
+	 */
+	public static void log(IStatus status) {
+		getInstance().getLog().log(status);
+	}
+
+	/**
+	 * Convenience method to get a Display. The method first checks, if
+	 * the thread calling this method has an associated display. If so, this
+	 * display is returned. Otherwise the method returns the default display.
+	 * 
+	 * @return the display
+	 */
+	public static Display getStandardDisplay() {
+		Display display = Display.getCurrent();
+		if (display == null)
+			display = Display.getDefault();
+		return display;		
+	}	
+	
+	/**
+	 * Convenience method to display an error dialog.
+	 * 
+	 * @param title title for the dialog or null for default title
+	 * @param message primary message to display
+	 * @param status reason for the error
+	 */
+	public static void openError(final String title, final String message, final IStatus status) {
+		Display.getDefault().asyncExec(new Runnable() {
+			public void run() {
+				Shell shell = getShell();
+				ErrorDialog.openError(shell,
+						title != null ? title : Messages.errorDefaultDialogTitle,
+						message, status);
+			}
+		});
+	}
+	
+	public static boolean queryCleanTermination(IServer server) {
+		CleanTerminationRunnable tr = new CleanTerminationRunnable(server);
+		Display.getDefault().syncExec(tr);
+		return tr.shouldTerminate();
+	}
+	
+	public static class CleanTerminationRunnable implements Runnable {
+		IServer server;
+		boolean terminate;
+		
+		CleanTerminationRunnable(IServer server) {
+			this.server = server;
+		}
+
+		public void run() {
+			Shell shell = getShell();
+			TerminationDialog dialog = new TerminationDialog(shell,
+					Messages.cleanTerminateRuntimeInstanceDialogTitle,
+					NLS.bind(Messages.cleanTerminateRuntimeInstanceMessage, server.getName()));
+			dialog.open();
+			if (dialog.getReturnCode() == IDialogConstants.OK_ID) {
+				terminate = true;
+			}
+		}
+	
+		boolean shouldTerminate() {
+			return terminate;
+		}
+	}
+
+	/**
+	 * Convenience method to get a shell
+	 *
+	 * @return Shell
+	 */
+	public static Shell getShell() {
+		return getStandardDisplay().getActiveShell();
+	}
+	
+	/**
+	 * Register an image with the registry.
+	 * @param key java.lang.String
+	 * @param partialURL java.lang.String
+	 */
+	private void registerImage(ImageRegistry registry, String key, String partialURL) {
+		if (ICON_BASE_URL == null) {
+			String pathSuffix = "icons/";
+			ICON_BASE_URL = singleton.getBundle().getEntry(pathSuffix);
+		}
+
+		try {
+			ImageDescriptor id = ImageDescriptor.createFromURL(new URL(ICON_BASE_URL, partialURL));
+			registry.put(key, id);
+			imageDescriptors.put(key, id);
+		} catch (Exception e) {
+			Trace.trace(Trace.WARNING, "Error registering image", e);
+		}
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/GenericOSGILaunchConfigurationTabGroup.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/GenericOSGILaunchConfigurationTabGroup.java
new file mode 100644
index 0000000..c8e02c4
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/GenericOSGILaunchConfigurationTabGroup.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+
+package org.eclipse.libra.framework.ui;
+
+import org.eclipse.debug.ui.*;
+import org.eclipse.debug.ui.sourcelookup.SourceLookupTab;
+import org.eclipse.jdt.debug.ui.launchConfigurations.JavaArgumentsTab;
+import org.eclipse.jdt.debug.ui.launchConfigurations.JavaClasspathTab;
+import org.eclipse.wst.server.ui.ServerLaunchConfigurationTab;
+
+
+public class GenericOSGILaunchConfigurationTabGroup extends AbstractLaunchConfigurationTabGroup {
+	/*
+	 * @see ILaunchConfigurationTabGroup#createTabs(ILaunchConfigurationDialog, String)
+	 */
+	public void createTabs(ILaunchConfigurationDialog dialog, String mode) {
+		ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[6];
+		tabs[0] = new ServerLaunchConfigurationTab(new String[] { "org.eclipse.libra" });
+		tabs[0].setLaunchConfigurationDialog(dialog);
+		tabs[1] = new JavaArgumentsTab();
+		tabs[1].setLaunchConfigurationDialog(dialog);
+		tabs[2] = new JavaClasspathTab();
+		tabs[2].setLaunchConfigurationDialog(dialog);
+		tabs[3] = new SourceLookupTab();
+		tabs[3].setLaunchConfigurationDialog(dialog);
+		tabs[4] = new EnvironmentTab();
+		tabs[4].setLaunchConfigurationDialog(dialog);
+		tabs[5] = new CommonTab();
+		tabs[5].setLaunchConfigurationDialog(dialog);
+		setTabs(tabs);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/JMXPropertiesEditorSection.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/JMXPropertiesEditorSection.java
new file mode 100644
index 0000000..7f0beec
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/JMXPropertiesEditorSection.java
@@ -0,0 +1,236 @@
+/*******************************************************************************
+ *    Copyright (c) 2012 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *       Naci Dai, Murat Yener 
+ *******************************************************************************/
+
+package org.eclipse.libra.framework.ui;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import org.eclipse.libra.framework.core.IOSGIFrameworkInstance;
+import org.eclipse.libra.framework.ui.internal.SWTUtil;
+import org.eclipse.libra.framework.ui.internal.editor.ServerChangedCommand;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.IFormColors;
+import org.eclipse.ui.forms.widgets.ExpandableComposite;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.help.IWorkbenchHelpSystem;
+import org.eclipse.wst.server.ui.editor.ServerEditorSection;
+
+public class JMXPropertiesEditorSection extends ServerEditorSection {
+	protected Section section;
+	protected IOSGIFrameworkInstance frameworkInstance;
+
+	protected PropertyChangeListener listener;
+	Button jmxEnabled;
+	Text jmxPortText;
+
+	protected boolean updating = false;
+
+	public JMXPropertiesEditorSection() {
+		super();
+	}
+
+	/**
+	 * Add listeners to detect undo changes and publishing of the server.
+	 */
+	protected void addChangeListeners() {
+		listener = new PropertyChangeListener() {
+			public void propertyChange(PropertyChangeEvent event) {
+				if (updating)
+					return;
+				updating = true;
+				if (IOSGIFrameworkInstance.PROPERTY_JMX_PORT.equals(event
+						.getPropertyName())
+						|| IOSGIFrameworkInstance.PROPERTY_JMX_ENABLED
+								.equals(event.getPropertyName())) {
+					validate();
+				}
+				updating = false;
+			}
+		};
+		server.addPropertyChangeListener(listener);
+
+	}
+
+	/**
+	 * Creates the SWT controls for this workbench part.
+	 * 
+	 * @param parent
+	 *            the parent control
+	 */
+	public void createSection(Composite parent) {
+		super.createSection(parent);
+		FormToolkit toolkit = getFormToolkit(parent.getDisplay());
+		section = toolkit.createSection(parent, ExpandableComposite.TWISTIE
+				| ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR
+				| Section.DESCRIPTION | ExpandableComposite.FOCUS_TITLE);
+		section.setText(Messages.jmxSection);
+		section.setDescription(Messages.jmxSectionDescription);
+		section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL
+				| GridData.VERTICAL_ALIGN_FILL));
+
+		Composite composite = toolkit.createComposite(section);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 3;
+		layout.marginHeight = 5;
+		layout.marginWidth = 10;
+		layout.verticalSpacing = 5;
+		layout.horizontalSpacing = 15;
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL
+				| GridData.VERTICAL_ALIGN_FILL));
+		IWorkbenchHelpSystem whs = PlatformUI.getWorkbench().getHelpSystem();
+		whs.setHelp(composite, ContextIds.FRAMEWORK_INSTANCE_EDITOR);
+		whs.setHelp(section, ContextIds.FRAMEWORK_INSTANCE_EDITOR);
+		toolkit.paintBordersFor(composite);
+		section.setClient(composite);
+
+		// JMX Selection	
+		jmxEnabled = SWTUtil.createCheckButton(composite, Messages.jmxEnabled, 1);
+		jmxEnabled.addSelectionListener(new SelectionListener() {
+			
+			public void widgetSelected(SelectionEvent event) {
+				handleEdit();
+			}
+			
+			public void widgetDefaultSelected(SelectionEvent event) {
+				handleEdit();
+			}
+		});
+		
+		Label label = createLabel(toolkit, composite, Messages.jmxSection);
+		GridData data = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
+		label.setLayoutData(data);
+		jmxPortText = SWTUtil.createText(composite, SWT.SINGLE | SWT.BORDER, 1);
+		jmxPortText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				handleEdit();
+			}
+		});
+
+		initialize();
+	}
+
+	protected Label createLabel(FormToolkit toolkit, Composite parent,
+			String text) {
+		Label label = toolkit.createLabel(parent, text);
+		label.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
+		return label;
+	}
+
+	/**
+	 * @see ServerEditorSection#dispose()
+	 */
+	public void dispose() {
+		//do nothing
+	}
+
+	/**
+	 * @see ServerEditorSection#init(IEditorSite, IEditorInput)
+	 */
+	public void init(IEditorSite site, IEditorInput input) {
+		super.init(site, input);
+
+		// Cache workspace and default deploy paths
+		if (server != null) {
+			frameworkInstance = (IOSGIFrameworkInstance) server.loadAdapter(
+					IOSGIFrameworkInstance.class, null);
+			addChangeListeners();
+		}
+		initialize();
+	}
+
+	/**
+	 * Initialize the fields in this editor.
+	 */
+	protected void initialize() {
+		if (frameworkInstance == null)
+			return;
+		updating = true;
+
+		int port = frameworkInstance.getJMXPort();
+		boolean enabled = frameworkInstance.getJMXEnabled();
+
+		if (jmxPortText != null) {
+			jmxPortText.setText("" + port);
+			jmxPortText.setEnabled(enabled);
+		}
+		if (jmxEnabled != null) {
+			jmxEnabled.setSelection(enabled);
+		}
+		updating = false;
+		validate();
+	}
+
+	protected void validate() {
+		if (frameworkInstance != null && jmxEnabled != null && jmxPortText != null ) {
+			boolean en = jmxEnabled.getSelection();
+			String port = jmxPortText.getText();
+			if (en) {
+				try {
+					Integer.parseInt(port);
+				} catch (Exception ex) {
+					setErrorMessage(Messages.jmxInvalidPort);
+				}
+			}
+		}
+		// All is okay, clear any previous error
+		setErrorMessage(null);
+	}
+
+	void makeDirty() {
+		//This command does nothing but execute sets the dirty flag
+		//for the editor because the content of the target definition has
+		//changed
+		execute(new ServerChangedCommand(frameworkInstance));
+	}
+
+	protected void handleEdit() {
+
+		if (frameworkInstance != null && updating == false) {
+			boolean enabledNewValue = jmxEnabled.getSelection();
+			String portNewValue = jmxPortText.getText();
+
+			boolean enabledOldValue = frameworkInstance.getJMXEnabled();
+			int portOldValue = frameworkInstance.getJMXPort();
+			try {
+				int p = portOldValue;
+				if (enabledNewValue) {
+					p = Integer.parseInt(portNewValue);
+					if(portOldValue != p)
+						frameworkInstance.setJMXPort(p);
+				}
+				frameworkInstance.setJMXEnabled(enabledNewValue);
+				jmxPortText.setEnabled(enabledNewValue);
+				if(p != portOldValue || enabledNewValue != enabledOldValue)
+					makeDirty();
+			} catch (Exception ex) {
+				//If the port cannot be set (i.e. not int)
+			}
+
+		}
+
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/Messages.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/Messages.java
new file mode 100644
index 0000000..f159a68
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/Messages.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.ui;
+
+import org.eclipse.libra.framework.ui.FrameworkUIPlugin;
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Translated messages.
+ */
+public class Messages extends NLS {
+	
+	public static String wizardTitle;
+	public static String wizardDescription;
+	public static String runtimeName;
+	public static String installDir;
+	public static String browse;
+	public static String install;
+	public static String installDialogTitle;
+	public static String selectInstallDir;
+	public static String installedJRE;
+	public static String installedJREs;
+	public static String runtimeDefaultJRE;
+	public static String editorAdd;
+	public static String editorEdit;
+	public static String editorRemove;
+	public static String editorBrowse;
+
+	public static String configurationEditorOSGIModulesPageTitle;
+	public static String configurationEditorOSGIModulesSection;
+	public static String configurationEditorOSGIModulesDescription;
+	
+	public static String configurationEditorOSGIVersionColumn;
+	public static String configurationEditorOSGIIdColumn;
+	public static String configurationEditorOSGINameColumn;
+	
+	public static String configurationEditorAddOSGIModule;
+	
+	public static String serverEditorLocationsSection;
+	public static String serverEditorLocationsDescription;
+	public static String serverEditorLocationsDescription2;
+	public static String serverEditorGeneralSection;
+	public static String serverEditorGeneralDescription;
+	public static String serverEditorServerDirMetadata;
+	public static String serverEditorServerDirInstall;
+	public static String serverEditorServerDirCustom;
+	public static String serverEditorSetInternalServerDirLink;
+	public static String serverEditorSetInternalServerDirLink2;
+	public static String serverEditorSetInstallServerDirLink;
+	public static String serverEditorSetInstallServerDirLink2;
+	public static String serverEditorSetDefaultDeployDirLink;
+	public static String serverEditorSetDefaultDeployDirLink2;
+	public static String serverEditorServerDir;
+	public static String serverEditorDeployDir;
+	public static String serverEditorTestEnvironment;
+	public static String serverEditorNoPublish;
+	public static String serverEditorSeparateContextFiles;
+	public static String serverEditorSecure;
+	public static String serverEditorDebugMode;
+	public static String serverEditorNotSupported;
+	public static String serverEditorDoesNotModify;
+	public static String serverEditorTakesControl;
+	public static String errorServerMustBeStopped;
+	public static String errorServerDirIsRoot;
+	public static String errorServerDirUnderRoot;
+	public static String errorServerDirCustomNotMetadata;
+	public static String errorServerDirCustomNotInstall;
+	public static String errorDeployDirNotSpecified;
+	public static String serverEditorBrowseServerMessage;
+	public static String serverEditorBrowseDeployMessage;
+	public static String errorDefaultDialogTitle;
+	public static String confirmCleanWorkDirTitle;
+	public static String cleanServerStateChanging;
+	public static String cleanModuleWorkDir;
+	public static String cleanServerWorkDir;
+	public static String cleanServerRunning;
+	public static String cleanServerTask;
+	public static String errorCouldNotCleanStateChange;
+	public static String errorCouldNotCleanCantStop;
+	public static String errorCouldNotCleanStopFailed;
+	public static String errorCantIdentifyWebApp;
+	public static String errorCantDeleteServerNotStopped;
+	public static String errorErrorDuringClean;
+	public static String errorErrorDuringCleanWasRunning;
+	public static String errorCleanCantRestart;
+	public static String contextCleanup;
+	
+
+
+	
+	public static String configurationEditorTargetDefinitionTitle;
+	public static String cleanTerminateRuntimeInstanceDialogTitle;
+	public static String cleanTerminateRuntimeInstanceMessage;
+	public static String javaProfileSection;
+	public static String javaProfileSectionDescription;
+
+	public static String jmxSection;
+	public static String jmxSectionDescription;
+	public static String jmxInvalidPort;
+	public static String jmxEnabled;
+
+	static {
+		NLS.initializeMessages(FrameworkUIPlugin.PLUGIN_ID + ".Messages", Messages.class);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/Messages.properties b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/Messages.properties
new file mode 100644
index 0000000..b033b0e
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/Messages.properties
@@ -0,0 +1,137 @@
+###############################################################################
+#    Copyright (c) 2010 Eteration A.S. and others.
+#    All rights reserved. This program and the accompanying materials
+#    are made available under the terms of the Eclipse Public License v1.0
+#    which accompanies this distribution, and is available at
+#    http://www.eclipse.org/legal/epl-v10.html
+#    
+#     Contributors:
+#        IBM Corporation - initial API and implementation
+#           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+#           org.eclipse.jst.server.core
+#           org.eclipse.jst.server.ui
+#           
+#       Naci Dai and Murat Yener, Eteration A.S. 
+###############################################################################
+
+
+# --------------- General UI ---------------
+
+cleanTerminateRuntimeInstanceDialogTitle=Terminating framework instance
+cleanTerminateRuntimeInstanceMessage=Terminating framework instance
+
+runtimeName=Na&me:
+browse=B&rowse...
+install=Download and Install...
+installDialogTitle=Download and Install
+installDir=OSGI Framework installation &directory:
+installedJRE=&JRE:
+installedJREs=&Installed JREs...
+selectInstallDir=Select osgi framework installation directory.
+runtimeDefaultJRE=Workbench default JRE
+contextCleanup=The context root of module {0} has been modified. Do you want to update the framework configuration to match?
+
+# New Felix Runtime Instance Wizard
+wizardTitle=OSGi Service Platform
+wizardDescription=Specify the installation directory
+
+# --------------- Editors ---------------
+
+configurationEditorTargetDefinitionTitle=Update target definition for the osgi framework instance
+# General text used in both editors
+editorRemove=Remove
+editorAdd=Add...
+editorEdit=Edit...
+editorBrowse=Browse...
+
+# --- Configuration Editor ---
+configurationEditorOSGIModulesPageTitle=OSGi Module Composition
+configurationEditorOSGIModulesSection=Bundles from workspace
+configurationEditorOSGIModulesDescription=Configure the bundles that will be deployed framework.
+
+# Fields
+configurationEditorOSGIVersionColumn=Version
+configurationEditorOSGIIdColumn=Id
+configurationEditorOSGINameColumn=Name
+configurationEditorAddOSGIModule=Add OSGi Bundle...
+
+
+# --- framework Editor ---
+serverEditorLocationsSection=OSGi framework instance locations
+serverEditorLocationsDescription=Specify the location path. Bundles are deployed here and framework instance will run from this location.  No modules must be published here to make changes.
+serverEditorLocationsDescription2=Specify the location path. Bundles are deployed here and framework instance will run from this location.  No modules must be published here to make changes.
+serverEditorGeneralSection=Framework Options
+serverEditorGeneralDescription=Enter settings for the framework.
+
+# Link Fields 
+serverEditorSetInternalServerDirLink=Set framework path to internally supplied location
+serverEditorSetInternalServerDirLink2=Set framework path to internally supplied location (currently set)
+serverEditorSetInstallServerDirLink=Set framework path to the location of the installation
+serverEditorSetInstallServerDirLink2=Set framework path to the location of the installation (currently set)
+serverEditorSetDefaultDeployDirLink=Set deploy path to the default value
+serverEditorSetDefaultDeployDirLink2=Set deploy path to the default value (currently set)
+
+# Fields
+# Note: The argument for the following three strings will be the string for
+#       one of serverEditorDoesNotModify or serverEditorTakesControl or and empty string.
+serverEditorServerDirMetadata=Use workspace metadata {0}
+serverEditorServerDirInstall=Use OSGi Framework installation {0}
+serverEditorServerDirCustom=Use custom location {0}
+serverEditorServerDir=Framework instance path:
+serverEditorDeployDir=Deploy path:
+serverEditorSecure=Enable security
+# Note: The argument for the following string will be the serverEditorNotSupported string or an empty string
+serverEditorDebugMode=Enable felix debug logging {0}
+serverEditorTestEnvironment=Run modules directly from the workspace (do not modify the OSGI installation)
+# Note: The argument for the following string will be the serverEditorNotSupported string or an empty string
+serverEditorNoPublish=Serve modules without publishing {0}
+serverEditorSeparateContextFiles=Publish module contexts to separate XML files {0}
+errorServerDirIsRoot=The instance path may not be set to the the root of your workspace.
+errorServerDirUnderRoot=The instance path may not be under the \"{0}\" folder of your workspace unless it is the workspace metadata location.
+# Note: The argument for the following string will be the string for serverEditorServerDirMetadata with a blank string for its argument
+errorServerDirCustomNotMetadata=Only the \"{0}\" selection may set the framework path to the workspace metadata location.
+# Note: The argument for the following string will be the string for serverEditorServerDirInstall with a blank string for its argument
+errorServerDirCustomNotInstall=Only the \"{0}\" selection may set the server path to the Framework installation.
+errorDeployDirNotSpecified=A deploy path must be specified.
+serverEditorNotSupported=(not supported by this runtime version)
+serverEditorDoesNotModify=(does not modify runtime installation)
+serverEditorTakesControl=(takes control of runtime installation)
+errorServerMustBeStopped=The runtime must be stopped before a change to the \"{0}\" setting can be saved.
+
+# Browse for framework dialog
+serverEditorBrowseServerMessage=Select a runtime instance directory.
+
+# Browse for Deploy dialog
+serverEditorBrowseDeployMessage=Select a deploy directory.
+
+# --- Clean Work Directory ---
+confirmCleanWorkDirTitle=Confirm Clean Work Directory
+cleanServerStateChanging=The state of {0} is in transition or unknown.  Try again when the framework has reached a stable state.
+cleanModuleWorkDir=Clean work directory for module {0} on {1}.
+cleanServerWorkDir=Clean work directories for all Web applications on {0}.
+cleanServerRunning=The framework must be stopped to clean the work directory.  Clicking OK will include stopping and restarting the framework.
+cleanServerTask=Cleaning {0} work directory
+
+# --- Error Strings ---
+errorDefaultDialogTitle=OSGi Framework Error
+
+# --- Clean Work Directory Errors ---
+errorCouldNotCleanStateChange=Clean operation was aborted because {0} independently changed state after confirmation dialog was displayed.  Try again once the framework has reached a stable state.
+errorCouldNotCleanCantStop={0} can not be stopped at this time.  Try again when the framework is stopped or can be stopped.
+errorCouldNotCleanStopFailed={0} failed to stop.  Try again when the framework is stopped or can be stopped.
+
+errorCantIdentifyWebApp=Module {0} could not be associated with a Web application on a framework.
+errorCantDeleteServerNotStopped={0} work directory could not be deleted.  framework was not stopped.  Try again when the framework is stopped or can be stopped.
+errorErrorDuringClean=An error occurred while cleaning {0} work directory.
+errorErrorDuringCleanWasRunning=An error occurred while cleaning {0} work directory.  {1} will not be automatically restarted.
+
+errorCleanCantRestart={0} is unable to restart at this time.
+
+
+javaProfileSection= Runtime Java Profile
+javaProfileSectionDescription = Choose the suitable profile that fits your runtime environment. The selected profile will determine the list of classes and packages that are visible from the JRE.
+
+jmxSection = JMX Port
+jmxSectionDescription = Choose the suitable properties that enables the JMX Console for your runtime. Your JMX server will expect connections using selected port
+jmxInvalidPort = JMX Port should be an integer value
+jmxEnabled = Enable JMX Console
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/OSGIFrameworkComposite.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/OSGIFrameworkComposite.java
new file mode 100644
index 0000000..32a9fb5
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/OSGIFrameworkComposite.java
@@ -0,0 +1,404 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+
+package org.eclipse.libra.framework.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jdt.launching.IVMInstallType;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.preference.IPreferenceNode;
+import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.jface.preference.PreferenceManager;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.libra.framework.core.IOSGIFrameworkWorkingCopy;
+import org.eclipse.libra.framework.ui.internal.SWTUtil;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
+import org.eclipse.wst.server.core.TaskModel;
+import org.eclipse.wst.server.core.internal.IInstallableRuntime;
+import org.eclipse.wst.server.core.internal.ServerPlugin;
+import org.eclipse.wst.server.ui.internal.wizard.TaskWizard;
+import org.eclipse.wst.server.ui.internal.wizard.fragment.LicenseWizardFragment;
+import org.eclipse.wst.server.ui.wizard.IWizardHandle;
+import org.eclipse.wst.server.ui.wizard.WizardFragment;
+
+
+/**
+ * Wizard page to set the OSGI framework install directory.
+ */
+public class OSGIFrameworkComposite extends Composite {
+	protected IRuntimeWorkingCopy runtimeWC;
+	protected IOSGIFrameworkWorkingCopy runtime;
+	
+	protected IWizardHandle wizard;
+	
+	protected Text installDir;
+	protected Text name;
+	protected Combo combo;
+	protected List installedJREs;
+	protected String[] jreNames;
+	protected IInstallableRuntime ir;
+	protected Job installRuntimeJob;
+	protected IJobChangeListener jobListener;
+	protected Label installLabel;
+	protected Button install;
+
+	/**
+	 * OSGIFrameworkComposite wizard page constructor comment.
+	 * 
+	 * @param parent the parent composite
+	 * @param wizard the wizard handle
+	 */
+	protected OSGIFrameworkComposite(Composite parent, IWizardHandle wizard) {
+		super(parent, SWT.NONE);
+		this.wizard = wizard;
+		
+		wizard.setTitle(Messages.wizardTitle);
+		wizard.setDescription(Messages.wizardDescription);
+		//wizard.setImageDescriptor(FrameworkUIPlugin.getImageDescriptor(FrameworkUIPlugin.IMG_WIZ_FELIX));
+		
+		createControl();
+	}
+
+	protected void setRuntime(IRuntimeWorkingCopy newRuntime) {
+		if (newRuntime == null) {
+			runtimeWC = null;
+			runtime = null;
+		} else {
+			runtimeWC = newRuntime;
+			runtime = (IOSGIFrameworkWorkingCopy) newRuntime.loadAdapter(IOSGIFrameworkWorkingCopy.class, null);
+		}
+		
+		if (runtimeWC == null) {
+			ir = null;
+			install.setEnabled(false);
+			installLabel.setText("");
+		} else {
+			ir = ServerPlugin.findInstallableRuntime(runtimeWC.getRuntimeType().getId());
+			if (ir != null) {
+				install.setEnabled(true);
+				installLabel.setText(ir.getName());
+			}
+		}
+		
+		init();
+		validate();
+	}
+
+	public void dispose() {
+		super.dispose();
+		if (installRuntimeJob != null) {
+			installRuntimeJob.removeJobChangeListener(jobListener);
+		}
+	}
+
+	/**
+	 * Provide a wizard page to change the Felix installation directory.
+	 */
+	protected void createControl() {
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 2;
+		setLayout(layout);
+		setLayoutData(new GridData(GridData.FILL_BOTH));
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, ContextIds.FRAMEWORK_COMPOSITE);
+		
+		Label label = new Label(this, SWT.NONE);
+		label.setText(Messages.runtimeName);
+		GridData data = new GridData();
+		data.horizontalSpan = 2;
+		label.setLayoutData(data);
+		
+		name = new Text(this, SWT.BORDER);
+		data = new GridData(GridData.FILL_HORIZONTAL);
+		name.setLayoutData(data);
+		name.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				runtimeWC.setName(name.getText());
+				validate();
+			}
+		});
+	
+		label = new Label(this, SWT.NONE);
+		label.setText(Messages.installDir);
+		data = new GridData();
+		data.horizontalSpan = 2;
+		label.setLayoutData(data);
+	
+		installDir = new Text(this, SWT.BORDER);
+		data = new GridData(GridData.FILL_HORIZONTAL);
+		installDir.setLayoutData(data);
+		installDir.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				runtimeWC.setLocation(new Path(installDir.getText()));
+				validate();
+			}
+		});
+		
+		Button browse = SWTUtil.createButton(this, Messages.browse);
+		browse.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent se) {
+				DirectoryDialog dialog = new DirectoryDialog(OSGIFrameworkComposite.this.getShell());
+				dialog.setMessage(Messages.selectInstallDir);
+				dialog.setFilterPath(installDir.getText());
+				String selectedDirectory = dialog.open();
+				if (selectedDirectory != null)
+					installDir.setText(selectedDirectory);
+			}
+		});
+		
+		installLabel = new Label(this, SWT.RIGHT);
+		data = new GridData(GridData.FILL_HORIZONTAL);
+		data.horizontalIndent = 10;
+		installLabel.setLayoutData(data);
+		
+		install = SWTUtil.createButton(this, Messages.install);
+		install.setEnabled(false);
+		install.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent se) {
+				String license = null;
+				try {
+					license = ir.getLicense(new NullProgressMonitor());
+				} catch (CoreException e) {
+					Trace.trace(Trace.SEVERE, "Error getting license", e);
+				}
+				TaskModel taskModel = new TaskModel();
+				taskModel.putObject(LicenseWizardFragment.LICENSE, license);
+				TaskWizard wizard2 = new TaskWizard(Messages.installDialogTitle, new WizardFragment() {
+					protected void createChildFragments(List list) {
+						list.add(new LicenseWizardFragment());
+					}
+				}, taskModel);
+				
+				WizardDialog dialog2 = new WizardDialog(getShell(), wizard2);
+				if (dialog2.open() == Window.CANCEL)
+					return;
+				
+				DirectoryDialog dialog = new DirectoryDialog(OSGIFrameworkComposite.this.getShell());
+				dialog.setMessage(Messages.selectInstallDir);
+				dialog.setFilterPath(installDir.getText());
+				String selectedDirectory = dialog.open();
+				if (selectedDirectory != null) {
+//					ir.install(new Path(selectedDirectory));
+					final IPath installPath = new Path(selectedDirectory);
+					installRuntimeJob = new Job("Installing osgi runtime environment") {
+						public boolean belongsTo(Object family) {
+							return ServerPlugin.PLUGIN_ID.equals(family);
+						}
+						
+						protected IStatus run(IProgressMonitor monitor) {
+							try {
+								ir.install(installPath, monitor);
+							} catch (CoreException ce) {
+								return ce.getStatus();
+							}
+							
+							return Status.OK_STATUS;
+						}
+					};
+					
+					installDir.setText(selectedDirectory);
+					jobListener = new JobChangeAdapter() {
+						public void done(IJobChangeEvent event) {
+							installRuntimeJob.removeJobChangeListener(this);
+							installRuntimeJob = null;
+							Display.getDefault().asyncExec(new Runnable() {
+								public void run() {
+									if (!isDisposed()) {
+										validate();
+									}
+								}
+					        });
+						}
+					};
+					installRuntimeJob.addJobChangeListener(jobListener);
+					installRuntimeJob.schedule();
+				}
+			}
+		});
+		
+		updateJREs();
+		
+		// JDK location
+		label = new Label(this, SWT.NONE);
+		label.setText(Messages.installedJRE);
+		data = new GridData();
+		data.horizontalSpan = 2;
+		label.setLayoutData(data);
+		
+		combo = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
+		combo.setItems(jreNames);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+		combo.setLayoutData(data);
+		
+		combo.addSelectionListener(new SelectionListener() {
+			public void widgetSelected(SelectionEvent e) {
+				int sel = combo.getSelectionIndex();
+				IVMInstall vmInstall = null;
+				if (sel > 0)
+					vmInstall = (IVMInstall) installedJREs.get(sel - 1);
+				
+				runtime.setVMInstall(vmInstall);
+				validate();
+			}
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				widgetSelected(e);
+			}
+		});
+		
+		Button button = SWTUtil.createButton(this, Messages.installedJREs);
+		button.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				String currentVM = combo.getText();
+				if (showPreferencePage()) {
+					updateJREs();
+					combo.setItems(jreNames);
+					combo.setText(currentVM);
+					if (combo.getSelectionIndex() == -1)
+						combo.select(0);
+					validate();
+				}
+			}
+		});
+		
+		init();
+		validate();
+		
+		Dialog.applyDialogFont(this);
+		
+		name.forceFocus();
+	}
+
+	protected void updateJREs() {
+		// get all installed JVMs
+		installedJREs = new ArrayList();
+		IVMInstallType[] vmInstallTypes = JavaRuntime.getVMInstallTypes();
+		int size = vmInstallTypes.length;
+		for (int i = 0; i < size; i++) {
+			IVMInstall[] vmInstalls = vmInstallTypes[i].getVMInstalls();
+			int size2 = vmInstalls.length;
+			for (int j = 0; j < size2; j++) {
+				installedJREs.add(vmInstalls[j]);
+			}
+		}
+		
+		// get names
+		size = installedJREs.size();
+		jreNames = new String[size+1];
+		jreNames[0] = Messages.runtimeDefaultJRE;
+		for (int i = 0; i < size; i++) {
+			IVMInstall vmInstall = (IVMInstall) installedJREs.get(i);
+			jreNames[i+1] = vmInstall.getName();
+		}
+	}
+
+	protected boolean showPreferencePage() {
+		String id = "org.eclipse.jdt.debug.ui.preferences.VMPreferencePage";
+		
+		// should be using the following API, but it only allows a single preference page instance.
+		// see bug 168211 for details
+		//PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(getShell(), id, new String[] { id }, null);
+		//return (dialog.open() == Window.OK);		
+		
+		PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager();
+		IPreferenceNode node = manager.find("org.eclipse.jdt.ui.preferences.JavaBasePreferencePage").findSubNode(id);
+		PreferenceManager manager2 = new PreferenceManager();
+		manager2.addToRoot(node);
+		PreferenceDialog dialog = new PreferenceDialog(getShell(), manager2);
+		dialog.create();
+		return (dialog.open() == Window.OK);
+	}
+
+	protected void init() {
+		if (name == null || runtime == null)
+			return;
+		
+		if (runtimeWC.getName() != null)
+			name.setText(runtimeWC.getName());
+		else
+			name.setText("");
+		
+		if (runtimeWC.getLocation() != null)
+			installDir.setText(runtimeWC.getLocation().toOSString());
+		else
+			installDir.setText("");
+		
+		// set selection
+		if (runtime.isUsingDefaultJRE())
+			combo.select(0);
+		else {
+			boolean found = false;
+			int size = installedJREs.size();
+			for (int i = 0; i < size; i++) {
+				IVMInstall vmInstall = (IVMInstall) installedJREs.get(i);
+				if (vmInstall.equals(runtime.getVMInstall())) {
+					combo.select(i + 1);
+					found = true;
+				}
+			}
+			if (!found)
+				combo.select(0);
+		}
+	}
+
+	protected void validate() {
+		if (runtime == null) {
+			wizard.setMessage("", IMessageProvider.ERROR);
+			return;
+		}
+		
+		IStatus status = runtimeWC.validate(null);
+		if (status == null || status.isOK())
+			wizard.setMessage(null, IMessageProvider.NONE);
+		else if (status.getSeverity() == IStatus.WARNING)
+			wizard.setMessage(status.getMessage(), IMessageProvider.WARNING);
+		else
+			wizard.setMessage(status.getMessage(), IMessageProvider.ERROR);
+		wizard.update();
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/OSGIFrameworkWizardFragment.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/OSGIFrameworkWizardFragment.java
new file mode 100644
index 0000000..f179bbc
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/OSGIFrameworkWizardFragment.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+
+package org.eclipse.libra.framework.ui;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.libra.framework.core.FrameworkCorePlugin;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
+import org.eclipse.wst.server.core.TaskModel;
+import org.eclipse.wst.server.ui.wizard.IWizardHandle;
+import org.eclipse.wst.server.ui.wizard.WizardFragment;
+
+
+
+/**
+ * 
+ */
+public class OSGIFrameworkWizardFragment extends WizardFragment {
+	protected OSGIFrameworkComposite comp;
+
+	public OSGIFrameworkWizardFragment() {
+		// do nothing
+	}
+
+	public boolean hasComposite() {
+		return true;
+	}
+
+	public boolean isComplete() {
+		IRuntimeWorkingCopy runtime = (IRuntimeWorkingCopy) getTaskModel().getObject(TaskModel.TASK_RUNTIME);
+		
+		if (runtime == null)
+			return false;
+		IStatus status = runtime.validate(null);
+		return (status == null || status.getSeverity() != IStatus.ERROR);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.server.ui.task.WizardFragment#createComposite()
+	 */
+	public Composite createComposite(Composite parent, IWizardHandle wizard) {
+		comp = new OSGIFrameworkComposite(parent, wizard);
+		return comp;
+	}
+
+	public void enter() {
+		if (comp != null) {
+			IRuntimeWorkingCopy runtime = (IRuntimeWorkingCopy) getTaskModel().getObject(TaskModel.TASK_RUNTIME);
+			comp.setRuntime(runtime);
+		}
+	}
+
+	public void exit() {
+		IRuntimeWorkingCopy runtime = (IRuntimeWorkingCopy) getTaskModel().getObject(TaskModel.TASK_RUNTIME);
+		IPath path = runtime.getLocation();
+		if (runtime.validate(null).getSeverity() != IStatus.ERROR)
+			FrameworkCorePlugin.setPreference("location" + runtime.getRuntimeType().getId(), path.toString());
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/Trace.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/Trace.java
new file mode 100644
index 0000000..5cbee20
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/Trace.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+
+package org.eclipse.libra.framework.ui;
+
+
+/**
+ * Helper class to route trace output.
+ */
+public class Trace {
+	public static final byte CONFIG = 0;
+	public static final byte WARNING = 1;
+	public static final byte SEVERE = 2;
+	public static final byte FINEST = 3;
+	public static final byte FINER = 4;
+
+	/**
+	 * Trace constructor comment.
+	 */
+	private Trace() {
+		super();
+	}
+
+	/**
+	 * Trace the given text.
+	 *
+	 * @param level the trace level
+	 * @param s a message
+	 */
+	public static void trace(byte level, String s) {
+		Trace.trace(level, s, null);
+	}
+
+	/**
+	 * Trace the given message and exception.
+	 *
+	 * @param level the trace level
+	 * @param s a message
+	 * @param t a throwable
+	 */
+	public static void trace(byte level, String s, Throwable t) {
+		if (!FrameworkUIPlugin.getInstance().isDebugging())
+			return;
+
+		System.out.println(FrameworkUIPlugin.PLUGIN_ID + " " + s);
+		if (t != null)
+			t.printStackTrace();
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/ModulePublisherDelegate.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/ModulePublisherDelegate.java
new file mode 100644
index 0000000..b9cd128
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/ModulePublisherDelegate.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.ui.internal;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.libra.framework.core.FrameworkInstanceDelegate;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.TaskModel;
+import org.eclipse.wst.server.core.model.PublisherDelegate;
+
+
+public class ModulePublisherDelegate extends PublisherDelegate {
+	
+	public IStatus execute(int kind, IProgressMonitor monitor, IAdaptable info) throws CoreException {
+		// this publisher only runs when there is a UI
+		if (info == null)
+			return Status.OK_STATUS;
+		
+		final Shell shell = (Shell) info.getAdapter(Shell.class);
+		if (shell == null)
+			return Status.OK_STATUS;
+		
+		IServer server = (IServer) getTaskModel().getObject(TaskModel.TASK_SERVER);
+		FrameworkInstanceDelegate runtimeInstance = (FrameworkInstanceDelegate) server.loadAdapter(FrameworkInstanceDelegate.class, monitor);
+		
+		List modules = (List) getTaskModel().getObject(TaskModel.TASK_MODULES);
+		int size = modules.size();
+		for (int i = 0; i < size; i++) {
+			IModule[] module = (IModule[]) modules.get(i);
+			final IModule m = module[module.length - 1];
+			if (m != null) {
+				// TODO OSAMI  Module Publish Starts Here
+			}
+		}
+		
+		return Status.OK_STATUS;
+	}
+
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/SWTUtil.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/SWTUtil.java
new file mode 100644
index 0000000..14c4110
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/SWTUtil.java
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+
+package org.eclipse.libra.framework.ui.internal;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.FontMetrics;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Text;
+/**
+ * SWT Utility class.
+ */
+public class SWTUtil {
+	private static FontMetrics fontMetrics;
+
+	protected static void initializeDialogUnits(Control testControl) {
+		// Compute and store a font metric
+		GC gc = new GC(testControl);
+		gc.setFont(JFaceResources.getDialogFont());
+		fontMetrics = gc.getFontMetrics();
+		gc.dispose();
+	}
+
+	/**
+	 * Returns a width hint for a button control.
+	 */
+	protected static int getButtonWidthHint(Button button) {
+		int widthHint = Dialog.convertHorizontalDLUsToPixels(fontMetrics, IDialogConstants.BUTTON_WIDTH);
+		return Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
+	}
+
+    /**
+     * Sets width and height hint for the button control.
+     * <b>Note:</b> This is a NOP if the button's layout data is not
+     * an instance of <code>GridData</code>.
+     * 
+     * @param    the button for which to set the dimension hint
+     */
+    public static void setButtonDimensionHint(Button button) {
+        Object gd = button.getLayoutData();
+        if (gd instanceof GridData) {
+            ((GridData) gd).widthHint = getButtonWidthHint(button);
+            ((GridData) gd).horizontalAlignment = GridData.FILL;
+        }
+    }
+	   
+	/**
+	 * Create a new button with the standard size.
+	 * 
+	 * @param comp the component to add the button to
+	 * @param label the button label
+	 * @return a button
+	 */
+	public static Button createButton(Composite comp, String label) {
+		Button b = new Button(comp, SWT.PUSH);
+		b.setText(label);
+		if (fontMetrics == null)
+			initializeDialogUnits(comp);
+		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+		data.widthHint = getButtonWidthHint(b);
+		b.setLayoutData(data);
+		return b;
+	}
+	
+    /**
+     * Creates and returns a new radio button with the given
+     * label.
+     * 
+     * @param parent parent control
+     * @param label button label or <code>null</code>
+     * @param hspan number of columns to horizontally span in the parent composite
+     * @return a new radio button
+     */
+    public static Button createCheckButton(Composite parent, String label, int hspan) {
+        Button button = new Button(parent, SWT.CHECK);
+        button.setFont(parent.getFont());
+        if (label != null) {
+            button.setText(label);
+        }
+        GridData gd = new GridData();
+        gd.horizontalSpan = hspan;
+        button.setLayoutData(gd);
+        return button;
+    }	
+	
+    /**
+     * Creates a new text widget 
+     * 
+     * @param parent the parent composite to add this text widget to
+     * @param style the style bits for the text widget
+     * @param hspan the horizontal span to take up on the parent composite
+     * @param fill the fill for the grid layout
+     * @return the new text widget
+     */
+
+   public static Text createText(Composite parent, int style, int hspan) {
+      Text t = new Text(parent, style);
+      t.setFont(parent.getFont());
+      GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+      gd.horizontalSpan = hspan;
+      t.setLayoutData(gd);
+      return t;
+   }
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/TerminationDialog.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/TerminationDialog.java
new file mode 100644
index 0000000..24e8200
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/TerminationDialog.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.ui.internal;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.libra.framework.ui.ContextIds;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Dialog that prompts a user to see if a server should
+ * be terminated.
+ */
+public class TerminationDialog extends Dialog {
+	protected String title;
+	protected String message;
+
+	/**
+	 * TerminationDialog constructor.
+	 * 
+	 * @param parentShell a shell
+	 * @param title title of dialog
+	 * @param message message to display
+	 */
+	public TerminationDialog(Shell parentShell, String title, String message) {
+		super(parentShell);
+		this.title = title;
+		this.message = message;
+		setBlockOnOpen(true);
+	}
+
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(title);
+	}
+
+	/**
+	 * Creates and returns the contents of the upper part 
+	 * of this dialog (above the button bar).
+	 *
+	 * @param parent the parent composite to contain the dialog area
+	 * @return the dialog area control
+	 */
+	protected Control createDialogArea(Composite parent) {
+		// create a composite with standard margins and spacing
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayout layout = new GridLayout();
+		layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
+		layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
+		layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
+		layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+		composite.setFont(parent.getFont());
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ContextIds.FRAMEWORK_INSTANCE_CLEAN_WORK_DIR_TERMINATE);
+	
+		Label label = new Label(composite, SWT.WRAP);
+		label.setText(message);
+		GridData data = new GridData();
+		data.widthHint = 400;
+		label.setLayoutData(data);
+		
+		Dialog.applyDialogFont(composite);
+	
+		return composite;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/actions/AbstractSyncLaunch.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/actions/AbstractSyncLaunch.java
new file mode 100644
index 0000000..3e44f51
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/actions/AbstractSyncLaunch.java
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        Eteration A.S. - initial API and implementation
+ *        Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.ui.internal.actions;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.IServer.IOperationListener;
+import org.eclipse.wst.server.ui.IServerModule;
+import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
+import org.eclipse.wst.server.ui.internal.Trace;
+
+public abstract class AbstractSyncLaunch {
+	protected String launchMode = ILaunchManager.RUN_MODE;
+	
+	protected IServer selectedServer;
+	protected IModule selectedModule;
+	
+	/**
+	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
+	 */
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		
+	}
+	
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		selectedServer = null;
+		selectedModule = null;
+		if (!selection.isEmpty()) {
+			if (selection instanceof IStructuredSelection) {
+				Object obj = ((IStructuredSelection)selection).getFirstElement();
+				if (obj instanceof IServer) {
+					selectedServer = (IServer)obj;
+				}
+				else if (obj instanceof IServerModule) {
+					IServerModule sm = (IServerModule)obj;
+					IModule [] module = sm.getModule();
+					selectedModule = module[module.length - 1];
+					if (selectedModule != null)
+						selectedServer = sm.getServer();
+				}
+			}
+		}
+	}
+	
+
+
+
+
+	public static void start(IServer server, String launchMode, final Shell shell) {
+		if (server.getServerState() != IServer.STATE_STARTED) {
+			if (!ServerUIPlugin.saveEditors())
+				return;
+			
+			/*final IAdaptable info = new IAdaptable() {
+				public Object getAdapter(Class adapter) {
+					if (Shell.class.equals(adapter))
+						return shell;
+					return null;
+				}
+			};*/
+			try {
+				//deprecated but start method does not support sync start
+				server.synchronousStart(launchMode, (IProgressMonitor)null);
+			} catch (CoreException e) {
+				Trace.trace(Trace.STRING_SEVERE, "Error starting server", e);
+			}
+		} else {
+			if (shell != null && !ServerUIPlugin.promptIfDirty(shell, server))
+				return;
+			
+			try {
+				String launchMode2 = launchMode;
+				if (launchMode2 == null)
+					launchMode2 = server.getMode();
+				server.restart(launchMode2, (IOperationListener) null);
+			} catch (Exception e) {
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Error restarting server", e);
+				}
+			}
+		}
+	}
+
+	public void run(IAction action) {
+
+		if (selectedServer.getServerState() != IServer.STATE_STARTED) {
+			if (!ServerUIPlugin.saveEditors())
+				return;
+			
+			/*final IAdaptable info = new IAdaptable() {
+				public Object getAdapter(Class adapter) {
+					if (Shell.class.equals(adapter))
+						return shell;
+					return null;
+				}
+			};*/
+			try {
+				//deprecated but start method does not support sync start
+				selectedServer.synchronousStart(launchMode, (IProgressMonitor)null);
+			} catch (CoreException e) {
+				Trace.trace(Trace.STRING_SEVERE, "Error starting server", e);
+			}
+		} else {
+		
+			
+			try {
+				String launchMode2 = launchMode;
+				if (launchMode2 == null)
+					launchMode2 = selectedServer.getMode();
+				selectedServer.restart(launchMode2, (IOperationListener) null);
+			} catch (Exception e) {
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Error restarting server", e);
+				}
+			}
+		}
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/actions/CleanWorkDirAction.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/actions/CleanWorkDirAction.java
new file mode 100644
index 0000000..a28ca5a
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/actions/CleanWorkDirAction.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.ui.internal.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.libra.framework.ui.CleanWorkDirDialog;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.ui.IServerModule;
+
+
+
+public class CleanWorkDirAction implements IObjectActionDelegate {
+	private IWorkbenchPart targetPart;
+	private IServer selectedServer;
+	private IModule selectedModule;
+
+	/**
+	 * Constructor for Action1.
+	 */
+	public CleanWorkDirAction() {
+		super();
+	}
+
+	/**
+	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
+	 */
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		this.targetPart = targetPart;
+	}
+
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#run(IAction)
+	 */
+	public void run(IAction action) {
+		CleanWorkDirDialog dlg = new CleanWorkDirDialog(targetPart.getSite().getShell(), selectedServer, selectedModule);
+		dlg.open();
+	}
+
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		selectedServer = null;
+		selectedModule = null;
+		if (!selection.isEmpty()) {
+			if (selection instanceof IStructuredSelection) {
+				Object obj = ((IStructuredSelection)selection).getFirstElement();
+				if (obj instanceof IServer) {
+					selectedServer = (IServer)obj;
+				}
+				else if (obj instanceof IServerModule) {
+					IServerModule sm = (IServerModule)obj;
+					IModule [] module = sm.getModule();
+					selectedModule = module[module.length - 1];
+					if (selectedModule != null)
+						selectedServer = sm.getServer();
+				}
+			}
+		}
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/actions/SyncDebugAction.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/actions/SyncDebugAction.java
new file mode 100644
index 0000000..d0baf65
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/actions/SyncDebugAction.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        Eteration A.S. - initial API and implementation
+ *        Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+
+package org.eclipse.libra.framework.ui.internal.actions;
+
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.ui.IObjectActionDelegate;
+
+public class SyncDebugAction extends AbstractSyncLaunch implements IObjectActionDelegate {
+
+	public void run(IAction action) {
+		launchMode = ILaunchManager.DEBUG_MODE;
+		
+		super.run(action);
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/actions/SyncStartAction.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/actions/SyncStartAction.java
new file mode 100644
index 0000000..2c120b1
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/actions/SyncStartAction.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        Eteration A.S. - initial API and implementation
+ *        Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.ui.internal.actions;
+
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.ui.IObjectActionDelegate;
+
+public class SyncStartAction extends AbstractSyncLaunch implements IObjectActionDelegate {
+
+	public void run(IAction action) {
+		launchMode = ILaunchManager.RUN_MODE;
+		
+		super.run(action);
+	}
+
+}
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/editor/ConfigurationOSGiModuleEditorPart.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/editor/ConfigurationOSGiModuleEditorPart.java
new file mode 100644
index 0000000..507e73f
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/editor/ConfigurationOSGiModuleEditorPart.java
@@ -0,0 +1,349 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.ui.internal.editor;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.libra.framework.core.FrameworkInstanceConfiguration;
+import org.eclipse.libra.framework.core.FrameworkInstanceDelegate;
+import org.eclipse.libra.framework.core.IOSGIFrameworkInstance;
+import org.eclipse.libra.framework.core.IOSGIFrameworkWorkingCopy;
+import org.eclipse.libra.framework.core.Trace;
+import org.eclipse.libra.framework.ui.ContextIds;
+import org.eclipse.libra.framework.ui.FrameworkUIPlugin;
+import org.eclipse.libra.framework.ui.Messages;
+import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.widgets.ExpandableComposite;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.help.IWorkbenchHelpSystem;
+import org.eclipse.wst.server.ui.editor.ServerEditorPart;
+
+
+/**
+ * felix configuration  module editor page.
+ */
+
+public class ConfigurationOSGiModuleEditorPart extends ServerEditorPart implements ISelectionProvider {
+	protected IOSGIFrameworkWorkingCopy framework2;
+	protected FrameworkInstanceConfiguration configuration;
+	
+	protected Table osgiBundlesTable;
+	protected int selection = -1;
+	protected Button addBundleProject;
+	protected Button remove;
+
+	protected PropertyChangeListener listener;
+
+
+	public ConfigurationOSGiModuleEditorPart() {
+		super();
+
+	}
+
+	/**
+	 * 
+	 */
+	protected void addChangeListener() {
+		listener = new PropertyChangeListener() {
+			public void propertyChange(PropertyChangeEvent event) {
+				if (FrameworkInstanceConfiguration.ADD_BUNDLE.equals(event.getPropertyName())) {
+					initialize();
+				} else if (FrameworkInstanceConfiguration.REMOVE_BUNDLE.equals(event.getPropertyName())) {
+					initialize();
+				}
+			}
+		};
+		configuration.addPropertyChangeListener(listener);
+
+	}
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createPartControl(Composite parent) {
+		FormToolkit toolkit = getFormToolkit(parent.getDisplay());
+
+		ScrolledForm form = toolkit.createScrolledForm(parent);
+		toolkit.decorateFormHeading(form.getForm());
+		form.setText(Messages.configurationEditorOSGIModulesPageTitle);
+		form.setImage(FrameworkUIPlugin.getImage(FrameworkUIPlugin.IMG_WEB_MODULE));
+		GridLayout layout = new GridLayout();
+		layout.marginTop = 6;
+		layout.marginLeft = 6;
+		form.getBody().setLayout(layout);
+		
+		getSite().setSelectionProvider(this);  
+
+		Section section = toolkit.createSection(form.getBody(),
+				ExpandableComposite.TITLE_BAR | Section.DESCRIPTION);
+		section.setText(Messages.configurationEditorOSGIModulesSection);
+		section.setDescription(Messages.configurationEditorOSGIModulesDescription);
+		section.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+		Composite composite = toolkit.createComposite(section);
+		layout = new GridLayout();
+		layout.numColumns = 2;
+		layout.marginHeight = 5;
+		layout.marginWidth = 10;
+		layout.verticalSpacing = 5;
+		layout.horizontalSpacing = 15;
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+		IWorkbenchHelpSystem whs = PlatformUI.getWorkbench().getHelpSystem();
+		whs.setHelp(composite, ContextIds.CONFIGURATION_EDITOR_MODULES);
+		toolkit.paintBordersFor(composite);
+		section.setClient(composite);
+
+		osgiBundlesTable = toolkit.createTable(composite, SWT.V_SCROLL | SWT.SINGLE
+				| SWT.FULL_SELECTION);
+		osgiBundlesTable.setHeaderVisible(true);
+		osgiBundlesTable.setLinesVisible(true);
+		whs.setHelp(osgiBundlesTable,
+				ContextIds.CONFIGURATION_EDITOR_MODULES_LIST);
+
+		TableLayout tableLayout = new TableLayout();
+
+		TableColumn col = new TableColumn(osgiBundlesTable, SWT.NONE);
+		col.setText("Name");
+		ColumnWeightData colData = new ColumnWeightData(8, 250, true);
+		tableLayout.addColumnData(colData);
+
+		TableColumn col2 = new TableColumn(osgiBundlesTable, SWT.NONE);
+		col2.setText("Id");
+		colData = new ColumnWeightData(13, 250, true);
+		tableLayout.addColumnData(colData);
+
+		TableColumn col3 = new TableColumn(osgiBundlesTable, SWT.NONE);
+		col3.setText("Version");
+		colData = new ColumnWeightData(5, 50, true);
+		tableLayout.addColumnData(colData);
+
+
+		osgiBundlesTable.setLayout(tableLayout);
+
+		GridData data = new GridData(GridData.FILL_HORIZONTAL);
+		data.widthHint = 450;
+		data.heightHint = 120;
+		osgiBundlesTable.setLayoutData(data);
+		osgiBundlesTable.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				selectOsgiBundle();
+			}
+		});
+
+		Composite rightPanel = toolkit.createComposite(composite);
+		layout = new GridLayout();
+		layout.marginHeight = 0;
+		layout.marginWidth = 0;
+		rightPanel.setLayout(layout);
+		data = new GridData();
+		rightPanel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL
+				| GridData.VERTICAL_ALIGN_BEGINNING));
+
+		form.setContent(section);
+		form.reflow(true);
+
+		initialize();
+	}
+
+
+
+	public void dispose() {
+		super.dispose();
+		if (configuration != null) {
+			configuration.removePropertyChangeListener(listener);
+		}
+
+	}
+
+	/*
+	 * (non-Javadoc) Initializes the editor part with a site and input.
+	 */
+	public void init(IEditorSite site, IEditorInput input) {
+		super.init(site, input);
+
+		IOSGIFrameworkInstance ts = (IOSGIFrameworkInstance) server.loadAdapter(
+				FrameworkInstanceDelegate.class, null);
+
+		try {
+			configuration = ts.getFrameworkInstanceConfiguration();
+		} catch (CoreException e) {
+			Trace.trace(Trace.SEVERE, "cannot access configuration",e);
+		}
+		
+		if (server != null)
+			framework2 = (IOSGIFrameworkWorkingCopy) server.loadAdapter(
+					IOSGIFrameworkWorkingCopy.class, null);
+
+		addChangeListener();
+		initialize();
+	}
+
+	/**
+	 * 
+	 */
+	protected void initialize() {
+		if (osgiBundlesTable == null)
+			return;
+
+		osgiBundlesTable.removeAll();
+		setErrorMessage(null);
+	}
+
+	/**
+	 * 
+	 */
+	protected void selectOsgiBundle() {
+		if (readOnly)
+			return;
+
+		try {
+			selection = osgiBundlesTable.getSelectionIndex();
+			remove.setEnabled(true);
+			for(ISelectionChangedListener changedListener: selectionChangedListeners)
+				changedListener.selectionChanged(new SelectionChangedEvent(this, getSelection()));
+		} catch (Exception e) {
+			selection = -1;
+			remove.setEnabled(false);
+		}
+	}
+
+
+	/*
+	 * @see IWorkbenchPart#setFocus()
+	 */
+	public void setFocus() {
+		if (osgiBundlesTable != null)
+			osgiBundlesTable.setFocus();
+	}
+
+	
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+	
+	
+
+
+	public ISelection getSelection() {
+		final TableItem[] sel = osgiBundlesTable.getSelection();
+		if(sel == null || sel.length == 0)
+			return StructuredSelection.EMPTY;
+		
+		return new IStructuredSelection() {
+			
+			public boolean isEmpty() {
+					return false;
+			}
+			
+			public List toList() {
+				List<IPluginModelBase> all =  new ArrayList<IPluginModelBase>();
+				for(TableItem s: sel)
+					all.add((IPluginModelBase)s.getData());
+				return all;
+			}
+			
+			public Object[] toArray() {
+				
+				return toList().toArray();
+			}
+			
+			public int size() {
+				
+				return sel.length;
+			}
+			
+			public Iterator iterator() {
+				return toList().iterator();
+			}
+			
+			public Object getFirstElement() {
+				return sel[0].getData();
+			}
+		};
+		
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener2) {
+		selectionChangedListeners.add(listener2);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener2) {
+		selectionChangedListeners.remove(listener2);
+	}
+
+	public void setSelection(ISelection selection) {
+		// TODO Auto-generated method stub
+		
+	}
+
+
+
+	
+}
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/editor/FrameworkInstanceLocationEditorSection.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/editor/FrameworkInstanceLocationEditorSection.java
new file mode 100644
index 0000000..403d56b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/editor/FrameworkInstanceLocationEditorSection.java
@@ -0,0 +1,461 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+
+package org.eclipse.libra.framework.ui.internal.editor;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.libra.framework.core.FrameworkInstanceDelegate;
+import org.eclipse.libra.framework.core.IOSGIFrameworkInstance;
+import org.eclipse.libra.framework.core.TargetDefinitionUtil;
+import org.eclipse.libra.framework.ui.ContextIds;
+import org.eclipse.libra.framework.ui.FrameworkUIPlugin;
+import org.eclipse.libra.framework.ui.Messages;
+import org.eclipse.libra.framework.ui.Trace;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
+import org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService;
+import org.eclipse.pde.internal.ui.wizards.target.EditTargetDefinitionWizard;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.IFormColors;
+import org.eclipse.ui.forms.widgets.ExpandableComposite;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.help.IWorkbenchHelpSystem;
+import org.eclipse.wst.server.core.IPublishListener;
+import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.util.PublishAdapter;
+import org.eclipse.wst.server.ui.editor.ServerEditorSection;
+
+
+
+
+
+public class FrameworkInstanceLocationEditorSection extends ServerEditorSection {
+	protected Section section;
+	protected IOSGIFrameworkInstance frameworkInstance;
+	
+	protected boolean defaultDeployDirIsSet;
+	
+	protected Button frameworkInstanceDirCustom;
+	
+	protected Text frameworkInstanceDir;
+	protected Button frameworkInstanceDirBrowse;
+
+	protected Text targetPlatformName;
+	protected Button targetPlatformEdit;
+	
+	protected PropertyChangeListener listener;
+	protected IPublishListener publishListener;
+	protected IPath workspacePath;
+	
+	protected boolean allowRestrictedEditing;
+	protected IPath tempDirPath;
+	protected IPath installDirPath;
+
+	protected boolean updating=false;
+
+	public FrameworkInstanceLocationEditorSection() {
+		super();
+	}
+
+	/**
+	 * Add listeners to detect undo changes and publishing of the server.
+	 */
+	protected void addChangeListeners() {
+		listener = new PropertyChangeListener() {
+			public void propertyChange(PropertyChangeEvent event) {
+				if (updating)
+					return;
+				updating = true;
+				if (IOSGIFrameworkInstance.PROPERTY_INSTANCE_DIR.equals(event.getPropertyName())) {
+					updateServerDirButtons();
+					updateServerDirFields();
+					validate();
+				}
+				updating = false;
+			}
+		};
+		server.addPropertyChangeListener(listener);
+		
+		publishListener = new PublishAdapter() {
+			public void publishFinished(IServer server2, IStatus status) {
+				boolean flag = false;
+				if (status.isOK() && server2.getModules().length == 0)
+					flag = true;
+				if (flag != allowRestrictedEditing) {
+					allowRestrictedEditing = flag;
+					// Update the state of the fields
+					PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+						public void run() {
+							boolean customServerDir = false;
+							if (!FrameworkInstanceLocationEditorSection.this.frameworkInstanceDirCustom.isDisposed())
+								customServerDir = FrameworkInstanceLocationEditorSection.this.frameworkInstanceDirCustom.getSelection();
+							if (!FrameworkInstanceLocationEditorSection.this.frameworkInstanceDirCustom.isDisposed())
+								FrameworkInstanceLocationEditorSection.this.frameworkInstanceDirCustom.setEnabled(allowRestrictedEditing);
+							if (!FrameworkInstanceLocationEditorSection.this.frameworkInstanceDir.isDisposed())
+								FrameworkInstanceLocationEditorSection.this.frameworkInstanceDir.setEnabled(allowRestrictedEditing && customServerDir);
+							if (!FrameworkInstanceLocationEditorSection.this.frameworkInstanceDirBrowse.isDisposed())
+								FrameworkInstanceLocationEditorSection.this.frameworkInstanceDirBrowse.setEnabled(allowRestrictedEditing && customServerDir);
+						}
+					});
+				}
+			}
+		};
+		server.getOriginal().addPublishListener(publishListener);
+	}
+	
+	/**
+	 * Creates the SWT controls for this workbench part.
+	 *
+	 * @param parent the parent control
+	 */
+	public void createSection(Composite parent) {
+		super.createSection(parent);
+		FormToolkit toolkit = getFormToolkit(parent.getDisplay());
+
+		section = toolkit.createSection(parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED
+			| ExpandableComposite.TITLE_BAR | Section.DESCRIPTION | ExpandableComposite.FOCUS_TITLE);
+		section.setText(Messages.serverEditorLocationsSection);
+		section.setDescription(Messages.serverEditorLocationsDescription);
+		section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL));
+
+		Composite composite = toolkit.createComposite(section);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 3;
+		layout.marginHeight = 5;
+		layout.marginWidth = 10;
+		layout.verticalSpacing = 5;
+		layout.horizontalSpacing = 15;
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL));
+		IWorkbenchHelpSystem whs = PlatformUI.getWorkbench().getHelpSystem();
+		whs.setHelp(composite, ContextIds.FRAMEWORK_INSTANCE_EDITOR);
+		whs.setHelp(section, ContextIds.FRAMEWORK_INSTANCE_EDITOR);
+		toolkit.paintBordersFor(composite);
+		section.setClient(composite);
+
+		frameworkInstanceDirCustom = toolkit.createButton(composite,
+				NLS.bind(Messages.serverEditorServerDirCustom, Messages.serverEditorDoesNotModify), SWT.RADIO);
+		GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false);
+		data.horizontalSpan = 3;
+		frameworkInstanceDirCustom.setLayoutData(data);
+		frameworkInstanceDirCustom.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if (updating || !frameworkInstanceDirCustom.getSelection())
+					return;
+				updating = true;
+				//execute(new SetTestEnvironmentCommand(felixRuntimeInstance, true));
+				updateServerDirFields();
+				updating = false;
+				validate();
+			}
+		});
+
+		// server directory
+		Label label = createLabel(toolkit, composite, Messages.serverEditorServerDir);
+		data = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
+		label.setLayoutData(data);
+
+		frameworkInstanceDir = toolkit.createText(composite, null, SWT.SINGLE);
+		data = new GridData(SWT.FILL, SWT.CENTER, true, false);
+		data.widthHint = 75;
+		frameworkInstanceDir.setLayoutData(data);
+		frameworkInstanceDir.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				if (updating)
+					return;
+				updating = true;
+				//execute(new SetInstanceDirectoryCommand(felixRuntimeInstance, getServerDir()));
+				updating = false;
+				validate();
+			}
+		});
+
+		frameworkInstanceDirBrowse = toolkit.createButton(composite, Messages.editorBrowse, SWT.PUSH);
+		frameworkInstanceDirBrowse.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent se) {
+				DirectoryDialog dialog = new DirectoryDialog(frameworkInstanceDir.getShell());
+				dialog.setMessage(Messages.serverEditorBrowseDeployMessage);
+				dialog.setFilterPath(frameworkInstanceDir.getText());
+				String selectedDirectory = dialog.open();
+				if (selectedDirectory != null && !selectedDirectory.equals(frameworkInstanceDir.getText())) {
+					updating = true;
+					// Make relative if relative to the workspace
+//					IPath path = new Path(selectedDirectory);
+//					if (workspacePath.isPrefixOf(path)) {
+//						int cnt = path.matchingFirstSegments(workspacePath);
+//						path = path.removeFirstSegments(cnt).setDevice(null);
+//						selectedDirectory = path.toOSString();
+//					}
+					//execute(new SetInstanceDirectoryCommand(felixRuntimeInstance, selectedDirectory));
+					updateServerDirButtons();
+					updateServerDirFields();
+					updating = false;
+					validate();
+				}
+			}
+		});
+		frameworkInstanceDirBrowse.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
+
+		
+		
+		// server directory
+		Label label2 = createLabel(toolkit, composite, "Target Platform");
+		data = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
+		label2.setLayoutData(data);
+
+		targetPlatformName = toolkit.createText(composite, null, SWT.SINGLE);
+		data = new GridData(SWT.FILL, SWT.CENTER, true, false);
+		data.widthHint = 75;
+		targetPlatformName.setLayoutData(data);
+		
+
+		targetPlatformEdit = toolkit.createButton(composite, "Edit...", SWT.PUSH);
+		targetPlatformEdit.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent se) {
+				handleEdit();
+			}
+		});
+		targetPlatformEdit.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
+
+		
+		initialize();
+	}
+
+	protected Label createLabel(FormToolkit toolkit, Composite parent, String text) {
+		Label label = toolkit.createLabel(parent, text);
+		label.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
+		return label;
+	}
+
+	/**
+	 * @see ServerEditorSection#dispose()
+	 */
+	public void dispose() {
+		if (server != null) {
+			server.removePropertyChangeListener(listener);
+			if (server.getOriginal() != null)
+				server.getOriginal().removePublishListener(publishListener);
+		}
+	}
+
+	/**
+	 * @see ServerEditorSection#init(IEditorSite, IEditorInput)
+	 */
+	public void init(IEditorSite site, IEditorInput input) {
+		super.init(site, input);
+		
+		// Cache workspace and default deploy paths
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		workspacePath = root.getLocation();
+
+		if (server != null) {
+			frameworkInstance = (FrameworkInstanceDelegate) server.loadAdapter(FrameworkInstanceDelegate.class, null);
+			addChangeListeners();
+		}
+		initialize();
+	}
+
+	/**
+	 * Initialize the fields in this editor.
+	 */
+	protected void initialize() {
+		if (frameworkInstanceDir== null || frameworkInstance == null)
+			return;
+		updating = true;
+
+		IRuntime runtime = server.getRuntime();
+		section.setDescription(Messages.serverEditorLocationsDescription2);
+		if (runtime != null)
+			installDirPath = runtime.getLocation();
+
+		// determine if editing of locations is allowed
+		allowRestrictedEditing = false;
+		IPath basePath = new Path(frameworkInstance.getInstanceDirectory());
+		if (!readOnly) {
+			// If server has not been published, or server is published with no modules, allow editing
+			// TODO Find better way to determine if server hasn't been published
+			if ((basePath != null && !basePath.append("conf").toFile().exists())
+					|| (server.getOriginal().getServerPublishState() == IServer.PUBLISH_STATE_NONE
+							&& server.getOriginal().getModules().length == 0)) {
+				allowRestrictedEditing = true;
+			}
+		}
+		
+		try {
+			if (frameworkInstance != null && frameworkInstance.getFrameworkInstanceConfiguration() != null) {
+
+				ITargetDefinition original = frameworkInstance.getFrameworkInstanceConfiguration()
+						.getTargetDefinition();
+				targetPlatformName.setText(original.getName());
+				targetPlatformName.setEditable(false);
+			}
+		} catch (CoreException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		// Update server related fields
+		updateServerDirButtons();
+		updateServerDirFields();
+		updating = false;
+		validate();
+	}
+	
+	protected String getServerDir() {
+		String dir = null;
+		if (frameworkInstanceDir != null) {
+			dir = frameworkInstanceDir.getText().trim();
+			IPath path = new Path(dir);
+			// Adjust if the temp dir is known and has been entered
+			if (tempDirPath != null && tempDirPath.equals(path))
+				dir = null;
+
+		}
+		return dir;
+	}
+	
+	protected void updateServerDirButtons() {
+		if (frameworkInstance.getInstanceDirectory() == null) {
+			IPath path = new Path(frameworkInstance.getInstanceDirectory());
+			if (path != null && path.equals(installDirPath)) {
+				frameworkInstanceDirCustom.setSelection(false);
+			} else {
+				frameworkInstanceDirCustom.setSelection(false);
+			}
+		} else {
+			frameworkInstanceDirCustom.setSelection(false);
+		}
+	}
+	
+	protected void updateServerDirFields() {
+		updateServerDir();
+		boolean customServerDir = frameworkInstanceDirCustom.getSelection();
+		frameworkInstanceDir.setEnabled(allowRestrictedEditing && customServerDir);
+		frameworkInstanceDirBrowse.setEnabled(allowRestrictedEditing && customServerDir);
+	}
+	
+	protected void updateServerDir() {
+		IPath path = new Path(frameworkInstance.getInstanceDirectory());
+
+			frameworkInstanceDir.setText(path.toOSString());
+	}
+	
+
+	
+	/**
+	 * @see ServerEditorSection#getSaveStatus()
+	 */
+	public IStatus[] getSaveStatus() {
+		if (frameworkInstance != null) {
+			// Check the instance directory
+			String dir = frameworkInstance.getInstanceDirectory();
+			if (dir != null) {
+				IPath path = new Path(dir);
+				// Must not be the same as the workspace location
+				if (dir.length() == 0 || workspacePath.equals(path)) {
+					return new IStatus [] {
+							new Status(IStatus.ERROR, FrameworkUIPlugin.PLUGIN_ID, Messages.errorServerDirIsRoot)};
+				}
+
+				else if (path.equals(installDirPath))
+					return new IStatus [] {
+						new Status(IStatus.ERROR, FrameworkUIPlugin.PLUGIN_ID,
+								NLS.bind(Messages.errorServerDirCustomNotInstall,
+										NLS.bind(Messages.serverEditorServerDirInstall, "").trim()))};
+			}
+			
+			
+		}
+		// use default implementation to return success
+		return super.getSaveStatus();
+	}
+	
+	protected void validate() {
+		if (frameworkInstance != null) {
+			// Validate instance directory
+			String dir = frameworkInstance.getInstanceDirectory();
+			if (dir != null) {
+				IPath path = new Path(dir);
+				// Must not be the same as the workspace location
+				if (dir.length() == 0 || workspacePath.equals(path)) {
+					setErrorMessage(Messages.errorServerDirIsRoot);
+					return;
+				}
+				else if (path.equals(installDirPath)) {
+					setErrorMessage(NLS.bind(Messages.errorServerDirCustomNotInstall,
+							NLS.bind(Messages.serverEditorServerDirInstall, "").trim()));
+					return;
+				}
+			}
+			
+		}
+		// All is okay, clear any previous error
+		setErrorMessage(null);
+	}
+
+
+	protected void handleEdit() {
+		
+		try {
+			if (frameworkInstance != null && frameworkInstance.getFrameworkInstanceConfiguration() != null) {
+
+				ITargetDefinition original = frameworkInstance.getFrameworkInstanceConfiguration()
+						.getTargetDefinition();
+
+				EditTargetDefinitionWizard wizard = new EditTargetDefinitionWizard(
+						original, true);
+				wizard.setWindowTitle(Messages.configurationEditorTargetDefinitionTitle);
+				WizardDialog dialog = new WizardDialog(this.getShell(),
+						wizard);
+				if (dialog.open() == Window.OK) {
+					// Replace all references to the original with the new target
+					ITargetDefinition newTarget = wizard.getTargetDefinition();
+					frameworkInstance.getFrameworkInstanceConfiguration().setTargetDefinition(newTarget);
+					ITargetPlatformService service = TargetDefinitionUtil.getTargetPlatformService();
+					service.saveTargetDefinition(newTarget);
+				}
+			}
+		} catch (CoreException e) {
+			Trace.trace(Trace.SEVERE, "failed to update target platform definition");
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/editor/ServerChangedCommand.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/editor/ServerChangedCommand.java
new file mode 100644
index 0000000..dde279b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/editor/ServerChangedCommand.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ *    Copyright (c) 2012 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.ui.internal.editor;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.AbstractOperation;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.libra.framework.core.IOSGIFrameworkInstance;
+
+
+
+
+/**
+ * This command does nothing but execute sets the dirty for the editor 
+ * because the content of the target definition has changed.
+ */
+public class ServerChangedCommand extends AbstractOperation {
+
+	public ServerChangedCommand(IOSGIFrameworkInstance  instance) {
+		super( "SERVER CHANGED...");
+	
+	}
+
+
+
+	@Override
+	public IStatus execute(IProgressMonitor monitor, IAdaptable info)
+			throws ExecutionException {
+		return Status.OK_STATUS;
+	}
+
+	@Override
+	public IStatus redo(IProgressMonitor monitor, IAdaptable info)
+			throws ExecutionException {
+		return execute(monitor, info);
+	}
+
+	@Override
+	public IStatus undo(IProgressMonitor monitor, IAdaptable info)
+			throws ExecutionException {
+		return Status.OK_STATUS;
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/editor/TargetChangedCommand.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/editor/TargetChangedCommand.java
new file mode 100644
index 0000000..51eb068
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/editor/TargetChangedCommand.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.ui.internal.editor;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.AbstractOperation;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.libra.framework.core.Messages;
+import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
+
+
+
+
+/**
+ * This command does nothing but execute sets the dirty for the editor 
+ * because the content of the target definition has changed.
+ */
+public class TargetChangedCommand extends AbstractOperation {
+	protected IPluginModelBase module;
+	protected int modules = -1;
+	
+
+
+	public TargetChangedCommand(ITargetDefinition  definition) {
+		super( Messages.configurationEditorActionAddOsgiModule);
+	
+	}
+
+
+
+	@Override
+	public IStatus execute(IProgressMonitor monitor, IAdaptable info)
+			throws ExecutionException {
+		return Status.OK_STATUS;
+	}
+
+	@Override
+	public IStatus redo(IProgressMonitor monitor, IAdaptable info)
+			throws ExecutionException {
+		return execute(monitor, info);
+	}
+
+	@Override
+	public IStatus undo(IProgressMonitor monitor, IAdaptable info)
+			throws ExecutionException {
+		return Status.OK_STATUS;
+	}
+}
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/editor/TargetDefinitionEditorPart.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/editor/TargetDefinitionEditorPart.java
new file mode 100644
index 0000000..2261b0b
--- /dev/null
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/internal/editor/TargetDefinitionEditorPart.java
@@ -0,0 +1,731 @@
+/*******************************************************************************
+ *    Copyright (c) 2010 Eteration A.S. and others.
+ *    All rights reserved. This program and the accompanying materials
+ *    are made available under the terms of the Eclipse Public License v1.0
+ *    which accompanies this distribution, and is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ *    
+ *     Contributors:
+ *        IBM Corporation - initial API and implementation
+ *           - This code is based on WTP SDK frameworks and Tomcat Server Adapters
+ *           org.eclipse.jst.server.core
+ *           org.eclipse.jst.server.ui
+ *           
+ *       Naci Dai and Murat Yener, Eteration A.S. 
+ *******************************************************************************/
+package org.eclipse.libra.framework.ui.internal.editor;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.TreeSet;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.debug.ui.StringVariableSelectionDialog;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
+import org.eclipse.jdt.launching.environments.IExecutionEnvironmentsManager;
+import org.eclipse.jface.window.Window;
+import org.eclipse.libra.framework.core.FrameworkInstanceConfiguration;
+import org.eclipse.libra.framework.core.IOSGIFrameworkInstance;
+import org.eclipse.libra.framework.core.IOSGIFrameworkWorkingCopy;
+import org.eclipse.libra.framework.core.TargetDefinitionUtil;
+import org.eclipse.libra.framework.core.Trace;
+import org.eclipse.pde.internal.core.ICoreConstants;
+import org.eclipse.pde.internal.core.PDECore;
+import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
+import org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService;
+import org.eclipse.pde.internal.core.util.VMUtil;
+import org.eclipse.pde.internal.ui.IHelpContextIds;
+import org.eclipse.pde.internal.ui.PDEUIMessages;
+import org.eclipse.pde.internal.ui.SWTFactory;
+import org.eclipse.pde.internal.ui.shared.target.ArgumentsFromContainerSelectionDialog;
+import org.eclipse.pde.internal.ui.shared.target.ITargetChangedListener;
+import org.eclipse.pde.internal.ui.shared.target.TargetContentsGroup;
+import org.eclipse.pde.internal.ui.shared.target.TargetLocationsGroup;
+import org.eclipse.pde.internal.ui.util.LocaleUtil;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.progress.UIJob;
+import org.eclipse.wst.server.ui.editor.ServerEditorPart;
+
+
+@SuppressWarnings("restriction")
+public class TargetDefinitionEditorPart extends ServerEditorPart {
+
+	private static final String EMPTY_STRING = ""; //$NON-NLS-1$
+
+	protected ITargetDefinition targetDefinition;
+	protected IOSGIFrameworkWorkingCopy server2;
+	protected FrameworkInstanceConfiguration configuration;
+
+	private Text fNameText;
+	private TabItem fLocationTab;
+	private TargetLocationsGroup fLocationTree;
+	private TargetContentsGroup fContentTree;
+
+	protected PropertyChangeListener listener;
+	private Button fDefaultJREButton;
+	private Button fNamedJREButton;
+	private Combo fNamedJREsCombo;
+	private Button fExecEnvButton;
+	private TreeSet fExecEnvChoices;
+	private Combo fExecEnvsCombo;
+	private TreeSet fOSChoices;
+	private Combo fOSCombo;
+	private Combo fWSCombo;
+	private TreeSet fArchChoices;
+	private Combo fArchCombo;
+	private Combo fNLCombo;
+	private Text fProgramArgs;
+	private Text fVMArgs;
+
+	private TreeSet fWSChoices;
+
+	private TreeSet fNLChoices;
+
+	public TargetDefinitionEditorPart() {
+		super();
+
+	}
+
+	public ITargetDefinition getTargetDefinition() {
+		if (configuration != null && targetDefinition == null)
+			targetDefinition = configuration.getTargetDefinition();
+		return targetDefinition;
+	}
+
+	/**
+	 * 
+	 */
+	protected void addChangeListener() {
+		listener = new PropertyChangeListener() {
+			public void propertyChange(PropertyChangeEvent event) {
+				if (FrameworkInstanceConfiguration.ADD_BUNDLE.equals(event
+						.getPropertyName())) {
+					initialize();
+				} else if (FrameworkInstanceConfiguration.REMOVE_BUNDLE
+						.equals(event.getPropertyName())) {
+					initialize();
+				}
+			}
+		};
+		configuration.addPropertyChangeListener(listener);
+
+	}
+
+	public IStatus resolveBundles(final ITargetDefinition definition) {
+		if (!definition.isResolved()) {
+			definition.resolve(new NullProgressMonitor());
+		}
+		fContentTree.setInput(definition);
+		fLocationTree.setInput(definition);
+		if (definition.isResolved()
+				&& definition.getBundleStatus().getSeverity() == IStatus.ERROR) {
+			fLocationTab.setImage(PlatformUI.getWorkbench().getSharedImages()
+					.getImage(ISharedImages.IMG_OBJS_ERROR_TSK));
+		} else {
+			fLocationTab.setImage(null);
+		}
+		return Status.OK_STATUS;
+	}
+
+	
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.pde.internal.ui.wizards.target.TargetDefinitionPage#targetChanged
+	 * ()
+	 */
+	protected void targetChanged(ITargetDefinition definition) {
+		if (fContentTree == null || fLocationTree == null)
+			return;
+
+		if (definition != null) {
+
+			String name = definition.getName();
+			if (name == null) {
+				name = "";
+			}
+
+			if (name.trim().length() > 0)
+				fNameText.setText(name);
+
+			fLocationTree.setInput(definition);
+			fContentTree.setInput(definition);
+			updateArgsEnv(definition);
+
+		}
+	}
+
+	public void targetDefinitionContentsChanged(
+			final ITargetDefinition definition, Object source, boolean resolve,
+			boolean forceResolve) {
+
+		boolean setCancelled = false;
+		
+		makeDirty(definition);
+		
+		targetDefinition = definition;
+
+		try {
+			new UIJob(PDEUIMessages.TargetDefinitionContentPage_0) {
+				public IStatus runInUIThread(IProgressMonitor monitor) {
+					return resolveBundles(definition);
+				}
+
+			}.schedule();
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "", e);
+		}
+		if (fContentTree != source) {
+			if (setCancelled) {
+				fContentTree.setCancelled();
+			} else {
+				fContentTree.setInput(definition);
+			}
+		}
+		if (fLocationTree != source) {
+			fLocationTree.setInput(definition);
+		}
+		if (definition.isResolved()
+				&& definition.getBundleStatus().getSeverity() == IStatus.ERROR) {
+			fLocationTab.setImage(PlatformUI.getWorkbench().getSharedImages()
+					.getImage(ISharedImages.IMG_OBJS_ERROR_TSK));
+		} else {
+			fLocationTab.setImage(null);
+		}
+
+
+		updateArgsEnv(definition);
+
+		//fElementViewer.refresh();
+
+	}
+
+	void makeDirty(final ITargetDefinition definition) {
+		//This command does nothing but execute sets the dirty flag
+		//for the editor because the content of the target definition has
+		//changed
+		execute(new TargetChangedCommand(definition));
+	}
+
+	private void updateArgsEnv(final ITargetDefinition definition) {
+		String presetValue = (definition.getOS() == null) ? EMPTY_STRING : definition.getOS();
+		fOSCombo.setText(presetValue);
+		presetValue = (definition.getWS() == null) ? EMPTY_STRING : definition.getWS();
+		fWSCombo.setText(presetValue);
+		presetValue = (definition.getArch() == null) ? EMPTY_STRING : definition.getArch();
+		fArchCombo.setText(presetValue);
+		presetValue = (definition.getNL() == null) ? EMPTY_STRING : LocaleUtil.expandLocaleName(definition.getNL());
+		fNLCombo.setText(presetValue);
+
+		IPath jrePath = definition.getJREContainer();
+		if (jrePath == null || jrePath.equals(JavaRuntime.newDefaultJREContainerPath())) {
+			fDefaultJREButton.setSelection(true);
+		} else {
+			String ee = JavaRuntime.getExecutionEnvironmentId(jrePath);
+			if (ee != null) {
+				fExecEnvButton.setSelection(true);
+				fExecEnvsCombo.select(fExecEnvsCombo.indexOf(ee));
+			} else {
+				String vm = JavaRuntime.getVMInstallName(jrePath);
+				if (vm != null) {
+					fNamedJREButton.setSelection(true);
+					fNamedJREsCombo.select(fNamedJREsCombo.indexOf(vm));
+				}
+			}
+		}
+
+		if (fExecEnvsCombo.getSelectionIndex() == -1)
+			fExecEnvsCombo.setText(fExecEnvChoices.first().toString());
+
+		if (fNamedJREsCombo.getSelectionIndex() == -1)
+			fNamedJREsCombo.setText(VMUtil.getDefaultVMInstallName());
+
+		updateJREWidgets();
+
+		presetValue = (definition.getProgramArguments() == null) ? EMPTY_STRING : definition.getProgramArguments();
+		fProgramArgs.setText(presetValue);
+		presetValue = (definition.getVMArguments() == null) ? EMPTY_STRING : definition.getVMArguments();
+		fVMArgs.setText(presetValue);
+	}
+
+	private void addTargetListeners() {
+
+		ITargetChangedListener listener2 = new ITargetChangedListener() {
+			public void contentsChanged(ITargetDefinition definition,
+					Object source, boolean resolve, boolean forceResolve) {
+				targetDefinitionContentsChanged(definition, source, resolve,
+						forceResolve);
+			}
+		};
+		fContentTree.addTargetChangedListener(listener2);
+		fLocationTree.addTargetChangedListener(listener2);
+	}
+
+	public void createPartControl(Composite parent) {
+		FormToolkit toolkit = getFormToolkit(parent.getDisplay());
+		targetChanged(getTargetDefinition());
+
+		Composite comp = SWTFactory.createComposite(parent, 1, 1,
+				GridData.FILL_BOTH, 0, 0);
+
+		Composite nameComp = SWTFactory.createComposite(comp, 2, 1,
+				GridData.FILL_HORIZONTAL, 0, 0);
+
+		SWTFactory.createLabel(nameComp,
+				PDEUIMessages.TargetDefinitionContentPage_4, 1);
+
+		fNameText = SWTFactory.createSingleText(nameComp, 1);
+		fNameText.setEditable(false);
+
+		TabFolder tabs = new TabFolder(comp, SWT.NONE);
+		tabs.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+		fLocationTab = new TabItem(tabs, SWT.NONE);
+		fLocationTab.setText(PDEUIMessages.LocationSection_0);
+
+		Composite pluginTabContainer = SWTFactory.createComposite(tabs, 1, 1,
+				GridData.FILL_BOTH);
+		SWTFactory.createWrapLabel(pluginTabContainer,
+				PDEUIMessages.TargetDefinitionContentPage_LocationDescription,
+				2, 400);
+		fLocationTree = TargetLocationsGroup.createInForm(pluginTabContainer,
+				toolkit);
+		fLocationTab.setControl(pluginTabContainer);
+
+		TabItem contentTab = new TabItem(tabs, SWT.NONE);
+		contentTab.setText(PDEUIMessages.TargetDefinitionContentPage_6);
+		Composite contentTabContainer = SWTFactory.createComposite(tabs, 1, 1,
+				GridData.FILL_BOTH);
+		SWTFactory.createWrapLabel(contentTabContainer,
+				PDEUIMessages.ContentSection_1, 2, 400);
+		fContentTree = TargetContentsGroup.createInForm(contentTabContainer,
+				toolkit);
+		contentTab.setControl(contentTabContainer);
+		
+		
+		TabItem envTab = new TabItem(tabs, SWT.NONE);
+		envTab.setText(PDEUIMessages.TargetDefinitionEnvironmentPage_3);
+		Composite envTabContainer = SWTFactory.createComposite(tabs, 1, 1, GridData.FILL_BOTH);
+		createTargetEnvironmentGroup(envTabContainer);
+		createJREGroup(envTabContainer);
+		envTab.setControl(envTabContainer);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(envTabContainer, IHelpContextIds.EDIT_TARGET_WIZARD_ENVIRONMENT_TAB);
+
+		TabItem argsTab = new TabItem(tabs, SWT.NONE);
+		argsTab.setText(PDEUIMessages.TargetDefinitionEnvironmentPage_4);
+		argsTab.setControl(createArgumentsGroup(tabs));
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(argsTab.getControl(), IHelpContextIds.EDIT_TARGET_WIZARD_ARGUMENT_TAB);
+
+
+
+		initialize();
+
+		addTargetListeners();
+
+	}
+	
+	private void createJREGroup(Composite container) {
+		Group group = SWTFactory.createGroup(container, PDEUIMessages.EnvironmentBlock_jreTitle, 2, 1, GridData.FILL_HORIZONTAL);
+
+		initializeJREValues();
+
+		SWTFactory.createWrapLabel(group, PDEUIMessages.JRESection_description, 2);
+
+		fDefaultJREButton = SWTFactory.createRadioButton(group, PDEUIMessages.JRESection_defaultJRE, 2);
+		fDefaultJREButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				updateJREWidgets();
+				getTargetDefinition().setJREContainer(JavaRuntime.newDefaultJREContainerPath());
+				makeDirty(getTargetDefinition());
+			}
+		});
+
+		fNamedJREButton = SWTFactory.createRadioButton(group, PDEUIMessages.JRESection_JREName);
+		fNamedJREButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				updateJREWidgets();
+				getTargetDefinition().setJREContainer(JavaRuntime.newJREContainerPath(VMUtil.getVMInstall(fNamedJREsCombo.getText())));
+				makeDirty(getTargetDefinition());
+			}
+		});
+
+		fNamedJREsCombo = SWTFactory.createCombo(group, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY, 1, VMUtil.getVMInstallNames());
+		fNamedJREsCombo.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				getTargetDefinition().setJREContainer(JavaRuntime.newJREContainerPath(VMUtil.getVMInstall(fNamedJREsCombo.getText())));
+				makeDirty(getTargetDefinition());
+			}
+		});
+
+		fExecEnvButton = SWTFactory.createRadioButton(group, PDEUIMessages.JRESection_ExecutionEnv);
+		fExecEnvButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				updateJREWidgets();
+				getTargetDefinition().setJREContainer(JavaRuntime.newJREContainerPath(VMUtil.getExecutionEnvironment(fExecEnvsCombo.getText())));
+				makeDirty(getTargetDefinition());
+			}
+		});
+
+		fExecEnvsCombo = SWTFactory.createCombo(group, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY, 1, (String[]) fExecEnvChoices.toArray(new String[fExecEnvChoices.size()]));
+		fExecEnvsCombo.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				getTargetDefinition().setJREContainer(JavaRuntime.newJREContainerPath(VMUtil.getExecutionEnvironment(fExecEnvsCombo.getText())));
+				makeDirty(getTargetDefinition());
+			}
+		});
+
+	}
+	
+	
+	/**
+	 * Initializes the combo with possible execution environments
+	 */
+	protected void initializeJREValues() {
+		fExecEnvChoices = new TreeSet();
+		IExecutionEnvironmentsManager manager = JavaRuntime.getExecutionEnvironmentsManager();
+		IExecutionEnvironment[] envs = manager.getExecutionEnvironments();
+		for (int i = 0; i < envs.length; i++)
+			fExecEnvChoices.add(envs[i].getId());
+	}
+
+	protected void updateJREWidgets() {
+		fNamedJREsCombo.setEnabled(fNamedJREButton.getSelection());
+		fExecEnvsCombo.setEnabled(fExecEnvButton.getSelection());
+	}
+	private void createTargetEnvironmentGroup(Composite container) {
+		Group group = SWTFactory.createGroup(container, PDEUIMessages.EnvironmentBlock_targetEnv, 2, 1, GridData.FILL_HORIZONTAL);
+
+		initializeChoices();
+
+		SWTFactory.createWrapLabel(group, PDEUIMessages.EnvironmentSection_description, 2);
+
+		SWTFactory.createLabel(group, PDEUIMessages.Preferences_TargetEnvironmentPage_os, 1);
+
+		fOSCombo = SWTFactory.createCombo(group, SWT.SINGLE | SWT.BORDER, 1, (String[]) fOSChoices.toArray(new String[fOSChoices.size()]));
+		fOSCombo.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				String val = getModelValue(fOSCombo.getText());
+				if(getTargetDefinition().getOS()  != null && !getTargetDefinition().getOS().equals(val) )
+					makeDirty(getTargetDefinition());
+				getTargetDefinition().setOS(val);
+				
+			}
+		});
+
+		SWTFactory.createLabel(group, PDEUIMessages.Preferences_TargetEnvironmentPage_ws, 1);
+
+		fWSCombo = SWTFactory.createCombo(group, SWT.SINGLE | SWT.BORDER, 1, (String[]) fWSChoices.toArray(new String[fWSChoices.size()]));
+		fWSCombo.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				String val = getModelValue(fWSCombo.getText());
+				if(getTargetDefinition().getWS()  != null && !getTargetDefinition().getWS().equals(val) )
+					makeDirty(getTargetDefinition());
+				getTargetDefinition().setWS(val);
+			}
+		});
+
+		SWTFactory.createLabel(group, PDEUIMessages.Preferences_TargetEnvironmentPage_arch, 1);
+
+		fArchCombo = SWTFactory.createCombo(group, SWT.SINGLE | SWT.BORDER, 1, (String[]) fArchChoices.toArray(new String[fArchChoices.size()]));
+		fArchCombo.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				String val = getModelValue(fArchCombo.getText());
+				if(getTargetDefinition().getArch()  != null && !getTargetDefinition().getArch().equals(val) )
+					makeDirty(getTargetDefinition());
+				getTargetDefinition().setArch(val);
+			}
+		});
+
+		SWTFactory.createLabel(group, PDEUIMessages.Preferences_TargetEnvironmentPage_nl, 1);
+
+		fNLCombo = SWTFactory.createCombo(group, SWT.SINGLE | SWT.BORDER, 1, (String[]) fNLChoices.toArray(new String[fNLChoices.size()]));
+		fNLCombo.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				String value = fNLCombo.getText();
+				int index = value.indexOf("-"); //$NON-NLS-1$
+				if (index > 0)
+					value = value.substring(0, index);
+				String val = getModelValue(value);
+				if(getTargetDefinition().getNL()  != null && !getTargetDefinition().getNL().equals(val) )
+					makeDirty(getTargetDefinition());
+				getTargetDefinition().setNL(val);
+			}
+		});
+	}
+	
+	/**
+	 * Returns the given string or <code>null</code> if the string is empty.
+	 * Used when setting a value in the target definition.
+	 * 
+	 * @param value
+	 * @return trimmed value or <code>null</code>
+	 */
+	private String getModelValue(String value) {
+		if (value != null) {
+			value = value.trim();
+			if (value.length() == 0) {
+				return null;
+			}
+		}
+		return value;
+	}
+
+	/**
+	* Delimits a comma separated preference and add the items to the given set
+	* @param set
+	* @param preference
+	*/
+	private void addExtraChoices(Set set, String preference) {
+		StringTokenizer tokenizer = new StringTokenizer(preference, ","); //$NON-NLS-1$
+		while (tokenizer.hasMoreTokens()) {
+			set.add(tokenizer.nextToken().trim());
+		}
+	}
+	/**
+	 * Loads combo choices fromt he platform and from PDE core preferences
+	 */
+	private void initializeChoices() {
+		IEclipsePreferences node = new InstanceScope().getNode(PDECore.PLUGIN_ID);
+
+		fOSChoices = new TreeSet();
+		String[] os = Platform.knownOSValues();
+		for (int i = 0; i < os.length; i++) {
+			fOSChoices.add(os[i]);
+		}
+		String pref = node.get(ICoreConstants.OS_EXTRA, EMPTY_STRING);
+		if (!EMPTY_STRING.equals(pref)) {
+			addExtraChoices(fOSChoices, pref);
+		}
+
+		fWSChoices = new TreeSet();
+		String[] ws = Platform.knownWSValues();
+		for (int i = 0; i < ws.length; i++) {
+			fWSChoices.add(ws[i]);
+		}
+		pref = node.get(ICoreConstants.WS_EXTRA, EMPTY_STRING);
+		if (!EMPTY_STRING.equals(pref)) {
+			addExtraChoices(fWSChoices, pref);
+		}
+
+		fArchChoices = new TreeSet();
+		String[] arch = Platform.knownOSArchValues();
+		for (int i = 0; i < arch.length; i++) {
+			fArchChoices.add(arch[i]);
+		}
+		pref = node.get(ICoreConstants.ARCH_EXTRA, EMPTY_STRING);
+		if (!EMPTY_STRING.equals(pref)) {
+			addExtraChoices(fArchChoices, pref);
+		}
+
+		fNLChoices = new TreeSet();
+		String[] nl = LocaleUtil.getLocales();
+		for (int i = 0; i < nl.length; i++) {
+			fNLChoices.add(nl[i]);
+		}
+		pref = node.get(ICoreConstants.NL_EXTRA, EMPTY_STRING);
+		if (!EMPTY_STRING.equals(pref)) {
+			addExtraChoices(fNLChoices, pref);
+		}
+	} 
+	private Control createArgumentsGroup(Composite parent) {
+		Composite container = SWTFactory.createComposite(parent, 1, 1, GridData.FILL_BOTH);
+
+		SWTFactory.createWrapLabel(container, PDEUIMessages.JavaArgumentsTab_description, 1);
+
+		Group programGroup = SWTFactory.createGroup(container, PDEUIMessages.JavaArgumentsTab_progamArgsGroup, 1, 1, GridData.FILL_HORIZONTAL);
+
+		fProgramArgs = SWTFactory.createText(programGroup, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.V_SCROLL, 1, 200, 60, GridData.FILL_BOTH);
+		fProgramArgs.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				String val = fProgramArgs.getText().trim();
+				if(getTargetDefinition().getProgramArguments()  != null && !getTargetDefinition().getProgramArguments().equals(val) )
+					makeDirty(getTargetDefinition());
+				getTargetDefinition().setProgramArguments(val);
+			
+			}
+		});
+
+		Composite programButtons = SWTFactory.createComposite(programGroup, 1, 1, GridData.HORIZONTAL_ALIGN_END, 0, 0);
+
+		Button programVars = SWTFactory.createPushButton(programButtons, PDEUIMessages.JavaArgumentsTab_programVariables, null, GridData.HORIZONTAL_ALIGN_END);
+		programVars.addSelectionListener(getVariablesListener(fProgramArgs));
+
+		Group vmGroup = new Group(container, SWT.NONE);
+		vmGroup.setLayout(new GridLayout(1, false));
+		vmGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		vmGroup.setText(PDEUIMessages.JavaArgumentsTab_vmArgsGroup);
+
+		fVMArgs = SWTFactory.createText(vmGroup, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.V_SCROLL, 1, 200, 60, GridData.FILL_BOTH);
+		fVMArgs.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				String val = fVMArgs.getText().trim();
+				if(getTargetDefinition().getVMArguments()  != null && !getTargetDefinition().getVMArguments().equals(val) )
+					makeDirty(getTargetDefinition());
+				getTargetDefinition().setVMArguments(val);
+			}
+		});
+
+		Composite buttons = SWTFactory.createComposite(vmGroup, 2, 1, GridData.HORIZONTAL_ALIGN_END, 0, 0);
+
+		Button vmArgs = SWTFactory.createPushButton(buttons, PDEUIMessages.JavaArgumentsTab_addVMArgs, null, GridData.HORIZONTAL_ALIGN_END);
+		vmArgs.addSelectionListener(getVMArgsListener(fVMArgs));
+
+		Button vmVars = SWTFactory.createPushButton(buttons, PDEUIMessages.JavaArgumentsTab_vmVariables, null, GridData.HORIZONTAL_ALIGN_END);
+		vmVars.addSelectionListener(getVariablesListener(fVMArgs));
+		return container;
+	}
+
+	
+	/**
+	 * Provide a listener for the Add VM Arguments button.
+	 * The listener invokes the <code>VMArgumentsSelectionDialog</code> and 
+	 * updates the selected VM Arguments back in the VM Arguments Text Box
+	 * 
+	 * @param textControl
+	 * @return	<code>SelectionListener</code> for the Add VM Arguments button
+	 */
+	private SelectionListener getVMArgsListener(final Text textControl) {
+		return new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				ArgumentsFromContainerSelectionDialog dialog = new ArgumentsFromContainerSelectionDialog(getEditorSite()
+						.getShell(), getTargetDefinition());
+				if (dialog.open() == Window.OK) {
+					String[] args = dialog.getSelectedArguments();
+					if (args != null && args.length > 0) {
+						StringBuffer resultBuffer = new StringBuffer();
+						for (int index = 0; index < args.length; ++index) {
+							resultBuffer.append(args[index] + " "); //$NON-NLS-1$
+						}
+						fVMArgs.insert(resultBuffer.toString());
+					}
+				}
+			}
+		};
+	}
+
+	/**
+	 * Provide a listener for the Variables button.
+	 * The listener invokes the <code>StringVariableSelectionDialog</code> and 
+	 * updates the selected Variables back in the VM Arguments Text Box
+	 * 
+	 * @param textControl
+	 * @return	<code>SelectionListener</code> for the Variables button
+	 */
+	private SelectionListener getVariablesListener(final Text textControl) {
+		return new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				StringVariableSelectionDialog dialog = new StringVariableSelectionDialog(getEditorSite()
+						.getShell());
+				dialog.open();
+				String variable = dialog.getVariableExpression();
+				if (variable != null) {
+					textControl.insert(variable);
+				}
+			}
+		};
+	}
+
+	
+	
+
+	public void dispose() {
+		super.dispose();
+		if (configuration != null) {
+			configuration.removePropertyChangeListener(listener);
+		}
+
+	}
+
+	/*
+	 * (non-Javadoc) Initializes the editor part with a site and input.
+	 */
+	public void init(IEditorSite site, IEditorInput input) {
+		super.init(site, input);
+
+		IOSGIFrameworkInstance ts = (IOSGIFrameworkInstance) server.loadAdapter(
+				IOSGIFrameworkInstance.class, null);
+
+		try {
+			configuration = ts.getFrameworkInstanceConfiguration();
+			if (configuration != null
+					&& configuration.getTargetDefinition() != null)
+				getTargetDefinition().resolve(new NullProgressMonitor());
+		} catch (CoreException e) {
+			Trace.trace(Trace.SEVERE, "cannot access configuration", e);
+		}
+
+		if (server != null)
+			server2 = (IOSGIFrameworkWorkingCopy) server.loadAdapter(
+					IOSGIFrameworkWorkingCopy.class, null);
+
+		addChangeListener();
+		initialize();
+	}
+
+	/**
+	 * 
+	 */
+	protected void initialize() {
+
+		ITargetDefinition definition = getTargetDefinition();
+		if (definition != null)
+			definition.resolve(new NullProgressMonitor());
+		targetChanged(definition);
+	}
+
+	/*
+	 * @see IWorkbenchPart#setFocus()
+	 */
+	public void setFocus() {
+
+	}
+
+	@Override
+	public void doSave(IProgressMonitor monitor) {
+		super.doSave(monitor);
+		IOSGIFrameworkInstance runtimeInstance = (IOSGIFrameworkInstance) server
+				.loadAdapter(IOSGIFrameworkInstance.class, null);
+
+		try {
+			runtimeInstance.getFrameworkInstanceConfiguration()
+					.setTargetDefinition(getTargetDefinition());
+			ITargetPlatformService service = TargetDefinitionUtil.getTargetPlatformService();
+			service.saveTargetDefinition(getTargetDefinition());
+		} catch (CoreException e) {
+			e.printStackTrace();
+		}
+
+	}
+}