package fr.adrienbrault.idea.symfony2plugin.stubs.dict;

import fr.adrienbrault.idea.symfony2plugin.routing.dict.RouteInterface;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;

public class StubIndexedRoute implements RouteInterface, Serializable{

    @NotNull
    private final String name;

    @Nullable
    private String controller = null;

    @Nullable
    private String path = null;

    @NotNull
    private Collection<String> methods = new HashSet<String>();

    public StubIndexedRoute(@NotNull String name) {
        this.name = name;
    }

    @Nullable
    public String getController() {
        return controller;
    }

    public void setController(@Nullable String controller) {
        this.controller = controller;
    }

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

    @Nullable
    public String getPath() {
        return path;
    }

    public void setPath(@Nullable String path) {
        this.path = path;
    }

    @NotNull
    public Collection<String> getMethods() {
        return methods;
    }

    public void setMethods(@NotNull Collection<String> methods) {
        this.methods = methods;
    }

    public void addMethod(@NotNull String[] content) {
        this.methods.addAll(Arrays.asList(content));
    }
}
package fr.adrienbrault.idea.symfony2plugin.stubs.dict;

import fr.adrienbrault.idea.symfony2plugin.routing.dict.RouteInterface;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Objects;

public class StubIndexedRoute implements RouteInterface, Serializable{

    @NotNull
    private final String name;

    @Nullable
    private String controller = null;

    @Nullable
    private String path = null;

    @NotNull
    private Collection<String> methods = new HashSet<String>();

    public StubIndexedRoute(@NotNull String name) {
        this.name = name;
    }

    @Nullable
    public String getController() {
        return controller;
    }

    public void setController(@Nullable String controller) {
        this.controller = controller;
    }

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

    @Nullable
    public String getPath() {
        return path;
    }

    public void setPath(@Nullable String path) {
        this.path = path;
    }

    @NotNull
    public Collection<String> getMethods() {
        return methods;
    }

    public void setMethods(@NotNull Collection<String> methods) {
        this.methods = methods;
    }

    public void addMethod(@NotNull String[] content) {
        this.methods.addAll(Arrays.asList(content));
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder()
            .append(this.name)
            .append(this.controller)
            .append(this.path)
            .append(new HashSet<>(this.methods))
            .toHashCode()
        ;
    }

    @Override
    public boolean equals(Object obj) {
        return obj instanceof RouteInterface &&
             Objects.equals(((RouteInterface) obj).getName(), this.name) &&
             Objects.equals(((RouteInterface) obj).getController(), this.controller) &&
             Objects.equals(((RouteInterface) obj).getPath(), this.path) &&
             Objects.equals(new HashSet<>(((RouteInterface) obj).getMethods()), new HashSet<>(this.methods))
        ;
    }
}
fix equals / hashCode violation for route index #737