package net.ms.designer.ui.wizard;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import msdesigner.MsdesignerPlugin;
import net.ms.designer.core.MsEditorInput;
import net.ms.designer.core.MsElement;
import net.ms.designer.core.MsProject;
import net.ms.designer.core.DBTool;
import net.ms.designer.projectbuilder.model.Company;
import net.ms.designer.projectbuilder.model.Project;
import net.ms.designer.projectbuilder.service.ProjectBuilder;
import net.ms.designer.ui.WriteToProjectXML;
import net.ms.designer.ui.preference.DBPreferencePage;
import net.ms.designer.ui.view.MsTreeView;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.widgets.Event;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;
import org.eclipse.ui.internal.UIPlugin;
import org.eclipse.core.internal.resources.Container;
import org.eclipse.core.internal.resources.Workspace;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
//import net.ms.designer.editors.packages.ui.PackageEditor;
//import net.ms.designer.ui.MsProject;
//import net.ms.designer.editors.packages.ui.PackageEditor;
public class NewProjectWizard extends Wizard implements INewWizard {
private IWorkbench _workbench;
NewAppWizard page;
IWorkbenchPage workbenchpage;
MsProject project = new MsProject();
IWorkspace workspace = ResourcesPlugin.getWorkspace();
NewAppSecondPage javaPage;
public void init(IWorkbench workbench, IStructuredSelection selection) {
this._workbench = workbench;
setNeedsProgressMonitor(true);
setWindowTitle("Create a new project");
}
/** */
/**
* @throws IOException
* @throws SAXException
* @see org.eclipse.jface.wizard.Wizard#performFinish()
*/
public boolean performFinish() {
//System.out.println("NewAppWizard.performFinish");
this.project = new MsProject();
this.project.setProjectName(page.txtProject.getText());
this.project.setCmpy_short(page.companyText.getText());
this.project.setAuthor(page.authorText.getText());
this.project.setVersion(page.versionText.getText());
//
this.project.setDirectory(page.pathText.getText());
// this.project.setDirectory(workspace.getRoot().getLocation().toOSString()+"\\"+page.txtProject.getText());
this.project.setWorkplace(workspace.getRoot().getLocation()
.toOSString());
this.project.setGenPackageName(page.genPackageNameText.getText());
this.createProject();
net.ms.designer.ui.WriteToProjectXML write = new net.ms.designer.ui.WriteToProjectXML(
null, this.project);
MsEditorInput editorInput = new MsEditorInput();
editorInput.setName("PackageEditor");
IEditorInput ieditorInput = editorInput;
String editorID = "net.ms.designer.editors.packages.ui.PackageEditor";
String viewID = "net.ms.designer.ui.view.MsTreeView";
String perspectiveID = "net.ms.designer.ui.wizard.CPerspective";
workbenchpage = UIPlugin.getDefault().getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
IEditorPart editor = workbenchpage.findEditor(editorInput);
if (editor != null) {
workbenchpage.bringToTop(editor);
} else {
try {
// String xml =
// workspace.getRoot().getProject(page.txtProject.getText()).getFolder("configure").getLocation().toOSString()+"\\"+"project.xml";
String xml = this.project.getDirectory()
+ "\\.configure\\project.xml";
if (page.cbConn.getSelectionIndex() > -1) {
net.ms.designer.ui.preference.WriteToProjectXML writeDB = new net.ms.designer.ui.preference.WriteToProjectXML(
"DataSource", null, page.txtProject.getText());
Iterator it = page.dbList.iterator();
DBTool tool = new DBTool();
while (it.hasNext()) {
tool = (DBTool) it.next();
if (tool.getConName()
.toLowerCase()
.equals(page.cbConn.getItem(
page.cbConn.getSelectionIndex())
.toLowerCase()))
break;
}
this.project.setDbtool(tool);
writeDB.setConName(tool.getConName());
writeDB.setDbName(tool.getDbName());
writeDB.setDbType(tool.getDbType());
writeDB.setPassword(tool.getPassword());
writeDB.setPort(tool.getPort());
writeDB.setServer(tool.getServer());
writeDB.setUsername(tool.getUsername());
try {
//writeDB.accessXMLFile(xml);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
write.accessXMLFile(xml);
}
else {
write.writeProjectElement(xml);
write.accessXMLFile(xml);
}
Project newProject = new Project();
Company com = new Company();
com.setCompanyCode(this.project.getCmpy_short());
com.setCompanyName(this.project.getCompany());
newProject.setCompany(com);
newProject.setProjectCode(this.project.getProjectName());
MsdesignerPlugin.projectBuilder.saveProject(newProject);
((MsEditorInput) ieditorInput).setProject(project);
editor = workbenchpage.openEditor(ieditorInput,
"net.ms.designer.editors.packages.ui.PackageEditor");
MsElement element = ((net.ms.designer.editors.packages.ui.PackageEditor) editor)
.getCurrentElement();
if (element == null) {
element = new MsElement();
element.setNodeName(project.getProjectName());
element.setNodeType("package");
element.setContainer(((net.ms.designer.editors.packages.ui.PackageEditor) editor)
.getViewer().getContents().getModel());
((net.ms.designer.editors.packages.ui.PackageEditor) editor)
.setCurrentElement(element);
}
workbenchpage.bringToTop(editor);
if (workbenchpage.getPerspective().getId().toLowerCase()
.equals((perspectiveID).toLowerCase())) {
MsTreeView view = (MsTreeView) workbenchpage
.findView(viewID);
view.setProject(project);
view.refresh();
} else {
boolean temp = MessageDialog.openQuestion(workbenchpage
.getWorkbenchWindow().getShell(), "�Ƿ�ת����ͼ",
"�Ƿ�ת����ͼ");
if (temp == true) {
_workbench.showPerspective(perspectiveID,
workbenchpage.getWorkbenchWindow());
MsTreeView view = (MsTreeView) workbenchpage
.findView(viewID);
view.setProject(project);
view.refresh();
} else {
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
// createProject();
return true;
}
public boolean performCancel() {
removeProject();
super.performCancel();
return true;
}
private void removeProject() {
if (page.txtProject.getText() == null
|| page.txtProject.getText().length() < 1) {
return;
}
final IProject ipro = ResourcesPlugin.getWorkspace().getRoot()
.getProject(page.txtProject.getText());
if (ipro == null) {
return;
}
IRunnableWithProgress op = new IRunnableWithProgress() {
public void run(IProgressMonitor monitor)
throws InvocationTargetException, InterruptedException {
boolean noProgressMonitor = Platform.getLocation().equals(
ResourcesPlugin.getWorkspace().getRoot().getLocation());
if (monitor == null || noProgressMonitor)
monitor = new NullProgressMonitor();
monitor.beginTask(
NewWizardMessages.NewJavaProjectWizardPageTwo_operation_remove, //$NON-NLS-1$
3);
try {
ipro.delete(true, false, monitor);
} catch (CoreException e) {
throw new InvocationTargetException(e);
} finally {
monitor.done();
project = null;
// fCanRemoveContent = false;
}
}
};
try {
IRunnableContext context = (IRunnableContext) getContainer();
if (context == null) {
context = (IRunnableContext) WizardPlugin.getDefault()
.getActivePage();
}
context.run(false, true, op);
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (InterruptedException _ex) {
}
}
/** */
/**
* @see org.eclipse.jface.wizard.Wizard#addPages()
*/
public void addPages() {
page = new NewAppWizard();
page.setTitle("����һ������������Ŀ���");
page.setDescription("����һ������������Ŀ���");
addPage(page);
javaPage = new NewAppSecondPage(page, this.project);
addPage(javaPage);
javaPage.setWizard(this);
//System.out.println("addPages");
}
private void createProject() {
workspace = ResourcesPlugin.getWorkspace(); // ������
// //System.out.println("workspace:"+workspace.getRoot().getLocation().toOSString());
IWorkspaceRoot root = workspace.getRoot();
// String path = workspace.getRoot().getLocation().toOSString();
// StringBuffer sb = new StringBuffer(path);
IProject newProjectHandle = root.getProject(page.txtProject.getText());
// sb.append("\\");
// //System.out.println(sb.toString());
// IPath targetPath = new
// Path(workspace.getRoot().getLocation().toOSString()
// +newProjectHandle.getName());
// IPath targetPath = new Path(workspace + newProjectHandle.getName());
// IPath targetPath = new Path(newProjectHandle.getName());
// sb.append(targetPath.toString());
// ------------------lichunxia
// final IProjectDescription description =
// workspace.newProjectDescription(newProjectHandle.getName());
// if(page.initButton.getSelection() == false)
// {
// // IPath newPath= new Path(page.pathText.getText());
// // description.setLocation(newPath);
// }
// else
// {
// description.setLocation(null);
// }
try {
// -------------new
// newProjectHandle.create(description, null);
// newProjectHandle.open(null);
// ___________new
javaPage.updateProject(true, null);
javaPage.configureJavaProject(null);
this.createLibFolder();
this.createOutputFolder(page.txtProject.getText().trim());
this.createConfigureFolder();
// createSrcFolder();
} catch (Exception e) {
e.printStackTrace();
}
}
private IFolder createOutputFolder(String folderName) {
IFolder web = ResourcesPlugin.getWorkspace().getRoot()
.getProject(page.txtProject.getText().trim()).getFolder("web"); //$NON-NLS-1$
if (!web.exists()) {
try {
web.create(true, true, null);
} catch (CoreException e) {
// TODO
// e.printStackTrace();
}
}
// IFolder inf = createFolder(web,"WEB-INF"); //$NON-NLS-1$
return createFolder(web, "WEB-INF"); //$NON-NLS-1$
}
private IFolder createFolder(IFolder parentFolder, String folderName) {
IFolder out = parentFolder.getFolder(folderName);
if (!out.exists()) {
try {
out.create(true, true, null);
} catch (CoreException e) {
// TODO
// e.printStackTrace();
}
}
return out;
}
private void createLibFolder() {
IFolder srcFolder = ResourcesPlugin.getWorkspace().getRoot()
.getProject(page.txtProject.getText().trim()).getFolder("lib"); //$NON-NLS-1$
if (!srcFolder.exists())
try {
srcFolder.create(true, true, null);
} catch (CoreException e) {
e.printStackTrace();
}
}
// private void createSrcFolder() {
// IFolder srcFolder = ResourcesPlugin.getWorkspace().getRoot().getProject(page.txtProject.getText().trim()).getFolder("temp"); //$NON-NLS-1$
// if (!srcFolder.exists())
// try {
// srcFolder.create(true, true, null);
// } catch (CoreException e) {
// // e.printStackTrace();
// }
// }
private void createConfigureFolder() {
IFolder srcFolder = ResourcesPlugin.getWorkspace().getRoot()
.getProject(page.txtProject.getText().trim())
.getFolder(".configure"); //$NON-NLS-1$
if (!srcFolder.exists())
try {
srcFolder.create(true, true, null);
} catch (CoreException e) {
// e.printStackTrace();
}
}
}