Search in sources :

Example 1 with FMSE

use of org.sirix.diff.algorithm.fmse.FMSE in project sirix by sirixdb.

the class WikipediaImport method updateShredder.

/**
 * Update shredder.
 */
private void updateShredder() throws SirixException, IOException, XMLStreamException {
    final Path path = Files.createTempDirectory("sdbtmp");
    final DatabaseConfiguration dbConf = new DatabaseConfiguration(path);
    Databases.truncateDatabase(dbConf);
    Databases.createDatabase(dbConf);
    final Database db = Databases.openDatabase(path);
    db.createResource(new ResourceConfiguration.Builder("wiki", dbConf).build());
    final ResourceManager resourceManager = db.getResourceManager(new ResourceManagerConfiguration.Builder("wiki").build());
    if (mPageEvents.peek().isStartElement() && !mPageEvents.peek().asStartElement().getName().getLocalPart().equals("root")) {
        mPageEvents.addFirst(XMLEventFactory.newInstance().createStartElement(new QName("root"), null, null));
        mPageEvents.addLast(XMLEventFactory.newInstance().createEndElement(new QName("root"), null));
    }
    final XdmNodeWriteTrx wtx = resourceManager.beginNodeWriteTrx();
    final XMLShredder shredder = new XMLShredder.Builder(wtx, XMLShredder.createQueueReader(mPageEvents), Insert.ASFIRSTCHILD).commitAfterwards().build();
    shredder.call();
    wtx.close();
    mPageEvents = new ArrayDeque<>();
    final XdmNodeReadTrx rtx = resourceManager.beginNodeReadTrx();
    rtx.moveToFirstChild();
    rtx.moveToFirstChild();
    final long nodeKey = mWtx.getNodeKey();
    try (final FMSE fmse = new FMSE()) {
        fmse.diff(mWtx, rtx);
    }
    mWtx.moveTo(nodeKey);
    rtx.close();
    resourceManager.close();
    db.close();
    Databases.truncateDatabase(dbConf);
}
Also used : Path(java.nio.file.Path) XdmNodeWriteTrx(org.sirix.api.XdmNodeWriteTrx) XdmNodeReadTrx(org.sirix.api.XdmNodeReadTrx) DatabaseConfiguration(org.sirix.access.conf.DatabaseConfiguration) QName(javax.xml.namespace.QName) Database(org.sirix.api.Database) FMSE(org.sirix.diff.algorithm.fmse.FMSE) ResourceManager(org.sirix.api.ResourceManager)

Example 2 with FMSE

use of org.sirix.diff.algorithm.fmse.FMSE in project sirix by sirixdb.

the class FMSEImport method dataImport.

/**
 * Import the data.
 *
 * @param resOldRev {@link File} for old revision (sirix resource)
 * @param resNewRev {@link File} for new revision (XML resource)
 */
private void dataImport(final Path resOldRev, @Nonnull final Path resNewRev) {
    try {
        final Path newRevTarget = Files.createTempDirectory(resNewRev.toAbsolutePath().toString());
        if (Files.exists(newRevTarget)) {
            SirixFiles.recursiveRemove(newRevTarget);
        }
        shredder(checkNotNull(resNewRev), newRevTarget);
        try (final Database databaseOld = Databases.openDatabase(resOldRev);
            final ResourceManager resMgrOld = databaseOld.getResourceManager(new ResourceManagerConfiguration.Builder("shredded").build());
            final XdmNodeWriteTrx wtx = resMgrOld.beginNodeWriteTrx();
            final Database databaseNew = Databases.openDatabase(newRevTarget);
            final ResourceManager resourceNew = databaseNew.getResourceManager(new ResourceManagerConfiguration.Builder("shredded").build());
            final XdmNodeReadTrx rtx = resourceNew.beginNodeReadTrx();
            final FMSE fmes = new FMSE()) {
            fmes.diff(wtx, rtx);
        }
    } catch (final SirixException | IOException | XMLStreamException e) {
        LOGWRAPPER.error(e.getMessage(), e);
    }
}
Also used : Path(java.nio.file.Path) XdmNodeWriteTrx(org.sirix.api.XdmNodeWriteTrx) XdmNodeReadTrx(org.sirix.api.XdmNodeReadTrx) XMLStreamException(javax.xml.stream.XMLStreamException) Database(org.sirix.api.Database) FMSE(org.sirix.diff.algorithm.fmse.FMSE) SirixException(org.sirix.exception.SirixException) ResourceManager(org.sirix.api.ResourceManager) IOException(java.io.IOException)

Aggregations

Path (java.nio.file.Path)2 Database (org.sirix.api.Database)2 ResourceManager (org.sirix.api.ResourceManager)2 XdmNodeReadTrx (org.sirix.api.XdmNodeReadTrx)2 XdmNodeWriteTrx (org.sirix.api.XdmNodeWriteTrx)2 FMSE (org.sirix.diff.algorithm.fmse.FMSE)2 IOException (java.io.IOException)1 QName (javax.xml.namespace.QName)1 XMLStreamException (javax.xml.stream.XMLStreamException)1 DatabaseConfiguration (org.sirix.access.conf.DatabaseConfiguration)1 SirixException (org.sirix.exception.SirixException)1