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);
}
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);
}
}
Aggregations