/*******************************************************************************
* Copyright (c) 2014 Bruno Medeiros and other Contributors.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package melnorme.lang.tooling.context;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import melnorme.utilbox.misc.Location;
import dtool.engine.modules.ModuleNamingRules;
public class BundleModules {
// TODO use compile-time unmodifiable interfaces
public final Map<ModuleFullName, Location> modules;
public final Set<Location> moduleFiles;
public final List<Location> importFolders;
/**
* Optimized constructor
*/
public BundleModules(HashMap<ModuleFullName, Location> modules, HashSet<Location> moduleFiles,
List<Location> importFolders) {
this.modules = Collections.unmodifiableMap(modules);
this.moduleFiles = Collections.unmodifiableSet(moduleFiles);
this.importFolders = Collections.unmodifiableList(new ArrayList<>(importFolders));
}
public Set<Location> getModuleFiles() {
return moduleFiles;
}
public Map<ModuleFullName, Location> getModules() {
return modules;
}
public Location getModuleAbsolutePath(ModuleFullName moduleFullName) {
return modules.get(moduleFullName);
}
protected void findModules(String fullNamePrefix, HashSet<String> matchedModules) {
Set<ModuleFullName> moduleEntries = modules.keySet();
for (ModuleFullName moduleEntry : moduleEntries) {
String moduleFullName = moduleEntry.getFullNameAsString();
if(moduleFullName.startsWith(fullNamePrefix)) {
matchedModules.add(moduleFullName);
}
}
}
public static BundleModules createSyntheticBundleModules(Location filePath) {
HashMap<ModuleFullName, Location> modules = new HashMap<>();
HashSet<Location> moduleFiles = new HashSet<>();
moduleFiles.add(filePath);
ModuleFullName moduleFullName = ModuleNamingRules.getValidModuleNameOrNull(filePath.path.getFileName());
modules.put(moduleFullName, filePath);
return new BundleModules(modules, moduleFiles, new ArrayList<Location>());
}
}