package org.rascalmpl.uri.libraries; import org.rascalmpl.uri.AbstractSourceLocationInputOutputAdapter; import org.rascalmpl.uri.file.FileURIResolver; import org.rascalmpl.value.ISourceLocation; public class CoursesURIResolver extends AbstractSourceLocationInputOutputAdapter { private static final class WriteableCourseResolver extends FileURIResolver { private final String courseSrc; private WriteableCourseResolver(String courseSrc) { this.courseSrc = courseSrc; } @Override public String scheme() { return "courses"; } @Override protected String getPath(ISourceLocation uri) { String path = uri.getPath(); return courseSrc + (path.startsWith("/") ? path : ("/" + path)); } } private static class ReadonlyCourseResolver extends ClassResourceInput { public ReadonlyCourseResolver() { super("courses", ReadonlyCourseResolver.class, "/org/rascalmpl/courses"); } } public CoursesURIResolver() { super(System.getProperty("rascal.courses") != null ? new WriteableCourseResolver(System.getProperty("rascal.courses")) : new ReadonlyCourseResolver()); } }