apoc.ExtendedApocGlobalComponents Maven / Gradle / Ivy
package apoc;
import apoc.custom.CypherProcedures;
import apoc.custom.CypherProceduresHandler;
import apoc.load.LoadDirectory;
import apoc.load.LoadDirectoryHandler;
import apoc.ttl.TTLLifeCycle;
import apoc.uuid.Uuid;
import apoc.uuid.UuidHandler;
import org.neo4j.annotations.service.ServiceProvider;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.kernel.availability.AvailabilityListener;
import org.neo4j.kernel.internal.GraphDatabaseAPI;
import org.neo4j.kernel.lifecycle.Lifecycle;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@ServiceProvider
public class ExtendedApocGlobalComponents implements ApocGlobalComponents {
private final Map cypherProcedureHandlers = new ConcurrentHashMap<>();
@Override
public Map getServices(GraphDatabaseAPI db, ApocExtensionFactory.Dependencies dependencies) {
CypherProceduresHandler cypherProcedureHandler = new CypherProceduresHandler(
db,
dependencies.scheduler(),
dependencies.apocConfig(),
dependencies.log().getUserLog(CypherProcedures.class),
dependencies.globalProceduresRegistry()
);
cypherProcedureHandlers.put(db, cypherProcedureHandler);
return Map.of(
"ttl", new TTLLifeCycle(dependencies.scheduler(),
db,
dependencies.apocConfig(),
TTLConfig.ttlConfig(),
dependencies.log().getUserLog(TTLLifeCycle.class)),
"uuid", new UuidHandler(db,
dependencies.databaseManagementService(),
dependencies.log().getUserLog(Uuid.class),
dependencies.apocConfig()),
"directory", new LoadDirectoryHandler(db,
dependencies.log().getUserLog(LoadDirectory.class),
dependencies.pools()),
"cypherProcedures", cypherProcedureHandler
);
}
@Override
public Collection getContextClasses() {
return List.of(CypherProceduresHandler.class, UuidHandler.class, LoadDirectoryHandler.class);
}
@Override
public Iterable getListeners(GraphDatabaseAPI db, ApocExtensionFactory.Dependencies dependencies) {
CypherProceduresHandler cypherProceduresHandler = cypherProcedureHandlers.get(db);
return cypherProceduresHandler==null ? Collections.emptyList() : Collections.singleton(cypherProceduresHandler);
}
}