forked from fanruan/design
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
3.4 KiB
128 lines
3.4 KiB
package com.fr.plugin; |
|
|
|
import com.fr.design.actions.UpdateAction; |
|
import com.fr.file.XMLFileManager; |
|
import com.fr.general.ComparatorUtils; |
|
import com.fr.general.FRLogger; |
|
import com.fr.general.GeneralUtils; |
|
import com.fr.stable.StringUtils; |
|
import com.fr.stable.xml.XMLPrintWriter; |
|
import com.fr.stable.xml.XMLReadable; |
|
import com.fr.stable.xml.XMLableReader; |
|
|
|
import java.util.ArrayList; |
|
|
|
/** |
|
* Created by IntelliJ IDEA. |
|
* Author : daisy |
|
* Version: 6.5.6 |
|
* Date: 13-12-20 |
|
* Time: 下午5:05 |
|
*/ |
|
public class PluginManager extends XMLFileManager { |
|
|
|
private static PluginManager pluginManager = null; |
|
|
|
private String extensionPoint = StringUtils.EMPTY; |
|
|
|
private ArrayList<UpdateAction> resultList = new ArrayList<UpdateAction>(); |
|
|
|
|
|
public synchronized static PluginManager getInstance() { |
|
if (pluginManager == null) { |
|
pluginManager = new PluginManager(); |
|
} |
|
return pluginManager; |
|
} |
|
|
|
|
|
public PluginManager() { |
|
|
|
} |
|
|
|
/** |
|
* 文件名 |
|
* @return 文件名 |
|
*/ |
|
public String fileName() { |
|
return "plugin.xml"; |
|
} |
|
|
|
|
|
public void setExtensionPoint(String point) { |
|
extensionPoint = point; |
|
resultList.clear(); |
|
pluginManager.readXMLFile(); |
|
} |
|
|
|
|
|
@Override |
|
public void readXML(XMLableReader reader) { |
|
if (extensionPoint == StringUtils.EMPTY) { |
|
return; |
|
} |
|
if (reader.getTagName().equals("PluginManager")) { |
|
reader.readXMLObject(new XMLReadable() { |
|
@Override |
|
public void readXML(XMLableReader reader) { |
|
readExtension(reader); |
|
} |
|
}); |
|
} |
|
|
|
|
|
} |
|
|
|
private void readExtension(XMLableReader reader) { |
|
if (reader.isChildNode()) { |
|
if (reader.getTagName().equals("Extension")) { |
|
String name = null, tmpVal = null; |
|
if ((tmpVal = reader.getAttrAsString("position", null)) != null) { |
|
name = tmpVal; |
|
} |
|
if (!ComparatorUtils.equals(name, extensionPoint)) { |
|
return; |
|
} |
|
reader.readXMLObject(new XMLReadable() { |
|
@Override |
|
public void readXML(XMLableReader reader) { |
|
readActions(reader); |
|
} |
|
}); |
|
|
|
} |
|
} |
|
} |
|
|
|
private void readActions(XMLableReader reader) { |
|
if (reader.isChildNode()) { |
|
if (reader.getTagName().equals("Action")) { |
|
String name = null, tmpVal = null; |
|
if ((tmpVal = reader.getAttrAsString("class", null)) != null) { |
|
name = tmpVal; |
|
} |
|
//读取模板数据集菜单 |
|
if (name.isEmpty()) { |
|
return; |
|
} |
|
try { |
|
UpdateAction action = (UpdateAction) GeneralUtils.classForName(name).newInstance(); |
|
PluginManager.this.resultList.add(action); |
|
} catch (Exception exp) { |
|
FRLogger.getLogger().error(exp.getMessage(), exp); |
|
} |
|
} |
|
} |
|
|
|
} |
|
|
|
|
|
public ArrayList<UpdateAction> getResultList() { |
|
return resultList; |
|
} |
|
|
|
@Override |
|
public void writeXML(XMLPrintWriter writer) { |
|
} |
|
|
|
} |