/* * 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); } }