package net.ms.designer.ui.view; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.internal.UIPlugin; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; public class DataFactory extends MouseAdapter{ public static TreeViewer tv; public static Object createTreeData(List project){ // //System.out.println("project.getProject().size():"+projectList.size()); if(project == null){ // //System.out.println("project is null"); return null; } ArrayList projectlist = new ArrayList(); // ArrayList componentList = new ArrayList(); // ArrayList wfList = new ArrayList(); Iterator it = project.iterator(); while(it.hasNext()){ // //System.out.println("it.hasNext"); IProject cp = (IProject)it.next(); ProjectEntity pe = new ProjectEntity(); pe.setName((cp.getProject()).getName()); pe.setProjectName((cp.getProject()).getName()); // pe.mouseDoubleClick(MouseEvent event); if(!cp.isOpen()) { try { cp.open(null); } catch (CoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } } try { ResourcesPlugin.getWorkspace().getRoot().getProject((cp.getProject()).getName()).getFolder(".configure").refreshLocal(IResource.DEPTH_INFINITE,null); } catch (CoreException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } if(!ResourcesPlugin.getWorkspace().getRoot().getProject((cp.getProject()).getName()).getFolder(".configure").exists()|| !ResourcesPlugin.getWorkspace().getRoot().getProject((cp.getProject()).getName()).getFolder(".configure").getFile("project.xml").exists()){ // //System.out.println("file is not exist"); // continue; } else if(ResourcesPlugin.getWorkspace().getRoot().getProject((cp.getProject()).getName()).getFolder(".configure").getFile("project.xml").exists()){ // //System.out.println("file exist"); String filePath = ResourcesPlugin.getWorkspace().getRoot().getProject(pe.getName()).getFolder(".configure").getFile("project.xml").getLocation().toOSString(); // //System.out.println("filePath:"+filePath); try{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(filePath); document.normalize(); if(document.getDocumentElement()==null){ } // //System.out.println(richweb.getNodeType()); if(document.getDocumentElement()!=null){ Element richweb = document.getDocumentElement(); if(richweb.getElementsByTagName("project")!=null||richweb.getElementsByTagName("project").getLength()>0){ Element projectXML = (Element) richweb.getElementsByTagName("project").item(0); ArrayList packageList = new ArrayList(); NodeList packageNodeList = projectXML.getElementsByTagName("package"); if(packageNodeList == null||packageNodeList.getLength()<1){ // //System.out.println("have no package"); // continue; }else{ // //System.out.println("packageNodeList.getLength()"+packageNodeList.getLength()); // PackageEntity packageEntity = new PackageEntity(); for(int i = 0; i<packageNodeList.getLength(); i++){ Element packageNode = (Element) packageNodeList.item(i); if(packageNode.getElementsByTagName("name").getLength()>0){ // //System.out.println("find package name"); String packageName = packageNode.getElementsByTagName("name").item(0).getFirstChild().getNodeValue().toString(); // //System.out.println(packageName); PackageEntity packageEntity = new PackageEntity(); packageEntity.setName(packageName); packageEntity.setProjectName(pe.getName()); packageEntity.setPackageName(packageName); NodeList componentNodeList = packageNode.getElementsByTagName("component"); ArrayList componentList = new ArrayList(); if(componentNodeList == null || componentNodeList.getLength()<1){ }else{ // //System.out.println("componentNodeList:"+componentNodeList.getLength()); // ArrayList componentList = new ArrayList(); for(int j=0; j<componentNodeList.getLength(); j++){ Element componentNode = (Element)componentNodeList.item(j); if(componentNode.getElementsByTagName("name").getLength()>0){ String componentName = componentNode.getElementsByTagName("name").item(0).getFirstChild().getNodeValue().toString(); ComponentEntity componentEntity = new ComponentEntity(); componentEntity.setName(componentName); componentEntity.setPackageName(packageEntity.getName()); componentEntity.setProjectName(pe.getName()); componentEntity.setComponentName(componentName); NodeList wfNodeList = componentNode.getElementsByTagName("workflow"); if(wfNodeList == null||wfNodeList.getLength()<1){ }else{ // //System.out.println("wfNodeList:"+wfNodeList.getLength()); Element wfNode = (Element)wfNodeList.item(0); if(wfNode.getElementsByTagName("name").getLength()>0){ String wfName = wfNode.getElementsByTagName("name").item(0).getFirstChild().getNodeValue().toString(); WorkflowEntity workflowEntity = new WorkflowEntity(); workflowEntity.setName(wfName); workflowEntity.setProjectName(pe.getName()); workflowEntity.setPackageName(packageEntity.getName()); workflowEntity.setComponentName(componentEntity.getName()); workflowEntity.setWorkflowName(wfName); //update by lcx ���� NodeList sfNodeList = wfNode.getElementsByTagName("subflow"); if(sfNodeList == null || sfNodeList.getLength()<1) { } else { ArrayList subflowList = new ArrayList(); for(int k = 0; k<sfNodeList.getLength(); k++) { Element sfNode = (Element)sfNodeList.item(k); if(sfNode.getElementsByTagName("name").getLength()>0) { String sfName = sfNode.getElementsByTagName("name").item(0).getFirstChild().getNodeValue(); SubflowEntity subflowEntity = new SubflowEntity(); subflowEntity.setName(sfName); subflowEntity.setProjectName(pe.getName()); subflowEntity.setPackageName(packageEntity.getName()); subflowEntity.setComponentName(componentEntity.getName()); subflowEntity.setWorkflowName(wfName); subflowEntity.setSubflowName(sfName); subflowList.add(subflowEntity); } } workflowEntity.setChildren(subflowList); } //----------------- ArrayList wfList = new ArrayList(); wfList.add(workflowEntity); componentEntity.setChildren(wfList); } } componentList.add(componentEntity); } } // packageEntity.setChildren(componentList); } NodeList enumNodeList = packageNode.getElementsByTagName("enumeration"); if(enumNodeList == null || enumNodeList.getLength()<1){ }else{ // ArrayList enumList = new ArrayList(); for(int k=0;k<enumNodeList.getLength();k++){ Element enumNode = (Element) enumNodeList.item(k); if(enumNode.getElementsByTagName("name").getLength()>0){ String enumName = enumNode.getElementsByTagName("name").item(0).getFirstChild().getNodeValue().toString(); EnumEntity enumEntity = new EnumEntity(); enumEntity.setName(enumName); enumEntity.setPackageName(packageEntity.getName()); enumEntity.setProjectName(pe.getName()); enumEntity.setComponentName(enumName); componentList.add(enumEntity); } } } packageEntity.setChildren(componentList); packageList.add(packageEntity); } } // packageList.add(packageEntity); pe.setChildren(packageList); // continue; } } } }catch(Exception e){ e.printStackTrace(); } // continue; } projectlist.add(pe); } return projectlist; } // private static final class MyMouseDoubleClick extends MouseAdapter{ //// String packageEditorID = "net.ms.designer.editors.packages.ui.PackageEditor"; //// String workflowEditorID = "net.ms.designer.editors.workflow.ui.WorkflowEditor"; //// CEditorInput editorInput = new CEditorInput(); //// IWorkbenchPage workbenchpage = UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(); //// // public void mouseDoubleClick(MouseEvent e){ // ITreeEntry obj = this.getSelTreeEntry(); // String editorType = obj.getType(); // String editorName; // String editorID; // try{ // if(editorType.toLowerCase().equals(("PackageEntity").toLowerCase())){ // editorName = "Package Editor"; // editorID = packageEditorID; // this.openEditor(editorName,editorID); // } // // if(editorType.toLowerCase().equals(("PackageEntity").toLowerCase())){ // editorName = "Workflow Editor"; // editorID = workflowEditorID; // this.openEditor(editorName,editorID); // } // }catch(Exception ee){ // ee.printStackTrace(); // } // } // // // private void openEditor(String editorName,String editorID) throws PartInitException{ // editorInput.setName(editorName); // IEditorPart editor = workbenchpage.findEditor(editorInput); // if(editor!=null) // { // workbenchpage.bringToTop(editor); // } // else // { // workbenchpage.openEditor(editorInput,editorID); // } // } // // /** // * �Զ��巽����ȡ�õ�ǰѡ��Ľ�� // */ // private ITreeEntry getSelTreeEntry() { // IStructuredSelection selection = (IStructuredSelection) tv.getSelection(); // ITreeEntry entry = (ITreeEntry) (selection.getFirstElement()); // return entry; // } // // } }