/*******************************************************************************
* Copyright (c) 2007 Cambridge Semantics Incorporated.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Cambridge Semantics Incorporated
*******************************************************************************/
package org.openanzo.client;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import org.openanzo.exceptions.ExceptionConstants;
import org.openanzo.exceptions.LogUtils;
import org.openanzo.exceptions.Messages;
import org.openanzo.rdf.INamedGraph;
import org.openanzo.rdf.IQuadStore;
import org.openanzo.rdf.IStatementListener;
import org.openanzo.rdf.Statement;
import org.openanzo.rdf.URI;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* Simple NamedGraph extension used for linking listeners between isolated metadata graphs.
*
* @author Ben Szekely ( <a href="mailto:ben@cambridgesemantics.com">ben@cambridgesemantics.com </a>)
*/
public class MetadataGraph extends org.openanzo.rdf.NamedGraph {
private static final long serialVersionUID = -6399862428861812901L;
private final static Logger log = LoggerFactory.getLogger(MetadataGraph.class);
private final GraphTable graphTable;
MetadataGraph(URI namedGraphUri, IQuadStore quadStore, GraphTable graphTable) {
super(namedGraphUri, quadStore);
this.graphTable = graphTable;
}
@Override
public void registerListener(IStatementListener<INamedGraph> listener) {
Set<IStatementListener<INamedGraph>> listeners = graphTable.metaListeners.get(getNamedGraphUri());
if (listeners == null) {
listeners = new CopyOnWriteArraySet<IStatementListener<INamedGraph>>();
graphTable.metaListeners.put(getNamedGraphUri(), listeners);
}
listeners.add(listener);
}
@Override
public void unregisterListener(IStatementListener<INamedGraph> listener) {
Set<IStatementListener<INamedGraph>> listeners = graphTable.metaListeners.get(getNamedGraphUri());
if (listeners != null) {
listeners.remove(listener);
}
}
@Override
public void notifyAddStatements(Statement... statements) {
Set<IStatementListener<INamedGraph>> listeners = graphTable.metaListeners.get(getNamedGraphUri());
if (listeners != null) {
for (IStatementListener<INamedGraph> listener : listeners) {
try {
listener.statementsAdded(this, statements);
} catch (Throwable t) {
if (log.isWarnEnabled()) {
log.warn(LogUtils.INTERNAL_MARKER, Messages.formatString(ExceptionConstants.CLIENT.FAILED_NOTIFYING_ADD_STATEMENTS, listener.getClass().getName()), t);
}
}
}
}
}
@Override
public void notifyRemoveStatements(Statement... statements) {
Set<IStatementListener<INamedGraph>> listeners = graphTable.metaListeners.get(getNamedGraphUri());
if (listeners != null) {
for (IStatementListener<INamedGraph> listener : listeners) {
try {
listener.statementsRemoved(this, statements);
} catch (Throwable t) {
if (log.isWarnEnabled()) {
log.warn(LogUtils.INTERNAL_MARKER, Messages.formatString(ExceptionConstants.CLIENT.FAILED_NOTIFYING_REMOVE_STATEMENTS, listener.getClass().getName()), t);
}
}
}
}
}
}