blob: 745676dcd8db02707a807391b071e7c9b462b1ab [file] [log] [blame]
/*
* Copyright (c) 2010-2012, 2015 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:
* Ibrahim Sallam - initial API and implementation
*/
package org.eclipse.emf.cdo.server.internal.objectivity.db;
import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
import org.eclipse.net4j.util.om.trace.ContextTracer;
import com.objy.as.app.Class_Object;
import com.objy.db.ObjyRuntimeException;
import com.objy.db.app.Session;
import com.objy.db.app.ooContObj;
import com.objy.db.app.ooDBObj;
import com.objy.db.app.ooId;
import com.objy.db.app.ooObj;
/**
* @author Ibrahim Sallam
*/
public class ObjyScope
{
private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyScope.class);
private ooContObj contObj = null;
private ooDBObj dbObj = null;
private String dbName;
private String contName;
/**
* Static function used for initialisation of the store.
*/
public static void insureScopeExist(ObjySession objySession, String dbName, String contName)
{
ooDBObj db;
ooContObj cont;
try
{
if (!objySession.getFD().hasDB(dbName))
{
db = Session.getCurrent().getFD().newDB(dbName);
}
else
{
db = Session.getCurrent().getFD().lookupDB(dbName);
}
if (db.hasContainer(contName))
{
cont = db.lookupContainer(contName);
}
else
{
cont = new ooContObj();
db.addContainer(cont, 0, contName, 0, 0);
}
}
catch (ObjyRuntimeException ex)
{
ex.printStackTrace();
}
}
public ObjyScope(String dbName, String contName)
{
if (TRACER_DEBUG.isEnabled())
{
TRACER_DEBUG.trace("ObjyScope - DB: " + dbName + " - CT: " + contName);
}
this.dbName = dbName;
this.contName = contName;
init();
}
// optimized version that takes an ooDBObj.
public ObjyScope(ooDBObj dbObj, String contName)
{
dbName = dbObj.getName();
this.contName = contName;
this.dbObj = dbObj;
if (TRACER_DEBUG.isEnabled())
{
TRACER_DEBUG.trace("ObjyScope - DB: " + dbObj.getName() + " - CT: " + contName);
}
init();
}
public ooId getScopeContOid()
{
return getContainerObj().getOid();
}
public ooId getScopeDbOid()
{
return getDatabaseObj().getOid();
}
private void init()
{
getContainerObj();
}
// /**
// * TODO - verify need.
// */
// private ooContObj getContainer(ooId id)
// {
// String contID = "#" + id.getDB() + "-" + id.getOC() + "-1-1";
//
// return (ooContObj)Session.getCurrent().getFD().objectFrom(contID);
// }
public ooContObj getContainerObj()
{
if (contObj == null)
{
ooDBObj db = getDatabaseObj();
if (db.hasContainer(contName))
{
contObj = db.lookupContainer(contName);
}
else
{
contObj = createNewContainer(contName);
}
}
return contObj;
}
/**
* Need this when scanning a scope.
*/
public ooDBObj getDatabaseObj()
{
if (dbObj == null)
{
if (!Session.getCurrent().getFD().hasDB(dbName))
{
dbObj = Session.getCurrent().getFD().newDB(dbName);
// System.out.println("OBJY: Creating new DB ID: " + dbObj.getOid().getStoreString() +
// " - name:" + dbObj.getName());
}
else
{
dbObj = Session.getCurrent().getFD().lookupDB(dbName);
}
// System.out.println("OBJY: Working with DB ID: " + dbObj.getOid().getStoreString() +
// " - name:" + dbObj.getName());
}
return dbObj;
}
// /**
// * TODO - verify need.
// */
// private ooContObj createNewContainer()
// {
// return createNewContainer(null);
// }
/**
* TODO - verify need.
*
* @return
*/
private ooContObj createNewContainer(String name)
{
ooDBObj db = getDatabaseObj();
ooContObj cont = new ooContObj();
db.addContainer(cont, 0, name, 0, 0);
return cont;
}
public String getDbName()
{
return dbName;
}
/**
* This function will throw an exception if the lookupObj() fails to find the named object.
*/
public ObjyObject lookupObjyObject(String nameObject)
{
ObjyObject objyObject = null;
ooId oid = lookupObjectOid(nameObject);
objyObject = new ObjyObject(Class_Object.class_object_from_oid(oid));
return objyObject;
}
public ooId lookupObjectOid(String nameObject)
{
ooObj anObj = null;
anObj = (ooObj)getContainerObj().lookupObj(nameObject);
return anObj.getOid();
}
public ooObj lookupObject(String nameObject)
{
ooObj anObj = null;
anObj = (ooObj)getContainerObj().lookupObj(nameObject);
return anObj;
}
public void nameObj(String objName, ObjyObject objyObject)
{
ooId oid = objyObject.ooId();
nameObj(objName, oid);
}
public void nameObj(String objName, ooId oid)
{
ooObj object = ooObj.create_ooObj(oid);
nameObj(objName, object);
}
public void nameObj(String objName, ooObj obj)
{
// if (!obj.isPersistent())
// {
// getContainerObj().cluster(obj);
// }
getContainerObj().nameObj(obj, objName);
}
}