package createtable.actions;
import org.eclipse.ui.IEditorPart;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import com.ceec.generator.Generator;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
public class PackageEditorRunable implements Runnable {
// project.xml�ж�ȡ��Ŀ����Ŀ¼�Լ���Ŀ����
private String workplace=new String(); //����Ŀ¼
private String projectName=new String(); //��Ŀ����
private String projectPath=new String(); //��Ŀ·��
private String componentName=new String(); //�齨����
private String componentPath=new String(); //�齨·��
private String packageName=new String();
private Monitor rwp;
private IEditorPart editor;
private CommFunction commfun;
public PackageEditorRunable(CommFunction commfun,IEditorPart editor,Monitor rwp){
this.editor=editor;
this.rwp=rwp;
this.commfun=commfun;
}
public void run() {
IWorkspace myWorkspace = ResourcesPlugin.getWorkspace();
workplace = myWorkspace.getRoot().getLocation().toOSString();
// TODO Auto-generated method stub
Object obj;
try {
obj = PropertyUtils.getProperty(editor.getEditorInput(),"project");
this.projectName = (String)PropertyUtils.getProperty(obj,"projectName");
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
commfun.openMessage();
rwp.monitorCancel();
} catch (InvocationTargetException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
commfun.openMessage();
rwp.monitorCancel();
} catch (NoSuchMethodException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
commfun.openMessage();
rwp.monitorCancel();
}
//�齨��ַ
this.componentPath=workplace+"\\"+this.projectName+"\\.configure\\";
try {
createComponent();
createEnum();//��������ö��
rwp.monitorCancel();
} catch (SAXException e) {
// TODO �Զ����� catch ��
e.printStackTrace();
commfun.openMessage();
rwp.monitorCancel();
} catch (IOException e) {
// TODO �Զ����� catch ��
e.printStackTrace();
commfun.openMessage();
rwp.monitorCancel();
} catch (ParserConfigurationException e) {
// TODO �Զ����� catch ��
e.printStackTrace();
commfun.openMessage();
rwp.monitorCancel();
}
}
/**
* create component read project.xml
* @param project
* @throws SAXException
* @throws IOException
* @throws ParserConfigurationException
*/
public void createComponent() throws SAXException, IOException, ParserConfigurationException{
// ��ʼ��ȡxml
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
builder = factory.newDocumentBuilder();
Document document = builder.parse(this.workplace+"\\"+this.projectName+"\\.configure\\project.xml");
// root=richweb ȡ�ø�Ԫ��
Element root = document.getDocumentElement();
// root��һ��project
if(root.getElementsByTagName("project")!=null){
Element prot = (Element) root.getElementsByTagName("project").item(0);
// get package
if(prot.getElementsByTagName("package")!=null){
NodeList packages = prot.getElementsByTagName("package");
for(int i=0;i<packages.getLength();i++)
{
Element packagelement = (Element)packages.item(i);
if(packagelement.getElementsByTagName("name")!=null){
Element packageElement=(Element)packagelement.getElementsByTagName("name").item(0);
Text packagetext = (Text)packageElement.getFirstChild();
if(packagetext.getNodeValue().equalsIgnoreCase(this.packageName)||this.packageName.equals(null)||this.packageName.equals("")){
this.packageName=packagetext.getNodeValue();
//get component
if(packagelement.getElementsByTagName("component")!=null){
NodeList component =packagelement.getElementsByTagName("component");
for(int j=0;j<component.getLength();j++){
Element componentelement = (Element)component.item(j);
if(componentelement.getElementsByTagName("name")!=null){
Element comElement=(Element)componentelement.getElementsByTagName("name").item(0);
Text componentext=(Text)comElement.getFirstChild();
// �齨����
this.componentName=this.projectName+"."+this.packageName+"."+componentext.getNodeValue()+".xml";
// added by mashuai at 2006/11/17
// aimed at getting the "path" which is the id of this component
//***********Begin********
String componentFile = componentelement.getElementsByTagName("path").item(0).getFirstChild().getNodeValue() + ".xml";
//************End*********
//��������ַ
this.projectPath=workplace+"\\"+this.projectName+"\\";
//// ��������������
Generator ganerator=new Generator(this.componentPath,componentFile,this.projectPath);
try {
ganerator.generate();
}catch (Exception e) {
// TODO �Զ����� catch ��
//System.out.println(e.getMessage());
e.printStackTrace();
commfun.openMessage();
rwp.monitorCancel();
}
// try{
//
// //updaTED by lili
// UpdateComponent upcom=new UpdateComponent(this.projectName,componentext.getNodeValue(),this.packageName);
// upcom.updateProject(true,null);
// //------------
// }catch(Exception e)
// {
// e.printStackTrace();
// commfun.openMessage();
// rwp.monitorCancel();
//
// }
}
}
}
}
}
}
}
}
}
/**
* create enum read project.xml
* @param project
* @throws SAXException
* @throws IOException
* @throws ParserConfigurationException
*/
public void createEnum() throws SAXException, IOException, ParserConfigurationException{
// ��ʼ��ȡxml
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
builder = factory.newDocumentBuilder();
Document document = builder.parse(workplace+"\\"+this.projectName+"\\.configure\\project.xml");
// root=richweb ȡ�ø�Ԫ��
Element root = document.getDocumentElement();
// root��һ��project
if(root.getElementsByTagName("project")!=null){
Element prot = (Element) root.getElementsByTagName("project").item(0);
// get package
if(prot.getElementsByTagName("package")!=null){
NodeList packages = prot.getElementsByTagName("package");
for(int i=0;i<packages.getLength();i++)
{
Element packagelement = (Element)packages.item(i);
if(packagelement.getElementsByTagName("name")!=null){
Element packageElement=(Element)packagelement.getElementsByTagName("name").item(0);
Text packagetext=(Text)packageElement.getFirstChild();
if(packagetext.getNodeValue().equals(this.packageName)||this.packageName.equals(null)||this.packageName.equals("")){
//��һ������������component editor
//�ڶ���������null,""������package editor
//get Enum
if(packagelement.getElementsByTagName("enumeration")!=null){
NodeList enums =packagelement.getElementsByTagName("enumeration");
for(int j=0;j<enums.getLength();j++){
Element enumsElement = (Element)enums.item(i);
if(enumsElement.getElementsByTagName("name")!=null){
Element comElement=(Element)enumsElement.getElementsByTagName("name").item(0);
Text enumtext=(Text)comElement.getFirstChild();
// �齨����
this.componentName=this.projectName+"."+this.packageName+"."+enumtext.getNodeValue()+".xml";
// added by mashuai at 2006/11/17
// aimed at getting the "path" which is the id of this component
//***********Begin********
String componentFile = enumsElement.getElementsByTagName("path").item(0).getFirstChild().getNodeValue() + ".xml";
//************End*********
//��������ַ
this.projectPath=workplace+"\\"+this.projectName+"\\";
//// ��������������
Generator ganerator=new Generator(this.componentPath,componentFile,this.projectPath);
try {
ganerator.generate();
} catch (Exception e) {
// TODO �Զ����� catch ��
e.printStackTrace();
commfun.openMessage();
rwp.monitorCancel();
}
// try{
//
// //updaTED by lili
// UpdateComponent upcom=new UpdateComponent(this.projectName,this.componentName,this.packageName);
// upcom.updateProject(true,null);
// //------------
// }catch(Exception e)
// {
// e.printStackTrace();
// commfun.openMessage();
// rwp.monitorCancel();
//
// }
}
}
}
}
}
}
}
}
}
}