The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at http://www.eclipse.org/legal/epl-v10.html.
+For purposes of the EPL, "Program" will mean the Content.
+
+
If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") 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 http://www.eclipse.org.
+
+
+
diff --git a/features/org.eclipse.emf.cdo.server.db4o-feature/build.properties b/features/org.eclipse.emf.cdo.server.db4o-feature/build.properties
new file mode 100644
index 0000000000..38f78d73df
--- /dev/null
+++ b/features/org.eclipse.emf.cdo.server.db4o-feature/build.properties
@@ -0,0 +1,24 @@
+# Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+bin.includes = feature.xml,\
+ epl-v10.html,\
+ copyright.txt,\
+ feature.properties,\
+ about.html,\
+ license.html,\
+ eclipse.gif,\
+ eclipse_update_120.jpg,\
+ category.xml
+src.includes = about.html,\
+ copyright.txt,\
+ epl-v10.html,\
+ license.html
diff --git a/features/org.eclipse.emf.cdo.server.db4o-feature/copyright.txt b/features/org.eclipse.emf.cdo.server.db4o-feature/copyright.txt
new file mode 100644
index 0000000000..b655e1c584
--- /dev/null
+++ b/features/org.eclipse.emf.cdo.server.db4o-feature/copyright.txt
@@ -0,0 +1,9 @@
+Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ Victor Roldan Betancort - initial API and implementation
+ Eike Stepper - maintenance
diff --git a/features/org.eclipse.emf.cdo.server.db4o-feature/eclipse.gif b/features/org.eclipse.emf.cdo.server.db4o-feature/eclipse.gif
new file mode 100644
index 0000000000..bdc2912bfd
Binary files /dev/null and b/features/org.eclipse.emf.cdo.server.db4o-feature/eclipse.gif differ
diff --git a/features/org.eclipse.emf.cdo.server.db4o-feature/eclipse_update_120.jpg b/features/org.eclipse.emf.cdo.server.db4o-feature/eclipse_update_120.jpg
new file mode 100644
index 0000000000..bfdf708ad6
Binary files /dev/null and b/features/org.eclipse.emf.cdo.server.db4o-feature/eclipse_update_120.jpg differ
diff --git a/features/org.eclipse.emf.cdo.server.db4o-feature/epl-v10.html b/features/org.eclipse.emf.cdo.server.db4o-feature/epl-v10.html
new file mode 100644
index 0000000000..832a9d448e
--- /dev/null
+++ b/features/org.eclipse.emf.cdo.server.db4o-feature/epl-v10.html
@@ -0,0 +1,258 @@
+
+
+
+
+
+
+
+Eclipse Public License - Version 1.0
+
+
+
+
+
Eclipse Public License - v 1.0
+
+
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.
+
+
1. DEFINITIONS
+
+
"Contribution" means:
+
+
a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and
+
b) in the case of each subsequent Contributor:
+
i) changes to the Program, and
+
ii) additions to the Program;
+
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.
+
+
"Contributor" means any person or entity that distributes
+the Program.
+
+
"Licensed Patents" 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.
+
+
"Program" means the Contributions distributed in accordance
+with this Agreement.
+
+
"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.
+
+
2. GRANT OF RIGHTS
+
+
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.
+
+
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.
+
+
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.
+
+
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.
+
+
3. REQUIREMENTS
+
+
A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:
+
+
a) it complies with the terms and conditions of this
+Agreement; and
+
+
b) its license agreement:
+
+
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;
+
+
ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+
iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and
+
+
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.
+
+
When the Program is made available in source code form:
+
+
a) it must be made available under this Agreement; and
+
+
b) a copy of this Agreement must be included with each
+copy of the Program.
+
+
Contributors may not remove or alter any copyright notices contained
+within the Program.
+
+
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.
+
+
4. COMMERCIAL DISTRIBUTION
+
+
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
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+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.
+
+
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.
+
+
5. NO WARRANTY
+
+
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" 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.
+
+
6. DISCLAIMER OF LIABILITY
+
+
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.
+
+
7. GENERAL
+
+
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.
+
+
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.
+
+
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.
+
+
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.
+
+
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.
+
+
\ No newline at end of file
diff --git a/features/org.eclipse.emf.cdo.server.db4o-feature/feature.properties b/features/org.eclipse.emf.cdo.server.db4o-feature/feature.properties
new file mode 100644
index 0000000000..3f673efa15
--- /dev/null
+++ b/features/org.eclipse.emf.cdo.server.db4o-feature/feature.properties
@@ -0,0 +1,167 @@
+# Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+# Simon McDuff - initial API and implementation
+# Ibrahim Sallam - Code refactring and CDO 3.0 support
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+providerName = Eclipse Modeling Project
+featureName = CDO Model Repository Server DB4O
+description = CDO Model Repository Server DB4O contains the DB4O Store bundle. Ensure that DB4O Driver is already installed! Visit http://net4j.sourceforge.net/update for a p2 repository that contains DB4O Driver.
+
+
+copyrightURL = copyright.txt
+copyright = Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+ Victor Roldan Betancort - initial API and implementation\n\
+ Eike Stepper - maintenance
+
+licenseURL = license.html
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 14, 2010\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\
+ - 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
+
+# Label for the update site (on download1.eclipse.org)
+updateSiteName=Eclipse Modeling Project Updates
+
+# ==============================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# The above properties have been shipped for translation.
+# ==============================================================================
diff --git a/features/org.eclipse.emf.cdo.server.db4o-feature/feature.xml b/features/org.eclipse.emf.cdo.server.db4o-feature/feature.xml
new file mode 100644
index 0000000000..bdc4380fda
--- /dev/null
+++ b/features/org.eclipse.emf.cdo.server.db4o-feature/feature.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+ %description
+
+
+
+ %copyright
+
+
+
+ %license
+
+
+
+
+
+
+
+
+
+
diff --git a/features/org.eclipse.emf.cdo.server.db4o-feature/license.html b/features/org.eclipse.emf.cdo.server.db4o-feature/license.html
new file mode 100644
index 0000000000..c184ca36a9
--- /dev/null
+++ b/features/org.eclipse.emf.cdo.server.db4o-feature/license.html
@@ -0,0 +1,107 @@
+
+
+
+
+
+Eclipse Foundation Software User Agreement
+
+
+
+
Eclipse Foundation Software User Agreement
+
April 14, 2010
+
+
Usage Of Content
+
+
THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). 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.
+
+
Applicable Licenses
+
+
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
+ ("EPL"). A copy of the EPL is provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.
+ For purposes of the EPL, "Program" will mean the Content.
+
+
Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+ repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").
+
+
+
Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").
+
Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".
+
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 "features". Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
+ and/or Fragments associated with that Feature.
+
Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.
+
+
+
The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
+Included Features should be contained in files named "license.html" ("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:
+
+
+
The top-level (root) directory
+
Plug-in and Fragment directories
+
Inside Plug-ins and Fragments packaged as JARs
+
Sub-directories of the directory named "src" of certain Plug-ins
+
Feature directories
+
+
+
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 ("Feature Update License") 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 "license" property of files named "feature.properties" 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.
+
+
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):
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.
+
+
+
Use of Provisioning Technology
+
+
The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). 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 http://eclipse.org/equinox/p2/repository_packaging.html
+ ("Specification").
+
+
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:
+
+
+
A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
+ on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
+ product.
+
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.
+
Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+ Software ("Installable Software Agreement") 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.
+
+
+
Cryptography
+
+
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.
+
+
Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.
+
+
diff --git a/features/org.eclipse.emf.cdo.site-feature/feature.xml b/features/org.eclipse.emf.cdo.site-feature/feature.xml
index 49d28aa14a..0ae0ed5a85 100644
--- a/features/org.eclipse.emf.cdo.site-feature/feature.xml
+++ b/features/org.eclipse.emf.cdo.site-feature/feature.xml
@@ -80,6 +80,10 @@
id="org.eclipse.emf.cdo.server.hibernate"
version="0.0.0"/>
+
+
diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.server.db4o/META-INF/MANIFEST.MF
index f170494fcf..54e4caf184 100644
--- a/plugins/org.eclipse.emf.cdo.server.db4o/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.cdo.server.db4o/META-INF/MANIFEST.MF
@@ -6,9 +6,9 @@ Bundle-Version: 4.0.0.qualifier
Bundle-Localization: plugin
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Require-Bundle: org.eclipse.emf.cdo.server;bundle-version="[3.0.0,4.0.1)"
-Export-Package: org.eclipse.emf.cdo.internal.server.db4o;version="1.0.0";x-friends:="org.eclipse.emf.cdo.tests.db4o",
- org.eclipse.emf.cdo.internal.server.db4o.bundle;version="1.0.0";x-internal:=true,
- org.eclipse.emf.cdo.server.db4o;version="1.0.0"
+Export-Package: org.eclipse.emf.cdo.server.db4o;version="1.0.0",
+ org.eclipse.emf.cdo.server.internal.db4o;version="1.0.0";x-friends:="org.eclipse.emf.cdo.tests.db4o",
+ org.eclipse.emf.cdo.server.internal.db4o.bundle;version="1.0.0";x-internal:=true
Import-Package: com.db4o;version="[7.4.0,8.0.0)",
com.db4o.config;version="[7.4.0,8.0.0)",
com.db4o.query;version="[7.4.0,8.0.0)",
diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/plugin.xml b/plugins/org.eclipse.emf.cdo.server.db4o/plugin.xml
index 9152773198..c6a30e8c52 100644
--- a/plugins/org.eclipse.emf.cdo.server.db4o/plugin.xml
+++ b/plugins/org.eclipse.emf.cdo.server.db4o/plugin.xml
@@ -17,7 +17,7 @@
diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/CommitInfo.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/CommitInfo.java
deleted file mode 100644
index 8b8b4a8563..0000000000
--- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/CommitInfo.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
- * Victor Roldan Betancort - initial API and implementation
- */
-
-package org.eclipse.emf.cdo.internal.server.db4o;
-
-import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
-import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler;
-import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager;
-import org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager;
-
-/**
- * @author Victor Roldan Betancort
- */
-public class CommitInfo
-{
- private int branchID;
-
- private long timeStamp;
-
- private String userID;
-
- private String comment;
-
- public CommitInfo(int branchId, long timeStamp, String userID, String comment)
- {
- branchID = branchId;
- this.timeStamp = timeStamp;
- this.userID = userID;
- this.comment = comment;
- }
-
- public int getBranchID()
- {
- return branchID;
- }
-
- public long getTimeStamp()
- {
- return timeStamp;
- }
-
- public void handle(InternalCDOBranchManager branchManager, InternalCDOCommitInfoManager manager,
- CDOCommitInfoHandler handler)
- {
- CDOCommitInfo commitInfo = manager.createCommitInfo(branchManager.getBranch(branchID), timeStamp, userID, comment,
- null);
- handler.handleCommitInfo(commitInfo);
- }
-}
diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/DB4OStore.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/DB4OStore.java
deleted file mode 100644
index 8aa2ba84a7..0000000000
--- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/DB4OStore.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/**
- * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
- * Victor Roldan Betancort - initial API and implementation
- */
-package org.eclipse.emf.cdo.internal.server.db4o;
-
-import org.eclipse.emf.cdo.server.ISession;
-import org.eclipse.emf.cdo.server.IStoreAccessor;
-import org.eclipse.emf.cdo.server.ITransaction;
-import org.eclipse.emf.cdo.server.IView;
-import org.eclipse.emf.cdo.server.db4o.IDB4OStore;
-import org.eclipse.emf.cdo.spi.server.LongIDStore;
-import org.eclipse.emf.cdo.spi.server.StoreAccessorPool;
-
-import org.eclipse.net4j.util.ReflectUtil.ExcludeFromDump;
-
-import com.db4o.Db4o;
-import com.db4o.ObjectContainer;
-import com.db4o.ObjectServer;
-import com.db4o.ObjectSet;
-import com.db4o.config.Configuration;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * @author Victor Roldan Betancort
- */
-public class DB4OStore extends LongIDStore implements IDB4OStore
-{
- private transient ObjectServer server;
-
- @ExcludeFromDump
- private transient final StoreAccessorPool readerPool = new StoreAccessorPool(this, null);
-
- @ExcludeFromDump
- private transient final StoreAccessorPool writerPool = new StoreAccessorPool(this, null);
-
- private transient String storeLocation;
-
- private transient int port;
-
- private transient Configuration serverConfiguration;
-
- private ServerInfo serverInfo;
-
- private boolean requiredToSupportAudits;
-
- private boolean requiredToSupportBranches;
-
- public DB4OStore(String storeLocation, int port)
- {
- // super(IDB4OStore.TYPE, Collections.singleton(ChangeFormat.REVISION), Collections
- // .singleton(RevisionTemporality.NONE), Collections.singleton(RevisionParallelism.NONE));
-
- super(IDB4OStore.TYPE, set(ChangeFormat.REVISION), set(RevisionTemporality.NONE, RevisionTemporality.AUDITING),
- set(RevisionParallelism.NONE, RevisionParallelism.BRANCHING));
-
- this.storeLocation = storeLocation;
- this.port = port;
- }
-
- public DB4OStore(String storeLocation, int port, Configuration serverConfiguration)
- {
- this(storeLocation, port);
- this.serverConfiguration = serverConfiguration;
- }
-
- public long getCreationTime()
- {
- return getServerInfo().getCreationTime();
- }
-
- public boolean isFirstTime()
- {
- return getServerInfo().isFirstTime();
- }
-
- public ObjectContainer openClient()
- {
- // Configuration configuration = clientConfiguration;
- // if (configuration == null)
- // {
- // configuration = createClientConfiguration();
- // }
-
- // server.openClient(configuration);
- return server.openClient();
- }
-
- public Map getPropertyValues(Set names)
- {
- Map properties = getServerInfo().getProperties();
- Map propertiesSubSet = new HashMap();
- for (String key : names)
- {
- propertiesSubSet.put(key, properties.get(key));
- }
- return propertiesSubSet;
- }
-
- public void setPropertyValues(Map properties)
- {
- getServerInfo().setProperties(properties);
- commitServerInfo(getServerInfo());
- }
-
- public boolean isRequiredToSupportAudits()
- {
- return requiredToSupportAudits;
- }
-
- public boolean isRequiredToSupportBranches()
- {
- return requiredToSupportBranches;
- }
-
- @Override
- protected void doBeforeActivate()
- {
- requiredToSupportAudits = getRepository().isSupportingAudits();
- requiredToSupportBranches = getRepository().isSupportingBranches();
- }
-
- public void removePropertyValues(Set names)
- {
- Map properties = getServerInfo().getProperties();
- for (String key : names)
- {
- properties.remove(key);
- }
- getServerInfo().setProperties(properties);
- commitServerInfo(getServerInfo());
- }
-
- @Override
- protected void doActivate() throws Exception
- {
- super.doActivate();
- Configuration configuration = serverConfiguration;
- if (configuration == null)
- {
- configuration = createServerConfiguration();
- }
-
- server = Db4o.openServer(configuration, storeLocation, port);
- getServerInfo();
- }
-
- private ServerInfo getServerInfo()
- {
- if (serverInfo == null)
- {
- serverInfo = initServerInfo();
- }
-
- return serverInfo;
- }
-
- private ServerInfo initServerInfo()
- {
- ObjectContainer container = openClient();
- ObjectSet infos = container.query(ServerInfo.class);
-
- if (infos.size() > 1)
- {
- throw new IllegalStateException("ServeInfo is stored in container more than once");
- }
-
- ServerInfo newServerInfo = null;
- if (infos.isEmpty())
- {
- newServerInfo = new ServerInfo();
- newServerInfo.setFirstTime(true);
- newServerInfo.setCreationTime(System.currentTimeMillis());
- commitServerInfo(newServerInfo);
- }
- else
- {
- newServerInfo = infos.get(0);
- if (newServerInfo.isFirstTime())
- {
- newServerInfo.setFirstTime(false);
- commitServerInfo(newServerInfo);
- }
- }
- container.close();
- return newServerInfo;
- }
-
- private void commitServerInfo(ServerInfo serverInfo)
- {
- ObjectContainer container = openClient();
- container.store(serverInfo);
- container.commit();
- container.close();
- }
-
- @Override
- protected void doDeactivate() throws Exception
- {
- server.close();
- server = null;
- super.doDeactivate();
- }
-
- protected Configuration createServerConfiguration()
- {
- Configuration conf = Db4o.newConfiguration();
- return conf;
- }
-
- @Override
- protected IStoreAccessor createReader(ISession session)
- {
- return new DB4OStoreAccessor(this, session);
- }
-
- @Override
- protected IStoreAccessor createWriter(ITransaction transaction)
- {
- return new DB4OStoreAccessor(this, transaction);
- }
-
- @Override
- protected StoreAccessorPool getReaderPool(ISession session, boolean forReleasing)
- {
- return readerPool;
- }
-
- @Override
- protected StoreAccessorPool getWriterPool(IView view, boolean forReleasing)
- {
- return writerPool;
- }
-}
diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/DB4OStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/DB4OStoreAccessor.java
deleted file mode 100644
index 784e7b2894..0000000000
--- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/DB4OStoreAccessor.java
+++ /dev/null
@@ -1,600 +0,0 @@
-/**
- * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
- * Victor Roldan Betancort - initial API and implementation
- */
-package org.eclipse.emf.cdo.internal.server.db4o;
-
-import org.eclipse.emf.cdo.common.branch.CDOBranch;
-import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
-import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
-import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
-import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler;
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDUtil;
-import org.eclipse.emf.cdo.common.protocol.CDODataInput;
-import org.eclipse.emf.cdo.common.protocol.CDODataOutput;
-import org.eclipse.emf.cdo.common.revision.CDORevision;
-import org.eclipse.emf.cdo.common.revision.CDORevisionHandler;
-import org.eclipse.emf.cdo.common.revision.cache.CDORevisionCacheAdder;
-import org.eclipse.emf.cdo.common.util.CDOQueryInfo;
-import org.eclipse.emf.cdo.eresource.EresourcePackage;
-import org.eclipse.emf.cdo.internal.server.db4o.bundle.OM;
-import org.eclipse.emf.cdo.server.IQueryHandler;
-import org.eclipse.emf.cdo.server.ISession;
-import org.eclipse.emf.cdo.server.IStoreChunkReader;
-import org.eclipse.emf.cdo.server.ITransaction;
-import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager;
-import org.eclipse.emf.cdo.spi.common.commit.CDOChangeSetSegment;
-import org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager;
-import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta;
-import org.eclipse.emf.cdo.spi.server.InternalRepository;
-import org.eclipse.emf.cdo.spi.server.LongIDStoreAccessor;
-
-import org.eclipse.net4j.util.StringUtil;
-import org.eclipse.net4j.util.om.monitor.OMMonitor;
-import org.eclipse.net4j.util.om.monitor.OMMonitor.Async;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-
-import com.db4o.ObjectContainer;
-import com.db4o.ObjectSet;
-import com.db4o.query.Predicate;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Set;
-
-/**
- * @author Victor Roldan Betancort
- */
-public class DB4OStoreAccessor extends LongIDStoreAccessor
-{
- private ObjectContainer objectContainer;
-
- public DB4OStoreAccessor(DB4OStore store, ISession session)
- {
- super(store, session);
- }
-
- public DB4OStoreAccessor(DB4OStore store, ITransaction transaction)
- {
- super(store, transaction);
- }
-
- @Override
- public DB4OStore getStore()
- {
- return (DB4OStore)super.getStore();
- }
-
- public ObjectContainer getObjectContainer()
- {
- return objectContainer;
- }
-
- public void setObjectContainer(ObjectContainer objectContainer)
- {
- this.objectContainer = objectContainer;
- }
-
- public EPackage[] loadPackageUnit(InternalCDOPackageUnit packageUnit)
- {
- return packageUnit.getEPackages(true);
- }
-
- public void writePackageUnits(InternalCDOPackageUnit[] packageUnits, OMMonitor monitor)
- {
- // TODO Where is this monitor worked on?
- monitor.begin(packageUnits.length);
-
- try
- {
- for (InternalCDOPackageUnit packageUnit : packageUnits)
- {
- PrimitivePackageUnit primitivePackageUnit = PrimitivePackageUnit.getPrimitivePackageUnit(getStore(),
- packageUnit);
- getObjectContainer().store(primitivePackageUnit);
- }
- }
- catch (Exception ex)
- {
- OM.LOG.error(ex);
- }
- finally
- {
- monitor.done();
- }
- }
-
- public Collection readPackageUnits()
- {
- Collection primitivePackageUnits = getObjectContainer().query(PrimitivePackageUnit.class);
- List result = new ArrayList();
- for (PrimitivePackageUnit primitivePackageUnit : primitivePackageUnits)
- {
- InternalCDOPackageUnit packageUnit = PrimitivePackageUnit.getPackageUnit(getStore().getRepository()
- .getPackageRegistry(), primitivePackageUnit);
- result.add(packageUnit);
- }
- return result;
- }
-
- public InternalCDORevision readRevision(CDOID id, CDOBranchPoint branchPoint, int listChunk,
- CDORevisionCacheAdder cache)
- {
- InternalCDORevision revision = getRevisionFromContainer(branchPoint.getBranch().getID(), id);
- cache.addRevision(revision);
- return revision;
- }
-
- public void queryResources(QueryResourcesContext context)
- {
- final long folderID = CDOIDUtil.getLong(context.getFolderID());
- final String name = context.getName();
- final boolean exactMatch = context.exactMatch();
-
- ObjectSet revisionObjectSet = getObjectContainer().query(new Predicate()
- {
- private static final long serialVersionUID = 1L;
-
- @Override
- public boolean match(PrimitiveRevision primitiveRevision)
- {
- if (!primitiveRevision.isResourceNode())
- {
- return false;
- }
- // is Root resource
- if (primitiveRevision.isRootResource())
- {
- return false;
- }
-
- if (PrimitiveRevision.compareIDObject(primitiveRevision.getContainerID(), folderID))
- {
- String candidateName = (String)primitiveRevision.getValues().get(EresourcePackage.CDO_RESOURCE__NAME);
- if (exactMatch)
- {
- if (candidateName != null && candidateName.equals(name))
- {
- return true;
- }
- }
- else
- {
- // provided name is prefix of the resource name
- if (candidateName != null && candidateName.startsWith(name))
- {
- return true;
- }
- }
- }
-
- return false;
- }
-
- });
-
- for (PrimitiveRevision revision : revisionObjectSet)
- {
- if (!context.addResource(PrimitiveRevision.getIDFromObject(revision.getId())))
- {
- // No more results allowed
- break;
- }
- }
-
- }
-
- public IStoreChunkReader createChunkReader(InternalCDORevision revision, EStructuralFeature feature)
- {
- throw new UnsupportedOperationException("not yet implemented");
- }
-
- public IQueryHandler getQueryHandler(CDOQueryInfo info)
- {
- return null;
- }
-
- @Override
- protected void doActivate() throws Exception
- {
- setObjectContainer(getStore().openClient());
- }
-
- @Override
- protected void doDeactivate() throws Exception
- {
- getObjectContainer().close();
- setObjectContainer(null);
- }
-
- @Override
- protected void doPassivate() throws Exception
- {
- getObjectContainer().rollback();
- }
-
- @Override
- protected void doUnpassivate() throws Exception
- {
- }
-
- @Override
- protected void rollback(CommitContext commitContext)
- {
- getObjectContainer().rollback();
- }
-
- private InternalCDORevision getRevisionFromContainer(int branchId, CDOID id)
- {
- PrimitiveRevision lastRevision = QueryUtil.getLastPrimitiveRevision(getObjectContainer(), branchId, id);
-
- // Revision does not exist. Return null to signal inexistent Revision
- if (lastRevision == null)
- {
- return null;
- }
- return PrimitiveRevision.getRevision(getStore(), lastRevision);
- }
-
- public InternalCDORevision readRevisionByVersion(CDOID id, CDOBranchVersion branchVersion, int listChunk,
- CDORevisionCacheAdder cache)
- {
- PrimitiveRevision revisionByVersion = QueryUtil.getPrimitiveRevisionByVersion(getObjectContainer(), id,
- branchVersion.getBranch().getID(), branchVersion.getVersion());
-
- // Revision does not exist. Return null to signal inexistent Revision
- if (revisionByVersion == null)
- {
- return null;
- }
- InternalCDORevision revision = PrimitiveRevision.getRevision(getStore(), revisionByVersion);
- cache.addRevision(revision);
- return revision;
- }
-
- public void handleRevisions(EClass eClass, CDOBranch branch, long timeStamp, CDORevisionHandler handler)
- {
- throw new UnsupportedOperationException("not implemented");
- }
-
- public Set readChangeSet(CDOChangeSetSegment... segments)
- {
- return null;
- }
-
- public void queryXRefs(final QueryXRefsContext context)
- {
- final int branchID = context.getBranch().getID();
-
- for (final CDOID target : context.getTargetObjects().keySet())
- {
- final long targetID = CDOIDUtil.getLong(target);
-
- for (final EClass eClass : context.getSourceCandidates().keySet())
- {
- final String eClassName = eClass.getName();
- final String nsURI = eClass.getEPackage().getNsURI();
- final List eReferences = context.getSourceCandidates().get(eClass);
- getObjectContainer().query(new Predicate()
- {
- private static final long serialVersionUID = 1L;
-
- private boolean moreResults = true;
-
- @Override
- public boolean match(PrimitiveRevision primitiveRevision)
- {
- if (!moreResults)
- {
- return false;
- }
- if (!primitiveRevision.getClassName().equals(eClassName))
- {
- return false;
- }
-
- if (!primitiveRevision.getNsURI().equals(nsURI))
- {
- return false;
- }
-
- if (!(primitiveRevision.getBranchID() == branchID))
- {
- return false;
- }
-
- for (EReference eReference : eReferences)
- {
- Object obj = primitiveRevision.getValues().get(eReference.getFeatureID());
- if (obj instanceof List)
- {
- List> list = (List>)obj;
- if (list.contains(targetID))
- {
- moreResults = context.addXRef(target, PrimitiveRevision.getIDFromObject(primitiveRevision.getId()),
- eReference, 0);
- }
- }
- else if (obj instanceof CDOID)
- {
- if (CDOIDUtil.getLong((CDOID)obj) == targetID)
- {
- moreResults = context.addXRef(target, PrimitiveRevision.getIDFromObject(primitiveRevision.getId()),
- eReference, 0);
- }
- }
- }
-
- return false;
- }
- });
-
- }
-
- }
- }
-
- public void rawExport(CDODataOutput out, int fromBranchID, int toBranchID, long fromCommitTime, long toCommitTime)
- throws IOException
- {
- throw new UnsupportedOperationException("not implemented");
- }
-
- public void rawImport(CDODataInput in, int fromBranchID, int toBranchID, long fromCommitTime, long toCommitTime)
- throws IOException
- {
-
- }
-
- public void rawImport(CDODataInput in, int fromBranchID, int toBranchID, long fromCommitTime, long toCommitTime,
- OMMonitor monitor) throws IOException
- {
- throw new UnsupportedOperationException("not implemented");
- }
-
- public int createBranch(int branchID, BranchInfo branchInfo)
- {
- return 0;
- }
-
- public BranchInfo loadBranch(int branchID)
- {
- return null;
- }
-
- public SubBranchInfo[] loadSubBranches(int branchID)
- {
- return null;
- }
-
- public int loadBranches(int startID, int endID, CDOBranchHandler branchHandler)
- {
- return 0;
- }
-
- public void loadCommitInfos(final CDOBranch branch, final long startTime, final long endTime,
- CDOCommitInfoHandler handler)
- {
- ObjectSet resultSet = getObjectContainer().query(new Predicate()
- {
- private static final long serialVersionUID = 1L;
-
- @Override
- public boolean match(CommitInfo info)
- {
- if (startTime != CDOBranchPoint.UNSPECIFIED_DATE && info.getTimeStamp() < startTime)
- {
- return false;
- }
-
- if (endTime != CDOBranchPoint.UNSPECIFIED_DATE && info.getTimeStamp() > endTime)
- {
- return false;
- }
-
- if (branch != null && !(info.getBranchID() == branch.getID()))
- {
- return false;
- }
-
- return true;
- }
-
- });
- InternalRepository repository = getStore().getRepository();
- InternalCDOCommitInfoManager commitInfoManager = repository.getCommitInfoManager();
- InternalCDOBranchManager branchManager = repository.getBranchManager();
-
- // Although not specified in the API, the test-case suite
- // suggests CommitInfos should be returned ordered by timeStamp
-
- List infos = new ArrayList();
- infos.addAll(resultSet);
- Collections.sort(infos, new Comparator()
- {
-
- public int compare(CommitInfo arg0, CommitInfo arg1)
- {
- return arg0.getTimeStamp() <= arg1.getTimeStamp() ? -1 : 1;
- }
- });
- for (CommitInfo info : infos)
- {
- info.handle(branchManager, commitInfoManager, handler);
- }
- }
-
- @Override
- protected void doCommit(OMMonitor monitor)
- {
- monitor.begin();
- Async async = monitor.forkAsync();
-
- try
- {
- getObjectContainer().commit();
- }
- catch (Exception e)
- {
- OM.LOG.error(e);
- }
- finally
- {
- async.stop();
- monitor.done();
- }
- }
-
- @Override
- protected void writeCommitInfo(CDOBranch branch, long timeStamp, String userID, String comment, OMMonitor monitor)
- {
- CommitInfo commitInfo = new CommitInfo(branch.getID(), timeStamp, userID, comment);
- writeObject(commitInfo, monitor);
- }
-
- @Override
- protected void writeRevisions(InternalCDORevision[] revisions, CDOBranch branch, OMMonitor monitor)
- {
- try
- {
- monitor.begin(revisions.length);
- for (InternalCDORevision revision : revisions)
- {
- writeRevision(revision, monitor.fork());
- }
- }
- finally
- {
- monitor.done();
- }
- }
-
- protected void checkDuplicateResources(CDORevision revision) throws IllegalStateException
- {
- final long folderID = CDOIDUtil.getLong((CDOID)revision.data().getContainerID());
- final long revisionID = CDOIDUtil.getLong(revision.getID());
- final String name = (String)revision.data().get(EresourcePackage.eINSTANCE.getCDOResourceNode_Name(), 0);
-
- ObjectSet resultSet = getObjectContainer().query(new Predicate()
- {
- private static final long serialVersionUID = 1L;
-
- @Override
- public boolean match(PrimitiveRevision revision)
- {
- if (revision.isResourceNode() && PrimitiveRevision.compareIDObject(revision.getContainerID(), folderID))
- {
- String candidateName = (String)revision.getValues().get(EresourcePackage.CDO_RESOURCE__NAME);
- if (StringUtil.compare(name, candidateName) == 0)
- {
- if (!PrimitiveRevision.compareIDObject(revision.getId(), revisionID))
- {
- return true;
- }
- }
- }
-
- return false;
- }
-
- });
-
- if (!resultSet.isEmpty())
- {
- throw new IllegalStateException("Duplicate resource or folder: " + name + " in folder " + folderID); //$NON-NLS-1$ //$NON-NLS-2$
- }
- }
-
- protected void writeRevision(InternalCDORevision revision, OMMonitor monitor)
- {
- Async async = null;
- monitor.begin(10);
- try
- {
- try
- {
- async = monitor.forkAsync();
- if (revision.isResourceFolder() || revision.isResource())
- {
- checkDuplicateResources(revision);
- }
- }
- finally
- {
- if (async != null)
- {
- async.stop();
- }
- }
-
- // If revision is in the store, remove old, store new
- PrimitiveRevision revisionAlreadyInStore = QueryUtil.getLastPrimitiveRevision(getObjectContainer(), revision
- .getBranch().getID(), revision.getID());
- if (revisionAlreadyInStore != null)
- {
- QueryUtil.removeRevisionFromContainer(getObjectContainer(), revision.getBranch().getID(), revision.getID());
- }
-
- PrimitiveRevision primitiveRevision = PrimitiveRevision.getPrimitiveRevision(revision);
- writeObject(primitiveRevision, monitor);
- }
- finally
- {
- monitor.done();
- }
- }
-
- protected void writeObject(Object object, OMMonitor monitor)
- {
- monitor.begin();
- Async async = monitor.forkAsync();
-
- try
- {
- getObjectContainer().store(object);
- }
- catch (Throwable t)
- {
- OM.LOG.error(t);
- }
- finally
- {
- async.stop();
- monitor.done();
- }
- }
-
- @Override
- protected void writeRevisionDeltas(InternalCDORevisionDelta[] revisionDeltas, CDOBranch branch, long created,
- OMMonitor monitor)
- {
- throw new UnsupportedOperationException("not implemented");
- }
-
- @Override
- protected void detachObjects(CDOID[] detachedObjects, CDOBranch branch, long timeStamp, OMMonitor monitor)
- {
- // TODO Work on monitor
- for (CDOID id : detachedObjects)
- {
- QueryUtil.removeRevisionFromContainer(getObjectContainer(), branch.getID(), id);
- }
- }
-}
diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/DB4OStoreFactory.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/DB4OStoreFactory.java
deleted file mode 100644
index 9ef2ef3ed0..0000000000
--- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/DB4OStoreFactory.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
- * Victor Roldan Betancort - initial API and implementation
- */
-package org.eclipse.emf.cdo.internal.server.db4o;
-
-import org.eclipse.emf.cdo.server.IStore;
-import org.eclipse.emf.cdo.server.IStoreFactory;
-import org.eclipse.emf.cdo.server.db4o.IDB4OStore;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-/**
- * @author Victor Roldan Betancort
- */
-public class DB4OStoreFactory implements IStoreFactory
-{
- public DB4OStoreFactory()
- {
- }
-
- public String getStoreType()
- {
- return IDB4OStore.TYPE;
- }
-
- public IStore createStore(Element storeConfig)
- {
- try
- {
- String dataFilePath = getFilePath(storeConfig);
- int port = getPort(storeConfig);
- return new DB4OStore(dataFilePath, port);
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
-
- return null;
- }
-
- protected int getPort(Element storeConfig)
- {
- NodeList ooConfig = storeConfig.getElementsByTagName("ooData"); //$NON-NLS-1$
- Element ooElement = (Element)ooConfig.item(0);
- String port = ooElement.getAttribute("port"); //$NON-NLS-1$
- if (port == null)
- {
- throw new IllegalArgumentException("DB4O port not defined"); //$NON-NLS-1$
- }
-
- return Integer.parseInt(port);
- }
-
- protected String getFilePath(Element storeConfig)
- {
- NodeList ooConfig = storeConfig.getElementsByTagName("ooData"); //$NON-NLS-1$
- Element ooElement = (Element)ooConfig.item(0);
- String filePath = ooElement.getAttribute("path"); //$NON-NLS-1$
- if (filePath == null)
- {
- throw new IllegalArgumentException("DB4O file path not defined"); //$NON-NLS-1$
- }
-
- return filePath;
- }
-}
diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/PrimitivePackageUnit.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/PrimitivePackageUnit.java
deleted file mode 100644
index f33c9dad05..0000000000
--- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/PrimitivePackageUnit.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/**
- * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
- * Victor Roldan Betancort - initial API and implementation
- */
-package org.eclipse.emf.cdo.internal.server.db4o;
-
-import org.eclipse.emf.cdo.common.model.CDOModelUtil;
-import org.eclipse.emf.cdo.common.model.CDOPackageRegistry;
-import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
-import org.eclipse.emf.cdo.common.model.EMFUtil;
-import org.eclipse.emf.cdo.server.IStore;
-import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry;
-import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
-
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Victor Roldan Betancort
- */
-public class PrimitivePackageUnit
-{
- private String id;
-
- private Integer ordinalType;
-
- private Long timeStamp;
-
- private List ePackageBytes;
-
- public PrimitivePackageUnit(String id, Integer ordinalType, Long timeStamp, List ePackageBytes)
- {
- setId(id);
- setOrdinalType(ordinalType);
- setTimeStamp(timeStamp);
- setePackageBytes(ePackageBytes);
- }
-
- public void setId(String id)
- {
- this.id = id;
- }
-
- public String getId()
- {
- return id;
- }
-
- public void setOrdinalType(Integer ordinalType)
- {
- this.ordinalType = ordinalType;
- }
-
- public Integer getOrdinalType()
- {
- return ordinalType;
- }
-
- public void setTimeStamp(Long timeStamp)
- {
- this.timeStamp = timeStamp;
- }
-
- public Long getTimeStamp()
- {
- return timeStamp;
- }
-
- public void setePackageBytes(List ePackageBytes)
- {
- this.ePackageBytes = ePackageBytes;
- }
-
- public List getePackageBytes()
- {
- return ePackageBytes;
- }
-
- public static PrimitivePackageUnit getPrimitivePackageUnit(IStore store, InternalCDOPackageUnit packageUnit)
- {
- return new PrimitivePackageUnit(new String(packageUnit.getID()), new Integer(packageUnit.getOriginalType()
- .ordinal()), new Long(packageUnit.getTimeStamp()), getEPackageBytes(store, packageUnit));
- }
-
- public static InternalCDOPackageUnit getPackageUnit(InternalCDOPackageRegistry packageRegistry,
- PrimitivePackageUnit packageUnit)
- {
- InternalCDOPackageUnit cdoPackageUnit = (InternalCDOPackageUnit)CDOModelUtil.createPackageUnit();
- CDOPackageUnit.Type type = CDOPackageUnit.Type.values()[packageUnit.getOrdinalType()];
- cdoPackageUnit.setOriginalType(type);
- cdoPackageUnit.setTimeStamp(packageUnit.getTimeStamp());
- EPackage ePackage = getEPackageFromBytes(packageUnit.getePackageBytes());
- cdoPackageUnit.setPackageRegistry(packageRegistry);
- cdoPackageUnit.init(ePackage);
- return cdoPackageUnit;
- }
-
- private static List getEPackageBytes(IStore store, InternalCDOPackageUnit packageUnit)
- {
- EPackage ePackage = packageUnit.getTopLevelPackageInfo().getEPackage();
- CDOPackageRegistry packageRegistry = store.getRepository().getPackageRegistry();
- byte[] bytes = EMFUtil.getEPackageBytes(ePackage, true, packageRegistry);
- List bytesObject = new ArrayList();
- for (byte bt : bytes)
- {
- bytesObject.add(new Byte(bt));
- }
-
- return bytesObject;
- }
-
- private static EPackage getEPackageFromBytes(List ePackageBytesList)
- {
- ResourceSet rSet = new ResourceSetImpl();
- byte[] packageBytes = new byte[ePackageBytesList.size()];
- for (int i = 0; i < packageBytes.length; i++)
- {
- packageBytes[i] = ePackageBytesList.get(i);
- }
- EPackage ePackage = EMFUtil.createEPackage("", packageBytes, true, rSet, false);
- return ePackage;
- }
-}
diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/PrimitiveRevision.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/PrimitiveRevision.java
deleted file mode 100644
index 8571f9e66d..0000000000
--- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/PrimitiveRevision.java
+++ /dev/null
@@ -1,397 +0,0 @@
-/**
- * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
- * Victor Roldan Betancort - initial API and implementation
- */
-
-package org.eclipse.emf.cdo.internal.server.db4o;
-
-import org.eclipse.emf.cdo.common.branch.CDOBranch;
-import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDExternal;
-import org.eclipse.emf.cdo.common.id.CDOIDUtil;
-import org.eclipse.emf.cdo.common.model.CDOClassInfo;
-import org.eclipse.emf.cdo.common.revision.CDOList;
-import org.eclipse.emf.cdo.common.revision.CDOListFactory;
-import org.eclipse.emf.cdo.common.revision.CDORevisionFactory;
-import org.eclipse.emf.cdo.server.IStore;
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDOList;
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Victor Roldan Betancort
- */
-public class PrimitiveRevision
-{
- private String nsURI;
-
- private String className;
-
- private Object id;
-
- private int version;
-
- private int branchID;
-
- private long revised;
-
- private long timeStamp;
-
- private Object resourceID;
-
- private Object containerID;
-
- private int containingFeatureID;
-
- private List