// Path: xm-lep-api/src/main/java/com/icthh/xm/lep/api/LepKeyResolver.java
// public interface LepKeyResolver {
// 
//     /**
//      * Resolve dynamic part of LEP key by method arguments.
//      *
//      * @param baseKey        base LEP key (prefix), can be {@code null}
//      * @param method         method data on what LEP call occurs
//      * @param managerService LEP manager service
//      * @return complete LEP key (baseKey + dynamic part)
//      */
//     LepKey resolve(LepKey baseKey,
//                    LepMethod method,
//                    LepManagerService managerService);
// 
// }


import com.icthh.xm.lep.api.LepKeyResolver;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
package com.icthh.xm.lep.entry;



/**
 * The annotation type {@link LogicExtensionPoint} is used to indicate point in code that can
 * be extended by custom implementation.
 * Custom implementation represents by {@link com.icthh.xm.lep.api.LepResource}) interface and
 * can be script, byte code, etc.
 */
@Target({
    ElementType.METHOD,
    ElementType.TYPE
})
@Retention(RetentionPolicy.RUNTIME)
public @interface LogicExtensionPoint {

    /**
     * Default group name.
     */
    String DEFAULT_GROUP = "general";

    /**
     * Base LEP key, or complete LEP key if resolver not specified.
     *
     * @return logic extension point key
     */
    String key();

    /**
     * LEP group name, it's just marker for grouping {@link LogicExtensionPoint}s (can be used
     * like Java package name convention).
     *
     * @return LEP group name
     */
    String group() default DEFAULT_GROUP;

    /**
     * LEP key resolver implementation class to determine complete (dynamic) LEP key.
     *
     * @return LEP key resolver implementation class
     */
// Path: xm-lep-api/src/main/java/com/icthh/xm/lep/api/LepKeyResolver.java
// public interface LepKeyResolver {
// 
//     /**
//      * Resolve dynamic part of LEP key by method arguments.
//      *
//      * @param baseKey        base LEP key (prefix), can be {@code null}
//      * @param method         method data on what LEP call occurs
//      * @param managerService LEP manager service
//      * @return complete LEP key (baseKey + dynamic part)
//      */
//     LepKey resolve(LepKey baseKey,
//                    LepMethod method,
//                    LepManagerService managerService);
// 
// }


// Path: xm-lep-entry/src/main/java/com/icthh/xm/lep/entry/LogicExtensionPoint.java
import com.icthh.xm.lep.api.LepKeyResolver;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

package com.icthh.xm.lep.entry;



/**
 * The annotation type {@link LogicExtensionPoint} is used to indicate point in code that can
 * be extended by custom implementation.
 * Custom implementation represents by {@link com.icthh.xm.lep.api.LepResource}) interface and
 * can be script, byte code, etc.
 */
@Target({
    ElementType.METHOD,
    ElementType.TYPE
})
@Retention(RetentionPolicy.RUNTIME)
public @interface LogicExtensionPoint {

    /**
     * Default group name.
     */
    String DEFAULT_GROUP = "general";

    /**
     * Base LEP key, or complete LEP key if resolver not specified.
     *
     * @return logic extension point key
     */
    String key();

    /**
     * LEP group name, it's just marker for grouping {@link LogicExtensionPoint}s (can be used
     * like Java package name convention).
     *
     * @return LEP group name
     */
    String group() default DEFAULT_GROUP;

    /**
     * LEP key resolver implementation class to determine complete (dynamic) LEP key.
     *
     * @return LEP key resolver implementation class
     */
    Class<? extends LepKeyResolver> resolver() default LepKeyResolver.class;