/*
* $Id$
*
* This file is part of the OpenLink Software Virtuoso Open-Source (VOS)
* project.
*
* Copyright (C) 1998-2012 OpenLink Software
*
* This project is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; only version 2 of the License, dated June 1991.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
package virtuoso.jena.driver;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import com.hp.hpl.jena.graph.GraphEvents;
import com.hp.hpl.jena.graph.Node;
import com.hp.hpl.jena.graph.Triple;
import com.hp.hpl.jena.graph.impl.SimpleBulkUpdateHandler;
import com.hp.hpl.jena.shared.JenaException;
public class VirtBulkUpdateHandler extends SimpleBulkUpdateHandler {
public VirtBulkUpdateHandler(VirtGraph parent) {
super(parent);
}
// --java5 or newer @Override
public void add(Triple[] triples) {
addIterator(Arrays.asList(triples).iterator(), false);
manager.notifyAddArray(graph, triples);
}
// --java5 or newer @Override
protected void add(List<Triple> triples, boolean notify) {
addIterator(triples.iterator(), false);
if (notify)
manager.notifyAddList(graph, triples);
}
// --java5 or newer @Override
public void addIterator(Iterator<Triple> it, boolean notify) {
VirtGraph _graph = (VirtGraph) this.graph;
List list = notify ? new ArrayList() : null;
try {
boolean autoCommit = _graph.getConnection().getAutoCommit();
if (autoCommit)
_graph.getConnection().setAutoCommit(false);
_graph.add(it, list);
if (autoCommit) {
_graph.getConnection().commit();
_graph.getConnection().setAutoCommit(true);
}
} catch (Exception e) {
throw new JenaException("Couldn't create transaction:" + e);
}
if (notify)
manager.notifyAddIterator(graph, list);
}
public void delete(Triple[] triples) {
deleteIterator(Arrays.asList(triples).iterator(), false);
manager.notifyDeleteArray(graph, triples);
}
protected void delete(List<Triple> triples, boolean notify) {
deleteIterator(triples.iterator(), false);
if (notify)
manager.notifyDeleteList(graph, triples);
}
public void deleteIterator(Iterator<Triple> it, boolean notify) {
VirtGraph _graph = (VirtGraph) this.graph;
List list = notify ? new ArrayList() : null;
try {
boolean autoCommit = _graph.getConnection().getAutoCommit();
if (autoCommit)
_graph.getConnection().setAutoCommit(false);
_graph.delete(it, list);
if (autoCommit) {
_graph.getConnection().commit();
_graph.getConnection().setAutoCommit(true);
}
} catch (Exception e) {
throw new JenaException("Couldn't create transaction:" + e);
}
if (notify)
manager.notifyDeleteIterator(graph, list);
}
public void removeAll() {
VirtGraph _graph = (VirtGraph) this.graph;
_graph.clearGraph(_graph.getGraphName());
notifyRemoveAll();
}
public void remove(Node s, Node p, Node o) {
VirtGraph _graph = (VirtGraph) this.graph;
_graph.delete_match(Triple.createMatch(s, p, o));
manager.notifyEvent(graph, GraphEvents.remove(s, p, o));
}
}