I am having quite a lengthy copy paste session with ai. I am trying to create a plugin that captures events when properties are added to a node.
getting such stuff
import org.neo4j.graphdb.event.TransactionData;
import org.neo4j.graphdb.event.TransactionEventListener;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.RelationshipType;
import org.neo4j.graphdb.Label;
import org.neo4j.graphdb.Transaction;
import org.neo4j.logging.Log;
public class PropertyChangeListener implements TransactionEventListener<Object> {
private final Log log;
public PropertyChangeListener(Log log) {
this.log = log;
}
@Override
public Object beforeCommit(TransactionData data, Transaction tx, GraphDatabaseService db) {
data.assignedNodeProperties().forEach(prop -> {
Node node = prop.entity();
log.info("Property changed: " + prop.key() + " on node " + node.getId());
Node targetNode = tx.findNode(Label.label("Person"), "name", "test22");
if (targetNode != null) {
node.createRelationshipTo(targetNode, RelationshipType.withName("CONNECTED_TO"));
log.info("Relationship created from node " + node.getId() + " to node " + targetNode.getId());
}
});
return null;
}
@Override
public void afterCommit(TransactionData data, Object state, GraphDatabaseService db) {
// Not used in this example
}
@Override
public void afterRollback(TransactionData data, Object state, GraphDatabaseService db) {
// Not used in this example
}
}
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.procedure.Description;
import org.neo4j.procedure.Procedure;
import org.neo4j.logging.Log;
import org.neo4j.procedure.Context;
import org.neo4j.kernel.internal.GraphDatabaseAPI;
import java.util.stream.Stream;
public class ExampleProcedures {
@Context
public GraphDatabaseService db;
@Context
public Log log;
private static boolean isListenerRegistered = false;
@Procedure
@Description("com.uo.neo4j.helloWorld")
public Stream<StringResult> helloWorld() {
return Stream.of(new StringResult("Hello, World!"));
}
@Procedure
@Description("com.uo.neo4j.registerPropertyChangeListener")
public void registerPropertyChangeListener() {
if (!isListenerRegistered) {
PropertyChangeListener listener = new PropertyChangeListener(log);
((GraphDatabaseAPI) db).getDependencyResolver()
.resolveDependency(org.neo4j.kernel.impl.api.TransactionEventHandlers.class)
.registerTransactionEventHandler(listener);
isListenerRegistered = true;
log.info("PropertyChangeListener registered");
} else {
log.info("PropertyChangeListener is already registered");
}
}
@Procedure
@Description("com.uo.neo4j.dummyProcedure")
public void dummyProcedure() {
// A dummy procedure to ensure the class is loaded
}
public static class StringResult {
public final String result;
public StringResult(String result) {
this.result = result;
}
}
}
using this as a template