Modules.java
/* *******************************************************************
* Copyright (c) 1999-2001 Xerox Corporation,
* 2002 Palo Alto Research Center, Incorporated (PARC).
* All rights reserved.
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v 2.0
* which accompanies this distribution and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
*
* Contributors:
* Xerox/PARC initial implementation
* ******************************************************************/
package org.aspectj.internal.tools.build;
import java.io.File;
import java.util.Hashtable;
/**
* Registration and factory for modules
* @see Module
* @see Builder
*/
public class Modules {
private final Hashtable<String,Module> modules = new Hashtable<>();
public final File baseDir;
public final File jarDir;
private final Messager handler;
public Modules(File baseDir, File jarDir, Messager handler) {
this.baseDir = baseDir;
this.jarDir = jarDir;
this.handler = handler;
Util.iaxIfNotCanReadDir(baseDir, "baseDir");
Util.iaxIfNotCanReadDir(jarDir, "jarDir");
Util.iaxIfNull(handler, "handler");
}
/**
* Get module associated with name.
* @return fail if unable to find or create module {name}.
*/
public Module getModule(String name) {
if (null == name) {
return null;
}
Module result = modules.get(name);
if (null == result) {
File moduleDir = new File(baseDir, name);
if (!Util.canReadDir(moduleDir)) {
handler.error("not a module: " + name);
} else {
result = new Module(moduleDir, jarDir, name, this, handler);
if (result.valid) {
modules.put(name, result);
} else {
handler.error("invalid module: " + result.toLongString());
}
}
}
return result;
}
}