
org.tinygroup.tinyscript.fileresolver.ScriptSegmentMvcProcessor Maven / Gradle / Ivy
The newest version!
package org.tinygroup.tinyscript.fileresolver;
import java.io.InputStream;
import org.tinygroup.commons.tools.FileUtil;
import org.tinygroup.commons.tools.StringUtil;
import org.tinygroup.config.util.ConfigurationUtil;
import org.tinygroup.fileresolver.impl.AbstractFileProcessor;
import org.tinygroup.logger.LogLevel;
import org.tinygroup.tinyscript.ScriptEngine;
import org.tinygroup.tinyscript.ScriptEngineFactory;
import org.tinygroup.tinyscript.ScriptSegment;
import org.tinygroup.tinyscript.interpret.ResourceBundleUtil;
import org.tinygroup.tinyscript.interpret.ScriptUtil;
import org.tinygroup.tinyscript.mvc.TinyScriptMvcManager;
import org.tinygroup.vfs.FileObject;
/**
* 扫描指定模块的tiny脚本信息
* @author yancheng11334
*
*/
public class ScriptSegmentMvcProcessor extends AbstractFileProcessor {
private ScriptEngine scriptEngine;
private String[] moduleNames;
private TinyScriptMvcManager tinyScriptMvcManager;
private static final String[] DEFALUT_MODULE_NAMES = {"service","dao"}; //默认的模块名
public ScriptEngine getScriptEngine() {
if(scriptEngine==null){
try{
scriptEngine = ScriptEngineFactory.createByBean();
}catch(Exception e){
throw new RuntimeException(e);
}
}
return scriptEngine;
}
public void setScriptEngine(ScriptEngine scriptEngine) {
this.scriptEngine = scriptEngine;
}
public TinyScriptMvcManager getTinyScriptMvcManager() {
return tinyScriptMvcManager;
}
public void setTinyScriptMvcManager(TinyScriptMvcManager tinyScriptMvcManager) {
this.tinyScriptMvcManager = tinyScriptMvcManager;
}
public String[] getModules(){
if(moduleNames==null){
String scriptModuleName = ConfigurationUtil.getConfigurationManager().getConfiguration("scriptModuleName");
if(StringUtil.isEmpty(scriptModuleName)){
moduleNames = DEFALUT_MODULE_NAMES;
}else{
moduleNames = scriptModuleName.split(",");
}
}
return moduleNames;
}
public void process() {
for (FileObject fileObject : changeList) {
LOGGER.logMessage(LogLevel.INFO, ResourceBundleUtil.getDefaultMessage("moduleprocessor.load.start", fileObject.getAbsolutePath()));
ScriptSegment segment = loadScriptSegment(fileObject);
if(segment!=null){
getScriptEngine().addScriptSegment(segment);
if(isService(fileObject)){
tinyScriptMvcManager.addScriptClassConfig(segment);
}
LOGGER.logMessage(LogLevel.INFO, ResourceBundleUtil.getDefaultMessage("moduleprocessor.loading", segment.getSegmentId()));
}
LOGGER.logMessage(LogLevel.INFO, ResourceBundleUtil.getDefaultMessage("moduleprocessor.load.end", fileObject.getAbsolutePath()));
}
for (FileObject fileObject : deleteList) {
LOGGER.logMessage(LogLevel.INFO, ResourceBundleUtil.getDefaultMessage("moduleprocessor.delete.start", fileObject.getAbsolutePath()));
ScriptSegment segment = loadScriptSegment(fileObject);
if(segment!=null){
getScriptEngine().removeScriptSegment(segment);
if(isService(fileObject)){
tinyScriptMvcManager.removeScriptClassConfig(segment);
}
LOGGER.logMessage(LogLevel.INFO, ResourceBundleUtil.getDefaultMessage("moduleprocessor.deleting", segment.getSegmentId()));
}
LOGGER.logMessage(LogLevel.INFO, ResourceBundleUtil.getDefaultMessage("moduleprocessor.delete.end", fileObject.getAbsolutePath()));
}
}
private ScriptSegment loadScriptSegment(FileObject fileObject){
InputStream inputStream = null;
try{
inputStream = fileObject.getInputStream();
String text = FileUtil.readStreamContent(inputStream, getScriptEngine().getEncode());
return ScriptUtil.getDefault().createScriptSegment(getScriptEngine(), null, text);
}catch(Exception e){
LOGGER.errorMessage(ResourceBundleUtil.getDefaultMessage("moduleprocessor.load.error", fileObject.getAbsolutePath()),e);
} finally{
if(inputStream!=null){
try {
inputStream.close();
} catch (Exception e) {
LOGGER.errorMessage(ResourceBundleUtil.getDefaultMessage("close.file.error", fileObject.getAbsolutePath()),e);
}
}
}
return null;
}
protected boolean isService(FileObject fileObject){
String name = fileObject.getFileName();
return name.endsWith(".service.tsf");
}
protected boolean checkMatch(FileObject fileObject) {
String name = fileObject.getFileName();
//文件是脚本文件
if(name.endsWith(".tsf")){
String[] modules = getModules();
for(String module:modules){
//文件遵守脚本模块文件命名规范
if(!StringUtil.isEmpty(module) && name.endsWith("."+module+".tsf")){
return true;
}
}
}
return false ;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy