/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package Sirius.server.localserver; import Sirius.server.Shutdown; import Sirius.server.localserver._class.ClassCache; import Sirius.server.localserver.history.HistoryServer; import Sirius.server.localserver.method.MethodCache; import Sirius.server.localserver.method.MethodMap; import Sirius.server.localserver.object.ObjectFactory; import Sirius.server.localserver.object.PersistenceManager; import Sirius.server.localserver.tree.AbstractTree; import Sirius.server.localserver.tree.NodeReferenceList; import Sirius.server.localserver.tree.VirtualTree; import Sirius.server.localserver.user.UserStore; import Sirius.server.middleware.types.DefaultMetaObject; import Sirius.server.middleware.types.MetaClass; import Sirius.server.middleware.types.MetaObject; import Sirius.server.middleware.types.Node; import Sirius.server.newuser.UserGroup; import Sirius.server.newuser.permission.PolicyHolder; import Sirius.server.property.ServerProperties; import Sirius.server.sql.DBConnection; import Sirius.server.sql.DBConnectionPool; import org.apache.log4j.Logger; import java.sql.SQLException; import java.util.List; /** * DOCUMENT ME! * * @version $Revision$, $Date$ */ public final class DBServer extends Shutdown implements java.io.Serializable { //~ Static fields/initializers --------------------------------------------- private static final transient Logger LOG = Logger.getLogger(DBServer.class); //~ Instance fields -------------------------------------------------------- // DefaultObject of the inner class for updates and inserts etc. of the meta data base private final PersistenceManager objectPersistence; /** The Navigational structure of a localserver. */ private final AbstractTree tree; /** Holds several connection to ths ls' db and other used dbs. */ private final transient DBConnectionPool connectionPool; /** Holds and delivers a localsservers objects. */ private final ObjectFactory objects; /** Holds and delivers a localsservers classes. */ private final ClassCache classes; /** Holds and delivers a localsservers methods. */ private final MethodCache methods; /** To check user rights. */ private final UserStore userstore; /** To check policies. */ private final PolicyHolder policyHolder; /** provides object history.* */ private final HistoryServer historyServer; /** Initial server-settings. */ private final ServerProperties properties; //~ Constructors ----------------------------------------------------------- /** * ---------------------------------------------------------------------------- * * @param properties DOCUMENT ME! * * @throws Throwable DOCUMENT ME! */ public DBServer(final ServerProperties properties) throws Throwable { this.properties = properties; if (LOG.isDebugEnabled()) { LOG.debug("Info :: DBServer instantiate connectionPool"); // NOI18N } connectionPool = new DBConnectionPool(properties); if (LOG.isDebugEnabled()) { LOG.debug("DBServer connectionPool instantiated :: Instantiate PolicyHolder "); // NOI18N } policyHolder = new PolicyHolder(connectionPool); if (LOG.isDebugEnabled()) { LOG.debug("DBServer PolicyHolder instantiated :: Instantiate ClassCache "); // NOI18N } // needs tob instaniated before the OcjectFactory classes = new ClassCache(connectionPool, properties, policyHolder); if (LOG.isDebugEnabled()) { LOG.debug("DBServer ClassCache instantiated :: Instantiate ObjectFactory "); // NOI18N } objects = new ObjectFactory(connectionPool, classes); if (LOG.isDebugEnabled()) { LOG.debug("DBServerObjectFactory instantiated :: Instantiate Tree "); // NOI18N } tree = new VirtualTree(connectionPool, properties, policyHolder, classes); if (LOG.isDebugEnabled()) { LOG.debug("DBServer Tree instantiated :: Instantiate methodCache "); // NOI18N } methods = new MethodCache(connectionPool, properties); if (LOG.isDebugEnabled()) { LOG.debug("DBServer MethodCache instantiated :: Instantiate UserService "); // NOI18N } userstore = new UserStore(connectionPool, properties); historyServer = new HistoryServer(this); objectPersistence = new PersistenceManager(this); } //~ Methods ---------------------------------------------------------------- /** * ---------------------------------------------------------------------------- * * @param classID DOCUMENT ME! * * @return DOCUMENT ME! */ public MetaClass getClass(final int classID) { return new MetaClass(classes.getClass(classID), properties.getServerName()); } /** * --------------------------------------------------------------------------- * * @return DOCUMENT ME! * * @throws Throwable DOCUMENT ME! */ public MetaClass[] getClasses() throws Throwable { final List tmpClasses = classes.getAllClasses(); final MetaClass[] middleWareClasses = new MetaClass[tmpClasses.size()]; for (int i = 0; i < tmpClasses.size(); i++) { middleWareClasses[i] = new MetaClass((Sirius.server.localserver._class.Class)tmpClasses.get(i), properties.getServerName()); } return middleWareClasses; } /** * --------------------------------------------------------------------------- * * @param ug DOCUMENT ME! * @param classID DOCUMENT ME! * * @return DOCUMENT ME! */ public MetaClass getClass(final UserGroup ug, final int classID) { final Sirius.server.localserver._class.Class c = classes.getClass(ug, classID); if (c != null) { return new MetaClass(c, properties.getServerName()); } else { return null; } } /** * DOCUMENT ME! * * @param ug DOCUMENT ME! * @param tableName DOCUMENT ME! * * @return DOCUMENT ME! * * @throws Throwable DOCUMENT ME! */ public MetaClass getClassByTableName(final UserGroup ug, final String tableName) throws Throwable { final Sirius.server.localserver._class.Class c = classes.getClassNyTableName(ug, tableName); if (c != null) { return new MetaClass(c, properties.getServerName()); } else { return null; } } /** * --------------------------------------------------------------------------- * * @param ug DOCUMENT ME! * * @return DOCUMENT ME! */ public MetaClass[] getClasses(final UserGroup ug) { final List tmpClasses = classes.getAllClasses(ug); MetaClass[] middleWareClasses = null; if (tmpClasses != null) { middleWareClasses = new MetaClass[tmpClasses.size()]; for (int i = 0; i < tmpClasses.size(); i++) { middleWareClasses[i] = new MetaClass((Sirius.server.localserver._class.Class)tmpClasses.get(i), properties.getServerName()); } } return middleWareClasses; } /** * --------------------------------------------------------------------------- * * @return DOCUMENT ME! */ public ClassCache getClassCache() { return classes; } /** * ---------------------------------------------------------------------------- public NodeReferenceList * getChildren(int nodeID,UserGroup ug) throws Throwable { return tree.getChildren(nodeID,ug); }. * * @param node DOCUMENT ME! * @param ug DOCUMENT ME! * * @return DOCUMENT ME! * * @throws Throwable DOCUMENT ME! */ public NodeReferenceList getChildren(final Node node, final UserGroup ug) throws Throwable { return tree.getChildren(node, ug); } /** * ----------------------------------------------------------------------------- public * Sirius.server.middleware.types.Node[] getParents(int nodeID,UserGroup ug) throws Throwable { return new * Sirius.server.middleware.types.NodeReferenceList(tree.getParents(nodeID,ug),this,ug).getNodes(); } * ------------------------------------------------------------------------- * * @param ug DOCUMENT ME! * * @return DOCUMENT ME! * * @throws Throwable DOCUMENT ME! */ public NodeReferenceList getTops(final UserGroup ug) throws Throwable { return new NodeReferenceList(tree.getTopNodes(ug)); } /** * ------------------------------------------------------------------------- * * @param ug DOCUMENT ME! * * @return DOCUMENT ME! * * @throws Throwable DOCUMENT ME! */ public NodeReferenceList getClassTreeNodes(final UserGroup ug) throws Throwable { return new NodeReferenceList(tree.getClassTreeNodes(ug)); } /** * ---------------------------------------------------------------------------- * * @param objectID DOCUMENT ME! * @param ug DOCUMENT ME! * * @return DOCUMENT ME! * * @throws SQLException Throwable DOCUMENT ME! */ public MetaObject getObject(final String objectID, final UserGroup ug) throws SQLException { final int oId; final int cId; final String[] ids = objectID.split("@"); // NOI18N oId = new Integer(ids[0]).intValue(); cId = new Integer(ids[1]).intValue(); // An dieser Stelle wird die Referenz neu gesetzt. Deshalb funzt getParent() der ObjectAttributes nicht richtig // zusaetzlich erzeugt auch die filter Methode eine neue Adresse final Sirius.server.localserver.object.Object o = objects.getObject(oId, cId, ug); if (o != null) { final MetaObject mo = new DefaultMetaObject(o.filter(ug), properties.getServerName()); // mo.setMetaClass(new MetaClass(classes.getClass(cId), properties.getServerName())); mo.setAllClasses(classes.getClassHashMap()); return mo; } else { return null; } } /** * DOCUMENT ME! * * @param objectIDs DOCUMENT ME! * @param ug DOCUMENT ME! * * @return DOCUMENT ME! * * @throws Throwable DOCUMENT ME! */ public MetaObject[] getObjects(final String[] objectIDs, final UserGroup ug) throws Throwable { final MetaObject[] obs = new MetaObject[objectIDs.length]; for (int i = 0; i < objectIDs.length; i++) { obs[i] = getObject(objectIDs[i], ug); } return obs; } /** * //bugfix public Node getNode(Node node, UserGroup ug) throws Throwable { if(node instanceof * Sirius.server.localserver.tree.node.ObjectNode) { Sirius.server.localserver.tree.node.ObjectNode newNode = * (Sirius.server.localserver.tree.node.ObjectNode)node; return new MetaObjectNode( * newNode,properties.getServerName()); } else if (node instanceof Sirius.server.localserver.tree.node.ClassNode) * return new MetaClassNode((Sirius.server.localserver.tree.node.ClassNode)node,properties.getServerName()); return * new MetaNode(node,properties.getServerName()); } * ----------------------------------------------------------------- * * @param ids DOCUMENT ME! * @param ug DOCUMENT ME! * * @return DOCUMENT ME! * * @throws Throwable DOCUMENT ME! */ public Sirius.server.middleware.types.Node[] getNodes(final int[] ids, final UserGroup ug) throws Throwable { final Sirius.server.middleware.types.Node[] n = new Sirius.server.middleware.types.Node[ids.length]; for (int i = 0; i < ids.length; i++) { n[i] = tree.getNode(ids[i], ug); } return n; } /** * public Sirius.server.localserver.tree.NodeReferenceList getObjectNodes(String[] objectIDs,UserGroup ug) throws * Throwable { //estimated 2 Nodes per object in average ! java.util.ArrayList<Node> v = new * java.util.ArrayList<Node>(objectIDs.length * 2); for(int i =0;i< objectIDs.length;i++) { * v.addAll(tree.getObjectNodes(objectIDs[i],ug)); } return new Sirius.server.localserver.tree.NodeReferenceList(v); * } ---------------------------------------------------------------- * * @return DOCUMENT ME! * * @throws Throwable DOCUMENT ME! */ public AbstractTree getTree() throws Throwable { return tree; } /** * ------------------------------------------------------- * * @return DOCUMENT ME! */ public DBConnection getActiveDBConnection() { return connectionPool.getDBConnection(); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public DBConnectionPool getConnectionPool() { return connectionPool; } /** * public final Connection getTranslConnection(){return * connectionPool.getDBConnection("transl").getDBConnection();}. * * @return DOCUMENT ME! */ public ServerProperties getSystemProperties() { return properties; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public MethodMap getMethods() { return methods.getMethods(); } /** * DOCUMENT ME! * * @param ug DOCUMENT ME! * * @return DOCUMENT ME! * * @throws Throwable DOCUMENT ME! */ public MethodMap getMethods(final UserGroup ug) throws Throwable { return methods.getMethods(ug); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public UserStore getUserStore() { return userstore; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public ObjectFactory getObjectFactory() { return objects; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public PersistenceManager getObjectPersitenceManager() { return objectPersistence; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public ServerProperties getProperties() { return properties; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public HistoryServer getHistoryServer() { return historyServer; } }