Search in sources :

Example 6 with SirixException

use of org.sirix.exception.SirixException 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 7 with SirixException

use of org.sirix.exception.SirixException 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 8 with SirixException

use of org.sirix.exception.SirixException in project sirix by sirixdb.

the class NodeIdRepresentation method performQueryOnResource.

/**
 * This method is responsible to perform a XPath query expression on the XML
 * resource which is addressed through a unique node id.
 *
 * @param resourceName
 *          The name of the database, the node id belongs to.
 * @param nodeId
 *          The node id of the requested resource.
 * @param query
 *          The XPath expression.
 * @param queryParams
 *          The optional query parameters (output, wrap, revision).
 * @return The result of the XPath query expression.
 */
public StreamingOutput performQueryOnResource(final String resourceName, final long nodeId, final String query, final Map<QueryParameter, String> queryParams) {
    final StreamingOutput sOutput = new StreamingOutput() {

        @Override
        public void write(final OutputStream output) throws IOException, JaxRxException {
            final File dbFile = new File(mStoragePath, resourceName);
            final String revision = queryParams.get(QueryParameter.REVISION);
            final String wrap = queryParams.get(QueryParameter.WRAP);
            final String doNodeId = queryParams.get(QueryParameter.OUTPUT);
            final boolean wrapResult = (wrap == null) ? true : wrap.equalsIgnoreCase(YESSTRING);
            final boolean nodeid = (doNodeId == null) ? false : doNodeId.equalsIgnoreCase(YESSTRING);
            final Integer rev = revision == null ? null : Integer.valueOf(revision);
            final RestXPathProcessor xpathProcessor = new RestXPathProcessor(mStoragePath);
            try {
                xpathProcessor.getXpathResource(dbFile, nodeId, query, nodeid, rev, output, wrapResult);
            } catch (final SirixException exce) {
                throw new JaxRxException(exce);
            }
        }
    };
    return sOutput;
}
Also used : RestXPathProcessor(org.sirix.service.jaxrx.util.RestXPathProcessor) OutputStream(java.io.OutputStream) SirixException(org.sirix.exception.SirixException) StreamingOutput(javax.ws.rs.core.StreamingOutput) File(java.io.File) JaxRxException(org.jaxrx.core.JaxRxException)

Example 9 with SirixException

use of org.sirix.exception.SirixException 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 10 with SirixException

use of org.sirix.exception.SirixException 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

SirixException (org.sirix.exception.SirixException)74 DocumentException (org.brackit.xquery.xdm.DocumentException)25 IOException (java.io.IOException)18 Database (org.sirix.api.Database)17 JaxRxException (org.jaxrx.core.JaxRxException)14 NodeReadTrx (org.sirix.api.NodeReadTrx)13 XdmNodeWriteTrx (org.sirix.api.XdmNodeWriteTrx)13 SessionConfiguration (org.sirix.access.conf.SessionConfiguration)12 Session (org.sirix.api.Session)12 ResourceManager (org.sirix.api.ResourceManager)10 WebApplicationException (javax.ws.rs.WebApplicationException)8 Path (java.nio.file.Path)7 XMLStreamException (javax.xml.stream.XMLStreamException)7 QNm (org.brackit.xquery.atomic.QNm)7 XdmNodeReadTrx (org.sirix.api.XdmNodeReadTrx)6 OutputStream (java.io.OutputStream)5 SubtreeListener (org.brackit.xquery.node.parser.SubtreeListener)5 AbstractTemporalNode (org.brackit.xquery.xdm.AbstractTemporalNode)5 StreamingOutput (javax.ws.rs.core.StreamingOutput)4 DatabaseConfiguration (org.sirix.access.conf.DatabaseConfiguration)4