/* * DBeaver - Universal Database Manager * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jkiss.dbeaver.ext.erd.editor; import org.eclipse.gef.GraphicalViewer; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.widgets.Control; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.ext.erd.part.EntityPart; import org.jkiss.dbeaver.model.struct.DBSEntity; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * ERD viewer adapter */ public class ERDEditorViewer extends Viewer { private static final Log log = Log.getLog(ERDEditorViewer.class); private final ERDEditorPart editorPart; public ERDEditorViewer(ERDEditorPart editorPart) { this.editorPart = editorPart; } @Override public Control getControl() { return editorPart.getGraphicalViewer().getControl(); } @Override public Object getInput() { return editorPart.getGraphicalViewer().getContents(); } @Override public ISelection getSelection() { final GraphicalViewer graphicalViewer = editorPart.getGraphicalViewer(); return graphicalViewer == new StructuredSelection() ? null : graphicalViewer.getSelection(); /* if (graphicalViewer == null) { return new StructuredSelection(); } final ISelection selection = graphicalViewer.getSelection(); if (selection instanceof IStructuredSelection) { return new ERDSelectionAdapter((IStructuredSelection)selection); } else { return selection; } */ } @Override public void refresh() { editorPart.refreshDiagram(true); } @Override public void setInput(Object input) { } @Override public void setSelection(ISelection selection, boolean reveal) { editorPart.getGraphicalViewer().setSelection(selection); } private class ERDSelectionAdapter implements IStructuredSelection { private final IStructuredSelection selection; public ERDSelectionAdapter(IStructuredSelection selection) { this.selection = selection; } @Override public Object getFirstElement() { final Object firstElement = selection.getFirstElement(); return firstElement == null ? null : convertObject(firstElement); } @Override public Iterator iterator() { final Iterator iterator = selection.iterator(); return new Iterator() { @Override public boolean hasNext() { return iterator.hasNext(); } @Override public Object next() { final Object next = iterator.next(); return next == null ? null : convertObject(next); } }; } @Override public int size() { return selection.size(); } @Override public Object[] toArray() { final Object[] objects = selection.toArray(); final Object[] result = new Object[objects.length]; for (int i = 0; i < objects.length; i++) { result[i] = convertObject(objects[i]); } return result; } @Override public List toList() { List list = selection.toList(); List<Object> result = new ArrayList<>(list.size()); for (int i = 0; i < list.size(); i++) { result.add(convertObject(list.get(i))); } return result; } @Override public boolean isEmpty() { return selection.isEmpty(); } private Object convertObject(Object object) { if (object instanceof EntityPart) { final DBSEntity entity = ((EntityPart) object).getTable().getObject(); return entity == null ? null : DBeaverCore.getInstance().getNavigatorModel().getNodeByObject(entity); } return object; } } }