use of org.sirix.api.Session 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;
}
use of org.sirix.api.Session 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;
}
use of org.sirix.api.Session 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);
}
}
use of org.sirix.api.Session 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);
}
}
}
}
}
use of org.sirix.api.Session 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");
}
}
}
Aggregations