package org.scribble.sesstype.name;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.scribble.ast.Constants;
import org.scribble.sesstype.kind.ModuleKind;
// General name: simple or full (a central class for value comparison)
public class ModuleName extends QualifiedName<ModuleKind>
{
private static final long serialVersionUID = 1L;
protected static final ModuleName EMPTY_MODULENAME = new ModuleName();
protected ModuleName(String... elems)
{
super(ModuleKind.KIND, elems);
}
public ModuleName(PackageName packname, ModuleName modname)
{
super(ModuleKind.KIND, compileModuleName(packname, modname));
}
public ModuleName(String modname)
{
super(ModuleKind.KIND, Name.compileElements(PackageName.EMPTY_PACKAGENAME.getElements(), modname));
}
public Path toPath()
{
String[] elems = getElements();
String file = elems[0];
for (int i = 1; i < elems.length; i++)
{
file += "/" + elems[i];
}
return Paths.get(file + "." + Constants.SCRIBBLE_FILE_EXTENSION);
}
public boolean isSimpleName()
{
return !isPrefixed();
}
@Override
public ModuleName getSimpleName()
{
return new ModuleName(getLastElement());
}
public PackageName getPrefix()
{
return new PackageName(getPrefixElements());
}
public PackageName getPackageName()
{
return getPrefix();
}
private static String[] compileModuleName(PackageName packname, ModuleName modname)
{
return Name.compileElements(packname.getElements(), modname.getLastElement());
}
@Override
public boolean equals(Object o)
{
if (this == o)
{
return true;
}
if (!(o instanceof ModuleName))
{
return false;
}
ModuleName n = (ModuleName) o;
return n.canEqual(this) && super.equals(o);
}
public boolean canEqual(Object o)
{
return o instanceof ModuleName;
}
@Override
public int hashCode()
{
int hash = 2797;
hash = 31 * super.hashCode();
return hash;
}
}