/*
* $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.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Iterator;
import java.util.Map;
import com.hp.hpl.jena.shared.JenaException;
import com.hp.hpl.jena.shared.PrefixMapping;
import com.hp.hpl.jena.shared.impl.PrefixMappingImpl;
public class VirtPrefixMapping extends PrefixMappingImpl {
protected VirtGraph m_graph = null;
/**
* Constructor for a persistent prefix mapping.
*
*/
public VirtPrefixMapping(VirtGraph graph) {
super();
m_graph = graph;
// Populate the prefix map using data from the
// persistent graph properties
String query = "DB.DBA.XML_SELECT_ALL_NS_DECLS (3)";
try {
Statement stmt = m_graph.createStatement();
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String prefix = rs.getString(1);
String uri = rs.getString(2);
if (uri != null && uri != null)
super.setNsPrefix(prefix, uri);
}
rs.close();
stmt.close();
} catch (Exception e) {
throw new JenaException(e);
}
}
public PrefixMapping removeNsPrefix(String prefix) {
String query = "DB.DBA.XML_REMOVE_NS_BY_PREFIX(?, 1)";
super.removeNsPrefix(prefix);
try {
PreparedStatement ps = m_graph.prepareStatement(query);
ps.setString(1, prefix);
ps.execute();
ps.close();
} catch (Exception e) {
throw new JenaException(e);
}
return this;
}
/*
* (non-Javadoc) Override the default implementation so we can catch the
* write operation and update the persistent store.
*
* @see com.hp.hpl.jena.shared.PrefixMapping#setNsPrefix(java.lang.String,
* java.lang.String)
*/
public PrefixMapping setNsPrefix(String prefix, String uri) {
super.setNsPrefix(prefix, uri);
String query = "DB.DBA.XML_SET_NS_DECL(?, ?, 1)";
// All went well, so persist the prefix by adding it to the graph
// properties
// (the addPrefix call will overwrite any existing mapping with the same
// prefix
// so it matches the behaviour of the prefixMappingImpl).
try {
PreparedStatement ps = m_graph.prepareStatement(query);
ps.setString(1, prefix);
ps.setString(2, uri);
ps.execute();
ps.close();
} catch (Exception e) {
throw new JenaException(e.toString());
}
return this;
}
public PrefixMapping setNsPrefixes(PrefixMapping other) {
return setNsPrefixes(other.getNsPrefixMap());
}
public PrefixMapping setNsPrefixes(Map other) {
checkUnlocked();
Iterator it = other.entrySet().iterator();
while (it.hasNext()) {
Map.Entry e = (Map.Entry) it.next();
setNsPrefix((String) e.getKey(), (String) e.getValue());
}
return this;
}
}