packagemanager.java
来自「swing编写的库存管理程序。毕业设计类」· Java 代码 · 共 579 行 · 第 1/2 页
JAVA
579 行
final ArrayList modules, final boolean fatal)
{
try
{
final Class c = this.getClass().getClassLoader().loadClass(moduleInfo.getModuleClass());
final Module module = (Module) c.newInstance();
if (acceptVersion(moduleInfo, module) == false)
{
// module conflict!
Log.warn("Module " + module.getName() + ": required version: " + moduleInfo +
", but found Version: \n" + module);
final PackageState state = new PackageState(module, PackageState.STATE_ERROR);
dropFailedModule(state);
return false;
}
final int moduleContained = containsModule(modules, module);
if (moduleContained == RETURN_MODULE_ERROR)
{
// the module caused harm before ...
Log.debug ("Indicated failure for module: " + module.getModuleClass());
final PackageState state = new PackageState(module, PackageState.STATE_ERROR);
dropFailedModule(state);
return false;
}
else if (moduleContained == RETURN_MODULE_UNKNOWN)
{
if (incompleteModules.contains(module))
{
// we assume that loading will continue ...
Log.error(new Log.SimpleMessage
("Circular module reference: This module definition is invalid: ",
module.getClass()));
final PackageState state = new PackageState(module, PackageState.STATE_ERROR);
dropFailedModule(state);
return false;
}
incompleteModules.add(module);
final ModuleInfo[] required = module.getRequiredModules();
for (int i = 0; i < required.length; i++)
{
if (loadModule(required[i], incompleteModules, modules, true) == false)
{
Log.debug ("Indicated failure for module: " + module.getModuleClass());
final PackageState state = new PackageState(module, PackageState.STATE_ERROR);
dropFailedModule(state);
return false;
}
}
final ModuleInfo[] optional = module.getOptionalModules();
for (int i = 0; i < optional.length; i++)
{
if (loadModule(optional[i], incompleteModules, modules, true) == false)
{
Log.debug(new Log.SimpleMessage("Optional module: ",
optional[i].getModuleClass(), " was not loaded."));
}
}
// maybe a dependent module defined the same base module ...
if (containsModule(modules, module) == RETURN_MODULE_UNKNOWN)
{
modules.add(module);
}
incompleteModules.remove(module);
}
return true;
}
catch (ClassNotFoundException cnfe)
{
if (fatal)
{
Log.warn(new Log.SimpleMessage
("Unresolved dependency for package: ", moduleInfo.getModuleClass()));
}
Log.debug(new Log.SimpleMessage ("ClassNotFound: ", cnfe.getMessage()));
return false;
}
catch (Exception e)
{
Log.warn(new Log.SimpleMessage("Exception while loading module: ", moduleInfo), e);
return false;
}
}
/**
* Checks, whether the given module meets the requirements defined in the module
* information.
*
* @param moduleRequirement the required module specification.
* @param module the module that should be checked against the specification.
* @return true, if the module meets the given specifications, false otherwise.
*/
private boolean acceptVersion(final ModuleInfo moduleRequirement, final Module module)
{
if (moduleRequirement.getMajorVersion() == null)
{
return true;
}
if (module.getMajorVersion() == null)
{
Log.warn("Module " + module.getName() + " does not define a major version.");
}
else
{
if (acceptVersion(moduleRequirement.getMajorVersion(),
module.getMajorVersion()) == false)
{
return false;
}
}
if (moduleRequirement.getMinorVersion() == null)
{
return true;
}
if (module.getMinorVersion() == null)
{
Log.warn("Module " + module.getName() + " does not define a minor version.");
}
else
{
if (acceptVersion(moduleRequirement.getMinorVersion(),
module.getMinorVersion()) == false)
{
return false;
}
}
if (moduleRequirement.getPatchLevel() == null)
{
return true;
}
if (module.getPatchLevel() == null)
{
Log.debug("Module " + module.getName() + " does not define a patch level.");
}
else
{
if (acceptVersion(moduleRequirement.getPatchLevel(),
module.getPatchLevel()) == false)
{
Log.debug ("Did not accept patchlevel: " + moduleRequirement.getPatchLevel() + " - " +
module.getPatchLevel());
return false;
}
}
return true;
}
/**
* Compare the version strings. If the strings have a different length,
* the shorter string is padded with spaces to make them compareable.
*
* @param modVer the version string of the module
* @param depModVer the version string of the dependent or optional module
* @return true, if the dependent module version is greater or equal than
* the modules required version.
*/
private boolean acceptVersion(final String modVer, final String depModVer)
{
final int mLength = Math.max(modVer.length(), depModVer.length());
char[] modVerArray;
char[] depVerArray;
if (modVer.length() > depModVer.length())
{
modVerArray = modVer.toCharArray();
depVerArray = new char[mLength];
final int delta = modVer.length() - depModVer.length();
Arrays.fill(depVerArray, 0, delta, ' ');
System.arraycopy(depVerArray, delta, depModVer.toCharArray(), 0, depModVer.length());
}
else if (modVer.length() < depModVer.length())
{
depVerArray = depModVer.toCharArray();
modVerArray = new char[mLength];
final char[] b1 = new char[mLength];
final int delta = depModVer.length() - modVer.length();
Arrays.fill(b1, 0, delta, ' ');
System.arraycopy(b1, delta, modVer.toCharArray(), 0, modVer.length());
}
else
{
depVerArray = depModVer.toCharArray();
modVerArray = modVer.toCharArray();
}
return new String(modVerArray).compareTo(new String (depVerArray)) <= 0;
}
/**
* Returns the default package configuration. Private report configuration
* instances may be inserted here. These inserted configuration can never override
* the settings from this package configuration.
*
* @return the package configuration.
*/
public PackageConfiguration getPackageConfiguration()
{
return packageConfiguration;
}
/**
* Returns an array of the currently active modules. The module definition
* returned contain all known modules, including buggy and unconfigured
* instances.
*
* @return the modules.
*/
public Module[] getAllModules ()
{
final Module[] mods = new Module[modules.size()];
for (int i = 0; i < modules.size(); i++)
{
final PackageState state = (PackageState) modules.get(i);
mods[i] = state.getModule();
}
return mods;
}
/**
* Returns all active modules. This array does only contain modules
* which were successfully configured and initialized.
*
* @return the list of all active modules.
*/
public Module[] getActiveModules ()
{
final ArrayList mods = new ArrayList();
for (int i = 0; i < modules.size(); i++)
{
final PackageState state = (PackageState) modules.get(i);
if (state.getState() == PackageState.STATE_INITIALIZED)
{
mods.add(state.getModule());
}
}
return (Module[]) mods.toArray(new Module[mods.size()]);
}
public void printUsedModules (PrintStream p)
{
Module[] allMods = PackageManager.getInstance().getAllModules();
ArrayList activeModules = new ArrayList();
ArrayList failedModules = new ArrayList();
for (int i = 0; i < allMods.length; i++)
{
if (isModuleAvailable(allMods[i]))
{
activeModules.add (allMods[i]);
}
else
{
failedModules.add (allMods[i]);
}
}
p.print("Active modules: ");
p.println(activeModules.size());
p.println("----------------------------------------------------------");
for (int i = 0; i < activeModules.size(); i++)
{
Module mod = (Module) activeModules.get(i);
p.print(new Log.PadMessage(mod.getModuleClass(), 70));
p.print(" [");
p.print(mod.getSubSystem());
p.println("]");
p.print(" Version: ");
p.print(mod.getMajorVersion());
p.print("-");
p.print(mod.getMinorVersion());
p.print("-");
p.print(mod.getPatchLevel());
p.print (" Producer: ");
p.println(mod.getProducer());
p.print(" Description: ");
p.println(mod.getDescription());
}
}
public static void main (String [] args)
{
Boot.start();
PackageManager.getInstance().printUsedModules(System.out);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?