From 018860e83b79bdf419a814ac7ed5de303bfff5c2 Mon Sep 17 00:00:00 2001 From: Eike Stepper Date: Tue, 24 Aug 2010 10:45:43 +0000 Subject: [252255] Give support to Open Source object-oriented database https://bugs.eclipse.org/bugs/show_bug.cgi?id=252255 --- .../org.eclipse.emf.cdo.sdk-feature/feature.xml | 3 + .../.project | 17 + .../.settings/org.eclipse.mylyn.tasks.ui.prefs | 4 + .../.settings/org.eclipse.mylyn.team.ui.prefs | 3 + .../about.html | 28 + .../build.properties | 24 + .../copyright.txt | 9 + .../eclipse.gif | Bin 0 -> 1058 bytes .../eclipse_update_120.jpg | Bin 0 -> 21695 bytes .../epl-v10.html | 258 +++++++++ .../feature.properties | 167 ++++++ .../feature.xml | 44 ++ .../license.html | 107 ++++ .../org.eclipse.emf.cdo.site-feature/feature.xml | 4 + .../META-INF/MANIFEST.MF | 6 +- plugins/org.eclipse.emf.cdo.server.db4o/plugin.xml | 2 +- .../emf/cdo/internal/server/db4o/CommitInfo.java | 57 -- .../emf/cdo/internal/server/db4o/DB4OStore.java | 243 -------- .../internal/server/db4o/DB4OStoreAccessor.java | 600 -------------------- .../cdo/internal/server/db4o/DB4OStoreFactory.java | 75 --- .../internal/server/db4o/PrimitivePackageUnit.java | 133 ----- .../internal/server/db4o/PrimitiveRevision.java | 397 ------------- .../emf/cdo/internal/server/db4o/QueryUtil.java | 84 --- .../emf/cdo/internal/server/db4o/ServerInfo.java | 59 -- .../emf/cdo/internal/server/db4o/bundle/OM.java | 45 -- .../eclipse/emf/cdo/server/db4o/IDB4OStore.java | 4 + .../cdo/server/internal/db4o/DB4OCommitInfo.java | 58 ++ .../cdo/server/internal/db4o/DB4OPackageUnit.java | 134 +++++ .../cdo/server/internal/db4o/DB4OQueryUtil.java | 80 +++ .../emf/cdo/server/internal/db4o/DB4ORevision.java | 377 +++++++++++++ .../emf/cdo/server/internal/db4o/DB4OStore.java | 308 ++++++++++ .../server/internal/db4o/DB4OStoreAccessor.java | 621 +++++++++++++++++++++ .../cdo/server/internal/db4o/DB4OStoreFactory.java | 76 +++ .../emf/cdo/server/internal/db4o/bundle/OM.java | 45 ++ .../emf/cdo/internal/server/Repository.java | 28 +- .../CDO AllTests (DB4O).launch | 15 +- .../eclipse/emf/cdo/test/db4o/AllTestsDB4O.java | 158 ++++++ .../eclipse/emf/cdo/test/db4o/DB4OTestConfing.java | 158 ------ .../org.eclipse.emf.cdo.releng/buckminster.cspec | 3 +- 39 files changed, 2554 insertions(+), 1880 deletions(-) create mode 100644 features/org.eclipse.emf.cdo.server.db4o-feature/.project create mode 100644 features/org.eclipse.emf.cdo.server.db4o-feature/.settings/org.eclipse.mylyn.tasks.ui.prefs create mode 100644 features/org.eclipse.emf.cdo.server.db4o-feature/.settings/org.eclipse.mylyn.team.ui.prefs create mode 100644 features/org.eclipse.emf.cdo.server.db4o-feature/about.html create mode 100644 features/org.eclipse.emf.cdo.server.db4o-feature/build.properties create mode 100644 features/org.eclipse.emf.cdo.server.db4o-feature/copyright.txt create mode 100644 features/org.eclipse.emf.cdo.server.db4o-feature/eclipse.gif create mode 100644 features/org.eclipse.emf.cdo.server.db4o-feature/eclipse_update_120.jpg create mode 100644 features/org.eclipse.emf.cdo.server.db4o-feature/epl-v10.html create mode 100644 features/org.eclipse.emf.cdo.server.db4o-feature/feature.properties create mode 100644 features/org.eclipse.emf.cdo.server.db4o-feature/feature.xml create mode 100644 features/org.eclipse.emf.cdo.server.db4o-feature/license.html delete mode 100644 plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/CommitInfo.java delete mode 100644 plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/DB4OStore.java delete mode 100644 plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/DB4OStoreAccessor.java delete mode 100644 plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/DB4OStoreFactory.java delete mode 100644 plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/PrimitivePackageUnit.java delete mode 100644 plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/PrimitiveRevision.java delete mode 100644 plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/QueryUtil.java delete mode 100644 plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/ServerInfo.java delete mode 100644 plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/bundle/OM.java create mode 100644 plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OCommitInfo.java create mode 100644 plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OPackageUnit.java create mode 100644 plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OQueryUtil.java create mode 100644 plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision.java create mode 100644 plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStore.java create mode 100644 plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor.java create mode 100644 plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreFactory.java create mode 100644 plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/bundle/OM.java create mode 100644 plugins/org.eclipse.emf.cdo.tests.db4o/src/com/eclipse/emf/cdo/test/db4o/AllTestsDB4O.java delete mode 100644 plugins/org.eclipse.emf.cdo.tests.db4o/src/com/eclipse/emf/cdo/test/db4o/DB4OTestConfing.java diff --git a/features/org.eclipse.emf.cdo.sdk-feature/feature.xml b/features/org.eclipse.emf.cdo.sdk-feature/feature.xml index bcf9868cac..a8da75d2ca 100644 --- a/features/org.eclipse.emf.cdo.sdk-feature/feature.xml +++ b/features/org.eclipse.emf.cdo.sdk-feature/feature.xml @@ -44,7 +44,10 @@ + + + diff --git a/features/org.eclipse.emf.cdo.server.db4o-feature/.project b/features/org.eclipse.emf.cdo.server.db4o-feature/.project new file mode 100644 index 0000000000..272f0575da --- /dev/null +++ b/features/org.eclipse.emf.cdo.server.db4o-feature/.project @@ -0,0 +1,17 @@ + + + org.eclipse.emf.cdo.server.db4o-feature + + + + + + org.eclipse.pde.FeatureBuilder + + + + + + org.eclipse.pde.FeatureNature + + diff --git a/features/org.eclipse.emf.cdo.server.db4o-feature/.settings/org.eclipse.mylyn.tasks.ui.prefs b/features/org.eclipse.emf.cdo.server.db4o-feature/.settings/org.eclipse.mylyn.tasks.ui.prefs new file mode 100644 index 0000000000..7f1832044c --- /dev/null +++ b/features/org.eclipse.emf.cdo.server.db4o-feature/.settings/org.eclipse.mylyn.tasks.ui.prefs @@ -0,0 +1,4 @@ +#Sun Mar 09 19:15:26 CET 2008 +eclipse.preferences.version=1 +project.repository.kind=bugzilla +project.repository.url=https\://bugs.eclipse.org/bugs diff --git a/features/org.eclipse.emf.cdo.server.db4o-feature/.settings/org.eclipse.mylyn.team.ui.prefs b/features/org.eclipse.emf.cdo.server.db4o-feature/.settings/org.eclipse.mylyn.team.ui.prefs new file mode 100644 index 0000000000..e72b02b02f --- /dev/null +++ b/features/org.eclipse.emf.cdo.server.db4o-feature/.settings/org.eclipse.mylyn.team.ui.prefs @@ -0,0 +1,3 @@ +#Sun Mar 09 19:15:26 CET 2008 +commit.comment.template=[${task.id}] ${task.description} \r\n${task.url} +eclipse.preferences.version=1 diff --git a/features/org.eclipse.emf.cdo.server.db4o-feature/about.html b/features/org.eclipse.emf.cdo.server.db4o-feature/about.html new file mode 100644 index 0000000000..d35d5aed64 --- /dev/null +++ b/features/org.eclipse.emf.cdo.server.db4o-feature/about.html @@ -0,0 +1,28 @@ + + + + +About + + +

About This Content

+ +

June 5, 2007

+

License

+ +

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:

+ +
    +
  1. 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.
  2. +
  3. 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.
  4. +
  5. 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.
  6. +
+ +

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 values; - - private boolean isResource; - - private boolean isResourceNode; - - private boolean isResourceFolder; - - private boolean isRootResource; - - public PrimitiveRevision(String nsURI, String className, Object id, int version, int branchID, long revised, - Object resourceID, Object containerID, int containingFeatureID, List values, long timestamp, - boolean isResource, boolean isResourceNode, boolean isResourceFolder, boolean isRootResource) - { - setNsURI(nsURI); - setClassName(className); - setId(id); - setVersion(version); - setBranchID(branchID); - setRevised(revised); - setResourceID(resourceID); - setContainerID(containerID); - setContainingFeatureID(containingFeatureID); - setValues(values); - setTimeStamp(timestamp); - setResource(isResource); - setResourceNode(isResourceNode); - setResourceFolder(isResourceFolder); - setRootResource(isRootResource); - } - - public void setNsURI(String nsURI) - { - this.nsURI = nsURI; - } - - public String getNsURI() - { - return nsURI; - } - - public void setClassName(String className) - { - this.className = className; - } - - public String getClassName() - { - return className; - } - - public void setId(Object id) - { - this.id = id; - } - - public Object getId() - { - return id; - } - - public void setVersion(int version) - { - this.version = version; - } - - public int getVersion() - { - return version; - } - - public void setBranchID(int branchID) - { - this.branchID = branchID; - } - - public int getBranchID() - { - return branchID; - } - - public void setRevised(long revised) - { - this.revised = revised; - } - - public long getRevised() - { - return revised; - } - - public void setResourceID(Object resourceID) - { - this.resourceID = resourceID; - } - - public Object getResourceID() - { - return resourceID; - } - - public void setContainerID(Object containerID) - { - this.containerID = containerID; - } - - public Object getContainerID() - { - return containerID; - } - - public void setContainingFeatureID(int containingFeatureID) - { - this.containingFeatureID = containingFeatureID; - } - - public int getContainingFeatureID() - { - return containingFeatureID; - } - - public void setValues(List values) - { - this.values = values; - } - - public List getValues() - { - return values; - } - - public void setTimeStamp(long timeStamp) - { - this.timeStamp = timeStamp; - } - - public long getTimeStamp() - { - return timeStamp; - } - - public void setResource(boolean isResource) - { - this.isResource = isResource; - } - - public boolean isResource() - { - return isResource; - } - - public void setResourceNode(boolean isResourceNode) - { - this.isResourceNode = isResourceNode; - } - - public boolean isResourceNode() - { - return isResourceNode; - } - - public void setResourceFolder(boolean isResourceFolder) - { - this.isResourceFolder = isResourceFolder; - } - - public boolean isResourceFolder() - { - return isResourceFolder; - } - - static public PrimitiveRevision getPrimitiveRevision(InternalCDORevision revision) - { - CDOClassInfo classInfo = revision.getClassInfo(); - EClass eClass = classInfo.getEClass(); - String nsURI = eClass.getEPackage().getNsURI(); - String className = eClass.getName(); - - if (revision.getID().isTemporary()) - { - System.err.println("TEMPORARY CDOID"); - } - - boolean isResource = revision.isResource(); - boolean isResourceNode = revision.isResourceNode(); - boolean isResourceFolder = revision.isResourceFolder(); - boolean isRootResource = CDOIDUtil.getLong(revision.getID()) == 1; - - Object id = getObjectFromId(revision.getID()); - int version = revision.getVersion(); - int branchID = revision.getBranch().getID(); - long timeStamp = revision.getTimeStamp(); - long revised = revision.getRevised(); - Object resourceID = getObjectFromId(revision.getResourceID()); - Object containerID = getObjectFromId((CDOID)revision.getContainerID()); - int containingFeatureID = revision.getContainingFeatureID(); - - EStructuralFeature[] features = classInfo.getAllPersistentFeatures(); - List values = new ArrayList(features.length); - if (features.length > 0) - { - for (int i = 0; i < features.length; i++) - { - EStructuralFeature feature = features[i]; - Object obj = revision.getValue(feature); - - // We will process CDOList for EReferences to get rid of CDOIDs (we want to get only primitive types, - // otherwise the database will persist unwanted objects coming from Object-level relationships - - // Multi-valued EAttributes (also kept in CDOList) will be saved as is - if (obj instanceof InternalCDOList && feature instanceof EReference) - { - InternalCDOList cdoList = (InternalCDOList)obj; - List list = new ArrayList(); - for (Object listElement : cdoList) - { - if (!(listElement instanceof CDOID)) - { - throw new IllegalStateException("CDOList should contain only CDOID instances but received " - + listElement.getClass().getName() + " instead"); - } - - list.add(getObjectFromId((CDOID)listElement)); - } - - values.add(i, list); - } - else - { - values.add(i, obj); - } - } - } - - return new PrimitiveRevision(nsURI, className, id, version, branchID, revised, resourceID, containerID, - containingFeatureID, values, timeStamp, isResource, isResourceNode, isResourceFolder, isRootResource); - } - - public static InternalCDORevision getRevision(IStore store, PrimitiveRevision primitiveRevision) - { - String nsURI = primitiveRevision.getNsURI(); - String className = primitiveRevision.getClassName(); - EPackage ePackage = store.getRepository().getPackageRegistry().getEPackage(nsURI); - EClass eClass = (EClass)ePackage.getEClassifier(className); - InternalCDORevision revision = (InternalCDORevision)CDORevisionFactory.DEFAULT.createRevision(eClass); - - revision.setID(getIDFromObject(primitiveRevision.getId())); - revision.setVersion(primitiveRevision.getVersion()); - int branchID = primitiveRevision.getBranchID(); - CDOBranch branch = store.getRepository().getBranchManager().getBranch(branchID); - CDOBranchPoint point = branch.getPoint(primitiveRevision.getTimeStamp()); - revision.setBranchPoint(point); - revision.setRevised(primitiveRevision.getRevised()); - revision.setResourceID(getIDFromObject(primitiveRevision.getResourceID())); - revision.setContainerID(getIDFromObject(primitiveRevision.getContainerID())); - revision.setContainingFeatureID(primitiveRevision.getContainingFeatureID()); - EStructuralFeature[] features = revision.getClassInfo().getAllPersistentFeatures(); - - int i = 0; - List values = primitiveRevision.getValues(); - for (Object value : values) - { - EStructuralFeature feature = features[i++]; - // transform List to CDOList - if (feature instanceof EReference && value instanceof List) - { - List sourceList = (List)value; - // CDOList list = new CDOListImpl(sourceList.size(), sourceList.size()); - CDOList list = CDOListFactory.DEFAULT.createList(sourceList.size(), sourceList.size(), sourceList.size()); - for (int j = 0; j < sourceList.size(); j++) - { - list.set(j, getIDFromObject(sourceList.get(j))); - } - revision.setValue(feature, list); - } - else - { - revision.setValue(feature, value); - } - } - - return revision; - } - - public static Object getObjectFromId(CDOID cdoid) - { - Object objectID = null; - if (cdoid.isExternal()) - { - objectID = new String(((CDOIDExternal)cdoid).getURI()); - } - else - { - objectID = CDOIDUtil.getLong(cdoid); - } - return objectID; - } - - public static CDOID getIDFromObject(Object id) - { - if (id == null) - { - return CDOID.NULL; - } - else if (id instanceof String) - { - return CDOIDUtil.createExternal((String)id); - } - else - { - return CDOIDUtil.createLong((Long)id); - } - } - - public static boolean compareIDObject(Object id1, Object id2) - { - if (id1.getClass().equals(id2.getClass())) - { - if (id1.equals(id2)) - { - return true; - } - } - - return false; - } - - public void setRootResource(boolean isRootResource) - { - this.isRootResource = isRootResource; - } - - public boolean isRootResource() - { - return isRootResource; - } - -} diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/QueryUtil.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/QueryUtil.java deleted file mode 100644 index eed31d109e..0000000000 --- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/QueryUtil.java +++ /dev/null @@ -1,84 +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.id.CDOID; -import org.eclipse.emf.cdo.common.id.CDOIDUtil; - -import com.db4o.ObjectContainer; -import com.db4o.ObjectSet; -import com.db4o.query.Query; - -/** - * @author Victor Roldan Betancort - */ -public final class QueryUtil -{ - - public static PrimitiveRevision getLastPrimitiveRevision(ObjectContainer container, int branchId, CDOID id) - { - ObjectSet set = getRevisionById(container, branchId, id); - - PrimitiveRevision lastRevision = null; - for (Object value : set) - { - PrimitiveRevision rev = (PrimitiveRevision)value; - if (lastRevision == null) - { - lastRevision = rev; - } - if (rev.getVersion() > lastRevision.getVersion()) - { - lastRevision = rev; - } - } - return lastRevision; - } - - public static PrimitiveRevision getPrimitiveRevisionByVersion(ObjectContainer container, CDOID id, int branchId, - int version) - { - ObjectSet set = getRevisionById(container, branchId, id); - for (Object value : set) - { - PrimitiveRevision rev = (PrimitiveRevision)value; - if (rev.getVersion() == version) - { - return rev; - } - } - return null; - } - - private static ObjectSet getRevisionById(ObjectContainer container, int branchId, CDOID id) - { - Query query = container.query(); - query.constrain(PrimitiveRevision.class); - query.descend("id").constrain(CDOIDUtil.getLong(id)); - query.descend("branchID").constrain(branchId); - ObjectSet set = query.execute(); - return set; - } - - public static void removeRevisionFromContainer(ObjectContainer container, int branchId, CDOID id) - { - PrimitiveRevision primitiveRevision = QueryUtil.getLastPrimitiveRevision(container, branchId, id); - if (primitiveRevision != null) - { - container.delete(primitiveRevision); - } - else - { - throw new IllegalArgumentException("Revision with ID " + id + " not found, cannot detach"); - } - } - -} diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/ServerInfo.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/ServerInfo.java deleted file mode 100644 index b09c6a32c7..0000000000 --- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/ServerInfo.java +++ /dev/null @@ -1,59 +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 java.util.HashMap; -import java.util.Map; - -/** - * Object meant to stores IStore related information - * - * @author Victor Roldan Betancort - */ -public class ServerInfo -{ - private boolean isFirstTime; - - private long creationTime; - - private Map properties = new HashMap(); - - public boolean isFirstTime() - { - return isFirstTime; - } - - public void setFirstTime(boolean isFirstTime) - { - this.isFirstTime = isFirstTime; - } - - public void setCreationTime(long creationTime) - { - this.creationTime = creationTime; - } - - public long getCreationTime() - { - return creationTime; - } - - public void setProperties(Map properties) - { - this.properties = properties; - } - - public Map getProperties() - { - return properties; - } - -} diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/bundle/OM.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/bundle/OM.java deleted file mode 100644 index 7f7524b82a..0000000000 --- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/internal/server/db4o/bundle/OM.java +++ /dev/null @@ -1,45 +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.bundle; - -import org.eclipse.net4j.util.om.OMBundle; -import org.eclipse.net4j.util.om.OMPlatform; -import org.eclipse.net4j.util.om.OSGiActivator; -import org.eclipse.net4j.util.om.log.OMLogger; -import org.eclipse.net4j.util.om.trace.OMTracer; - -/** - * The Operations & Maintenance class of this bundle. - * - * @author Victor Roldan Betancort - */ -public abstract class OM -{ - public static final String BUNDLE_ID = "org.eclipse.emf.cdo.server.db4o"; //$NON-NLS-1$ - - public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class); - - public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$ - - public static final OMLogger LOG = BUNDLE.logger(); - - /** - * @author Victor Roldan Betancort - */ - public static final class Activator extends OSGiActivator - { - public Activator() - { - super(BUNDLE); - } - } -} diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/db4o/IDB4OStore.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/db4o/IDB4OStore.java index 05741f7989..75a20fcbb6 100644 --- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/db4o/IDB4OStore.java +++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/db4o/IDB4OStore.java @@ -19,4 +19,8 @@ import org.eclipse.emf.cdo.server.IStore; public interface IDB4OStore extends IStore { public static final String TYPE = "db4o"; + + public String getStoreLocation(); + + public int getPort(); } diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OCommitInfo.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OCommitInfo.java new file mode 100644 index 0000000000..c81af9140b --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OCommitInfo.java @@ -0,0 +1,58 @@ +/** + * 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.server.internal.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.InternalCDOBranch; +import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager; +import org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager; + +/** + * @author Victor Roldan Betancort + */ +public class DB4OCommitInfo +{ + private int branchID; + + private long timeStamp; + + private String userID; + + private String comment; + + public DB4OCommitInfo(int branchID, long timeStamp, String userID, String comment) + { + this.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) + { + InternalCDOBranch branch = branchManager.getBranch(branchID); + CDOCommitInfo commitInfo = manager.createCommitInfo(branch, timeStamp, userID, comment, null); + handler.handleCommitInfo(commitInfo); + } +} diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OPackageUnit.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OPackageUnit.java new file mode 100644 index 0000000000..dce6e55133 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OPackageUnit.java @@ -0,0 +1,134 @@ +/** + * 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.server.internal.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 DB4OPackageUnit +{ + private String id; + + private Integer ordinalType; + + private Long timeStamp; + + private List ePackageBytes; + + public DB4OPackageUnit(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 DB4OPackageUnit getPrimitivePackageUnit(IStore store, InternalCDOPackageUnit packageUnit) + { + return new DB4OPackageUnit(new String(packageUnit.getID()), new Integer(packageUnit.getOriginalType() + .ordinal()), new Long(packageUnit.getTimeStamp()), getEPackageBytes(store, packageUnit)); + } + + public static InternalCDOPackageUnit getPackageUnit(InternalCDOPackageRegistry packageRegistry, + DB4OPackageUnit 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/server/internal/db4o/DB4OQueryUtil.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OQueryUtil.java new file mode 100644 index 0000000000..22b3d6f8d1 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OQueryUtil.java @@ -0,0 +1,80 @@ +/** + * 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.server.internal.db4o; + +import org.eclipse.emf.cdo.common.id.CDOID; +import org.eclipse.emf.cdo.common.id.CDOIDUtil; + +import com.db4o.ObjectContainer; +import com.db4o.ObjectSet; +import com.db4o.query.Query; + +/** + * @author Victor Roldan Betancort + */ +public final class DB4OQueryUtil +{ + public static DB4ORevision getRevision(ObjectContainer container, CDOID id, int branchID) + { + // TODO Optimize this loop away + DB4ORevision result = null; + for (Object value : getRevisions(container, id, branchID)) + { + DB4ORevision revision = (DB4ORevision)value; + if (result == null) + { + result = revision; + } + + if (revision.getVersion() > result.getVersion()) + { + result = revision; + } + } + + return result; + } + + public static DB4ORevision getRevisionByVersion(ObjectContainer container, CDOID id, int branchID, int version) + { + // TODO Optimize this loop away + for (Object value : getRevisions(container, id, branchID)) + { + DB4ORevision revision = (DB4ORevision)value; + if (revision.getVersion() == version) + { + return revision; + } + } + + return null; + } + + private static ObjectSet getRevisions(ObjectContainer container, CDOID id, int branchID) + { + Query query = container.query(); + query.constrain(DB4ORevision.class); + query.descend("id").constrain(CDOIDUtil.getLong(id)); + query.descend("branchID").constrain(branchID); + return query.execute(); + } + + public static void removeRevisionFromContainer(ObjectContainer container, int branchID, CDOID id) + { + DB4ORevision primitiveRevision = DB4OQueryUtil.getRevision(container, id, branchID); + if (primitiveRevision == null) + { + throw new IllegalArgumentException("Revision with ID " + id + " not found"); + } + + container.delete(primitiveRevision); + } +} diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision.java new file mode 100644 index 0000000000..394b416930 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision.java @@ -0,0 +1,377 @@ +/** + * 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.server.internal.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.CDORevision; +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 DB4ORevision +{ + private String packageURI; + + private String className; + + private long id; + + private int version; + + private int branchID; + + private long revised; + + private long timeStamp; + + private long resourceID; + + private long containerID; + + private int containingFeatureID; + + private List values; + + // TODO enum RevisionType { NORMAL, ROOT_RESOURCE, RESOURCE, RESOURCE_FOLDER }?? + private boolean isResource; + + private boolean isResourceNode; + + private boolean isResourceFolder; + + private boolean isRootResource; + + public DB4ORevision(String packageURI, String className, long id, int version, int branchID, long revised, + long resourceID, long containerID, int containingFeatureID, List values, long timestamp, + boolean isResource, boolean isResourceNode, boolean isResourceFolder, boolean isRootResource) + { + setPackageURI(packageURI); + setClassName(className); + setID(id); + setVersion(version); + setBranchID(branchID); + setRevised(revised); + setResourceID(resourceID); + setContainerID(containerID); + setContainingFeatureID(containingFeatureID); + setValues(values); + setTimeStamp(timestamp); + setResource(isResource); + setResourceNode(isResourceNode); + setResourceFolder(isResourceFolder); + setRootResource(isRootResource); + } + + public void setPackageURI(String packageURI) + { + this.packageURI = packageURI; + } + + public String getPackageURI() + { + return packageURI; + } + + public void setClassName(String className) + { + this.className = className; + } + + public String getClassName() + { + return className; + } + + public void setID(long id) + { + this.id = id; + } + + public long getID() + { + return id; + } + + public void setVersion(int version) + { + this.version = version; + } + + public int getVersion() + { + return version; + } + + public void setBranchID(int branchID) + { + this.branchID = branchID; + } + + public int getBranchID() + { + return branchID; + } + + public void setRevised(long revised) + { + this.revised = revised; + } + + public long getRevised() + { + return revised; + } + + public void setResourceID(long resourceID) + { + this.resourceID = resourceID; + } + + public long getResourceID() + { + return resourceID; + } + + public void setContainerID(long containerID) + { + this.containerID = containerID; + } + + public long getContainerID() + { + return containerID; + } + + public void setContainingFeatureID(int containingFeatureID) + { + this.containingFeatureID = containingFeatureID; + } + + public int getContainingFeatureID() + { + return containingFeatureID; + } + + public void setValues(List values) + { + this.values = values; + } + + public List getValues() + { + return values; + } + + public void setTimeStamp(long timeStamp) + { + this.timeStamp = timeStamp; + } + + public long getTimeStamp() + { + return timeStamp; + } + + public void setResource(boolean isResource) + { + this.isResource = isResource; + } + + public boolean isResource() + { + return isResource; + } + + public void setResourceNode(boolean isResourceNode) + { + this.isResourceNode = isResourceNode; + } + + public boolean isResourceNode() + { + return isResourceNode; + } + + public void setResourceFolder(boolean isResourceFolder) + { + this.isResourceFolder = isResourceFolder; + } + + public boolean isResourceFolder() + { + return isResourceFolder; + } + + public void setRootResource(boolean isRootResource) + { + this.isRootResource = isRootResource; + } + + public boolean isRootResource() + { + return isRootResource; + } + + public static DB4ORevision getDB4ORevision(InternalCDORevision revision) + { + CDOClassInfo classInfo = revision.getClassInfo(); + EClass eClass = classInfo.getEClass(); + String packageURI = eClass.getEPackage().getNsURI(); + String className = eClass.getName(); + + CDOID revisionID = revision.getID(); + if (revisionID.isTemporary()) + { + throw new IllegalArgumentException("TEMPORARY CDOID: " + revisionID); + } + + boolean isResource = revision.isResource(); + boolean isResourceNode = revision.isResourceNode(); + boolean isResourceFolder = revision.isResourceFolder(); + boolean isRootResource = CDOIDUtil.getLong(revisionID) == 1; + + long id = (Long)getDB4OID(revisionID); + int version = revision.getVersion(); + int branchID = revision.getBranch().getID(); + long timeStamp = revision.getTimeStamp(); + long revised = revision.getRevised(); + long resourceID = (Long)getDB4OID(revision.getResourceID()); + long containerID = (Long)getDB4OID((CDOID)revision.getContainerID()); + int containingFeatureID = revision.getContainingFeatureID(); + + EStructuralFeature[] features = classInfo.getAllPersistentFeatures(); + List values = new ArrayList(features.length); + if (features.length > 0) + { + for (int i = 0; i < features.length; i++) + { + EStructuralFeature feature = features[i]; + Object obj = revision.getValue(feature); + + // We will process CDOList for EReferences to get rid of CDOIDs (we want to get only primitive types, + // otherwise the database will persist unwanted objects coming from Object-level relationships + + // Multi-valued EAttributes (also kept in CDOList) will be saved as is + if (obj instanceof InternalCDOList && feature instanceof EReference) + { + InternalCDOList cdoList = (InternalCDOList)obj; + List list = new ArrayList(); + for (Object listElement : cdoList) + { + if (!(listElement instanceof CDOID)) + { + throw new IllegalStateException("CDOList should contain only CDOID instances but received " + + listElement.getClass().getName() + " instead"); + } + + list.add(getDB4OID((CDOID)listElement)); + } + + values.add(i, list); + } + else + { + values.add(i, obj); + } + } + } + + return new DB4ORevision(packageURI, className, id, version, branchID, revised, resourceID, containerID, + containingFeatureID, values, timeStamp, isResource, isResourceNode, isResourceFolder, isRootResource); + } + + public static InternalCDORevision getCDORevision(IStore store, DB4ORevision primitiveRevision) + { + String nsURI = primitiveRevision.getPackageURI(); + String className = primitiveRevision.getClassName(); + EPackage ePackage = store.getRepository().getPackageRegistry().getEPackage(nsURI); + EClass eClass = (EClass)ePackage.getEClassifier(className); + InternalCDORevision revision = (InternalCDORevision)CDORevisionFactory.DEFAULT.createRevision(eClass); + + CDOBranch branch = store.getRepository().getBranchManager().getBranch(primitiveRevision.getBranchID()); + CDOBranchPoint point = branch.getPoint(primitiveRevision.getTimeStamp()); + + revision.setID(getCDOID(primitiveRevision.getID())); + revision.setVersion(primitiveRevision.getVersion()); + revision.setBranchPoint(point); + revision.setRevised(primitiveRevision.getRevised()); + revision.setResourceID(getCDOID(primitiveRevision.getResourceID())); + revision.setContainerID(getCDOID(primitiveRevision.getContainerID())); + revision.setContainingFeatureID(primitiveRevision.getContainingFeatureID()); + EStructuralFeature[] features = revision.getClassInfo().getAllPersistentFeatures(); + + int i = 0; + for (Object value : primitiveRevision.getValues()) + { + EStructuralFeature feature = features[i++]; + if (feature instanceof EReference && value instanceof List) + { + List sourceList = (List)value; + CDOList list = CDOListFactory.DEFAULT.createList(sourceList.size(), sourceList.size(), CDORevision.UNCHUNKED); + for (int j = 0; j < sourceList.size(); j++) + { + list.set(j, getCDOID(sourceList.get(j))); + } + + value = list; + } + + revision.setValue(feature, value); + } + + return revision; + } + + public static Object getDB4OID(CDOID id) + { + if (id.isExternal()) + { + return new String(((CDOIDExternal)id).getURI()); + } + + return CDOIDUtil.getLong(id); + } + + public static CDOID getCDOID(Object id) + { + if (id == null) + { + return CDOID.NULL; + } + + if (id instanceof String) + { + return CDOIDUtil.createExternal((String)id); + } + + return CDOIDUtil.createLong((Long)id); + } +} diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStore.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStore.java new file mode 100644 index 0000000000..003c7d37b0 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStore.java @@ -0,0 +1,308 @@ +/** + * 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.server.internal.db4o; + +import org.eclipse.emf.cdo.server.ISession; +import org.eclipse.emf.cdo.server.IStore; +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 String storeLocation; + + private transient int port; + + private transient ObjectServer server; + + private transient Configuration serverConfiguration; + + private ServerInfo serverInfo; + + private boolean requiredToSupportAudits; + + private boolean requiredToSupportBranches; + + @ExcludeFromDump + private transient final StoreAccessorPool readerPool = new StoreAccessorPool(this, null); + + @ExcludeFromDump + private transient final StoreAccessorPool writerPool = new StoreAccessorPool(this, null); + + public DB4OStore(String storeLocation, int port) + { + 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 String getStoreLocation() + { + return storeLocation; + } + + public int getPort() + { + return port; + } + + public long getCreationTime() + { + return getServerInfo().getCreationTime(); + } + + public boolean isFirstTime() + { + return getServerInfo().isFirstTime(); + } + + public Map getPropertyValues(Set names) + { + Map result = new HashMap(); + for (String key : names) + { + String value = getServerInfo().getProperties().get(key); + if (value != null) + { + result.put(key, value); + } + } + + return result; + } + + public void setPropertyValues(Map properties) + { + ServerInfo serverInfo = getServerInfo(); + serverInfo.getProperties().putAll(properties); + commitServerInfo(null); + } + + public void removePropertyValues(Set names) + { + ServerInfo serverInfo = getServerInfo(); + Map properties = serverInfo.getProperties(); + for (String key : names) + { + properties.remove(key); + } + + commitServerInfo(null); + } + + public boolean isRequiredToSupportAudits() + { + return requiredToSupportAudits; + } + + public boolean isRequiredToSupportBranches() + { + return requiredToSupportBranches; + } + + public ObjectContainer openClient() + { + return server.openClient(); + } + + @Override + protected void doBeforeActivate() + { + requiredToSupportAudits = getRepository().isSupportingAudits(); + requiredToSupportBranches = getRepository().isSupportingBranches(); + } + + @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) + { + initServerInfo(); + } + + return serverInfo; + } + + private void initServerInfo() + { + ObjectContainer container = openClient(); + + try + { + ObjectSet infos = container.query(ServerInfo.class); + if (infos.size() > 1) + { + throw new IllegalStateException("ServeInfo is stored in container more than once"); + } + + if (infos.isEmpty()) + { + serverInfo = new ServerInfo(); + serverInfo.setFirstTime(true); + serverInfo.setCreationTime(System.currentTimeMillis()); + commitServerInfo(container); + } + else + { + serverInfo = infos.get(0); + if (serverInfo.isFirstTime()) + { + serverInfo.setFirstTime(false); + commitServerInfo(container); + } + } + } + finally + { + container.close(); + } + } + + private void commitServerInfo(ObjectContainer container) + { + ObjectContainer usedContainer = container != null ? container : openClient(); + + try + { + usedContainer.store(serverInfo); + usedContainer.commit(); + } + finally + { + if (usedContainer != container) + { + usedContainer.close(); + } + } + } + + @Override + protected void doDeactivate() throws Exception + { + server.close(); + server = null; + super.doDeactivate(); + } + + protected Configuration createServerConfiguration() + { + return Db4o.newConfiguration(); + } + + @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; + } + + /** + * Carries {@link IStore}-related information. + * + * @author Victor Roldan Betancort + */ + private static final class ServerInfo + { + private boolean isFirstTime; + + private long creationTime; + + private Map properties = new HashMap(); + + public boolean isFirstTime() + { + return isFirstTime; + } + + public void setFirstTime(boolean isFirstTime) + { + this.isFirstTime = isFirstTime; + } + + public void setCreationTime(long creationTime) + { + this.creationTime = creationTime; + } + + public long getCreationTime() + { + return creationTime; + } + + @SuppressWarnings("unused") + public void setProperties(Map properties) + { + this.properties = properties; + } + + public Map getProperties() + { + return properties; + } + } +} diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor.java new file mode 100644 index 0000000000..8904fed144 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor.java @@ -0,0 +1,621 @@ +/** + * 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.server.internal.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.CDOCommonUtil; +import org.eclipse.emf.cdo.common.util.CDOQueryInfo; +import org.eclipse.emf.cdo.eresource.EresourcePackage; +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.server.internal.db4o.bundle.OM; +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.InternalCDOPackageRegistry; +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.ObjectUtil; +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 EPackage[] loadPackageUnit(InternalCDOPackageUnit packageUnit) + { + return packageUnit.getEPackages(true); + } + + public void writePackageUnits(InternalCDOPackageUnit[] packageUnits, OMMonitor monitor) + { + monitor.begin(packageUnits.length); + + try + { + DB4OStore store = getStore(); + ObjectContainer objectContainer = getObjectContainer(); + + for (InternalCDOPackageUnit packageUnit : packageUnits) + { + DB4OPackageUnit primitivePackageUnit = DB4OPackageUnit.getPrimitivePackageUnit(store, packageUnit); + objectContainer.store(primitivePackageUnit); + monitor.worked(1); + } + } + catch (Exception ex) + { + OM.LOG.error(ex); + } + finally + { + monitor.done(); + } + } + + public Collection readPackageUnits() + { + List result = new ArrayList(); + InternalCDOPackageRegistry packageRegistry = getStore().getRepository().getPackageRegistry(); + Collection primitivePackageUnits = getObjectContainer().query(DB4OPackageUnit.class); + + for (DB4OPackageUnit primitivePackageUnit : primitivePackageUnits) + { + InternalCDOPackageUnit packageUnit = DB4OPackageUnit.getPackageUnit(packageRegistry, primitivePackageUnit); + result.add(packageUnit); + } + + return result; + } + + public InternalCDORevision readRevision(CDOID id, CDOBranchPoint branchPoint, int listChunk, + CDORevisionCacheAdder cache) + { + int branchID = branchPoint.getBranch().getID(); + return getRevisionFromContainer(branchID, id); + } + + 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(DB4ORevision primitiveRevision) + { + if (!primitiveRevision.isResourceNode()) + { + return false; + } + + // is Root resource + if (primitiveRevision.isRootResource()) + { + return false; + } + + if (ObjectUtil.equals(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 (DB4ORevision revision : revisionObjectSet) + { + if (!context.addResource(DB4ORevision.getCDOID(revision.getID()))) + { + // No more results allowed + break; + } + } + + } + + public IStoreChunkReader createChunkReader(InternalCDORevision revision, EStructuralFeature feature) + { + throw new UnsupportedOperationException(); + } + + public IQueryHandler getQueryHandler(CDOQueryInfo info) + { + return null; + } + + @Override + protected void doActivate() throws Exception + { + objectContainer = getStore().openClient(); + } + + @Override + protected void doDeactivate() throws Exception + { + if (objectContainer != null) + { + objectContainer.close(); + objectContainer = null; + } + } + + @Override + protected void doPassivate() throws Exception + { + if (objectContainer != null) + { + objectContainer.rollback(); + } + } + + @Override + protected void doUnpassivate() throws Exception + { + } + + @Override + protected void rollback(CommitContext commitContext) + { + getObjectContainer().rollback(); + } + + /** + * TODO Branching can only be supported with auditing. Where is the timeStamp parameter? + */ + private InternalCDORevision getRevisionFromContainer(int branchID, CDOID id) + { + DB4ORevision lastRevision = DB4OQueryUtil.getRevision(getObjectContainer(), id, branchID); + if (lastRevision == null) + { + // Revision does not exist. Return null to signal inexistent Revision + return null; + } + + return DB4ORevision.getCDORevision(getStore(), lastRevision); + } + + public InternalCDORevision readRevisionByVersion(CDOID id, CDOBranchVersion branchVersion, int listChunk, + CDORevisionCacheAdder cache) + { + int branchID = branchVersion.getBranch().getID(); + int version = branchVersion.getVersion(); + DB4ORevision revisionByVersion = DB4OQueryUtil.getRevisionByVersion(getObjectContainer(), id, branchID, version); + + // Revision does not exist. Return null to signal inexistent Revision + if (revisionByVersion == null) + { + return null; + } + + return DB4ORevision.getCDORevision(getStore(), revisionByVersion); + } + + public void handleRevisions(EClass eClass, CDOBranch branch, long timeStamp, CDORevisionHandler handler) + { + throw new UnsupportedOperationException(); + } + + public Set readChangeSet(CDOChangeSetSegment... segments) + { + throw new UnsupportedOperationException(); + } + + 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(DB4ORevision primitiveRevision) + { + if (!moreResults) + { + return false; + } + if (!primitiveRevision.getClassName().equals(eClassName)) + { + return false; + } + + if (!primitiveRevision.getPackageURI().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, DB4ORevision.getCDOID(primitiveRevision.getID()), eReference, 0); + } + } + else if (obj instanceof CDOID) + { + if (CDOIDUtil.getLong((CDOID)obj) == targetID) + { + moreResults = context.addXRef(target, DB4ORevision.getCDOID(primitiveRevision.getID()), eReference, 0); + } + } + } + + return false; + } + }); + + } + + } + } + + public void rawExport(CDODataOutput out, int fromBranchID, int toBranchID, long fromCommitTime, long toCommitTime) + throws IOException + { + throw new UnsupportedOperationException(); + } + + public void rawImport(CDODataInput in, int fromBranchID, int toBranchID, long fromCommitTime, long toCommitTime) + throws IOException + { + throw new UnsupportedOperationException(); + } + + public void rawImport(CDODataInput in, int fromBranchID, int toBranchID, long fromCommitTime, long toCommitTime, + OMMonitor monitor) throws IOException + { + throw new UnsupportedOperationException(); + } + + public int createBranch(int branchID, BranchInfo branchInfo) + { + throw new UnsupportedOperationException(); + } + + public BranchInfo loadBranch(int branchID) + { + throw new UnsupportedOperationException(); + } + + public SubBranchInfo[] loadSubBranches(int branchID) + { + throw new UnsupportedOperationException(); + } + + public int loadBranches(int startID, int endID, CDOBranchHandler branchHandler) + { + throw new UnsupportedOperationException(); + } + + 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(DB4OCommitInfo 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 suite + // suggests CommitInfos should be returned ordered by timeStamp + // TODO Specify this in the API! + + List infos = new ArrayList(resultSet); + Collections.sort(infos, new Comparator() + { + public int compare(DB4OCommitInfo arg0, DB4OCommitInfo arg1) + { + return CDOCommonUtil.compareTimeStamps(arg0.getTimeStamp(), arg1.getTimeStamp()); + } + }); + + for (DB4OCommitInfo 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) + { + DB4OCommitInfo commitInfo = new DB4OCommitInfo(branch.getID(), timeStamp, userID, comment); + writeObject(commitInfo, monitor); + } + + @Override + protected void writeRevisions(InternalCDORevision[] revisions, CDOBranch branch, OMMonitor monitor) + { + monitor.begin(revisions.length); + + try + { + 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(DB4ORevision revision) + { + if (revision.isResourceNode() && ObjectUtil.equals(revision.getContainerID(), folderID)) + { + String candidateName = (String)revision.getValues().get(EresourcePackage.CDO_RESOURCE__NAME); + if (StringUtil.compare(name, candidateName) == 0) + { + if (!ObjectUtil.equals(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 + ObjectContainer objectContainer = getObjectContainer(); + int branchID = revision.getBranch().getID(); + CDOID id = revision.getID(); + DB4ORevision revisionAlreadyInStore = DB4OQueryUtil.getRevision(objectContainer, id, branchID); + if (revisionAlreadyInStore != null) + { + DB4OQueryUtil.removeRevisionFromContainer(objectContainer, branchID, id); + } + + DB4ORevision primitiveRevision = DB4ORevision.getDB4ORevision(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(); + } + + @Override + protected void detachObjects(CDOID[] detachedObjects, CDOBranch branch, long timeStamp, OMMonitor monitor) + { + monitor.begin(detachedObjects.length); + + try + { + int branchID = branch.getID(); + for (CDOID id : detachedObjects) + { + DB4OQueryUtil.removeRevisionFromContainer(getObjectContainer(), branchID, id); + monitor.worked(); + } + } + finally + { + monitor.done(); + } + } +} diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreFactory.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreFactory.java new file mode 100644 index 0000000000..932ee6e233 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreFactory.java @@ -0,0 +1,76 @@ +/** + * 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.server.internal.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.eclipse.emf.cdo.server.internal.db4o.bundle.OM; + +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 ex) + { + OM.LOG.error(ex); + } + + 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/server/internal/db4o/bundle/OM.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/bundle/OM.java new file mode 100644 index 0000000000..a9eb18ecb9 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/bundle/OM.java @@ -0,0 +1,45 @@ +/** + * 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.server.internal.db4o.bundle; + +import org.eclipse.net4j.util.om.OMBundle; +import org.eclipse.net4j.util.om.OMPlatform; +import org.eclipse.net4j.util.om.OSGiActivator; +import org.eclipse.net4j.util.om.log.OMLogger; +import org.eclipse.net4j.util.om.trace.OMTracer; + +/** + * The Operations & Maintenance class of this bundle. + * + * @author Victor Roldan Betancort + */ +public abstract class OM +{ + public static final String BUNDLE_ID = "org.eclipse.emf.cdo.server.db4o"; //$NON-NLS-1$ + + public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class); + + public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$ + + public static final OMLogger LOG = BUNDLE.logger(); + + /** + * @author Victor Roldan Betancort + */ + public static final class Activator extends OSGiActivator + { + public Activator() + { + super(BUNDLE); + } + } +} diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java index e89ade6de7..8ac62ad155 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java @@ -418,18 +418,26 @@ public class Repository extends Container implements InternalRepository InternalCDORevision revision = accessor.readRevision(id, branchPoint, referenceChunk, revisionManager); if (revision == null) { - // Case "Pointer"? - InternalCDORevision target = loadRevisionTarget(id, branchPoint, referenceChunk, accessor); - if (target != null) + if (isSupportingAudits()) { - CDOBranch branch = branchPoint.getBranch(); - long revised = loadRevisionRevised(id, branch); - PointerCDORevision pointer = new PointerCDORevision(target.getEClass(), id, branch, revised, target); - - info.setSynthetic(pointer); + // Case "Pointer"? + InternalCDORevision target = loadRevisionTarget(id, branchPoint, referenceChunk, accessor); + if (target != null) + { + CDOBranch branch = branchPoint.getBranch(); + long revised = loadRevisionRevised(id, branch); + PointerCDORevision pointer = new PointerCDORevision(target.getEClass(), id, branch, revised, target); + info.setSynthetic(pointer); + } + + info.setResult(target); + } + else + { + DetachedCDORevision detachedRevision = new DetachedCDORevision(EcorePackage.Literals.ECLASS, id, + branchPoint.getBranch(), 0, CDORevision.UNSPECIFIED_DATE); + info.setSynthetic(detachedRevision); } - - info.setResult(target); } else if (revision instanceof DetachedCDORevision) { diff --git a/plugins/org.eclipse.emf.cdo.tests.db4o/CDO AllTests (DB4O).launch b/plugins/org.eclipse.emf.cdo.tests.db4o/CDO AllTests (DB4O).launch index bfefe8e7cd..2feae1d46f 100644 --- a/plugins/org.eclipse.emf.cdo.tests.db4o/CDO AllTests (DB4O).launch +++ b/plugins/org.eclipse.emf.cdo.tests.db4o/CDO AllTests (DB4O).launch @@ -1,17 +1,4 @@ - - - @@ -23,6 +10,6 @@ - + diff --git a/plugins/org.eclipse.emf.cdo.tests.db4o/src/com/eclipse/emf/cdo/test/db4o/AllTestsDB4O.java b/plugins/org.eclipse.emf.cdo.tests.db4o/src/com/eclipse/emf/cdo/test/db4o/AllTestsDB4O.java new file mode 100644 index 0000000000..36ca13f1cf --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests.db4o/src/com/eclipse/emf/cdo/test/db4o/AllTestsDB4O.java @@ -0,0 +1,158 @@ +/** + * 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 com.eclipse.emf.cdo.test.db4o; + +import org.eclipse.emf.cdo.server.IRepository; +import org.eclipse.emf.cdo.server.IStore; +import org.eclipse.emf.cdo.server.internal.db4o.DB4OStore; +import org.eclipse.emf.cdo.tests.AllConfigs; +import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_261218_Test; +import org.eclipse.emf.cdo.tests.config.impl.ConfigTest; +import org.eclipse.emf.cdo.tests.config.impl.RepositoryConfig; + +import java.io.File; +import java.io.IOException; +import java.net.DatagramSocket; +import java.net.ServerSocket; +import java.util.List; +import java.util.Map; + +import junit.framework.Test; +import junit.framework.TestSuite; + +/** + * @author Victor Roldan Betancort + */ +public class AllTestsDB4O extends AllConfigs +{ + public static Test suite() + { + return new AllTestsDB4O().getTestSuite("CDO Tests (DB4O)"); + } + + @Override + protected void initTestClasses(List> testClasses) + { + super.initTestClasses(testClasses); + + // Takes too much time + testClasses.remove(Bugzilla_261218_Test.class); + } + + @Override + protected void initConfigSuites(TestSuite parent) + { + addScenario(parent, COMBINED, DB4ORepositoryConfig.INSTANCE, JVM, NATIVE); + } + + /** + * @author Victor Roldan Betancort + */ + public static class DB4ORepositoryConfig extends RepositoryConfig + { + public static final DB4ORepositoryConfig INSTANCE = new DB4ORepositoryConfig("DB4O"); + + private static final long serialVersionUID = 1L; + + private transient String dataFilePath; + + private transient File dataFile; + + public DB4ORepositoryConfig(String name) + { + super(name); + } + + @Override + protected void initRepositoryProperties(Map props) + { + super.initRepositoryProperties(props); + props.put(IRepository.Props.SUPPORTING_AUDITS, "false"); + props.put(IRepository.Props.SUPPORTING_BRANCHES, "false"); + } + + @Override + public void tearDown() throws Exception + { + super.tearDown(); + } + + @Override + protected IStore createStore(String repoName) + { + try + { + dataFile = File.createTempFile(repoName, ".db4o"); + dataFile.deleteOnExit(); + dataFilePath = dataFile.getAbsolutePath(); + + int port = 0; + do + { + port = (int)Math.round(Math.random() * 60000 + 1024); + } while (!available(port)); + + IStore store = new DB4OStore(dataFilePath, port); + return store; + } + catch (Exception e) + { + e.printStackTrace(); + } + + return null; + } + } + + public static boolean available(int port) + { + if (port < 1024 || port > 65536) + { + throw new IllegalArgumentException("Invalid start port: " + port); + } + + ServerSocket ss = null; + DatagramSocket ds = null; + try + { + ss = new ServerSocket(port); + ss.setReuseAddress(true); + ds = new DatagramSocket(port); + ds.setReuseAddress(true); + return true; + } + catch (IOException e) + { + } + finally + { + if (ds != null) + { + ds.close(); + } + + if (ss != null) + { + try + { + ss.close(); + } + catch (IOException e) + { + /* should not be thrown */ + } + } + } + + return false; + } + +} diff --git a/plugins/org.eclipse.emf.cdo.tests.db4o/src/com/eclipse/emf/cdo/test/db4o/DB4OTestConfing.java b/plugins/org.eclipse.emf.cdo.tests.db4o/src/com/eclipse/emf/cdo/test/db4o/DB4OTestConfing.java deleted file mode 100644 index 7ac732faec..0000000000 --- a/plugins/org.eclipse.emf.cdo.tests.db4o/src/com/eclipse/emf/cdo/test/db4o/DB4OTestConfing.java +++ /dev/null @@ -1,158 +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 com.eclipse.emf.cdo.test.db4o; - -import org.eclipse.emf.cdo.internal.server.db4o.DB4OStore; -import org.eclipse.emf.cdo.server.IRepository; -import org.eclipse.emf.cdo.server.IStore; -import org.eclipse.emf.cdo.tests.AllConfigs; -import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_261218_Test; -import org.eclipse.emf.cdo.tests.config.impl.ConfigTest; -import org.eclipse.emf.cdo.tests.config.impl.RepositoryConfig; - -import java.io.File; -import java.io.IOException; -import java.net.DatagramSocket; -import java.net.ServerSocket; -import java.util.List; -import java.util.Map; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author Victor Roldan Betancort - */ -public class DB4OTestConfing extends AllConfigs -{ - public static Test suite() - { - return new DB4OTestConfing().getTestSuite("CDO Tests (DB4O Repository)"); - } - - @Override - protected void initTestClasses(List> testClasses) - { - super.initTestClasses(testClasses); - - // Takes too much time - testClasses.remove(Bugzilla_261218_Test.class); - } - - @Override - protected void initConfigSuites(TestSuite parent) - { - addScenario(parent, COMBINED, DB4ORepositoryConfig.INSTANCE, JVM, NATIVE); - } - - /** - * @author Victor Roldan Betancort - */ - public static class DB4ORepositoryConfig extends RepositoryConfig - { - public static final DB4ORepositoryConfig INSTANCE = new DB4ORepositoryConfig("DB4O"); - - private static final long serialVersionUID = 1L; - - private transient String dataFilePath; - - private transient File dataFile; - - public DB4ORepositoryConfig(String name) - { - super(name); - } - - @Override - protected void initRepositoryProperties(Map props) - { - super.initRepositoryProperties(props); - props.put(IRepository.Props.SUPPORTING_AUDITS, "false"); - props.put(IRepository.Props.SUPPORTING_BRANCHES, "false"); - } - - @Override - public void tearDown() throws Exception - { - super.tearDown(); - } - - @Override - protected IStore createStore(String repoName) - { - try - { - dataFile = File.createTempFile(repoName, ".db4o"); - dataFile.deleteOnExit(); - dataFilePath = dataFile.getAbsolutePath(); - - int port = 0; - do - { - port = (int)Math.round(Math.random() * 60000 + 1024); - } while (!available(port)); - - IStore store = new DB4OStore(dataFilePath, port); - return store; - } - catch (Exception e) - { - e.printStackTrace(); - } - - return null; - } - } - - public static boolean available(int port) - { - if (port < 1024 || port > 65536) - { - throw new IllegalArgumentException("Invalid start port: " + port); - } - - ServerSocket ss = null; - DatagramSocket ds = null; - try - { - ss = new ServerSocket(port); - ss.setReuseAddress(true); - ds = new DatagramSocket(port); - ds.setReuseAddress(true); - return true; - } - catch (IOException e) - { - } - finally - { - if (ds != null) - { - ds.close(); - } - - if (ss != null) - { - try - { - ss.close(); - } - catch (IOException e) - { - /* should not be thrown */ - } - } - } - - return false; - } - -} diff --git a/releng/org.eclipse.emf.cdo.releng/buckminster.cspec b/releng/org.eclipse.emf.cdo.releng/buckminster.cspec index 1da8376208..d5e7e58155 100644 --- a/releng/org.eclipse.emf.cdo.releng/buckminster.cspec +++ b/releng/org.eclipse.emf.cdo.releng/buckminster.cspec @@ -25,7 +25,7 @@ - + @@ -49,6 +49,7 @@ + -- cgit v1.2.3