package de.uniba.dsg.bpmnspector.common.util;
import api.Resource;
import api.ValidationException;
import java.io.UnsupportedEncodingException;
import java.net.*;
import java.nio.file.Files;
import java.nio.file.InvalidPathException;
import java.nio.file.Path;
import java.nio.file.Paths;
public class ResourceUtils {
public static Resource determineAndCreateResourceFromString(String location, String baseLocation)
throws ValidationException {
try {
Resource resource;
URI importUri = new URI(location);
if(importUri.isAbsolute() && importUri.getScheme().toLowerCase().startsWith("http")) {
// process as URL
URL asURL = importUri.toURL();
resource = new Resource(asURL);
} else {
// process as file
Path importPath = Paths.get(importUri);
if (!importPath.isAbsolute() && baseLocation != null) {
// resolve relative path based on the baseLocation
importPath = Paths.get(baseLocation).getParent().resolve(importPath).normalize().toAbsolutePath();
}
if (Files.notExists(importPath) || !Files.isRegularFile(importPath)) {
throw new ValidationException("File does not exist.");
} else {
resource = new Resource(importPath);
}
}
return resource;
} catch (URISyntaxException | MalformedURLException | InvalidPathException e ) {
throw new ValidationException("Path " + location + " is invalid.", e);
}
}
}