Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.db4o/src/org')
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/db4o/package-info.java30
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OBlob.java44
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OClob.java46
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OCommitInfo.java122
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ODurableLockingManager.java398
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OIdentifiableObject.java62
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockArea.java240
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockEntry.java186
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OPackageUnit.java358
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision.java926
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStore.java992
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreFactory.java116
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OWrappedValue.java72
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/bundle/OM.java90
14 files changed, 1841 insertions, 1841 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/db4o/package-info.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/db4o/package-info.java
index aab0770669..e58ec7e9d0 100644
--- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/db4o/package-info.java
+++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/db4o/package-info.java
@@ -1,15 +1,15 @@
-/*
- * Copyright (c) 2004 - 2012 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
- */
-
-/**
- * Server concepts for dealing with DB4O stores and accessors.
- */
-package org.eclipse.emf.cdo.server.db4o;
+/*
+ * Copyright (c) 2004 - 2012 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
+ */
+
+/**
+ * Server concepts for dealing with DB4O stores and accessors.
+ */
+package org.eclipse.emf.cdo.server.db4o;
diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OBlob.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OBlob.java
index 7c4cd70140..e585fb6902 100644
--- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OBlob.java
+++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OBlob.java
@@ -1,22 +1,22 @@
-/*
- * Copyright (c) 2004 - 2012 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;
-
-/**
- * @author Victor Roldan Betancort
- */
-public class DB4OBlob extends DB4OWrappedValue<byte[]>
-{
- public DB4OBlob(String id, byte[] value)
- {
- super(id, value);
- }
-}
+/*
+ * Copyright (c) 2004 - 2012 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;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class DB4OBlob extends DB4OWrappedValue<byte[]>
+{
+ public DB4OBlob(String id, byte[] value)
+ {
+ super(id, value);
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OClob.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OClob.java
index b7bba213dd..46fda2c035 100644
--- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OClob.java
+++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OClob.java
@@ -1,23 +1,23 @@
-/*
- * Copyright (c) 2004 - 2012 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;
-
-/**
- * @author Victor Roldan Betancort
- */
-public class DB4OClob extends DB4OWrappedValue<char[]>
-{
- public DB4OClob(String id, char[] value)
- {
- super(id, value);
- }
-
-}
+/*
+ * Copyright (c) 2004 - 2012 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;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class DB4OClob extends DB4OWrappedValue<char[]>
+{
+ public DB4OClob(String id, char[] value)
+ {
+ super(id, value);
+ }
+
+}
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
index 356e5379a4..323ac79e67 100644
--- 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
@@ -1,61 +1,61 @@
-/*
- * Copyright (c) 2004 - 2012 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 long previousTimeStamp;
-
- private String userID;
-
- private String comment;
-
- public DB4OCommitInfo(int branchID, long timeStamp, long previousTimeStamp, String userID, String comment)
- {
- this.branchID = branchID;
- this.timeStamp = timeStamp;
- this.previousTimeStamp = previousTimeStamp;
- 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, previousTimeStamp, userID, comment, null);
- handler.handleCommitInfo(commitInfo);
- }
-}
+/*
+ * Copyright (c) 2004 - 2012 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 long previousTimeStamp;
+
+ private String userID;
+
+ private String comment;
+
+ public DB4OCommitInfo(int branchID, long timeStamp, long previousTimeStamp, String userID, String comment)
+ {
+ this.branchID = branchID;
+ this.timeStamp = timeStamp;
+ this.previousTimeStamp = previousTimeStamp;
+ 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, previousTimeStamp, userID, comment, null);
+ handler.handleCommitInfo(commitInfo);
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ODurableLockingManager.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ODurableLockingManager.java
index dfb6804265..c09c9c02c3 100644
--- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ODurableLockingManager.java
+++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ODurableLockingManager.java
@@ -1,199 +1,199 @@
-/*
- * Copyright (c) 2004 - 2012 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:
- * Caspar De Groot - initial API and implementation
- */
-package org.eclipse.emf.cdo.server.internal.db4o;
-
-import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.lock.CDOLockUtil;
-import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockArea;
-import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockArea.Handler;
-import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockAreaNotFoundException;
-import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockGrade;
-import org.eclipse.emf.cdo.spi.server.InternalLockManager;
-
-import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType;
-import org.eclipse.net4j.util.lifecycle.Lifecycle;
-
-import com.db4o.ObjectContainer;
-import com.db4o.ObjectSet;
-import com.db4o.query.Query;
-
-import java.util.Collection;
-import java.util.Map;
-
-/**
- * @author Caspar De Groot
- */
-public class DB4ODurableLockingManager extends Lifecycle
-{
- public DB4ODurableLockingManager()
- {
- }
-
- public LockArea createLockArea(DB4OStoreAccessor accessor, String userID, CDOBranchPoint branchPoint,
- boolean readOnly, Map<CDOID, LockGrade> locks)
- {
- String durableLockingID = getNextDurableLockingID(accessor);
- LockArea lockArea = CDOLockUtil.createLockArea(durableLockingID, userID, branchPoint, readOnly, locks);
- storeLockArea(accessor, lockArea);
- return lockArea;
- }
-
- private void storeLockArea(DB4OStoreAccessor accessor, LockArea area)
- {
- ObjectContainer objectContainer = accessor.getObjectContainer();
- DB4OLockArea primitiveLockArea = DB4OLockArea.getPrimitiveLockArea(area);
- objectContainer.store(primitiveLockArea);
- objectContainer.commit();
- }
-
- public LockArea getLockArea(DB4OStoreAccessor accessor, String durableLockingID) throws LockAreaNotFoundException
- {
- DB4OLockArea primitive = getPrimitiveLockArea(accessor, durableLockingID);
- return DB4OLockArea.getLockArea(accessor.getStore(), primitive);
- }
-
- private DB4OLockArea getPrimitiveLockArea(DB4OStoreAccessor accessor, String durableLockingID)
- throws LockAreaNotFoundException
- {
- ObjectContainer container = accessor.getObjectContainer();
- Query query = container.query();
- query.constrain(DB4OLockArea.class);
- query.descend("id").constrain(durableLockingID);
-
- ObjectSet<?> lockAreas = query.execute();
- if (lockAreas.isEmpty())
- {
- throw new LockAreaNotFoundException(durableLockingID);
- }
-
- if (lockAreas.size() > 1)
- {
- throw new AssertionError("Lockarea stored more than once in object database");
- }
-
- return (DB4OLockArea)lockAreas.get(0);
- }
-
- public void getLockAreas(DB4OStoreAccessor accessor, String userIDPrefix, Handler handler)
- {
- ObjectContainer container = accessor.getObjectContainer();
- Query query = container.query();
- query.constrain(DB4OLockArea.class);
-
- if (userIDPrefix.length() > 0)
- {
- query.descend("userID").constrain(userIDPrefix).startsWith(true);
- }
-
- ObjectSet<?> primitives = query.execute();
- for (Object primitive : primitives)
- {
- LockArea area = DB4OLockArea.getLockArea(accessor.getStore(), (DB4OLockArea)primitive);
- if (!handler.handleLockArea(area))
- {
- break;
- }
- }
- }
-
- public void deleteLockArea(DB4OStoreAccessor accessor, String durableLockingID)
- {
- DB4OLockArea primitive = getPrimitiveLockArea(accessor, durableLockingID);
- ObjectContainer container = accessor.getObjectContainer();
- container.delete(primitive);
- container.commit();
- }
-
- public void lock(DB4OStoreAccessor accessor, String durableLockingID, LockType type,
- Collection<? extends Object> objectsToLock)
- {
- // TODO (CD) Refactor? Next chunk of code copied verbatim from MEMStore.lock
- LockArea area = getLockArea(accessor, durableLockingID);
- Map<CDOID, LockGrade> locks = area.getLocks();
-
- InternalLockManager lockManager = accessor.getStore().getRepository().getLockingManager();
- for (Object objectToLock : objectsToLock)
- {
- CDOID id = lockManager.getLockKeyID(objectToLock);
- LockGrade grade = locks.get(id);
- if (grade != null)
- {
- grade = grade.getUpdated(type, true);
- }
- else
- {
- grade = LockGrade.get(type);
- }
-
- locks.put(id, grade);
- }
-
- storeLockArea(accessor, area);
- }
-
- public void unlock(DB4OStoreAccessor accessor, String durableLockingID, LockType type,
- Collection<? extends Object> objectsToUnlock)
- {
- // TODO (CD) Refactor? Next chunk of code copied verbatim from MEMStore.lock
- LockArea area = getLockArea(accessor, durableLockingID);
- Map<CDOID, LockGrade> locks = area.getLocks();
-
- InternalLockManager lockManager = accessor.getStore().getRepository().getLockingManager();
- for (Object objectToUnlock : objectsToUnlock)
- {
- CDOID id = lockManager.getLockKeyID(objectToUnlock);
- LockGrade grade = locks.get(id);
- if (grade != null)
- {
- grade = grade.getUpdated(type, false);
- if (grade == LockGrade.NONE)
- {
- locks.remove(id);
- }
- else
- {
- locks.put(id, grade);
- }
- }
- }
-
- storeLockArea(accessor, area);
- }
-
- public void unlock(DB4OStoreAccessor accessor, String durableLockingID)
- {
- LockArea area = getLockArea(accessor, durableLockingID);
- Map<CDOID, LockGrade> locks = area.getLocks();
- locks.clear();
-
- storeLockArea(accessor, area);
- }
-
- // TODO: Refactor -- this was copied verbatim from DurableLockingManager
- private String getNextDurableLockingID(DB4OStoreAccessor accessor)
- {
- for (;;)
- {
- String durableLockingID = CDOLockUtil.createDurableLockingID();
-
- try
- {
- getLockArea(accessor, durableLockingID); // Check uniqueness
- // Not unique; try once more...
- }
- catch (LockAreaNotFoundException ex)
- {
- return durableLockingID;
- }
- }
- }
-}
+/*
+ * Copyright (c) 2004 - 2012 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:
+ * Caspar De Groot - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.db4o;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.lock.CDOLockUtil;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockArea;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockArea.Handler;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockAreaNotFoundException;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockGrade;
+import org.eclipse.emf.cdo.spi.server.InternalLockManager;
+
+import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType;
+import org.eclipse.net4j.util.lifecycle.Lifecycle;
+
+import com.db4o.ObjectContainer;
+import com.db4o.ObjectSet;
+import com.db4o.query.Query;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * @author Caspar De Groot
+ */
+public class DB4ODurableLockingManager extends Lifecycle
+{
+ public DB4ODurableLockingManager()
+ {
+ }
+
+ public LockArea createLockArea(DB4OStoreAccessor accessor, String userID, CDOBranchPoint branchPoint,
+ boolean readOnly, Map<CDOID, LockGrade> locks)
+ {
+ String durableLockingID = getNextDurableLockingID(accessor);
+ LockArea lockArea = CDOLockUtil.createLockArea(durableLockingID, userID, branchPoint, readOnly, locks);
+ storeLockArea(accessor, lockArea);
+ return lockArea;
+ }
+
+ private void storeLockArea(DB4OStoreAccessor accessor, LockArea area)
+ {
+ ObjectContainer objectContainer = accessor.getObjectContainer();
+ DB4OLockArea primitiveLockArea = DB4OLockArea.getPrimitiveLockArea(area);
+ objectContainer.store(primitiveLockArea);
+ objectContainer.commit();
+ }
+
+ public LockArea getLockArea(DB4OStoreAccessor accessor, String durableLockingID) throws LockAreaNotFoundException
+ {
+ DB4OLockArea primitive = getPrimitiveLockArea(accessor, durableLockingID);
+ return DB4OLockArea.getLockArea(accessor.getStore(), primitive);
+ }
+
+ private DB4OLockArea getPrimitiveLockArea(DB4OStoreAccessor accessor, String durableLockingID)
+ throws LockAreaNotFoundException
+ {
+ ObjectContainer container = accessor.getObjectContainer();
+ Query query = container.query();
+ query.constrain(DB4OLockArea.class);
+ query.descend("id").constrain(durableLockingID);
+
+ ObjectSet<?> lockAreas = query.execute();
+ if (lockAreas.isEmpty())
+ {
+ throw new LockAreaNotFoundException(durableLockingID);
+ }
+
+ if (lockAreas.size() > 1)
+ {
+ throw new AssertionError("Lockarea stored more than once in object database");
+ }
+
+ return (DB4OLockArea)lockAreas.get(0);
+ }
+
+ public void getLockAreas(DB4OStoreAccessor accessor, String userIDPrefix, Handler handler)
+ {
+ ObjectContainer container = accessor.getObjectContainer();
+ Query query = container.query();
+ query.constrain(DB4OLockArea.class);
+
+ if (userIDPrefix.length() > 0)
+ {
+ query.descend("userID").constrain(userIDPrefix).startsWith(true);
+ }
+
+ ObjectSet<?> primitives = query.execute();
+ for (Object primitive : primitives)
+ {
+ LockArea area = DB4OLockArea.getLockArea(accessor.getStore(), (DB4OLockArea)primitive);
+ if (!handler.handleLockArea(area))
+ {
+ break;
+ }
+ }
+ }
+
+ public void deleteLockArea(DB4OStoreAccessor accessor, String durableLockingID)
+ {
+ DB4OLockArea primitive = getPrimitiveLockArea(accessor, durableLockingID);
+ ObjectContainer container = accessor.getObjectContainer();
+ container.delete(primitive);
+ container.commit();
+ }
+
+ public void lock(DB4OStoreAccessor accessor, String durableLockingID, LockType type,
+ Collection<? extends Object> objectsToLock)
+ {
+ // TODO (CD) Refactor? Next chunk of code copied verbatim from MEMStore.lock
+ LockArea area = getLockArea(accessor, durableLockingID);
+ Map<CDOID, LockGrade> locks = area.getLocks();
+
+ InternalLockManager lockManager = accessor.getStore().getRepository().getLockingManager();
+ for (Object objectToLock : objectsToLock)
+ {
+ CDOID id = lockManager.getLockKeyID(objectToLock);
+ LockGrade grade = locks.get(id);
+ if (grade != null)
+ {
+ grade = grade.getUpdated(type, true);
+ }
+ else
+ {
+ grade = LockGrade.get(type);
+ }
+
+ locks.put(id, grade);
+ }
+
+ storeLockArea(accessor, area);
+ }
+
+ public void unlock(DB4OStoreAccessor accessor, String durableLockingID, LockType type,
+ Collection<? extends Object> objectsToUnlock)
+ {
+ // TODO (CD) Refactor? Next chunk of code copied verbatim from MEMStore.lock
+ LockArea area = getLockArea(accessor, durableLockingID);
+ Map<CDOID, LockGrade> locks = area.getLocks();
+
+ InternalLockManager lockManager = accessor.getStore().getRepository().getLockingManager();
+ for (Object objectToUnlock : objectsToUnlock)
+ {
+ CDOID id = lockManager.getLockKeyID(objectToUnlock);
+ LockGrade grade = locks.get(id);
+ if (grade != null)
+ {
+ grade = grade.getUpdated(type, false);
+ if (grade == LockGrade.NONE)
+ {
+ locks.remove(id);
+ }
+ else
+ {
+ locks.put(id, grade);
+ }
+ }
+ }
+
+ storeLockArea(accessor, area);
+ }
+
+ public void unlock(DB4OStoreAccessor accessor, String durableLockingID)
+ {
+ LockArea area = getLockArea(accessor, durableLockingID);
+ Map<CDOID, LockGrade> locks = area.getLocks();
+ locks.clear();
+
+ storeLockArea(accessor, area);
+ }
+
+ // TODO: Refactor -- this was copied verbatim from DurableLockingManager
+ private String getNextDurableLockingID(DB4OStoreAccessor accessor)
+ {
+ for (;;)
+ {
+ String durableLockingID = CDOLockUtil.createDurableLockingID();
+
+ try
+ {
+ getLockArea(accessor, durableLockingID); // Check uniqueness
+ // Not unique; try once more...
+ }
+ catch (LockAreaNotFoundException ex)
+ {
+ return durableLockingID;
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OIdentifiableObject.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OIdentifiableObject.java
index 95f088de43..3fca1d9b4c 100644
--- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OIdentifiableObject.java
+++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OIdentifiableObject.java
@@ -1,31 +1,31 @@
-/*
- * Copyright (c) 2004 - 2012 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.db4o.IDB4OIdentifiableObject;
-
-/**
- * @author Victor Roldan Betancort
- */
-public class DB4OIdentifiableObject implements IDB4OIdentifiableObject
-{
- private String id;
-
- public String getId()
- {
- return id;
- }
-
- protected void setId(String id)
- {
- this.id = id;
- }
-}
+/*
+ * Copyright (c) 2004 - 2012 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.db4o.IDB4OIdentifiableObject;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class DB4OIdentifiableObject implements IDB4OIdentifiableObject
+{
+ private String id;
+
+ public String getId()
+ {
+ return id;
+ }
+
+ protected void setId(String id)
+ {
+ this.id = id;
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockArea.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockArea.java
index 61059643c2..8dbbe3e0c5 100644
--- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockArea.java
+++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockArea.java
@@ -1,120 +1,120 @@
-/*
- * Copyright (c) 2004 - 2012 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:
- * Caspar De Groot - 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.CDOBranchManager;
-import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDUtil;
-import org.eclipse.emf.cdo.common.lock.CDOLockUtil;
-import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockArea;
-import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockGrade;
-import org.eclipse.emf.cdo.server.db4o.IDB4OStore;
-
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author Caspar De Groot
- */
-public class DB4OLockArea
-{
- private static Map<LockArea, DB4OLockArea> map = new HashMap<LockArea, DB4OLockArea>();
-
- private String id;
-
- private String userID;
-
- private long timestamp;
-
- private int branchID;
-
- private boolean readOnly;
-
- private List<DB4OLockEntry> lockEntries = new LinkedList<DB4OLockEntry>();
-
- public static DB4OLockArea getPrimitiveLockArea(LockArea lockArea)
- {
- DB4OLockArea primitive = map.get(lockArea);
- if (primitive == null)
- {
- primitive = new DB4OLockArea();
- }
-
- primitive.id = lockArea.getDurableLockingID();
- primitive.userID = lockArea.getUserID();
- primitive.timestamp = lockArea.getTimeStamp();
- primitive.branchID = lockArea.getBranch().getID();
- primitive.readOnly = lockArea.isReadOnly();
-
- List<DB4OLockEntry> newList = DB4OLockEntry.getPrimitiveLockEntries(primitive, lockArea.getLocks());
- primitive.lockEntries = newList;
-
- return primitive;
- }
-
- public static LockArea getLockArea(IDB4OStore store, DB4OLockArea primitive)
- {
- // Reconstruct the branchpoint
- //
- CDOBranchManager branchManager = store.getRepository().getBranchManager();
- CDOBranch branch = branchManager.getBranch(primitive.branchID);
- CDOBranchPoint branchpoint = branch.getPoint(primitive.timestamp);
-
- // Reconstruct the lockMap
- //
- Map<CDOID, LockGrade> lockMap = new HashMap<CDOID, LockGrade>();
- for (DB4OLockEntry entry : primitive.getLockEntries())
- {
- CDOID cdoid = CDOIDUtil.createLong(entry.getCdoID());
- LockGrade lockGrade = LockGrade.get(entry.getLockGrade());
- lockMap.put(cdoid, lockGrade);
- }
-
- LockArea lockArea = CDOLockUtil.createLockArea(primitive.id, primitive.userID, branchpoint, primitive.readOnly,
- lockMap);
- map.put(lockArea, primitive);
- return lockArea;
- }
-
- public void setId(String id)
- {
- this.id = id;
- }
-
- public String getId()
- {
- return id;
- }
-
- public String getUserID()
- {
- return userID;
- }
-
- public long getTimestamp()
- {
- return timestamp;
- }
-
- public int getBranchID()
- {
- return branchID;
- }
-
- public List<DB4OLockEntry> getLockEntries()
- {
- return lockEntries;
- }
-}
+/*
+ * Copyright (c) 2004 - 2012 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:
+ * Caspar De Groot - 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.CDOBranchManager;
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.lock.CDOLockUtil;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockArea;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockGrade;
+import org.eclipse.emf.cdo.server.db4o.IDB4OStore;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Caspar De Groot
+ */
+public class DB4OLockArea
+{
+ private static Map<LockArea, DB4OLockArea> map = new HashMap<LockArea, DB4OLockArea>();
+
+ private String id;
+
+ private String userID;
+
+ private long timestamp;
+
+ private int branchID;
+
+ private boolean readOnly;
+
+ private List<DB4OLockEntry> lockEntries = new LinkedList<DB4OLockEntry>();
+
+ public static DB4OLockArea getPrimitiveLockArea(LockArea lockArea)
+ {
+ DB4OLockArea primitive = map.get(lockArea);
+ if (primitive == null)
+ {
+ primitive = new DB4OLockArea();
+ }
+
+ primitive.id = lockArea.getDurableLockingID();
+ primitive.userID = lockArea.getUserID();
+ primitive.timestamp = lockArea.getTimeStamp();
+ primitive.branchID = lockArea.getBranch().getID();
+ primitive.readOnly = lockArea.isReadOnly();
+
+ List<DB4OLockEntry> newList = DB4OLockEntry.getPrimitiveLockEntries(primitive, lockArea.getLocks());
+ primitive.lockEntries = newList;
+
+ return primitive;
+ }
+
+ public static LockArea getLockArea(IDB4OStore store, DB4OLockArea primitive)
+ {
+ // Reconstruct the branchpoint
+ //
+ CDOBranchManager branchManager = store.getRepository().getBranchManager();
+ CDOBranch branch = branchManager.getBranch(primitive.branchID);
+ CDOBranchPoint branchpoint = branch.getPoint(primitive.timestamp);
+
+ // Reconstruct the lockMap
+ //
+ Map<CDOID, LockGrade> lockMap = new HashMap<CDOID, LockGrade>();
+ for (DB4OLockEntry entry : primitive.getLockEntries())
+ {
+ CDOID cdoid = CDOIDUtil.createLong(entry.getCdoID());
+ LockGrade lockGrade = LockGrade.get(entry.getLockGrade());
+ lockMap.put(cdoid, lockGrade);
+ }
+
+ LockArea lockArea = CDOLockUtil.createLockArea(primitive.id, primitive.userID, branchpoint, primitive.readOnly,
+ lockMap);
+ map.put(lockArea, primitive);
+ return lockArea;
+ }
+
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+
+ public String getUserID()
+ {
+ return userID;
+ }
+
+ public long getTimestamp()
+ {
+ return timestamp;
+ }
+
+ public int getBranchID()
+ {
+ return branchID;
+ }
+
+ public List<DB4OLockEntry> getLockEntries()
+ {
+ return lockEntries;
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockEntry.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockEntry.java
index 07b8e6b8c6..f9c991ef3b 100644
--- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockEntry.java
+++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockEntry.java
@@ -1,93 +1,93 @@
-/*
- * Copyright (c) 2004 - 2012 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:
- * Caspar De Groot - 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 org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockGrade;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-/**
- * @author Caspar De Groot
- */
-public class DB4OLockEntry
-{
- private long cdoID;
-
- private int lockGrade;
-
- public DB4OLockEntry(long longCdoID, int intLockGrade)
- {
- cdoID = longCdoID;
- lockGrade = intLockGrade;
- }
-
- public static List<DB4OLockEntry> getPrimitiveLockEntries(DB4OLockArea primitive, Map<CDOID, LockGrade> locks)
- {
- List<DB4OLockEntry> newList = new LinkedList<DB4OLockEntry>();
-
- for (Entry<CDOID, LockGrade> entry : locks.entrySet())
- {
- CDOID cdoid = entry.getKey();
- long longCdoID = CDOIDUtil.getLong(cdoid);
-
- LockGrade lockGrade = entry.getValue();
- int intLockGrade = lockGrade.getValue();
-
- DB4OLockEntry lockEntry = getEntry(primitive.getLockEntries(), longCdoID);
- if (lockEntry == null)
- {
- lockEntry = new DB4OLockEntry(longCdoID, intLockGrade);
- }
- else
- {
- lockEntry.setLockGrade(intLockGrade);
- }
-
- newList.add(lockEntry);
- }
-
- return newList;
- }
-
- private void setLockGrade(int lockGrade)
- {
- this.lockGrade = lockGrade;
- }
-
- // TODO (CD) Avoid linear search
- private static DB4OLockEntry getEntry(List<DB4OLockEntry> entries, long targetID)
- {
- for (DB4OLockEntry entry : entries)
- {
- if (entry.cdoID == targetID)
- {
- return entry;
- }
- }
-
- return null;
- }
-
- public long getCdoID()
- {
- return cdoID;
- }
-
- public int getLockGrade()
- {
- return lockGrade;
- }
-}
+/*
+ * Copyright (c) 2004 - 2012 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:
+ * Caspar De Groot - 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 org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockGrade;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * @author Caspar De Groot
+ */
+public class DB4OLockEntry
+{
+ private long cdoID;
+
+ private int lockGrade;
+
+ public DB4OLockEntry(long longCdoID, int intLockGrade)
+ {
+ cdoID = longCdoID;
+ lockGrade = intLockGrade;
+ }
+
+ public static List<DB4OLockEntry> getPrimitiveLockEntries(DB4OLockArea primitive, Map<CDOID, LockGrade> locks)
+ {
+ List<DB4OLockEntry> newList = new LinkedList<DB4OLockEntry>();
+
+ for (Entry<CDOID, LockGrade> entry : locks.entrySet())
+ {
+ CDOID cdoid = entry.getKey();
+ long longCdoID = CDOIDUtil.getLong(cdoid);
+
+ LockGrade lockGrade = entry.getValue();
+ int intLockGrade = lockGrade.getValue();
+
+ DB4OLockEntry lockEntry = getEntry(primitive.getLockEntries(), longCdoID);
+ if (lockEntry == null)
+ {
+ lockEntry = new DB4OLockEntry(longCdoID, intLockGrade);
+ }
+ else
+ {
+ lockEntry.setLockGrade(intLockGrade);
+ }
+
+ newList.add(lockEntry);
+ }
+
+ return newList;
+ }
+
+ private void setLockGrade(int lockGrade)
+ {
+ this.lockGrade = lockGrade;
+ }
+
+ // TODO (CD) Avoid linear search
+ private static DB4OLockEntry getEntry(List<DB4OLockEntry> entries, long targetID)
+ {
+ for (DB4OLockEntry entry : entries)
+ {
+ if (entry.cdoID == targetID)
+ {
+ return entry;
+ }
+ }
+
+ return null;
+ }
+
+ public long getCdoID()
+ {
+ return cdoID;
+ }
+
+ public int getLockGrade()
+ {
+ return lockGrade;
+ }
+}
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
index 186d1b91fb..13ad6137eb 100644
--- 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
@@ -1,179 +1,179 @@
-/*
- * Copyright (c) 2004 - 2012 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.InternalCDOPackageInfo;
-import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
-
-import org.eclipse.net4j.util.collection.Pair;
-
-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<Byte> ePackageBytes;
-
- private List<Pair<String, String>> packageInfos;
-
- public DB4OPackageUnit(String id, Integer ordinalType, Long timeStamp, List<Byte> ePackageBytes,
- List<Pair<String, String>> packageInfos)
- {
- setId(id);
- setOrdinalType(ordinalType);
- setTimeStamp(timeStamp);
- setEPackageBytes(ePackageBytes);
- setPackageInfos(packageInfos);
- }
-
- 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<Byte> ePackageBytes)
- {
- this.ePackageBytes = ePackageBytes;
- }
-
- public List<Byte> 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),
- getPackageInfosAsPair(packageUnit.getPackageInfos()));
- }
-
- public static InternalCDOPackageUnit getPackageUnit(DB4OPackageUnit packageUnit)
- {
- InternalCDOPackageUnit cdoPackageUnit = (InternalCDOPackageUnit)CDOModelUtil.createPackageUnit();
- CDOPackageUnit.Type type = CDOPackageUnit.Type.values()[packageUnit.getOrdinalType()];
- cdoPackageUnit.setOriginalType(type);
- cdoPackageUnit.setTimeStamp(packageUnit.getTimeStamp());
- cdoPackageUnit.setPackageInfos(getPackageInfos(packageUnit));
- return cdoPackageUnit;
- }
-
- private static InternalCDOPackageInfo[] getPackageInfos(DB4OPackageUnit packageUnit)
- {
- List<InternalCDOPackageInfo> list = new ArrayList<InternalCDOPackageInfo>();
- for (Pair<String, String> infoPair : packageUnit.getPackageInfos())
- {
- InternalCDOPackageInfo packageInfo = (InternalCDOPackageInfo)CDOModelUtil.createPackageInfo();
- packageInfo.setParentURI(infoPair.getElement1());
- packageInfo.setPackageURI(infoPair.getElement2());
- list.add(packageInfo);
- }
- return list.toArray(new InternalCDOPackageInfo[list.size()]);
- }
-
- private static List<Byte> getEPackageBytes(IStore store, InternalCDOPackageUnit packageUnit)
- {
- EPackage ePackage = packageUnit.getTopLevelPackageInfo().getEPackage();
- CDOPackageRegistry packageRegistry = store.getRepository().getPackageRegistry();
- byte[] bytes = EMFUtil.getEPackageBytes(ePackage, true, packageRegistry);
- List<Byte> bytesObject = new ArrayList<Byte>();
- for (byte bt : bytes)
- {
- bytesObject.add(new Byte(bt));
- }
-
- return bytesObject;
- }
-
- private static EPackage getEPackageFromBytes(List<Byte> 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;
- }
-
- public EPackage getEPackage()
- {
- return getEPackageFromBytes(getEPackageBytes());
- }
-
- private static List<Pair<String, String>> getPackageInfosAsPair(InternalCDOPackageInfo[] packageInfos)
- {
- List<Pair<String, String>> infos = new ArrayList<Pair<String, String>>();
- for (InternalCDOPackageInfo info : packageInfos)
- {
- Pair<String, String> pair = new Pair<String, String>();
- pair.setElement1(info.getParentURI());
- pair.setElement2(info.getPackageURI());
- infos.add(pair);
- }
- return infos;
- }
-
- public void setPackageInfos(List<Pair<String, String>> packageInfos)
- {
- this.packageInfos = packageInfos;
- }
-
- public List<Pair<String, String>> getPackageInfos()
- {
- return packageInfos;
- }
-}
+/*
+ * Copyright (c) 2004 - 2012 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.InternalCDOPackageInfo;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
+
+import org.eclipse.net4j.util.collection.Pair;
+
+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<Byte> ePackageBytes;
+
+ private List<Pair<String, String>> packageInfos;
+
+ public DB4OPackageUnit(String id, Integer ordinalType, Long timeStamp, List<Byte> ePackageBytes,
+ List<Pair<String, String>> packageInfos)
+ {
+ setId(id);
+ setOrdinalType(ordinalType);
+ setTimeStamp(timeStamp);
+ setEPackageBytes(ePackageBytes);
+ setPackageInfos(packageInfos);
+ }
+
+ 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<Byte> ePackageBytes)
+ {
+ this.ePackageBytes = ePackageBytes;
+ }
+
+ public List<Byte> 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),
+ getPackageInfosAsPair(packageUnit.getPackageInfos()));
+ }
+
+ public static InternalCDOPackageUnit getPackageUnit(DB4OPackageUnit packageUnit)
+ {
+ InternalCDOPackageUnit cdoPackageUnit = (InternalCDOPackageUnit)CDOModelUtil.createPackageUnit();
+ CDOPackageUnit.Type type = CDOPackageUnit.Type.values()[packageUnit.getOrdinalType()];
+ cdoPackageUnit.setOriginalType(type);
+ cdoPackageUnit.setTimeStamp(packageUnit.getTimeStamp());
+ cdoPackageUnit.setPackageInfos(getPackageInfos(packageUnit));
+ return cdoPackageUnit;
+ }
+
+ private static InternalCDOPackageInfo[] getPackageInfos(DB4OPackageUnit packageUnit)
+ {
+ List<InternalCDOPackageInfo> list = new ArrayList<InternalCDOPackageInfo>();
+ for (Pair<String, String> infoPair : packageUnit.getPackageInfos())
+ {
+ InternalCDOPackageInfo packageInfo = (InternalCDOPackageInfo)CDOModelUtil.createPackageInfo();
+ packageInfo.setParentURI(infoPair.getElement1());
+ packageInfo.setPackageURI(infoPair.getElement2());
+ list.add(packageInfo);
+ }
+ return list.toArray(new InternalCDOPackageInfo[list.size()]);
+ }
+
+ private static List<Byte> getEPackageBytes(IStore store, InternalCDOPackageUnit packageUnit)
+ {
+ EPackage ePackage = packageUnit.getTopLevelPackageInfo().getEPackage();
+ CDOPackageRegistry packageRegistry = store.getRepository().getPackageRegistry();
+ byte[] bytes = EMFUtil.getEPackageBytes(ePackage, true, packageRegistry);
+ List<Byte> bytesObject = new ArrayList<Byte>();
+ for (byte bt : bytes)
+ {
+ bytesObject.add(new Byte(bt));
+ }
+
+ return bytesObject;
+ }
+
+ private static EPackage getEPackageFromBytes(List<Byte> 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;
+ }
+
+ public EPackage getEPackage()
+ {
+ return getEPackageFromBytes(getEPackageBytes());
+ }
+
+ private static List<Pair<String, String>> getPackageInfosAsPair(InternalCDOPackageInfo[] packageInfos)
+ {
+ List<Pair<String, String>> infos = new ArrayList<Pair<String, String>>();
+ for (InternalCDOPackageInfo info : packageInfos)
+ {
+ Pair<String, String> pair = new Pair<String, String>();
+ pair.setElement1(info.getParentURI());
+ pair.setElement2(info.getPackageURI());
+ infos.add(pair);
+ }
+ return infos;
+ }
+
+ public void setPackageInfos(List<Pair<String, String>> packageInfos)
+ {
+ this.packageInfos = packageInfos;
+ }
+
+ public List<Pair<String, String>> getPackageInfos()
+ {
+ return packageInfos;
+ }
+}
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
index 9f48f371f9..c0ea016193 100644
--- 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
@@ -1,463 +1,463 @@
-/*
- * Copyright (c) 2004 - 2012 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.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.CDORevisionData;
-import org.eclipse.emf.cdo.common.revision.CDORevisionFactory;
-import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
-import org.eclipse.emf.cdo.server.IRepository;
-import org.eclipse.emf.cdo.server.IStore;
-import org.eclipse.emf.cdo.spi.common.revision.CDOFeatureMapEntry;
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDOList;
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager;
-
-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 org.eclipse.emf.ecore.util.FeatureMap;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Victor Roldan Betancort
- */
-public class DB4ORevision
-{
- public final static String ATTRIBUTE_CLASS_NAME = "className";
-
- public final static String ATTRIBUTE_PACKAGE_NS_URI = "packageNsURI";
-
- private String packageNsURI;
-
- private String className;
-
- private long id;
-
- private int version;
-
- private long timeStamp;
-
- private long resourceID;
-
- /**
- * Can be an external ID!
- */
- private Object containerID;
-
- private int containingFeatureID;
-
- private List<Object> values;
-
- // TODO enum RevisionType { NORMAL, ROOT_RESOURCE, RESOURCE, RESOURCE_FOLDER }??
- private boolean isResource;
-
- private boolean isResourceFolder;
-
- public DB4ORevision(String packageURI, String className, long id, int version, long resourceID, Object containerID,
- int containingFeatureID, List<Object> values, long timestamp, boolean isResource, boolean isResourceFolder)
- {
- setPackageURI(packageURI);
- setClassName(className);
- setID(id);
- setVersion(version);
- setResourceID(resourceID);
- setContainerID(containerID);
- setContainingFeatureID(containingFeatureID);
- setValues(values);
- setTimeStamp(timestamp);
- setResource(isResource);
- setResourceFolder(isResourceFolder);
- }
-
- public void setPackageURI(String packageURI)
- {
- packageNsURI = packageURI;
- }
-
- public String getPackageURI()
- {
- return packageNsURI;
- }
-
- 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 int getBranchID()
- {
- return CDOBranch.MAIN_BRANCH_ID;
- }
-
- public void setVersion(int version)
- {
- this.version = version;
- }
-
- public int getVersion()
- {
- return version;
- }
-
- public long getRevised()
- {
- return CDORevision.UNSPECIFIED_DATE;
- }
-
- public void setResourceID(long resourceID)
- {
- this.resourceID = resourceID;
- }
-
- public long 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<Object> values)
- {
- this.values = values;
- }
-
- public List<Object> 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 setResourceFolder(boolean isResourceFolder)
- {
- this.isResourceFolder = isResourceFolder;
- }
-
- public boolean isResourceFolder()
- {
- return isResourceFolder;
- }
-
- public boolean isResourceNode()
- {
- return isResource || isResourceFolder;
- }
-
- 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 isResourceFolder = revision.isResourceFolder();
-
- long id = CDOIDUtil.getLong(revisionID);
- int version = revision.getVersion();
- long timeStamp = revision.getTimeStamp();
- long resourceID = CDOIDUtil.getLong(revision.getResourceID());
- Object containerID = getDB4OID((CDOID)revision.getContainerID());
- int containingFeatureID = revision.getContainingFeatureID();
-
- EStructuralFeature[] features = classInfo.getAllPersistentFeatures();
- List<Object> values = new ArrayList<Object>(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<Object> list = new ArrayList<Object>();
- 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 if (listContainsInstancesOfClass(obj, CDOFeatureMapEntry.class)) // FeatureMap
- {
- values.add(i, DB4OFeatureMapEntry.getPrimitiveFeatureMapEntryList(obj));
- }
- else
- {
- // Prevent the explicit null-ref "NIL" from being serialized!
- if (obj == CDORevisionData.NIL)
- {
- obj = new ExplicitNull();
- }
-
- values.add(i, obj);
- }
- }
- }
-
- return new DB4ORevision(packageURI, className, id, version, resourceID, containerID, containingFeatureID, values,
- timeStamp, isResource, isResourceFolder);
- }
-
- public static InternalCDORevision getCDORevision(IStore store, DB4ORevision primitiveRevision)
- {
- IRepository repository = store.getRepository();
- CDORevisionFactory factory = ((InternalCDORevisionManager)repository.getRevisionManager()).getFactory();
- CDOBranch branch = repository.getBranchManager().getMainBranch();
-
- String nsURI = primitiveRevision.getPackageURI();
- String className = primitiveRevision.getClassName();
- EPackage ePackage = repository.getPackageRegistry().getEPackage(nsURI);
- EClass eClass = (EClass)ePackage.getEClassifier(className);
- InternalCDORevision revision = (InternalCDORevision)factory.createRevision(eClass);
-
- revision.setID(getCDOID(primitiveRevision.getID()));
- revision.setVersion(primitiveRevision.getVersion());
- revision.setBranchPoint(branch.getPoint(primitiveRevision.getTimeStamp()));
- 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;
- }
- else if (listContainsInstancesOfClass(value, DB4OFeatureMapEntry.class))
- {
- value = DB4OFeatureMapEntry.getCDOFeatureMapEntryList(eClass, value);
- }
-
- // Convert 'null' into the explicit null-ref "NIL" if appropriate
- if (value instanceof ExplicitNull)
- {
- value = CDORevisionData.NIL;
- }
-
- 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);
- }
-
- if (id instanceof CDOID)
- {
- return (CDOID)id;
- }
-
- return CDOIDUtil.createLong((Long)id);
- }
-
- public static boolean listContainsInstancesOfClass(Object obj, Class<?> clazz)
- {
- if (obj instanceof List)
- {
- List<?> list = (List<?>)obj;
- for (Object potentialFeatureMap : list)
- {
- if (!clazz.isAssignableFrom(potentialFeatureMap.getClass()))
- {
- return false;
- }
- }
- return true;
- }
- return false;
- }
-
- private static final class DB4OFeatureMapEntry
- {
-
- private int featureID;
-
- private Object valueID;
-
- public DB4OFeatureMapEntry(int featureID, Object valueID)
- {
- setFeatureID(featureID);
- setValueID(valueID);
- }
-
- private void setFeatureID(int featureID)
- {
- this.featureID = featureID;
- }
-
- public int getFeatureID()
- {
- return featureID;
- }
-
- private void setValueID(Object valueID)
- {
- this.valueID = valueID;
- }
-
- public Object getValueID()
- {
- return valueID;
- }
-
- public static List<DB4OFeatureMapEntry> getPrimitiveFeatureMapEntryList(Object obj)
- {
- InternalCDOList cdoList = (InternalCDOList)obj;
- List<DB4OFeatureMapEntry> list = new ArrayList<DB4OFeatureMapEntry>();
- for (Object listElement : cdoList)
- {
- if (listElement instanceof FeatureMap.Entry)
- {
- FeatureMap.Entry entry = (FeatureMap.Entry)listElement;
- EStructuralFeature entryFeature = entry.getEStructuralFeature();
- CDOID entryValue = (CDOID)entry.getValue();
- DB4OFeatureMapEntry db4oEntry = new DB4OFeatureMapEntry(entryFeature.getFeatureID(), getDB4OID(entryValue));
- list.add(db4oEntry);
- }
- }
- return list;
- }
-
- public static CDOList getCDOFeatureMapEntryList(EClass eClass, Object value)
- {
- List<?> sourceList = (List<?>)value;
- CDOList list = CDOListFactory.DEFAULT.createList(sourceList.size(), sourceList.size(), CDORevision.UNCHUNKED);
- for (int j = 0; j < sourceList.size(); j++)
- {
- DB4OFeatureMapEntry mapEntry = (DB4OFeatureMapEntry)sourceList.get(j);
- EStructuralFeature entryFeature = eClass.getEStructuralFeature(mapEntry.getFeatureID());
- CDOID valueID = getCDOID(mapEntry.getValueID());
- list.set(j, CDORevisionUtil.createFeatureMapEntry(entryFeature, valueID));
- }
- return list;
- }
- }
-
- /**
- * @author Caspar De Groot
- */
- private static final class ExplicitNull
- {
- }
-}
+/*
+ * Copyright (c) 2004 - 2012 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.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.CDORevisionData;
+import org.eclipse.emf.cdo.common.revision.CDORevisionFactory;
+import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
+import org.eclipse.emf.cdo.server.IRepository;
+import org.eclipse.emf.cdo.server.IStore;
+import org.eclipse.emf.cdo.spi.common.revision.CDOFeatureMapEntry;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDOList;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager;
+
+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 org.eclipse.emf.ecore.util.FeatureMap;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class DB4ORevision
+{
+ public final static String ATTRIBUTE_CLASS_NAME = "className";
+
+ public final static String ATTRIBUTE_PACKAGE_NS_URI = "packageNsURI";
+
+ private String packageNsURI;
+
+ private String className;
+
+ private long id;
+
+ private int version;
+
+ private long timeStamp;
+
+ private long resourceID;
+
+ /**
+ * Can be an external ID!
+ */
+ private Object containerID;
+
+ private int containingFeatureID;
+
+ private List<Object> values;
+
+ // TODO enum RevisionType { NORMAL, ROOT_RESOURCE, RESOURCE, RESOURCE_FOLDER }??
+ private boolean isResource;
+
+ private boolean isResourceFolder;
+
+ public DB4ORevision(String packageURI, String className, long id, int version, long resourceID, Object containerID,
+ int containingFeatureID, List<Object> values, long timestamp, boolean isResource, boolean isResourceFolder)
+ {
+ setPackageURI(packageURI);
+ setClassName(className);
+ setID(id);
+ setVersion(version);
+ setResourceID(resourceID);
+ setContainerID(containerID);
+ setContainingFeatureID(containingFeatureID);
+ setValues(values);
+ setTimeStamp(timestamp);
+ setResource(isResource);
+ setResourceFolder(isResourceFolder);
+ }
+
+ public void setPackageURI(String packageURI)
+ {
+ packageNsURI = packageURI;
+ }
+
+ public String getPackageURI()
+ {
+ return packageNsURI;
+ }
+
+ 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 int getBranchID()
+ {
+ return CDOBranch.MAIN_BRANCH_ID;
+ }
+
+ public void setVersion(int version)
+ {
+ this.version = version;
+ }
+
+ public int getVersion()
+ {
+ return version;
+ }
+
+ public long getRevised()
+ {
+ return CDORevision.UNSPECIFIED_DATE;
+ }
+
+ public void setResourceID(long resourceID)
+ {
+ this.resourceID = resourceID;
+ }
+
+ public long 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<Object> values)
+ {
+ this.values = values;
+ }
+
+ public List<Object> 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 setResourceFolder(boolean isResourceFolder)
+ {
+ this.isResourceFolder = isResourceFolder;
+ }
+
+ public boolean isResourceFolder()
+ {
+ return isResourceFolder;
+ }
+
+ public boolean isResourceNode()
+ {
+ return isResource || isResourceFolder;
+ }
+
+ 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 isResourceFolder = revision.isResourceFolder();
+
+ long id = CDOIDUtil.getLong(revisionID);
+ int version = revision.getVersion();
+ long timeStamp = revision.getTimeStamp();
+ long resourceID = CDOIDUtil.getLong(revision.getResourceID());
+ Object containerID = getDB4OID((CDOID)revision.getContainerID());
+ int containingFeatureID = revision.getContainingFeatureID();
+
+ EStructuralFeature[] features = classInfo.getAllPersistentFeatures();
+ List<Object> values = new ArrayList<Object>(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<Object> list = new ArrayList<Object>();
+ 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 if (listContainsInstancesOfClass(obj, CDOFeatureMapEntry.class)) // FeatureMap
+ {
+ values.add(i, DB4OFeatureMapEntry.getPrimitiveFeatureMapEntryList(obj));
+ }
+ else
+ {
+ // Prevent the explicit null-ref "NIL" from being serialized!
+ if (obj == CDORevisionData.NIL)
+ {
+ obj = new ExplicitNull();
+ }
+
+ values.add(i, obj);
+ }
+ }
+ }
+
+ return new DB4ORevision(packageURI, className, id, version, resourceID, containerID, containingFeatureID, values,
+ timeStamp, isResource, isResourceFolder);
+ }
+
+ public static InternalCDORevision getCDORevision(IStore store, DB4ORevision primitiveRevision)
+ {
+ IRepository repository = store.getRepository();
+ CDORevisionFactory factory = ((InternalCDORevisionManager)repository.getRevisionManager()).getFactory();
+ CDOBranch branch = repository.getBranchManager().getMainBranch();
+
+ String nsURI = primitiveRevision.getPackageURI();
+ String className = primitiveRevision.getClassName();
+ EPackage ePackage = repository.getPackageRegistry().getEPackage(nsURI);
+ EClass eClass = (EClass)ePackage.getEClassifier(className);
+ InternalCDORevision revision = (InternalCDORevision)factory.createRevision(eClass);
+
+ revision.setID(getCDOID(primitiveRevision.getID()));
+ revision.setVersion(primitiveRevision.getVersion());
+ revision.setBranchPoint(branch.getPoint(primitiveRevision.getTimeStamp()));
+ 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;
+ }
+ else if (listContainsInstancesOfClass(value, DB4OFeatureMapEntry.class))
+ {
+ value = DB4OFeatureMapEntry.getCDOFeatureMapEntryList(eClass, value);
+ }
+
+ // Convert 'null' into the explicit null-ref "NIL" if appropriate
+ if (value instanceof ExplicitNull)
+ {
+ value = CDORevisionData.NIL;
+ }
+
+ 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);
+ }
+
+ if (id instanceof CDOID)
+ {
+ return (CDOID)id;
+ }
+
+ return CDOIDUtil.createLong((Long)id);
+ }
+
+ public static boolean listContainsInstancesOfClass(Object obj, Class<?> clazz)
+ {
+ if (obj instanceof List)
+ {
+ List<?> list = (List<?>)obj;
+ for (Object potentialFeatureMap : list)
+ {
+ if (!clazz.isAssignableFrom(potentialFeatureMap.getClass()))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ private static final class DB4OFeatureMapEntry
+ {
+
+ private int featureID;
+
+ private Object valueID;
+
+ public DB4OFeatureMapEntry(int featureID, Object valueID)
+ {
+ setFeatureID(featureID);
+ setValueID(valueID);
+ }
+
+ private void setFeatureID(int featureID)
+ {
+ this.featureID = featureID;
+ }
+
+ public int getFeatureID()
+ {
+ return featureID;
+ }
+
+ private void setValueID(Object valueID)
+ {
+ this.valueID = valueID;
+ }
+
+ public Object getValueID()
+ {
+ return valueID;
+ }
+
+ public static List<DB4OFeatureMapEntry> getPrimitiveFeatureMapEntryList(Object obj)
+ {
+ InternalCDOList cdoList = (InternalCDOList)obj;
+ List<DB4OFeatureMapEntry> list = new ArrayList<DB4OFeatureMapEntry>();
+ for (Object listElement : cdoList)
+ {
+ if (listElement instanceof FeatureMap.Entry)
+ {
+ FeatureMap.Entry entry = (FeatureMap.Entry)listElement;
+ EStructuralFeature entryFeature = entry.getEStructuralFeature();
+ CDOID entryValue = (CDOID)entry.getValue();
+ DB4OFeatureMapEntry db4oEntry = new DB4OFeatureMapEntry(entryFeature.getFeatureID(), getDB4OID(entryValue));
+ list.add(db4oEntry);
+ }
+ }
+ return list;
+ }
+
+ public static CDOList getCDOFeatureMapEntryList(EClass eClass, Object value)
+ {
+ List<?> sourceList = (List<?>)value;
+ CDOList list = CDOListFactory.DEFAULT.createList(sourceList.size(), sourceList.size(), CDORevision.UNCHUNKED);
+ for (int j = 0; j < sourceList.size(); j++)
+ {
+ DB4OFeatureMapEntry mapEntry = (DB4OFeatureMapEntry)sourceList.get(j);
+ EStructuralFeature entryFeature = eClass.getEStructuralFeature(mapEntry.getFeatureID());
+ CDOID valueID = getCDOID(mapEntry.getValueID());
+ list.set(j, CDORevisionUtil.createFeatureMapEntry(entryFeature, valueID));
+ }
+ return list;
+ }
+ }
+
+ /**
+ * @author Caspar De Groot
+ */
+ private static final class ExplicitNull
+ {
+ }
+}
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
index c370b83e39..183eace6aa 100644
--- 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
@@ -1,496 +1,496 @@
-/*
- * Copyright (c) 2004 - 2012 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 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.IDB4OIdentifiableObject;
-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 org.eclipse.net4j.util.lifecycle.LifecycleUtil;
-
-import com.db4o.Db4o;
-import com.db4o.ObjectContainer;
-import com.db4o.ObjectServer;
-import com.db4o.ObjectSet;
-import com.db4o.config.Configuration;
-import com.db4o.constraints.UniqueFieldValueConstraint;
-import com.db4o.query.Query;
-import com.db4o.reflect.jdk.JdkReflector;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * @author Victor Roldan Betancort
- */
-public class DB4OStore extends LongIDStore implements IDB4OStore
-{
- private static final String ID_ATTRIBUTE = "id";
-
- private transient String storeLocation;
-
- private transient int port;
-
- private transient ObjectServer server;
-
- private transient Configuration serverConfiguration;
-
- private ServerInfo serverInfo;
-
- private DB4ODurableLockingManager durableLockingManager = new DB4ODurableLockingManager();
-
- @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));
-
- // setRevisionTemporality(RevisionTemporality.AUDITING);
- // setRevisionParallelism(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 void setCreationTime(long creationTime)
- {
- getServerInfo().setCreationTime(creationTime);
- }
-
- public boolean isFirstStart()
- {
- return getServerInfo().isFirstTime();
- }
-
- public DB4ODurableLockingManager getDurableLockingManager()
- {
- return durableLockingManager;
- }
-
- public Map<String, String> getPersistentProperties(Set<String> names)
- {
- if (names == null || names.isEmpty())
- {
- return new HashMap<String, String>(getServerInfo().getProperties());
- }
-
- Map<String, String> result = new HashMap<String, String>();
- for (String key : names)
- {
- String value = getServerInfo().getProperties().get(key);
- if (value != null)
- {
- result.put(key, value);
- }
- }
-
- return result;
- }
-
- public void setPersistentProperties(Map<String, String> properties)
- {
- ServerInfo serverInfo = getServerInfo();
- serverInfo.getProperties().putAll(properties);
- commitServerInfo(null);
- }
-
- public void removePersistentProperties(Set<String> names)
- {
- ServerInfo serverInfo = getServerInfo();
- Map<String, String> properties = serverInfo.getProperties();
- for (String key : names)
- {
- properties.remove(key);
- }
-
- commitServerInfo(null);
- }
-
- // @Override
- // public CDOID getNextCDOID(LongIDStoreAccessor accessor, CDORevision revision)
- // {
- // ObjectContainer objectContainer = ((DB4OStoreAccessor)accessor).getObjectContainer();
- // ExtObjectContainer ext = objectContainer.ext();
- // ext.store(revision);
- //
- // long id = ext.getID(revision);
- // return CDOIDUtil.createLong(id);
- // }
-
- public ObjectContainer openClient()
- {
- return server.openClient();
- }
-
- @Override
- protected void doActivate() throws Exception
- {
- super.doActivate();
- initObjectServer();
- initServerInfo();
- setLastCommitTime(getServerInfo().getLastCommitTime());
- setLastObjectID(fetchLastObjectID());
- LifecycleUtil.activate(durableLockingManager);
- }
-
- private long fetchLastObjectID()
- {
- ObjectContainer container = openClient();
-
- try
- {
- Query query = container.query();
- query.constrain(DB4ORevision.class);
- query.descend("id").orderDescending();
- ObjectSet<?> results = query.execute();
- int size = results.size();
- if (size > 0)
- {
- DB4ORevision rev = (DB4ORevision)results.next();
- return rev.getID();
- }
- return 0;
- }
- finally
- {
- closeClient(container);
- }
- }
-
- protected void initObjectServer()
- {
- Configuration configuration = serverConfiguration;
- if (configuration == null)
- {
- configuration = createServerConfiguration();
- }
- {
- File file = new File(getStoreLocation());
- if (!file.exists())
- {
- try
- {
- file.createNewFile();
- }
- catch (IOException ex)
- {
- throw new RuntimeException(ex);
- }
- }
- }
-
- server = Db4o.openServer(configuration, getStoreLocation(), getPort());
- }
-
- protected void tearDownObjectServer()
- {
- server.close();
- server = null;
- }
-
- private ServerInfo getServerInfo()
- {
- if (serverInfo == null)
- {
- initServerInfo();
- }
-
- return serverInfo;
- }
-
- private void initServerInfo()
- {
- ObjectContainer container = openClient();
-
- try
- {
- serverInfo = getServerInfoFromDatabase(container);
-
- if (serverInfo == null)
- {
- serverInfo = new ServerInfo();
- serverInfo.setFirstTime(true);
- serverInfo.setCreationTime(System.currentTimeMillis());
- commitServerInfo(container);
- }
- else
- {
- if (serverInfo.isFirstTime())
- {
- serverInfo.setFirstTime(false);
- commitServerInfo(container);
- }
- }
- }
- finally
- {
- closeClient(container);
- }
- }
-
- private ServerInfo getServerInfoFromDatabase(ObjectContainer container)
- {
- ObjectSet<ServerInfo> infos = container.query(ServerInfo.class);
- if (infos.size() > 1)
- {
- throw new IllegalStateException("ServeInfo is stored in container more than once");
- }
-
- if (infos.size() == 1)
- {
- return infos.get(0);
- }
-
- return null;
- }
-
- protected void closeClient(ObjectContainer container)
- {
- container.close();
- }
-
- private void commitServerInfo(ObjectContainer container)
- {
- ObjectContainer usedContainer = container != null ? container : openClient();
-
- try
- {
- ServerInfo storedInfo = getServerInfoFromDatabase(usedContainer);
- if (storedInfo != null && storedInfo != serverInfo)
- {
- storedInfo.setCreationTime(serverInfo.getCreationTime());
- storedInfo.setFirstTime(serverInfo.isFirstTime());
- storedInfo.setLastCommitTime(serverInfo.getLastCommitTime());
- storedInfo.setProperties(serverInfo.getProperties());
- serverInfo = storedInfo;
- }
-
- usedContainer.store(serverInfo);
- usedContainer.commit();
- }
- finally
- {
- if (usedContainer != container)
- {
- closeClient(usedContainer);
- }
- }
- }
-
- @Override
- protected void doDeactivate() throws Exception
- {
- ObjectContainer container = openClient();
-
- try
- {
- getServerInfo().setLastCommitTime(getLastCommitTime());
- commitServerInfo(container);
- }
- finally
- {
- closeClient(container);
- }
-
- LifecycleUtil.deactivate(durableLockingManager);
- tearDownObjectServer();
-
- super.doDeactivate();
- }
-
- protected Configuration createServerConfiguration()
- {
- Configuration config = Db4o.newConfiguration();
- config.reflectWith(new JdkReflector(getClass().getClassLoader()));
-
- config.objectClass(DB4ORevision.class).objectField("id").indexed(true);
- config.add(new UniqueFieldValueConstraint(DB4ORevision.class, "id"));
-
- config.objectClass(DB4OPackageUnit.class).objectField("id").indexed(true);
- config.add(new UniqueFieldValueConstraint(DB4OPackageUnit.class, "id"));
-
- config.objectClass(DB4OIdentifiableObject.class).objectField("id").indexed(true);
- config.add(new UniqueFieldValueConstraint(DB4OIdentifiableObject.class, "id"));
-
- config.objectClass(DB4OCommitInfo.class).objectField("timeStamp").indexed(true);
-
- config.objectClass(DB4OLockArea.class).objectField("id").indexed(true);
- config.add(new UniqueFieldValueConstraint(DB4OLockArea.class, "id"));
- config.objectClass(DB4OLockArea.class).cascadeOnUpdate(true);
- config.objectClass(DB4OLockArea.class).cascadeOnDelete(true);
-
- return config;
- }
-
- @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;
- }
-
- public static DB4ORevision getRevision(ObjectContainer container, CDOID id)
- {
- Query query = container.query();
- query.constrain(DB4ORevision.class);
- query.descend(ID_ATTRIBUTE).constrain(CDOIDUtil.getLong(id));
-
- ObjectSet<?> revisions = query.execute();
- if (revisions.isEmpty())
- {
- return null;
- }
-
- return (DB4ORevision)revisions.get(0);
- }
-
- public static <T> List<T> getElementsOfType(ObjectContainer container, Class<T> clazz)
- {
- ObjectSet<T> elements = container.query(clazz);
- return elements;
- }
-
- public static IDB4OIdentifiableObject getIdentifiableObject(ObjectContainer container, String id)
- {
- Query query = container.query();
- query.constrain(IDB4OIdentifiableObject.class);
- query.descend(ID_ATTRIBUTE).constrain(id);
-
- ObjectSet<?> revisions = query.execute();
- if (revisions.isEmpty())
- {
- return null;
- }
-
- return (IDB4OIdentifiableObject)revisions.get(0);
- }
-
- public static void removeRevision(ObjectContainer container, CDOID id)
- {
- DB4ORevision revision = getRevision(container, id);
- if (revision != null)
- {
- container.delete(revision);
- }
- }
-
- /**
- * Carries {@link IStore}-related information.
- *
- * @author Victor Roldan Betancort
- */
- private static final class ServerInfo
- {
- private boolean isFirstTime;
-
- private long creationTime;
-
- private long lastCommitTime;
-
- private Map<String, String> properties = new HashMap<String, String>();
-
- 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<String, String> properties)
- {
- this.properties = properties;
- }
-
- public Map<String, String> getProperties()
- {
- return properties;
- }
-
- public long getLastCommitTime()
- {
- return lastCommitTime;
- }
-
- public void setLastCommitTime(long lastCommitTime)
- {
- this.lastCommitTime = lastCommitTime;
- }
- }
-}
+/*
+ * Copyright (c) 2004 - 2012 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 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.IDB4OIdentifiableObject;
+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 org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+
+import com.db4o.Db4o;
+import com.db4o.ObjectContainer;
+import com.db4o.ObjectServer;
+import com.db4o.ObjectSet;
+import com.db4o.config.Configuration;
+import com.db4o.constraints.UniqueFieldValueConstraint;
+import com.db4o.query.Query;
+import com.db4o.reflect.jdk.JdkReflector;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class DB4OStore extends LongIDStore implements IDB4OStore
+{
+ private static final String ID_ATTRIBUTE = "id";
+
+ private transient String storeLocation;
+
+ private transient int port;
+
+ private transient ObjectServer server;
+
+ private transient Configuration serverConfiguration;
+
+ private ServerInfo serverInfo;
+
+ private DB4ODurableLockingManager durableLockingManager = new DB4ODurableLockingManager();
+
+ @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));
+
+ // setRevisionTemporality(RevisionTemporality.AUDITING);
+ // setRevisionParallelism(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 void setCreationTime(long creationTime)
+ {
+ getServerInfo().setCreationTime(creationTime);
+ }
+
+ public boolean isFirstStart()
+ {
+ return getServerInfo().isFirstTime();
+ }
+
+ public DB4ODurableLockingManager getDurableLockingManager()
+ {
+ return durableLockingManager;
+ }
+
+ public Map<String, String> getPersistentProperties(Set<String> names)
+ {
+ if (names == null || names.isEmpty())
+ {
+ return new HashMap<String, String>(getServerInfo().getProperties());
+ }
+
+ Map<String, String> result = new HashMap<String, String>();
+ for (String key : names)
+ {
+ String value = getServerInfo().getProperties().get(key);
+ if (value != null)
+ {
+ result.put(key, value);
+ }
+ }
+
+ return result;
+ }
+
+ public void setPersistentProperties(Map<String, String> properties)
+ {
+ ServerInfo serverInfo = getServerInfo();
+ serverInfo.getProperties().putAll(properties);
+ commitServerInfo(null);
+ }
+
+ public void removePersistentProperties(Set<String> names)
+ {
+ ServerInfo serverInfo = getServerInfo();
+ Map<String, String> properties = serverInfo.getProperties();
+ for (String key : names)
+ {
+ properties.remove(key);
+ }
+
+ commitServerInfo(null);
+ }
+
+ // @Override
+ // public CDOID getNextCDOID(LongIDStoreAccessor accessor, CDORevision revision)
+ // {
+ // ObjectContainer objectContainer = ((DB4OStoreAccessor)accessor).getObjectContainer();
+ // ExtObjectContainer ext = objectContainer.ext();
+ // ext.store(revision);
+ //
+ // long id = ext.getID(revision);
+ // return CDOIDUtil.createLong(id);
+ // }
+
+ public ObjectContainer openClient()
+ {
+ return server.openClient();
+ }
+
+ @Override
+ protected void doActivate() throws Exception
+ {
+ super.doActivate();
+ initObjectServer();
+ initServerInfo();
+ setLastCommitTime(getServerInfo().getLastCommitTime());
+ setLastObjectID(fetchLastObjectID());
+ LifecycleUtil.activate(durableLockingManager);
+ }
+
+ private long fetchLastObjectID()
+ {
+ ObjectContainer container = openClient();
+
+ try
+ {
+ Query query = container.query();
+ query.constrain(DB4ORevision.class);
+ query.descend("id").orderDescending();
+ ObjectSet<?> results = query.execute();
+ int size = results.size();
+ if (size > 0)
+ {
+ DB4ORevision rev = (DB4ORevision)results.next();
+ return rev.getID();
+ }
+ return 0;
+ }
+ finally
+ {
+ closeClient(container);
+ }
+ }
+
+ protected void initObjectServer()
+ {
+ Configuration configuration = serverConfiguration;
+ if (configuration == null)
+ {
+ configuration = createServerConfiguration();
+ }
+ {
+ File file = new File(getStoreLocation());
+ if (!file.exists())
+ {
+ try
+ {
+ file.createNewFile();
+ }
+ catch (IOException ex)
+ {
+ throw new RuntimeException(ex);
+ }
+ }
+ }
+
+ server = Db4o.openServer(configuration, getStoreLocation(), getPort());
+ }
+
+ protected void tearDownObjectServer()
+ {
+ server.close();
+ server = null;
+ }
+
+ private ServerInfo getServerInfo()
+ {
+ if (serverInfo == null)
+ {
+ initServerInfo();
+ }
+
+ return serverInfo;
+ }
+
+ private void initServerInfo()
+ {
+ ObjectContainer container = openClient();
+
+ try
+ {
+ serverInfo = getServerInfoFromDatabase(container);
+
+ if (serverInfo == null)
+ {
+ serverInfo = new ServerInfo();
+ serverInfo.setFirstTime(true);
+ serverInfo.setCreationTime(System.currentTimeMillis());
+ commitServerInfo(container);
+ }
+ else
+ {
+ if (serverInfo.isFirstTime())
+ {
+ serverInfo.setFirstTime(false);
+ commitServerInfo(container);
+ }
+ }
+ }
+ finally
+ {
+ closeClient(container);
+ }
+ }
+
+ private ServerInfo getServerInfoFromDatabase(ObjectContainer container)
+ {
+ ObjectSet<ServerInfo> infos = container.query(ServerInfo.class);
+ if (infos.size() > 1)
+ {
+ throw new IllegalStateException("ServeInfo is stored in container more than once");
+ }
+
+ if (infos.size() == 1)
+ {
+ return infos.get(0);
+ }
+
+ return null;
+ }
+
+ protected void closeClient(ObjectContainer container)
+ {
+ container.close();
+ }
+
+ private void commitServerInfo(ObjectContainer container)
+ {
+ ObjectContainer usedContainer = container != null ? container : openClient();
+
+ try
+ {
+ ServerInfo storedInfo = getServerInfoFromDatabase(usedContainer);
+ if (storedInfo != null && storedInfo != serverInfo)
+ {
+ storedInfo.setCreationTime(serverInfo.getCreationTime());
+ storedInfo.setFirstTime(serverInfo.isFirstTime());
+ storedInfo.setLastCommitTime(serverInfo.getLastCommitTime());
+ storedInfo.setProperties(serverInfo.getProperties());
+ serverInfo = storedInfo;
+ }
+
+ usedContainer.store(serverInfo);
+ usedContainer.commit();
+ }
+ finally
+ {
+ if (usedContainer != container)
+ {
+ closeClient(usedContainer);
+ }
+ }
+ }
+
+ @Override
+ protected void doDeactivate() throws Exception
+ {
+ ObjectContainer container = openClient();
+
+ try
+ {
+ getServerInfo().setLastCommitTime(getLastCommitTime());
+ commitServerInfo(container);
+ }
+ finally
+ {
+ closeClient(container);
+ }
+
+ LifecycleUtil.deactivate(durableLockingManager);
+ tearDownObjectServer();
+
+ super.doDeactivate();
+ }
+
+ protected Configuration createServerConfiguration()
+ {
+ Configuration config = Db4o.newConfiguration();
+ config.reflectWith(new JdkReflector(getClass().getClassLoader()));
+
+ config.objectClass(DB4ORevision.class).objectField("id").indexed(true);
+ config.add(new UniqueFieldValueConstraint(DB4ORevision.class, "id"));
+
+ config.objectClass(DB4OPackageUnit.class).objectField("id").indexed(true);
+ config.add(new UniqueFieldValueConstraint(DB4OPackageUnit.class, "id"));
+
+ config.objectClass(DB4OIdentifiableObject.class).objectField("id").indexed(true);
+ config.add(new UniqueFieldValueConstraint(DB4OIdentifiableObject.class, "id"));
+
+ config.objectClass(DB4OCommitInfo.class).objectField("timeStamp").indexed(true);
+
+ config.objectClass(DB4OLockArea.class).objectField("id").indexed(true);
+ config.add(new UniqueFieldValueConstraint(DB4OLockArea.class, "id"));
+ config.objectClass(DB4OLockArea.class).cascadeOnUpdate(true);
+ config.objectClass(DB4OLockArea.class).cascadeOnDelete(true);
+
+ return config;
+ }
+
+ @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;
+ }
+
+ public static DB4ORevision getRevision(ObjectContainer container, CDOID id)
+ {
+ Query query = container.query();
+ query.constrain(DB4ORevision.class);
+ query.descend(ID_ATTRIBUTE).constrain(CDOIDUtil.getLong(id));
+
+ ObjectSet<?> revisions = query.execute();
+ if (revisions.isEmpty())
+ {
+ return null;
+ }
+
+ return (DB4ORevision)revisions.get(0);
+ }
+
+ public static <T> List<T> getElementsOfType(ObjectContainer container, Class<T> clazz)
+ {
+ ObjectSet<T> elements = container.query(clazz);
+ return elements;
+ }
+
+ public static IDB4OIdentifiableObject getIdentifiableObject(ObjectContainer container, String id)
+ {
+ Query query = container.query();
+ query.constrain(IDB4OIdentifiableObject.class);
+ query.descend(ID_ATTRIBUTE).constrain(id);
+
+ ObjectSet<?> revisions = query.execute();
+ if (revisions.isEmpty())
+ {
+ return null;
+ }
+
+ return (IDB4OIdentifiableObject)revisions.get(0);
+ }
+
+ public static void removeRevision(ObjectContainer container, CDOID id)
+ {
+ DB4ORevision revision = getRevision(container, id);
+ if (revision != null)
+ {
+ container.delete(revision);
+ }
+ }
+
+ /**
+ * Carries {@link IStore}-related information.
+ *
+ * @author Victor Roldan Betancort
+ */
+ private static final class ServerInfo
+ {
+ private boolean isFirstTime;
+
+ private long creationTime;
+
+ private long lastCommitTime;
+
+ private Map<String, String> properties = new HashMap<String, String>();
+
+ 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<String, String> properties)
+ {
+ this.properties = properties;
+ }
+
+ public Map<String, String> getProperties()
+ {
+ return properties;
+ }
+
+ public long getLastCommitTime()
+ {
+ return lastCommitTime;
+ }
+
+ public void setLastCommitTime(long lastCommitTime)
+ {
+ this.lastCommitTime = lastCommitTime;
+ }
+ }
+}
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
index 7181dd7650..6f6f6dd981 100644
--- 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
@@ -1,58 +1,58 @@
-/*
- * Copyright (c) 2004 - 2012 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.eclipse.emf.cdo.spi.server.RepositoryConfigurator;
-
-import org.w3c.dom.Element;
-
-import java.util.Map;
-
-/**
- * @author Victor Roldan Betancort
- */
-public class DB4OStoreFactory implements IStoreFactory
-{
- private static final String PROPERTY_PORT = "port";
-
- private static final String PROPERTY_PATH = "path";
-
- public DB4OStoreFactory()
- {
- }
-
- public String getStoreType()
- {
- return IDB4OStore.TYPE;
- }
-
- public IStore createStore(String repositoryName, Map<String, String> repositoryProperties, Element storeConfig)
- {
- try
- {
- Map<String, String> properties = RepositoryConfigurator.getProperties(storeConfig, 1);
- String dataFilePath = properties.get(PROPERTY_PATH);
- String portString = properties.get(PROPERTY_PORT);
- int port = portString != null ? Integer.parseInt(portString) : 1677;
- return new DB4OStore(dataFilePath, port);
- }
- catch (Exception ex)
- {
- OM.LOG.error(ex);
- }
-
- return null;
- }
-}
+/*
+ * Copyright (c) 2004 - 2012 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.eclipse.emf.cdo.spi.server.RepositoryConfigurator;
+
+import org.w3c.dom.Element;
+
+import java.util.Map;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class DB4OStoreFactory implements IStoreFactory
+{
+ private static final String PROPERTY_PORT = "port";
+
+ private static final String PROPERTY_PATH = "path";
+
+ public DB4OStoreFactory()
+ {
+ }
+
+ public String getStoreType()
+ {
+ return IDB4OStore.TYPE;
+ }
+
+ public IStore createStore(String repositoryName, Map<String, String> repositoryProperties, Element storeConfig)
+ {
+ try
+ {
+ Map<String, String> properties = RepositoryConfigurator.getProperties(storeConfig, 1);
+ String dataFilePath = properties.get(PROPERTY_PATH);
+ String portString = properties.get(PROPERTY_PORT);
+ int port = portString != null ? Integer.parseInt(portString) : 1677;
+ return new DB4OStore(dataFilePath, port);
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ }
+
+ return null;
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OWrappedValue.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OWrappedValue.java
index f847b202fd..32d2c855c7 100644
--- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OWrappedValue.java
+++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OWrappedValue.java
@@ -1,36 +1,36 @@
-/*
- * Copyright (c) 2004 - 2012 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;
-
-/**
- * @author Victor Roldan Betancort
- */
-public class DB4OWrappedValue<TYPE> extends DB4OIdentifiableObject
-{
- private TYPE value;
-
- public DB4OWrappedValue(String id, TYPE value)
- {
- setId(id);
- setValue(value);
- }
-
- public TYPE getValue()
- {
- return value;
- }
-
- private void setValue(TYPE value)
- {
- this.value = value;
- }
-
-}
+/*
+ * Copyright (c) 2004 - 2012 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;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class DB4OWrappedValue<TYPE> extends DB4OIdentifiableObject
+{
+ private TYPE value;
+
+ public DB4OWrappedValue(String id, TYPE value)
+ {
+ setId(id);
+ setValue(value);
+ }
+
+ public TYPE getValue()
+ {
+ return value;
+ }
+
+ private void setValue(TYPE value)
+ {
+ this.value = value;
+ }
+
+}
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
index bbce2e254d..edfdca447d 100644
--- 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
@@ -1,45 +1,45 @@
-/*
- * Copyright (c) 2004 - 2012 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 <em>Operations & Maintenance</em> 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);
- }
- }
-}
+/*
+ * Copyright (c) 2004 - 2012 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 <em>Operations & Maintenance</em> 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);
+ }
+ }
+}

Back to the top