/*
* DBeaver - Universal Database Manager
* Copyright (C) 2017 Andrew Khitrin (ahitrin@gmail.com)
*
* 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.ui.locks.graph;
import java.util.List;
import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.GridData;
import org.eclipse.draw2d.IFigure;
import org.eclipse.gef.ConnectionEditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.Request;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.gef.editpolicies.NonResizableEditPolicy;
import org.jkiss.dbeaver.ext.ui.locks.manage.LockManagerViewer;
public class LockGraphNodeEditPart extends AbstractGraphicalEditPart {
private LockGraphConnectionAnchor sourceAnchor;
private LockGraphConnectionAnchor targetAnchor;
@Override
public boolean isSelectable() {
return true;
}
@Override
protected IFigure createFigure() {
LockGraphNode node = (LockGraphNode) getModel();
LockGraph graph = (LockGraph) getParent().getModel();
LockGraphNodeFigure nodeFigure = new LockGraphNodeFigure(node.getTitle(),(node == graph.getSelection()));
this.targetAnchor = new LockGraphConnectionAnchor(nodeFigure);
this.sourceAnchor = new LockGraphConnectionAnchor(nodeFigure);
return nodeFigure;
}
@Override
protected List<LockGraphEdge> getModelSourceConnections() {
return ((LockGraphNode) getModel()).getSourceEdges();
}
@Override
protected List<LockGraphEdge> getModelTargetConnections() {
return ((LockGraphNode) getModel()).getTargetEdges();
}
public ConnectionAnchor getSourceConnectionAnchor(
ConnectionEditPart connection) {
return this.sourceAnchor;
}
public ConnectionAnchor getSourceConnectionAnchor(Request request) {
return this.sourceAnchor;
}
public ConnectionAnchor getTargetConnectionAnchor(
ConnectionEditPart connection) {
return this.targetAnchor;
}
public ConnectionAnchor getTargetConnectionAnchor(Request request) {
return this.targetAnchor;
}
@Override
protected void refreshVisuals() {
LockGraphNode node = (LockGraphNode) getModel();
LockGraph lgraph = (LockGraph)((LockGraphEditPart) getParent()).getModel();
LockGraphNodeFigure nodeFigure = (LockGraphNodeFigure) getFigure();
LockGraphEditPart graph = (LockGraphEditPart) getParent();
GridData gridData = new GridData(55,30);
gridData.horizontalAlignment = GridData.CENTER;
gridData.verticalAlignment = GridData.CENTER;
gridData.verticalSpan = 10;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
int span = lgraph.getMaxWidth() / node.getSpan();
int spanMod = lgraph.getMaxWidth() % node.getSpan();
gridData.horizontalSpan = 0 ;
if (span > 1 && node.getLevelPosition() != LockGraphNode.LevelPosition.RIGHT) {
gridData.horizontalSpan = span;
} else if (spanMod > 0 && node.getLevelPosition() == LockGraphNode.LevelPosition.RIGHT) {
gridData.horizontalSpan = span + spanMod;
}
graph.setLayoutConstraint(this, nodeFigure,gridData);
}
@Override
protected void createEditPolicies() {
SelectionPolicy selectionPolicy = new SelectionPolicy();
selectionPolicy.setDragAllowed(false);
installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, selectionPolicy);
}
static class SelectionPolicy extends NonResizableEditPolicy {
@Override
protected void hideSelection() {
}
@Override
protected void showSelection() {
LockManagerViewer viewer = ((LockGraph)getHost().getParent().getModel()).getLockManagerViewer();
if (viewer != null) {
viewer.setTableLockSelect(((LockGraphNode)getHost().getModel()).getLock());
}
}
}
}