/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2012-2013, Geomatys
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotoolkit.gui.swing.etl;
import java.awt.Point;
import org.geotoolkit.processing.chain.model.DataLink;
import org.netbeans.api.visual.action.ConnectorState;
import org.netbeans.api.visual.action.ReconnectProvider;
import org.netbeans.api.visual.widget.ConnectionWidget;
import org.netbeans.api.visual.widget.Scene;
import org.netbeans.api.visual.widget.Widget;
/**
*
* @author Johann Sorel (Geomatys)
*/
public class ProviderParameterReconnect implements ReconnectProvider{
@Override
public boolean isSourceReconnectable(ConnectionWidget cw) {
return false;
}
@Override
public boolean isTargetReconnectable(ConnectionWidget cw) {
return true;
}
@Override
public void reconnectingStarted(ConnectionWidget cw, boolean bln) {
}
@Override
public void reconnectingFinished(ConnectionWidget cw, boolean bln) {
}
@Override
public ConnectorState isReplacementWidget(final ConnectionWidget cw,
final Widget replacementWidget, final boolean reconnectingSource) {
final WDataLink cnx = (WDataLink) cw;
final ChainScene scene = (ChainScene)cw.getScene();
final DataLink link = cnx.getLink();
if(replacementWidget instanceof WReceivingParameter){
final WReceivingParameter receiver = (WReceivingParameter)replacementWidget;
//check the link is valid
final DataLink lk = new DataLink(link);
lk.setTargetCode(receiver.getCode());
lk.setTargetId(receiver.getId());
if(scene.getChain().isValidLink(lk)){
return ConnectorState.ACCEPT;
}else{
return ConnectorState.REJECT;
}
}
return ConnectorState.REJECT_AND_STOP;
}
@Override
public boolean hasCustomReplacementWidgetResolver(Scene scene) {
return false;
}
@Override
public Widget resolveReplacementWidget(Scene scene, Point point) {
return null;
}
@Override
public void reconnect(ConnectionWidget cw, Widget widget, boolean bln) {
final WDataLink cnx = (WDataLink) cw;
final ChainScene scene = (ChainScene)cw.getScene();
final DataLink link = cnx.getLink();
if(widget instanceof WReceivingParameter){
final WReceivingParameter receiver = (WReceivingParameter) widget;
//check the link is valid
final DataLink lk = new DataLink(link);
lk.setTargetCode(receiver.getCode());
lk.setTargetId(receiver.getId());
if(scene.getChain().isValidLink(lk)){
//remove old link, add new one
//leave the events do the job
scene.getChain().getDataLinks().remove(link);
scene.getChain().getDataLinks().add(lk);
}
}else if(widget == null){
//disconect widget == remove link
//leave the events do the job
scene.getChain().getDataLinks().remove(link);
}
}
}