// Path: hangar-api/src/main/java/com/spedge/hangar/index/IndexKey.java
// public class IndexKey
// {
//     private String key;
//     private RepositoryType type = RepositoryType.UNKNOWN;
// 
//     public IndexKey(RepositoryType type, String key)
//     {
//         this.key = key;
//         this.type = type;
//     }
// 
//     public RepositoryType getType()
//     {
//         return type;
//     }
// 
//     public String toPath()
//     {
//         return key;
//     }
// 
//     public String toString()
//     {
//         return type.getLanguage() + ":" + key;
//     }
// 
//     /* (non-Javadoc)
//      * @see java.lang.Object#hashCode()
//      */
//     @Override
//     public int hashCode()
//     {
//         final int prime = 31;
//         int result = 1;
//         result = prime * result + ((key == null) ? 0 : key.hashCode());
//         result = prime * result + ((type.getLanguage() == null) ? 0 : type.getLanguage().hashCode());
//         return result;
//     }
// 
//     /* (non-Javadoc)
//      * @see java.lang.Object#equals(java.lang.Object)
//      */
//     @Override
//     public boolean equals(Object obj)
//     {
//         if (this == obj)
//         {
//             return true;
//         }
//         if (obj == null)
//         {
//             return false;
//         }
//         if (getClass() != obj.getClass())
//         {
//             return false;
//         }
//         IndexKey other = (IndexKey) obj;
//         if (key == null)
//         {
//             if (other.key != null)
//             {
//                 return false;
//             }
//         }
//         else if (!key.equals(other.key))
//         {
//             return false;
//         }
//         if (type.getLanguage() != other.type.getLanguage())
//         {
//             return false;
//         }
//         return true;
//     }
// }
// 
// Path: hangar-api/src/main/java/com/spedge/hangar/repo/RepositoryType.java
// public enum RepositoryType
// {
//     RELEASE_JAVA(RepositoryLanguage.JAVA), 
//     SNAPSHOT_JAVA(RepositoryLanguage.JAVA), 
//     PROXY_JAVA(RepositoryLanguage.JAVA), 
//     PROXY_PYTHON(RepositoryLanguage.PYTHON),
//     UNKNOWN(RepositoryLanguage.UNKNOWN);
// 
//     private RepositoryLanguage lang;
// 
//     RepositoryType(RepositoryLanguage lang)
//     {
//         this.lang = lang;
//     }
// 
//     public RepositoryLanguage getLanguage()
//     {
//         return lang;
//     }
// }
// 
// Path: hangar-api/src/main/java/com/spedge/hangar/repo/java/base/JavaGroup.java
// public class JavaGroup
// {
//     private String group;
//     
//     private JavaGroup(String group)
//     {
//         this.group = group;
//     }
//     
//     /**
//      * Returns the dot-delimited group.
//      * @return Group using . (e.g. org.blah.things)
//      */
//     public String getGroup()
//     {
//         return group;
//     }
//     
//     /**
//      * Sometimes we want to return the Java Group as a path-based structure,
//      * either for storage purposes or querying a proxy.
//      * @return Group using / instead of . (e.g. org/blah/things)
//      */
//     public String getGroupAsPath()
//     {
//         return group.replace(".", "/");
//     }
//     
//     /**
//      * Used to generate a JavaGroup from a slash-delimited string
//      * @param groupString Changing /org/blah/things -> org.blah.things
//      * @return A new JavaGroup with the correct format.
//      */
//     public static JavaGroup slashDelimited(String groupString)
//     {
//         return new JavaGroup(groupString.replace('/', '.'));
//     }
//     
//     /**
//      * Used to generate a JavaGroup from a dot-delimited string
//      * @param groupString org.blah.things
//      * @return A new JavaGroup with the correct format.
//      */
//     public static JavaGroup dotDelimited(String groupString)
//     {
//         return new JavaGroup(groupString);
//     }
//     
//     @Override
//     public String toString()
//     {
//         return getGroup();
//     }
//     
//     /* (non-Javadoc)
//      * @see java.lang.Object#equals(java.lang.Object)
//      */
//     @Override
//     public boolean equals(Object obj)
//     {
//         if (this == obj)
//         {
//             return true;
//         }
//         if (obj == null)
//         {
//             return false;
//         }
//         if (getClass() != obj.getClass())
//         {
//             return false;
//         }
//         JavaGroup other = (JavaGroup) obj;
//         if (group == null)
//         {
//             if (other.group != null)
//             {
//                 return false;
//             }
//         }
//         else if (!group.equals(other.group))
//         {
//             return false;
//         }
//         return true;
//     }
//     
//     /* (non-Javadoc)
//      * @see java.lang.Object#hashCode()
//      */
//     @Override
//     public int hashCode()
//     {
//         final int prime = 31;
//         int result = 1;
//         result = prime * result + ((group == null) ? 0 : group.hashCode());
//         return result;
//     }
//     
// }


import com.spedge.hangar.index.IndexKey;
import com.spedge.hangar.repo.RepositoryType;
import com.spedge.hangar.repo.java.base.JavaGroup;
import java.util.Objects;
package com.spedge.hangar.repo.java.index;



public class JavaIndexKey extends IndexKey
{
    private JavaGroup group;
    private String artifact = "";
    private String version = "";

    /**
     * <p>Creates a Key to be used to register an IndexArtifact with
     * the Index layer. </p>
     * 
     * @param type Type of Repository this Artifact will be stored from.
     * @param group Group of the Artifact
     * @param artifact Name of the Artifact
     * @param version Version of the Artifact
     */
    public JavaIndexKey(RepositoryType type, JavaGroup group, String artifact, String version)
    {
        super(type, group + ":" + artifact + ":" + version);

        this.group = group;
        this.artifact = artifact;
        this.version = version;
    }

// Path: hangar-api/src/main/java/com/spedge/hangar/index/IndexKey.java
// public class IndexKey
// {
//     private String key;
//     private RepositoryType type = RepositoryType.UNKNOWN;
// 
//     public IndexKey(RepositoryType type, String key)
//     {
//         this.key = key;
//         this.type = type;
//     }
// 
//     public RepositoryType getType()
//     {
//         return type;
//     }
// 
//     public String toPath()
//     {
//         return key;
//     }
// 
//     public String toString()
//     {
//         return type.getLanguage() + ":" + key;
//     }
// 
//     /* (non-Javadoc)
//      * @see java.lang.Object#hashCode()
//      */
//     @Override
//     public int hashCode()
//     {
//         final int prime = 31;
//         int result = 1;
//         result = prime * result + ((key == null) ? 0 : key.hashCode());
//         result = prime * result + ((type.getLanguage() == null) ? 0 : type.getLanguage().hashCode());
//         return result;
//     }
// 
//     /* (non-Javadoc)
//      * @see java.lang.Object#equals(java.lang.Object)
//      */
//     @Override
//     public boolean equals(Object obj)
//     {
//         if (this == obj)
//         {
//             return true;
//         }
//         if (obj == null)
//         {
//             return false;
//         }
//         if (getClass() != obj.getClass())
//         {
//             return false;
//         }
//         IndexKey other = (IndexKey) obj;
//         if (key == null)
//         {
//             if (other.key != null)
//             {
//                 return false;
//             }
//         }
//         else if (!key.equals(other.key))
//         {
//             return false;
//         }
//         if (type.getLanguage() != other.type.getLanguage())
//         {
//             return false;
//         }
//         return true;
//     }
// }
// 
// Path: hangar-api/src/main/java/com/spedge/hangar/repo/RepositoryType.java
// public enum RepositoryType
// {
//     RELEASE_JAVA(RepositoryLanguage.JAVA), 
//     SNAPSHOT_JAVA(RepositoryLanguage.JAVA), 
//     PROXY_JAVA(RepositoryLanguage.JAVA), 
//     PROXY_PYTHON(RepositoryLanguage.PYTHON),
//     UNKNOWN(RepositoryLanguage.UNKNOWN);
// 
//     private RepositoryLanguage lang;
// 
//     RepositoryType(RepositoryLanguage lang)
//     {
//         this.lang = lang;
//     }
// 
//     public RepositoryLanguage getLanguage()
//     {
//         return lang;
//     }
// }
// 
// Path: hangar-api/src/main/java/com/spedge/hangar/repo/java/base/JavaGroup.java
// public class JavaGroup
// {
//     private String group;
//     
//     private JavaGroup(String group)
//     {
//         this.group = group;
//     }
//     
//     /**
//      * Returns the dot-delimited group.
//      * @return Group using . (e.g. org.blah.things)
//      */
//     public String getGroup()
//     {
//         return group;
//     }
//     
//     /**
//      * Sometimes we want to return the Java Group as a path-based structure,
//      * either for storage purposes or querying a proxy.
//      * @return Group using / instead of . (e.g. org/blah/things)
//      */
//     public String getGroupAsPath()
//     {
//         return group.replace(".", "/");
//     }
//     
//     /**
//      * Used to generate a JavaGroup from a slash-delimited string
//      * @param groupString Changing /org/blah/things -> org.blah.things
//      * @return A new JavaGroup with the correct format.
//      */
//     public static JavaGroup slashDelimited(String groupString)
//     {
//         return new JavaGroup(groupString.replace('/', '.'));
//     }
//     
//     /**
//      * Used to generate a JavaGroup from a dot-delimited string
//      * @param groupString org.blah.things
//      * @return A new JavaGroup with the correct format.
//      */
//     public static JavaGroup dotDelimited(String groupString)
//     {
//         return new JavaGroup(groupString);
//     }
//     
//     @Override
//     public String toString()
//     {
//         return getGroup();
//     }
//     
//     /* (non-Javadoc)
//      * @see java.lang.Object#equals(java.lang.Object)
//      */
//     @Override
//     public boolean equals(Object obj)
//     {
//         if (this == obj)
//         {
//             return true;
//         }
//         if (obj == null)
//         {
//             return false;
//         }
//         if (getClass() != obj.getClass())
//         {
//             return false;
//         }
//         JavaGroup other = (JavaGroup) obj;
//         if (group == null)
//         {
//             if (other.group != null)
//             {
//                 return false;
//             }
//         }
//         else if (!group.equals(other.group))
//         {
//             return false;
//         }
//         return true;
//     }
//     
//     /* (non-Javadoc)
//      * @see java.lang.Object#hashCode()
//      */
//     @Override
//     public int hashCode()
//     {
//         final int prime = 31;
//         int result = 1;
//         result = prime * result + ((group == null) ? 0 : group.hashCode());
//         return result;
//     }
//     
// }


// Path: hangar-api/src/main/java/com/spedge/hangar/repo/java/index/JavaIndexKey.java
import com.spedge.hangar.index.IndexKey;
import com.spedge.hangar.repo.RepositoryType;
import com.spedge.hangar.repo.java.base.JavaGroup;
import java.util.Objects;

package com.spedge.hangar.repo.java.index;



public class JavaIndexKey extends IndexKey
{
    private JavaGroup group;
    private String artifact = "";
    private String version = "";

    /**
     * <p>Creates a Key to be used to register an IndexArtifact with
     * the Index layer. </p>
     * 
     * @param type Type of Repository this Artifact will be stored from.
     * @param group Group of the Artifact
     * @param artifact Name of the Artifact
     * @param version Version of the Artifact
     */
    public JavaIndexKey(RepositoryType type, JavaGroup group, String artifact, String version)
    {
        super(type, group + ":" + artifact + ":" + version);

        this.group = group;
        this.artifact = artifact;
        this.version = version;
    }

    public JavaGroup getGroup()