All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.neo4j.ogm.spi.CypherModificationProvider Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2002-2024 "Neo4j,"
 * Neo4j Sweden AB [http://neo4j.com]
 *
 * This file is part of Neo4j.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.neo4j.ogm.spi;

import java.util.Map;
import java.util.function.Function;

/**
 * This interface can be implemented by extensions that wish to modify Cypher statements before they are being sent
 * by corresponding OGM driver to the database.
*
* OGM makes sure that the modification will be applied to all statements, regardless of source, but implementations of * the service must not rely on the fact that the modification happens currently on the drivers level, which may change * without notice.
*
* To add your custom modification, create a separate module, implement this interface and return an arbitrary * {@link java.util.function.Function}. As an optional step, overwrite the {@link #getOrder()} method in case you have * multiple modifications on the class path. The lower the value it returns, the higher it's priority. Higher priority * means modification is applied first.
*
* OGM loads implementations through Java's builtin Service Provider Interfache mechanism. * Please refer to Oracle's * documentation of Java's Service Provide Interface to declare your implementation. In short: Define a file called * META-INF/services/org.neo4j.ogm.spi.CypherModificationProvider in your module containing the fully qualified * name of your CypherModificationProvider-Implementation.
*
* Inside the function returned by {@link #getCypherModification(Map)}} the Cypher modification itself is supposed to happend. * The function is called with the Cypher string generated by OGM or passed to the Session interface and is then supposed * to return a non null, non empty string.
*
* The map passed to {@link #getCypherModification(Map)}} contains arbitrary properties from OGMs * {@link org.neo4j.ogm.config.Configuration}. Those can be set programmatically in any way necessary. Use those properties * to configure your Cypher modification as needed. * * @author Michael J. Simons * @since 3.1.4 */ public interface CypherModificationProvider { /** * Get the order value of this object. * Higher values are interpreted as lower priority. As a consequence, the object with the lowest value has the highest priority. * Same order values will result in arbitrary sort positions for the affected objects. * * @return the order value */ default int getOrder() { return Integer.MAX_VALUE; } /** * Called by OGM to retrieve the actual Cypher modification. * * @param configuration Map containing all custom properties from {@link org.neo4j.ogm.config.Configuration} * @return The actual cypher modification */ Function getCypherModification(Map configuration); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy