// Path: stecker-plugin-loader/src/main/java/org/meridor/stecker/interfaces/Dependency.java
// public interface Dependency {
// 
//     /**
//      * Returns dependency name
//      *
//      * @return dependency name
//      */
//     String getName();
// 
//     /**
//      * Returns dependency version if present
//      *
//      * @return dependency version if present and empty otherwise
//      */
//     Optional<String> getVersion();
// 
//     /**
//      * Forces to override {@link Object#equals(Object)}
//      *
//      * @param anotherDependency dependency to compare to
//      * @return true if equal and false otherwise
//      */
//     boolean equals(Object anotherDependency);
// 
//     /**
//      * Forces to override {@link Object#hashCode()}
//      *
//      * @return instance hash code
//      */
//     int hashCode();
// 
//     /**
//      * Returns dependency string representation
//      *
//      * @return dependency string representation
//      */
//     String toString();
// 
// }


import org.meridor.stecker.interfaces.Dependency;
import java.nio.file.Path;
import java.time.ZonedDateTime;
import java.util.List;
import java.util.Optional;
package org.meridor.stecker;



/**
 * Stores metadata of a single plugin
 */
public interface PluginMetadata {

    /**
     * Returns unique plugin name
     *
     * @return free-form string with name
     */
    String getName();

    /**
     * Returns plugin version
     *
     * @return free-form string with version
     */
    String getVersion();

    /**
     * Returns {@link Path} object corresponding to plugin file
     *
     * @return plugin {@link Path} object
     */
    Path getPath();

    /**
     * Returns {@link org.meridor.stecker.interfaces.Dependency} object corresponding to this plugin
     *
     * @return dependency object
     */
// Path: stecker-plugin-loader/src/main/java/org/meridor/stecker/interfaces/Dependency.java
// public interface Dependency {
// 
//     /**
//      * Returns dependency name
//      *
//      * @return dependency name
//      */
//     String getName();
// 
//     /**
//      * Returns dependency version if present
//      *
//      * @return dependency version if present and empty otherwise
//      */
//     Optional<String> getVersion();
// 
//     /**
//      * Forces to override {@link Object#equals(Object)}
//      *
//      * @param anotherDependency dependency to compare to
//      * @return true if equal and false otherwise
//      */
//     boolean equals(Object anotherDependency);
// 
//     /**
//      * Forces to override {@link Object#hashCode()}
//      *
//      * @return instance hash code
//      */
//     int hashCode();
// 
//     /**
//      * Returns dependency string representation
//      *
//      * @return dependency string representation
//      */
//     String toString();
// 
// }


// Path: stecker-plugin-loader/src/main/java/org/meridor/stecker/PluginMetadata.java
import org.meridor.stecker.interfaces.Dependency;
import java.nio.file.Path;
import java.time.ZonedDateTime;
import java.util.List;
import java.util.Optional;

package org.meridor.stecker;



/**
 * Stores metadata of a single plugin
 */
public interface PluginMetadata {

    /**
     * Returns unique plugin name
     *
     * @return free-form string with name
     */
    String getName();

    /**
     * Returns plugin version
     *
     * @return free-form string with version
     */
    String getVersion();

    /**
     * Returns {@link Path} object corresponding to plugin file
     *
     * @return plugin {@link Path} object
     */
    Path getPath();

    /**
     * Returns {@link org.meridor.stecker.interfaces.Dependency} object corresponding to this plugin
     *
     * @return dependency object
     */
    Dependency getDependency();