package org.kalisen.classpathdoctor;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ResourceBundle;
public class PathResolver {
private VariableResolver varResolver = null;
private String fileSeparator = null;
public PathResolver() {
// default constructor
}
public PathResolver(String fileSeparator) {
this.fileSeparator = fileSeparator;
}
public PathEntry resolve(String path) {
PathEntry result = null;
if (path == null) {
result = new InvalidPathEntry(path, ResourceBundle.getBundle(
"UsersMessages").getString("null.is.not.a.valid.path"));
} else if ("".equals(path)) {
result = EmptyPathEntry.INSTANCE;
} else {
String expandedPath = null;
expandedPath = getVariableResolver().resolve(path);
try {
URL url = new URL(expandedPath);
result = new URLPath(url);
} catch (MalformedURLException e) {
File f = new File(expandedPath);
if (f.isDirectory()) {
result = new DirectoryPath(f, getFileSeparator());
} else if (f.isFile()) {
result = new JarPath(f);
} else {
result = new InvalidPathEntry(expandedPath, ResourceBundle
.getBundle("UsersMessages").getString(
"entry.doesnt.exist"));
}
}
}
return result;
}
public VariableResolver getVariableResolver() {
if (this.varResolver == null) {
this.varResolver = buildVariableResolver();
}
return this.varResolver;
}
private VariableResolver buildVariableResolver() {
VariableResolver resolver = null;
String pathSeparator = System.getProperty("path.separator");
if (":".equals(pathSeparator)) {
resolver = new UnixVariableResolver();
} else {
resolver = new WindowsVariableResolver();
}
return resolver;
}
public void setVariableResolver(VariableResolver varResolver) {
if (varResolver == null) {
throw new IllegalArgumentException(ResourceBundle.getBundle(
"UsersMessages").getString("null.is.not.a.valid.argument"));
}
this.varResolver = varResolver;
}
public String getFileSeparator() {
if (this.fileSeparator == null) {
this.fileSeparator = System.getProperty("file.separator");
}
return this.fileSeparator;
}
public void setFileSeparator(String fileSeparator) {
if (fileSeparator == null) {
throw new IllegalArgumentException("null is not a valid argument");
}
this.fileSeparator = fileSeparator;
}
}