// Path: stecker-plugin-loader/src/main/java/org/meridor/stecker/PluginMetadata.java
// 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();
// 
//     /**
//      * Returns date when plugin was released
//      *
//      * @return local date or empty if not set
//      */
//     Optional<ZonedDateTime> getDate();
// 
//     /**
//      * Returns detailed plugin description
//      *
//      * @return description or empty if not set
//      */
//     Optional<String> getDescription();
// 
//     /**
//      * Returns maintainer email and name
//      *
//      * @return email and name in the format: <b>John Smith &lt;john.smith@example.com&gt;</b> or empty if not set
//      */
//     Optional<String> getMaintainer();
// 
//     /**
//      * Returns a list of plugins required to make this plugin work
//      *
//      * @return possibly empty list with dependencies
//      */
//     List<Dependency> getRequiredDependencies();
// 
//     /**
//      * Returns a list of plugins that should be never installed simultaneously with this plugin
//      *
//      * @return possibly empty list with conflicting dependencies
//      */
//     List<Dependency> getConflictingDependencies();
// 
//     /**
//      * Returns a meta dependency which is provided by this plugin
//      *
//      * @return meta dependency or empty if not set
//      */
//     Optional<Dependency> getProvidedDependency();
// 
// }
// 
// 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.PluginMetadata;
import org.meridor.stecker.interfaces.Dependency;
import java.nio.file.Path;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
package org.meridor.stecker.impl;



public class PluginMetadataContainer implements PluginMetadata {

    private final String name;

    private final String version;

    private final Path filePath;
    private final List<Dependency> depends = new ArrayList<>();
    private final List<Dependency> conflicts = new ArrayList<>();
    private Optional<ZonedDateTime> date;
    private String description;
    private String maintainer;
    private Dependency provides;

    public PluginMetadataContainer(String name, String version, Path filePath) {
        this.name = name;
        this.version = version;
        this.filePath = filePath;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public String getVersion() {
// Path: stecker-plugin-loader/src/main/java/org/meridor/stecker/PluginMetadata.java
// 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();
// 
//     /**
//      * Returns date when plugin was released
//      *
//      * @return local date or empty if not set
//      */
//     Optional<ZonedDateTime> getDate();
// 
//     /**
//      * Returns detailed plugin description
//      *
//      * @return description or empty if not set
//      */
//     Optional<String> getDescription();
// 
//     /**
//      * Returns maintainer email and name
//      *
//      * @return email and name in the format: <b>John Smith &lt;john.smith@example.com&gt;</b> or empty if not set
//      */
//     Optional<String> getMaintainer();
// 
//     /**
//      * Returns a list of plugins required to make this plugin work
//      *
//      * @return possibly empty list with dependencies
//      */
//     List<Dependency> getRequiredDependencies();
// 
//     /**
//      * Returns a list of plugins that should be never installed simultaneously with this plugin
//      *
//      * @return possibly empty list with conflicting dependencies
//      */
//     List<Dependency> getConflictingDependencies();
// 
//     /**
//      * Returns a meta dependency which is provided by this plugin
//      *
//      * @return meta dependency or empty if not set
//      */
//     Optional<Dependency> getProvidedDependency();
// 
// }
// 
// 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/impl/PluginMetadataContainer.java
import org.meridor.stecker.PluginMetadata;
import org.meridor.stecker.interfaces.Dependency;
import java.nio.file.Path;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

package org.meridor.stecker.impl;



public class PluginMetadataContainer implements PluginMetadata {

    private final String name;

    private final String version;

    private final Path filePath;
    private final List<Dependency> depends = new ArrayList<>();
    private final List<Dependency> conflicts = new ArrayList<>();
    private Optional<ZonedDateTime> date;
    private String description;
    private String maintainer;
    private Dependency provides;

    public PluginMetadataContainer(String name, String version, Path filePath) {
        this.name = name;
        this.version = version;
        this.filePath = filePath;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public String getVersion() {
        return version;