📄 appextensions.java
字号:
/* * JRemCntl - Copyright (C) 2007 Filippo Di Vattimo <fildiv@gmail.com> * See COPYING */package fildiv.jremcntl.server.core;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Collections;import java.util.Hashtable;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.jar.Attributes;import java.util.jar.JarFile;import java.util.jar.Manifest;import fildiv.jremcntl.common.core.Logger;import fildiv.jremcntl.common.util.JRemUtils;import fildiv.jremcntl.server.utils.JRemServerUtils.ExtFileFilter;public class AppExtensions { private Environment env; private Logger logger; private Map extsMap; protected AppExtensions() { this.env = JRemEnv.getInstance(); this.logger = env.getLogger(); try { readExtensionsInfo(); } catch(Exception e) { logger.error("Unable to load extension"); logger.error(e); } } protected void readExtensionsInfo() { extsMap = new Hashtable(); if (env.isLogEnabled()) logger.info("Reading extensions from " + env.getExtDirPath()); File extDir = new File(env.getExtDirPath()); ExtFileFilter ff = new ExtFileFilter(".jar"); File[] files = extDir.listFiles(ff); for (int index = 0; index < files.length; ++index) { File f = files[index]; List extsList = readExtensionInfo(f); if (extsList != null) { for (Iterator i = extsList.iterator(); i.hasNext(); ) { AppExtension appExt = (AppExtension) i.next(); extsMap.put(appExt.getID(), appExt); } } } if (env.isLogEnabled()) logger.info("Done ..."); } protected List readExtensionInfo(File f) { logger.info("Reading file : " + f.getAbsolutePath()); JarFile jf = null; try { jf = new JarFile(f); } catch (IOException e) { logger.error("Error reading " + f.getAbsolutePath()); logger.error(e); return null; } Manifest m = null; try { m = jf.getManifest(); } catch (IOException e) { logger.error("Error reading manifest from " + f.getAbsolutePath()); logger.error(e); return null; } Attributes attrs = m.getAttributes(ExtensionConst.MANIFEST_SECTION); List infos = null; try { infos = readExtensionInfo(attrs, f); } catch(Exception e) { logger.error("Error reading extension information from " + f.getAbsolutePath()); logger.error(e); return null; } return infos; } protected List readExtensionInfo(Attributes attrs, File f) { List extList = new ArrayList(); int index = 1; while (true) { String shortName = getAttrValue(attrs, ExtensionConst.MANIFEST_SHORT_NAME, index); if (shortName == null) { if (index == 1) logger.error(ExtensionConst.MANIFEST_SHORT_NAME + " was not found in MANIFEST (" + f.getAbsolutePath() + ")"); return extList; } String id = getAttrValue(attrs, ExtensionConst.MANIFEST_EXT_ID, index); if (id == null) { if (index == 1) logger.error(ExtensionConst.MANIFEST_EXT_ID + " was not found in MANIFEST (" + f.getAbsolutePath() + ")"); return extList; } String className = getAttrValue(attrs, ExtensionConst.MANIFEST_CLASS_NAME, index); if (className == null) { if (index == 1) logger.error(ExtensionConst.MANIFEST_CLASS_NAME + " was not found in MANIFEST (" + f.getAbsolutePath() + ")"); return extList; } if (env.isLogEnabled()) logger.info("found : " + shortName + "[" + id + "]"); AppExtension ext = new AppExtension(id, shortName, className, f.getAbsolutePath()); extList.add(ext); index++; } } protected String getAttrValue(Attributes attrs, String attrName, int index) { attrName = attrName + "-" + index; String attrValue = attrs.getValue(attrName); return attrValue; } public AppExtension getExtension(String id) { if (JRemUtils.isEmptyString(id)) throw new IllegalArgumentException("id cannot be null"); return (AppExtension) extsMap.get(id); } public List asList() { return Collections.unmodifiableList( new ArrayList(extsMap.values())) ; } public AppExtension getDefault() { return getExtension(ExtensionConst.DEFAULT_EXT_ID) ; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -