提交 101d0dd3 编写于 作者: A alexander_fedorov2000

bug 130: New DBeaver Diagram wizard should be able to start

http://bugz.jkiss.org/show_bug.cgi?id=130
上级 ac7a47eb
......@@ -20,13 +20,7 @@ package org.jkiss.dbeaver.ext.erd.navigator;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFolder;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.handlers.HandlerUtil;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.model.navigator.DBNResource;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.actions.DataSourceHandler;
import org.jkiss.dbeaver.ui.dialogs.ActiveWizardDialog;
......@@ -35,21 +29,9 @@ public class CreateDiagramHandler extends DataSourceHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException
{
final ISelection selection = HandlerUtil.getCurrentSelection(event);
IFolder diagramFolder = null;
if (selection != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
final Object element = ((IStructuredSelection) selection).getFirstElement();
if (element instanceof DBNResource && ((DBNResource)element).getResource() instanceof IFolder) {
diagramFolder = (IFolder) ((DBNResource)element).getResource();
}
}
if (diagramFolder == null && DBeaverCore.getInstance().getProjectRegistry().getActiveProject() == null) {
UIUtils.showErrorDialog(HandlerUtil.getActiveShell(event), "ERD Error", "Can't create diagram without active project");
return null;
}
ActiveWizardDialog dialog = new ActiveWizardDialog(
HandlerUtil.getActiveWorkbenchWindow(event),
new DiagramCreateWizard(diagramFolder));
new DiagramCreateWizard());
dialog.open();
return null;
......
......@@ -18,9 +18,18 @@
*/
package org.jkiss.dbeaver.ext.erd.navigator;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.IWizardContainer;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;
......@@ -38,25 +47,40 @@ import org.jkiss.dbeaver.runtime.RuntimeUtils;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.actions.navigator.NavigatorHandlerObjectOpen;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class DiagramCreateWizard extends Wizard implements INewWizard {
private IFolder folder;
private EntityDiagram diagram = new EntityDiagram(null, "");
private DiagramCreateWizardPage pageContent;
private String errorMessage;
public DiagramCreateWizard(IFolder folder) {
this.folder = folder;
public DiagramCreateWizard() {
}
@Override
public void init(IWorkbench workbench, IStructuredSelection selection) {
setWindowTitle(ERDMessages.wizard_diagram_create_title);
setNeedsProgressMonitor(true);
IFolder diagramFolder = null;
if (selection != null) {
Object element = selection.getFirstElement();
if (element != null) {
diagramFolder = (IFolder) Platform.getAdapterManager().getAdapter(element, IFolder.class);
}
}
if (diagramFolder == null) {
IProject activeProject = DBeaverCore.getInstance().getProjectRegistry().getActiveProject();
if (activeProject == null) {
errorMessage = "Can't create diagram without active project";
} else {
try {
diagramFolder = ERDResourceHandler.getDiagramsFolder(activeProject, true);
} catch (CoreException e) {
errorMessage = e.getMessage();
}
}
}
this.folder = diagramFolder;
}
@Override
......@@ -64,8 +88,21 @@ public class DiagramCreateWizard extends Wizard implements INewWizard {
super.addPages();
pageContent = new DiagramCreateWizardPage(diagram);
addPage(pageContent);
if (getContainer() != null) {
//WizardDialog call
pageContent.setErrorMessage(errorMessage);
}
}
@Override
public void setContainer(IWizardContainer wizardContainer) {
super.setContainer(wizardContainer);
if (pageContent != null) {
//New Wizard call
pageContent.setErrorMessage(errorMessage);
}
}
@Override
public boolean performFinish() {
try {
......
......@@ -43,6 +43,7 @@ import org.jkiss.utils.CommonUtils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
......@@ -63,6 +64,9 @@ class DiagramCreateWizardPage extends WizardPage {
@Override
public boolean isPageComplete()
{
if (getErrorMessage() != null) {
return false;
}
return !CommonUtils.isEmpty(diagram.getName());
}
......@@ -88,6 +92,10 @@ class DiagramCreateWizardPage extends WizardPage {
contentLabel.setLayoutData(gd);
final DBNProject rootNode = DBeaverCore.getInstance().getNavigatorModel().getRoot().getProject(DBeaverCore.getInstance().getProjectRegistry().getActiveProject());
if (rootNode == null) {
setControl(placeholder);
return;
}
contentTree = new DatabaseNavigatorTree(configGroup, rootNode.getDatabases(), SWT.SINGLE | SWT.CHECK);
gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 2;
......@@ -124,6 +132,9 @@ class DiagramCreateWizardPage extends WizardPage {
Collection<DBNNode> getInitialContent()
{
if (contentTree == null) {
return Collections.emptyList();
}
List<DBNNode> nodes = new ArrayList<DBNNode>();
CheckboxTreeViewer viewer = (CheckboxTreeViewer) contentTree.getViewer();
for (Object obj : viewer.getCheckedElements()) {
......
......@@ -54,6 +54,9 @@ public class ERDResourceHandler extends AbstractResourceHandler {
public static IFolder getDiagramsFolder(IProject project, boolean forceCreate) throws CoreException
{
if (project == null) {
return null;
}
final IFolder diagramsFolder = project.getFolder(ERD_DIR);
if (!diagramsFolder.exists() && forceCreate) {
diagramsFolder.create(true, true, new NullProgressMonitor());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册