Search in sources :

Example 1 with Database

use of org.sirix.api.Database in project sirix by sirixdb.

the class DatabaseRepresentation method getLastRevision.

/**
 * This method reads the existing database, and offers the last revision id of
 * the database
 *
 * @param resourceName
 *          The name of the existing database.
 * @return The {@link OutputStream} containing the result
 * @throws WebApplicationException
 *           The Exception occurred.
 * @throws SirixException
 */
public long getLastRevision(final String resourceName) throws JaxRxException, SirixException {
    long lastRevision;
    if (WorkerHelper.checkExistingResource(mStoragePath, resourceName)) {
        Database database = Databases.openDatabase(mStoragePath);
        NodeReadTrx rtx = null;
        Session session = null;
        try {
            session = database.getSession(new SessionConfiguration.Builder(resourceName).build());
            lastRevision = session.getMostRecentRevisionNumber();
        } catch (final Exception globExcep) {
            throw new JaxRxException(globExcep);
        } finally {
            WorkerHelper.closeRTX(rtx, session, database);
        }
    } else {
        throw new JaxRxException(404, "Resource not found");
    }
    return lastRevision;
}
Also used : NodeReadTrx(org.sirix.api.NodeReadTrx) Database(org.sirix.api.Database) SessionConfiguration(org.sirix.access.conf.SessionConfiguration) JaxRxException(org.jaxrx.core.JaxRxException) SirixException(org.sirix.exception.SirixException) IOException(java.io.IOException) WebApplicationException(javax.ws.rs.WebApplicationException) Session(org.sirix.api.Session) JaxRxException(org.jaxrx.core.JaxRxException)

Example 2 with Database

use of org.sirix.api.Database in project sirix by sirixdb.

the class DatabaseRepresentation method shred.

/**
 * This method is responsible to save the XML file, which is in an
 * {@link InputStream}, as a sirix object.
 *
 * @param xmlInput
 *          XML file wrapped in an {@link InputStream}
 * @param resource
 *          name of the resource
 * @return {@code true} if shredding process has been successful,
 *         {@code false} otherwise.
 * @throws SirixException
 *           if any sirix related exception occurs
 */
public final boolean shred(final InputStream xmlInput, final String resource) throws SirixException {
    boolean allOk = false;
    NodeWriteTrx wtx = null;
    Database database = null;
    Session session = null;
    boolean abort = false;
    try {
        final DatabaseConfiguration dbConf = new DatabaseConfiguration(mStoragePath);
        Databases.createDatabase(dbConf);
        database = Databases.openDatabase(dbConf.getFile());
        // Shredding the database to the file as XML
        final ResourceConfiguration resConf = new ResourceConfiguration.Builder(resource, dbConf).revisionsToRestore(1).build();
        if (database.createResource(resConf)) {
            session = database.getSession(new SessionConfiguration.Builder(resource).build());
            wtx = session.beginNodeWriteTrx();
            final XMLShredder shredder = new XMLShredder.Builder(wtx, RESTXMLShredder.createReader(xmlInput), Insert.ASFIRSTCHILD).commitAfterwards().build();
            shredder.call();
            allOk = true;
        }
    } catch (final Exception exce) {
        abort = true;
        throw new JaxRxException(exce);
    } finally {
        WorkerHelper.closeWTX(abort, wtx, session, database);
    }
    return allOk;
}
Also used : DatabaseConfiguration(org.sirix.access.conf.DatabaseConfiguration) XMLSerializerBuilder(org.sirix.service.xml.serialize.XMLSerializer.XMLSerializerBuilder) NodeWriteTrx(org.sirix.api.NodeWriteTrx) Database(org.sirix.api.Database) XMLShredder(org.sirix.service.xml.shredder.XMLShredder) RESTXMLShredder(org.sirix.service.jaxrx.util.RESTXMLShredder) SessionConfiguration(org.sirix.access.conf.SessionConfiguration) JaxRxException(org.jaxrx.core.JaxRxException) SirixException(org.sirix.exception.SirixException) IOException(java.io.IOException) WebApplicationException(javax.ws.rs.WebApplicationException) Session(org.sirix.api.Session) ResourceConfiguration(org.sirix.access.conf.ResourceConfiguration) JaxRxException(org.jaxrx.core.JaxRxException)

Example 3 with Database

use of org.sirix.api.Database in project sirix by sirixdb.

the class DatabaseRepresentation method serializIt.

/**
 * The XML serializer to a given tnk file.
 *
 * @param resource
 *          The resource that has to be serialized.
 * @param revision
 *          The revision of the document.
 * @param output
 *          The output stream where we write the XML file.
 * @param nodeid
 *          <code>true</code> when you want the result nodes with node id's.
 *          <code>false</code> otherwise.
 * @throws WebApplicationException
 *           The exception occurred.
 * @throws SirixException
 */
private void serializIt(final String resource, final Integer revision, final OutputStream output, final boolean nodeid) throws JaxRxException, SirixException {
    // Connection to sirix, creating a session
    Database database = null;
    Session session = null;
    // INodeReadTrx rtx = null;
    try {
        database = Databases.openDatabase(mStoragePath);
        session = database.getSession(new SessionConfiguration.Builder(resource).build());
        // and creating a transaction
        // if (revision == null) {
        // rtx = session.beginReadTransaction();
        // } else {
        // rtx = session.beginReadTransaction(revision);
        // }
        final XMLSerializerBuilder builder;
        if (revision == null)
            builder = new XMLSerializerBuilder(session, output);
        else
            builder = new XMLSerializerBuilder(session, output, revision);
        if (nodeid) {
            builder.emitRESTful().emitIDs();
        }
        final XMLSerializer serializer = builder.build();
        serializer.call();
    } catch (final Exception exce) {
        throw new JaxRxException(exce);
    } finally {
        // closing the sirix storage
        WorkerHelper.closeRTX(null, session, database);
    }
}
Also used : XMLSerializerBuilder(org.sirix.service.xml.serialize.XMLSerializer.XMLSerializerBuilder) XMLSerializer(org.sirix.service.xml.serialize.XMLSerializer) Database(org.sirix.api.Database) SessionConfiguration(org.sirix.access.conf.SessionConfiguration) JaxRxException(org.jaxrx.core.JaxRxException) SirixException(org.sirix.exception.SirixException) IOException(java.io.IOException) WebApplicationException(javax.ws.rs.WebApplicationException) Session(org.sirix.api.Session) JaxRxException(org.jaxrx.core.JaxRxException)

Example 4 with Database

use of org.sirix.api.Database in project sirix by sirixdb.

the class NodeIdRepresentation method addSubResource.

/**
 * This method is responsible to perform a POST request to a node id. This
 * method adds a new XML subtree as first child or as right sibling to the
 * node which is addressed through a node id.
 *
 * @param resourceName
 *          The name of the database, the node id belongs to.
 * @param nodeId
 *          The node id.
 * @param input
 *          The new XML subtree.
 * @param type
 *          The type which indicates if the new subtree has to be inserted as
 *          right sibling or as first child.
 * @throws JaxRxException
 *           The exception occurred.
 */
public void addSubResource(final String resourceName, final long nodeId, final InputStream input, final IDAccessType type) throws JaxRxException {
    Session session = null;
    Database database = null;
    NodeWriteTrx wtx = null;
    synchronized (resourceName) {
        boolean abort;
        if (WorkerHelper.checkExistingResource(mStoragePath, resourceName)) {
            abort = false;
            try {
                database = Databases.openDatabase(mStoragePath);
                // Creating a new session
                session = database.getSession(new SessionConfiguration.Builder(resourceName).build());
                // Creating a write transaction
                wtx = session.beginNodeWriteTrx();
                final boolean exist = wtx.moveTo(nodeId).hasMoved();
                if (exist) {
                    if (type == IDAccessType.FIRSTCHILD) {
                        WorkerHelper.shredInputStream(wtx, input, Insert.ASFIRSTCHILD);
                    } else if (type == IDAccessType.RIGHTSIBLING) {
                        WorkerHelper.shredInputStream(wtx, input, Insert.ASRIGHTSIBLING);
                    } else if (type == IDAccessType.LASTCHILD) {
                        if (wtx.moveToFirstChild().hasMoved()) {
                            long last = wtx.getNodeKey();
                            while (wtx.moveToRightSibling().hasMoved()) {
                                last = wtx.getNodeKey();
                            }
                            wtx.moveTo(last);
                            WorkerHelper.shredInputStream(wtx, input, Insert.ASRIGHTSIBLING);
                        } else {
                            throw new JaxRxException(404, NOTFOUND);
                        }
                    } else if (type == IDAccessType.LEFTSIBLING && wtx.moveToLeftSibling().hasMoved()) {
                        WorkerHelper.shredInputStream(wtx, input, Insert.ASRIGHTSIBLING);
                    }
                } else {
                    throw new JaxRxException(404, NOTFOUND);
                }
            } catch (final JaxRxException exce) {
                // NOPMD due
                // to
                // different
                // exception
                // types
                abort = true;
                throw exce;
            } catch (final Exception exce) {
                abort = true;
                throw new JaxRxException(exce);
            } finally {
                try {
                    WorkerHelper.closeWTX(abort, wtx, session, database);
                } catch (final SirixException exce) {
                    throw new JaxRxException(exce);
                }
            }
        }
    }
}
Also used : Database(org.sirix.api.Database) NodeWriteTrx(org.sirix.api.NodeWriteTrx) SirixException(org.sirix.exception.SirixException) SessionConfiguration(org.sirix.access.conf.SessionConfiguration) SirixException(org.sirix.exception.SirixException) IOException(java.io.IOException) JaxRxException(org.jaxrx.core.JaxRxException) Session(org.sirix.api.Session) JaxRxException(org.jaxrx.core.JaxRxException)

Example 5 with Database

use of org.sirix.api.Database in project sirix by sirixdb.

the class NodeIdRepresentation method deleteResource.

/**
 * This method is responsible to delete an XML resource addressed through a
 * unique node id (except root node id).
 *
 * @param resourceName
 *          The name of the database, which the node id belongs to.
 * @param nodeId
 *          The unique node id.
 * @throws JaxRxException
 *           The exception occurred.
 */
public void deleteResource(final String resourceName, final long nodeId) throws JaxRxException {
    synchronized (resourceName) {
        Session session = null;
        Database database = null;
        NodeWriteTrx wtx = null;
        boolean abort = false;
        if (WorkerHelper.checkExistingResource(mStoragePath, resourceName)) {
            try {
                database = Databases.openDatabase(mStoragePath);
                // Creating a new session
                session = database.getSession(new SessionConfiguration.Builder(resourceName).build());
                // Creating a write transaction
                wtx = session.beginNodeWriteTrx();
                // move to node with given rest id and deletes it
                if (wtx.moveTo(nodeId).hasMoved()) {
                    wtx.remove();
                    wtx.commit();
                } else {
                    // workerHelper.closeWTX(abort, wtx, session, database);
                    throw new JaxRxException(404, NOTFOUND);
                }
            } catch (final SirixException exce) {
                abort = true;
                throw new JaxRxException(exce);
            } finally {
                try {
                    WorkerHelper.closeWTX(abort, wtx, session, database);
                } catch (final SirixException exce) {
                    throw new JaxRxException(exce);
                }
            }
        } else {
            throw new JaxRxException(404, "DB not found");
        }
    }
}
Also used : Database(org.sirix.api.Database) NodeWriteTrx(org.sirix.api.NodeWriteTrx) SirixException(org.sirix.exception.SirixException) SessionConfiguration(org.sirix.access.conf.SessionConfiguration) Session(org.sirix.api.Session) JaxRxException(org.jaxrx.core.JaxRxException)

Aggregations

Database (org.sirix.api.Database)55 ResourceManager (org.sirix.api.ResourceManager)30 XdmNodeWriteTrx (org.sirix.api.XdmNodeWriteTrx)22 DatabaseConfiguration (org.sirix.access.conf.DatabaseConfiguration)19 Test (org.junit.Test)18 SirixException (org.sirix.exception.SirixException)18 Session (org.sirix.api.Session)16 IOException (java.io.IOException)13 Path (java.nio.file.Path)13 SessionConfiguration (org.sirix.access.conf.SessionConfiguration)13 XMLSerializerBuilder (org.sirix.service.xml.serialize.XMLSerializer.XMLSerializerBuilder)12 JaxRxException (org.jaxrx.core.JaxRxException)10 ByteArrayOutputStream (java.io.ByteArrayOutputStream)9 NodeWriteTrx (org.sirix.api.NodeWriteTrx)8 XdmNodeReadTrx (org.sirix.api.XdmNodeReadTrx)7 WebApplicationException (javax.ws.rs.WebApplicationException)6 NodeReadTrx (org.sirix.api.NodeReadTrx)6 XMLSerializer (org.sirix.service.xml.serialize.XMLSerializer)6 XMLEventReader (javax.xml.stream.XMLEventReader)5 DocumentException (org.brackit.xquery.xdm.DocumentException)5