/**
* Copyright (c) 2012-2016 André Bargull
* Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms.
*
* <https://github.com/anba/es6draft>
*/
package com.github.anba.es6draft.runtime.modules.loader;
import java.net.URI;
import java.nio.file.Path;
import java.nio.file.Paths;
import com.github.anba.es6draft.runtime.internal.RuntimeContext;
import com.github.anba.es6draft.runtime.modules.MalformedNameException;
import com.github.anba.es6draft.runtime.modules.ModuleRecord;
import com.github.anba.es6draft.runtime.modules.SourceIdentifier;
/**
*
*/
public abstract class AbstractFileModuleLoader<MODULE extends ModuleRecord> extends AbstractModuleLoader<MODULE> {
private final Path baseDirectory;
private final URI baseDirectoryURI;
protected AbstractFileModuleLoader(RuntimeContext context) {
super(context);
this.baseDirectory = context.getBaseDirectory();
this.baseDirectoryURI = context.getBaseDirectory().toUri();
}
public final Path getBaseDirectory() {
return baseDirectory;
}
/**
* {@inheritDoc}
*
* @throws IllegalArgumentException
* if the source identifier is not a {@link FileSourceIdentifier}
*/
@Override
protected final FileModuleSource loadSource(SourceIdentifier identifier) {
if (!(identifier instanceof FileSourceIdentifier)) {
throw new IllegalArgumentException();
}
FileSourceIdentifier sourceId = (FileSourceIdentifier) identifier;
Path path = Paths.get(baseDirectoryURI.resolve(sourceId.toUri()));
return new FileModuleSource(sourceId, path);
}
@Override
public FileSourceIdentifier normalizeName(String unnormalizedName, SourceIdentifier referrerId)
throws MalformedNameException {
return new FileSourceIdentifier(unnormalizedName, referrerId);
}
}