📄 defaultapplicationinitializer.java
字号:
try {
blackList = loadList(
configuration.getProperty(PARAM_PLUGINS_BLACK_LIST, null));
} catch (IOException ioe) {
log.warn("failed loading black list", ioe); //$NON-NLS-1$
}
if (blackList != null) {
log.debug("black list loaded"); //$NON-NLS-1$
}
}
private Set loadList(final String location) throws IOException {
if (location == null) {
return null;
}
Set result = new HashSet();
BufferedReader reader = new BufferedReader(new InputStreamReader(
new FileInputStream(location), "UTF-8")); //$NON-NLS-1$
try {
String line;
while ((line = reader.readLine()) != null) {
line = line.trim();
if (line.length() > 0) {
result.add(line);
}
}
} finally {
reader.close();
}
log.debug("read " + result.size() //$NON-NLS-1$
+ " list items from " + location); //$NON-NLS-1$
return result;
}
private PluginsCollector getCollectorInstance(
final String className) {
if (className != null) {
try {
return (PluginsCollector) Class.forName(className)
.newInstance();
} catch (InstantiationException ie) {
log.warn("failed instantiating plug-ins collector " //$NON-NLS-1$
+ className, ie);
} catch (IllegalAccessException iae) {
log.warn("failed instantiating plug-ins collector " //$NON-NLS-1$
+ className, iae);
} catch (ClassNotFoundException cnfe) {
log.warn("failed instantiating plug-ins collector " //$NON-NLS-1$
+ className, cnfe);
}
}
return new DefaultPluginsCollector();
}
/**
* Initializes application. The sequence is:
* <ul>
* <li>Collect plug-ins locations using configured
* {@link PluginsCollector}.</li>
* <li>Get {@link PluginManager} instance from {@link ObjectFactory}
* using code
* <code>ObjectFactory.newInstance(config).createManager()</code>.</li>
* <li>Publish collected plug-ins using
* {@link PluginManager#publishPlugins(org.java.plugin.PluginManager.PluginLocation[])}.</li>
* <li>Check integrity if that's configured.</li>
* <li>Get application plug-in and call it
* <code>JpfApplication initApplication(Properties)</code> method.</li>
* <li>Return received instance of {@link Application} interface.</li>
* </ul>
*
* @see org.java.plugin.boot.ApplicationInitializer#initApplication(
* BootErrorHandler, String[])
*/
public Application initApplication(final BootErrorHandler errorHandler,
final String[] args) throws Exception {
// Prepare parameters to start plug-in manager.
log.debug("collecting plug-in locations"); //$NON-NLS-1$
Collection pluginLocations = collector.collectPluginLocations();
log.debug("collected " + pluginLocations.size() //$NON-NLS-1$
+ " plug-in locations, instantiating plug-in manager"); //$NON-NLS-1$
// Create instance of plug-in manager.
PluginManager pluginManager =
ObjectFactory.newInstance(config).createManager();
pluginLocations = filterPluginLocations(pluginManager.getRegistry(),
pluginLocations);
log.debug(pluginLocations.size() + " plug-in locations remain after " //$NON-NLS-1$
+ "applying filters, publishing plug-ins"); //$NON-NLS-1$
// Publish discovered plug-in manifests and corresponding plug-in folders.
pluginManager.publishPlugins(
(PluginLocation[]) pluginLocations.toArray(
new PluginLocation[pluginLocations.size()]));
if (!"off".equalsIgnoreCase(integrityCheckMode)) { //$NON-NLS-1$
// Check plug-in's integrity.
log.debug("checking plug-ins set integrity"); //$NON-NLS-1$
IntegrityCheckReport integrityCheckReport =
pluginManager.getRegistry().checkIntegrity(
"light".equalsIgnoreCase(integrityCheckMode) ? null //$NON-NLS-1$
: pluginManager.getPathResolver());
log.info("integrity check done: errors - " //$NON-NLS-1$
+ integrityCheckReport.countErrors() + ", warnings - " //$NON-NLS-1$
+ integrityCheckReport.countWarnings());
if (integrityCheckReport.countErrors() != 0) {
// Something wrong in plug-ins set.
log.info(integrityCheckReport2str(integrityCheckReport));
if (!errorHandler.handleError(ResourceManager.getMessage(
Boot.PACKAGE_NAME, "integrityCheckFailed"), //$NON-NLS-1$
integrityCheckReport)) {
return null;
}
} else if (log.isDebugEnabled()
&& ((integrityCheckReport.countErrors() > 0)
|| (integrityCheckReport.countWarnings() > 0))) {
log.debug(integrityCheckReport2str(integrityCheckReport));
}
}
// application plug-in ID
String appPluginId = config.getProperty(PARAM_APPLICATION_PLUGIN);
log.info("application plug-in is " + appPluginId); //$NON-NLS-1$
// get the start-up application plug-in
Plugin appPlugin = pluginManager.getPlugin(appPluginId);
log.debug("got application plug-in " + appPlugin //$NON-NLS-1$
+ ", initializing application"); //$NON-NLS-1$
if (!(appPlugin instanceof ApplicationPlugin)) {
log.error("application plug-in class " //$NON-NLS-1$
+ appPlugin.getClass().getName()
+ " doesn't assignable with " //$NON-NLS-1$
+ ApplicationPlugin.class.getName());
throw new ClassCastException(appPlugin.getClass().getName());
}
return ((ApplicationPlugin) appPlugin).initApplication(
config.getSubset(appPluginId + "."), args); //$NON-NLS-1$
}
protected String integrityCheckReport2str(final IntegrityCheckReport report) {
StringBuffer buf = new StringBuffer();
buf.append("integrity check report:\r\n"); //$NON-NLS-1$
buf.append("-------------- REPORT BEGIN -----------------\r\n"); //$NON-NLS-1$
for (Iterator it = report.getItems().iterator(); it.hasNext();) {
IntegrityCheckReport.ReportItem item =
(IntegrityCheckReport.ReportItem) it.next();
buf.append("\tseverity=").append(item.getSeverity()) //$NON-NLS-1$
.append("; code=").append(item.getCode()) //$NON-NLS-1$
.append("; message=").append(item.getMessage()) //$NON-NLS-1$
.append("; source=").append(item.getSource()) //$NON-NLS-1$
.append("\r\n"); //$NON-NLS-1$
}
buf.append("-------------- REPORT END -----------------"); //$NON-NLS-1$
return buf.toString();
}
/**
* This method may remove unwanted plug-in locations from the given list.
* Standard implementation applies black/white lists logic.
* @param registry plug-in registry to process manifests
* @param pluginLocations collected plug-in locations to be filtered
* @throws ManifestProcessingException
*/
protected Collection filterPluginLocations(final PluginRegistry registry,
final Collection pluginLocations)
throws ManifestProcessingException {
if ((whiteList == null) && (blackList == null)) {
return pluginLocations;
}
List result = new LinkedList();
for (Iterator ir = pluginLocations.iterator(); ir.hasNext();) {
PluginLocation pluginLocation = (PluginLocation) ir.next();
ManifestInfo manifestInfo = registry.readManifestInfo(
pluginLocation.getManifestLocation());
if (whiteList != null) {
if (isPluginInList(registry, manifestInfo, whiteList)) {
result.add(pluginLocation);
continue;
}
}
if ((blackList != null)
&& isPluginInList(registry, manifestInfo, blackList)) {
continue;
}
result.add(pluginLocation);
}
return result;
}
private boolean isPluginInList(final PluginRegistry registry,
final ManifestInfo manifestInfo, final Set list) {
if (list.contains(manifestInfo.getId())) {
return true;
}
return list.contains(registry.makeUniqueId(manifestInfo.getId(),
manifestInfo.getVersion()));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -