All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nl.renarj.jasdb.api.DBConnectorSession Maven / Gradle / Ivy

The newest version!
/*
 * The JASDB software and code is Copyright protected 2011 and owned by Renze de Vries
 * 
 * All the code and design principals in the codebase are also Copyright 2011 
 * protected and owned Renze de Vries. Any unauthorized usage of the code or the 
 * design and principals as in this code is prohibited.
 */
package nl.renarj.jasdb.api;

import nl.renarj.jasdb.api.context.Credentials;
import nl.renarj.jasdb.api.metadata.Bag;
import nl.renarj.jasdb.api.metadata.IndexDefinition;
import nl.renarj.jasdb.api.metadata.Instance;
import nl.renarj.jasdb.api.model.EntityBag;
import nl.renarj.jasdb.core.exceptions.JasDBStorageException;
import nl.renarj.jasdb.core.locator.NodeInformation;
import nl.renarj.jasdb.remote.BagConnector;
import nl.renarj.jasdb.remote.InstanceConnector;
import nl.renarj.jasdb.remote.RemoteConnectorFactory;
import nl.renarj.jasdb.remote.RemotingContext;
import nl.renarj.jasdb.remote.exceptions.RemoteException;
import nl.renarj.jasdb.remote.model.RemoteBag;
import nl.renarj.jasdb.service.metadata.BagMeta;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * @author Renze de Vries
 */
public abstract class DBConnectorSession implements DBSession {
    private NodeInformation nodeInformation;
    private String instance;

    public DBConnectorSession(String instance, NodeInformation nodeInformation) throws JasDBStorageException {
        this.nodeInformation = nodeInformation;
        authenticate(null);
        validateInstance(instance);
    }

    public DBConnectorSession(String instance, Credentials credentials, NodeInformation nodeInformation) throws JasDBStorageException {
        this.nodeInformation = nodeInformation;
        authenticate(credentials);
        validateInstance(instance);
    }

    private void validateInstance(String instance) throws JasDBStorageException {
        try {
            InstanceConnector instanceConnector = RemoteConnectorFactory.createConnector(nodeInformation, InstanceConnector.class);
            if(instanceConnector.getInstance(getContext(), instance) != null) {
                this.instance = instance;
            } else {
                throw new JasDBStorageException("Instance with id: " + instance + " does not exist");
            }
        } catch(RemoteException e) {
            throw new JasDBStorageException("Unable to load instance", e);
        }
    }

    @Override
    public UserAdministration getUserAdministration() throws JasDBStorageException {
        return new RemoteUserAdministration(nodeInformation, getContext());
    }

    protected NodeInformation getNodeInformation() {
        return this.nodeInformation;
    }

    @Override
    public List getInstances() throws JasDBStorageException {
        InstanceConnector instanceConnector = RemoteConnectorFactory.createConnector(nodeInformation, InstanceConnector.class);
        return instanceConnector.getInstances(getContext());
    }

    @Override
    public Instance getInstance(String instanceId) throws JasDBStorageException {
        InstanceConnector instanceConnector = RemoteConnectorFactory.createConnector(nodeInformation, InstanceConnector.class);

        return instanceConnector.getInstance(getContext(), instanceId);
    }

    @Override
    public void addInstance(String instanceId, String path) throws JasDBStorageException {
        InstanceConnector instanceConnector = RemoteConnectorFactory.createConnector(nodeInformation, InstanceConnector.class);
        instanceConnector.addInstance(getContext(), instanceId, path);
    }

    @Override
    public void addAndSwitchInstance(String instanceId, String path) throws JasDBStorageException {
        InstanceConnector instanceConnector = RemoteConnectorFactory.createConnector(nodeInformation, InstanceConnector.class);
        instanceConnector.addInstance(getContext(), instanceId, path);

        instance = instanceId;
    }

    @Override
    public void switchInstance(String instanceId) throws JasDBStorageException {
        InstanceConnector instanceConnector = RemoteConnectorFactory.createConnector(nodeInformation, InstanceConnector.class);
        if(instanceConnector.getInstance(getContext(), instanceId) != null) {
            this.instance = instanceId;
        } else {
            throw new JasDBStorageException("Unable to retrieve instance: " + instanceId);
        }
    }

    @Override
    public Instance deleteInstance(String instanceId) throws JasDBStorageException {
        if(this.instance.equals(instanceId)) {
            throw new JasDBStorageException("Cannot delete active instance over remote connection, switch to another instance of default instance");
        }

        InstanceConnector instanceConnector = RemoteConnectorFactory.createConnector(nodeInformation, InstanceConnector.class);
        instanceConnector.removeInstance(getContext(), instanceId);

        return instanceConnector.getInstance(getContext(), instance);

    }

    @Override
    public String getInstanceId() throws JasDBStorageException {
        doInstanceCheck();
        return instance;
    }

    private void doInstanceCheck() throws JasDBStorageException {
        if(instance == null) {
            throw new JasDBStorageException("DB current session has no active instance bound");
        }
    }

    @Override
    public EntityBag createOrGetBag(String bagName) throws JasDBStorageException {
        doInstanceCheck();
        return createOrGetBag(instance, bagName);
    }

    @Override
    public EntityBag createOrGetBag(String instanceId, String bagName) throws JasDBStorageException {
        BagConnector connector = RemoteConnectorFactory.createConnector(nodeInformation, BagConnector.class);
        Bag meta = connector.getBag(getContext(), instanceId, bagName);
        if(meta == null) {
            meta = connector.createBag(getContext(), instanceId, new BagMeta(instanceId, bagName, new ArrayList()));
        }

        return new RemoteEntityBag(instanceId, getContext(), nodeInformation, meta);
    }

    @Override
    public EntityBag getBag(String bagName) throws JasDBStorageException {
        doInstanceCheck();
        return getBag(instance, bagName);
    }

    @Override
    public EntityBag getBag(String instanceId, String bagName) throws JasDBStorageException {
        BagConnector connector = RemoteConnectorFactory.createConnector(nodeInformation, BagConnector.class);
        Bag meta = connector.getBag(getContext(), instanceId, bagName);
        if(meta != null) {
            return new RemoteEntityBag(instanceId, getContext(), nodeInformation, meta);
        } else {
            return null;
        }
    }

    @Override
    public List getBags() throws JasDBStorageException {
        doInstanceCheck();
        return getBags(instance);
    }

    @Override
    public List getBags(String instanceId) throws JasDBStorageException {
        BagConnector connector = RemoteConnectorFactory.createConnector(nodeInformation, BagConnector.class);
        List bagMetas = connector.getBags(getContext(), instanceId);
        List remoteConnectedEntityBags = new LinkedList<>();
        for(RemoteBag bagMeta : bagMetas) {
            remoteConnectedEntityBags.add(new RemoteEntityBag(instanceId, getContext(), nodeInformation, bagMeta));
        }

        return remoteConnectedEntityBags;
    }

    @Override
    public void removeBag(String bagName) throws JasDBStorageException {
        doInstanceCheck();
        removeBag(instance, bagName);
    }

    @Override
    public void removeBag(String instanceId, String bagName) throws JasDBStorageException {
        BagConnector connector = RemoteConnectorFactory.createConnector(nodeInformation, BagConnector.class);
        connector.removeBag(getContext(), instanceId, bagName);
    }

    protected abstract RemotingContext getContext();

    protected abstract void authenticate(Credentials credentials) throws JasDBStorageException;

    @Override
    public void closeSession() throws JasDBStorageException {

    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy