/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.lang.reflect.gs;
import gw.fs.IDirectory;
import gw.fs.IFile;
import gw.util.Pair;
import java.io.File;
import java.io.Reader;
import java.net.URL;
import java.util.List;
public interface IFileSystemGosuClassRepository extends IGosuClassRepository
{
IDirectory[] getSourcePath();
void setSourcePath(IDirectory[] sourcePath);
String getClassNameFromFile( IDirectory root, IFile file, String[] fileExts );
List<Pair<String, IFile>> findAllFilesByExtension(String extension);
String getResourceName(URL url);
IFile findFirstFile(String resourceName);
public static class ClassPathEntry
{
private final IDirectory _path;
private final boolean _isTestResource;
public ClassPathEntry( IDirectory path, boolean testResource )
{
_path = path;
_isTestResource = testResource;
}
public IDirectory getPath()
{
return _path;
}
public boolean isTestResource()
{
return _isTestResource;
}
@Override
public String toString() {
return "" + _path;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof ClassPathEntry)) {
return false;
}
ClassPathEntry that = (ClassPathEntry) o;
if (_isTestResource != that._isTestResource) {
return false;
}
if (_path != null ? !_path.equals(that._path) : that._path != null) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = _path != null ? _path.hashCode() : 0;
result = 31 * result + (_isTestResource ? 1 : 0);
return result;
}
}
/**
*/
public static interface IClassFileInfo
{
IDirectory getParentFile();
IFile getFile();
Reader getReader();
String getFileName();
String getNonCanonicalFileName();
String getFilePath();
int getClassPathLength();
boolean hasInnerClass();
ISourceFileHandle getSourceFileHandle();
ClassPathEntry getEntry();
String getContent();
}
class Util
{
public static boolean isClassFileName( String strName, String[] fileExts )
{
for( String strExt : fileExts )
{
if( strName.endsWith( strExt ) )
{
return true;
}
}
return false;
}
public static void shiftInnerClassToFileName( StringBuilder innerClass, StringBuilder fileName )
{
if( innerClass.length() > 0 && fileName.length() > 0 )
{
fileName.append( File.separatorChar );
}
while( innerClass.length() > 0 && innerClass.charAt( 0 ) != '.' )
{
fileName.append( innerClass.charAt( 0 ) );
innerClass.deleteCharAt( 0 );
}
if( innerClass.length() > 0 && innerClass.charAt( 0 ) == '.' )
{
innerClass.deleteCharAt( 0 );
}
}
}
}