/**
*
*/
package com.hundsun.ares.studio.jres.database.compiler;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import javax.script.ScriptEngine;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.runtime.CoreException;
import com.hundsun.ares.studio.core.ARESCore;
import com.hundsun.ares.studio.core.ARESModelException;
import com.hundsun.ares.studio.core.IARESProject;
import com.hundsun.ares.studio.core.IARESProjectProperty;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.core.scripting.AresScriptEngineManager;
import com.hundsun.ares.studio.core.util.ARESElementUtil;
import com.hundsun.ares.studio.jres.database.constant.IDBConstant;
import com.hundsun.ares.studio.jres.model.database.TableResourceData;
import com.hundsun.ares.studio.jres.model.database.ViewResourceData;
import com.hundsun.ares.studio.jres.model.database.oracle.SequenceResourceData;
import com.hundsun.ares.studio.jres.script.ScriptPlugin;
/**
* @author gongyf
*
*/
public class DBCompilerUtils {
private static final String KEY_ScriptEngine = "�����ýű�����";
/**
* ��ȡ�ű����棨�л��棩
* @param context
* @return
*/
public static ScriptEngine getScriptEngine(Map<Object, Object> context) {
ScriptEngine engine = (ScriptEngine) context.get(KEY_ScriptEngine);
if (engine == null) {
engine = AresScriptEngineManager.getScriptEngineManager().getEngineByName(ARESCore.SCRIPT_ENGINE_NAME);
}
return engine;
}
/**
* ��ȡ���ݿ��Ӧ�Ľű��ļ�
*
* @param project
* @return
* @throws CoreException
* @throws IOException
*/
public static String getScriptContent(IARESProject project , String database) throws CoreException, IOException {
// �����ýű������ҵ��ű�
IFolder folder = ARESElementUtil.getModuleRootFolder(project, ScriptPlugin.TOOL_MODULE_ROOT_TYPE);
if (folder == null || !folder.exists()) {
folder = ARESElementUtil.getModuleRootFolder(project, ScriptPlugin.OLD_TOOL_MODULE_ROOT_TYPE);
}
IFile file = folder.getFile(StringUtils.lowerCase( String.format(IDBConstant.GEN_JS_FILE_FORMAT, database)));
if (file.exists()) {
InputStream is = null;
try {
is = file.getContents();
return IOUtils.toString(is, file.getCharset());
} finally {
IOUtils.closeQuietly(is);
}
} else {
throw new FileNotFoundException(file.getProjectRelativePath().toString());
}
}
public static IARESResource getJSResource(IARESProject project, Object resource ,String database) {
try {
IARESProjectProperty property = project.getProjectProperty();
String fileName = "";
if (resource instanceof TableResourceData) {
fileName = property.getString("tabledir");
}else if (resource instanceof ViewResourceData) {
fileName = property.getString("viewdir");
}else if (resource instanceof SequenceResourceData) {
fileName = property.getString("sequencedir");
}
if (StringUtils.isNotBlank(fileName)) {
IFile file = project.getProject().getFile(fileName);
return (IARESResource) ARESCore.create(file);
}
} catch (ARESModelException e) {
e.printStackTrace();
}
return null;
}
}