/*
* Copyright 2015 MovingBlocks
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.terasology.assets.test;
import com.google.common.collect.Lists;
import org.terasology.module.ClasspathModule;
import org.terasology.module.Module;
import org.terasology.module.ModuleEnvironment;
import org.terasology.module.ModuleMetadata;
import org.terasology.module.ModulePathScanner;
import org.terasology.module.ModuleRegistry;
import org.terasology.module.TableModuleRegistry;
import org.terasology.module.sandbox.BytecodeInjector;
import org.terasology.module.sandbox.PermissionProvider;
import org.terasology.module.sandbox.PermissionProviderFactory;
import org.terasology.naming.Name;
import org.terasology.naming.Version;
import java.net.URISyntaxException;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.security.Permission;
import java.util.Collections;
/**
* @author Immortius
*/
public class VirtualModuleEnvironment {
protected ModuleRegistry moduleRegistry;
public VirtualModuleEnvironment() throws Exception {
moduleRegistry = new TableModuleRegistry();
ModuleMetadata testModuleMetadata = new ModuleMetadata();
testModuleMetadata.setId(new Name("test"));
testModuleMetadata.setVersion(new Version("1.0.0"));
Module testModule = ClasspathModule.create(testModuleMetadata, true, getClass());
moduleRegistry.add(testModule);
ModulePathScanner scanner = new ModulePathScanner();
for (Path path : testModule.getLocations()) {
Path virtualPath;
if (Files.isRegularFile(path)) {
FileSystem jarFileSystem = FileSystems.newFileSystem(path, null);
virtualPath = jarFileSystem.getPath("virtualModules");
} else {
virtualPath = path.resolve("virtualModules");
}
if (Files.isDirectory(virtualPath)) {
scanner.scan(moduleRegistry, virtualPath);
}
}
}
public ModuleRegistry getRegistry() {
return moduleRegistry;
}
public ModuleEnvironment createEnvironment(Module... modules) throws URISyntaxException {
return new ModuleEnvironment(Lists.newArrayList(modules), new PermissionProviderFactory() {
@Override
public PermissionProvider createPermissionProviderFor(Module module) {
return new PermissionProvider() {
@Override
public boolean isPermitted(Class aClass) {
return true;
}
@Override
public boolean isPermitted(Permission permission, Class<?> aClass) {
return false;
}
};
}
}, Collections.<BytecodeInjector>emptyList());
}
public ModuleEnvironment createEmptyEnvironment() {
return new ModuleEnvironment(Lists.<Module>newArrayList(), new PermissionProviderFactory() {
@Override
public PermissionProvider createPermissionProviderFor(Module module) {
return new PermissionProvider() {
@Override
public boolean isPermitted(Class aClass) {
return true;
}
@Override
public boolean isPermitted(Permission permission, Class<?> aClass) {
return false;
}
};
}
}, Collections.<BytecodeInjector>emptyList());
}
public ModuleEnvironment createEnvironment() throws URISyntaxException {
return new ModuleEnvironment(Lists.newArrayList(moduleRegistry.getLatestModuleVersion(new Name("test"))), new PermissionProviderFactory() {
@Override
public PermissionProvider createPermissionProviderFor(Module module) {
return new PermissionProvider() {
@Override
public boolean isPermitted(Class aClass) {
return true;
}
@Override
public boolean isPermitted(Permission permission, Class<?> aClass) {
return false;
}
};
}
}, Collections.<BytecodeInjector>emptyList());
}
}