/* * 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.util.List; import org.geotoolkit.processing.chain.model.Parameter; import org.netbeans.api.visual.border.BorderFactory; import org.netbeans.api.visual.layout.LayoutFactory; import org.netbeans.api.visual.widget.Widget; /** * * @author Johann Sorel (Geomatys) */ public class WChainParametersFull extends WChainParametersBasic { private final Widget w_receivings; private final Widget w_offerings; public WChainParametersFull(final ChainScene scene, final String name, final int id, final boolean editable) { super(scene, name, id, editable); final Widget w_params = new Widget(scene); addChild(w_params); w_params.setLayout(LayoutFactory.createHorizontalFlowLayout()); w_receivings = new Widget(scene); w_offerings = new Widget(scene); w_params.addChild(w_receivings); w_params.addChild(w_offerings); w_receivings.setLayout(LayoutFactory.createVerticalFlowLayout()); w_receivings.setBorder(BorderFactory.createEmptyBorder(2,0,2,8)); w_offerings.setLayout(LayoutFactory.createVerticalFlowLayout()); w_offerings.setBorder(BorderFactory.createEmptyBorder(2,8,2,0)); getScene().validate(); } private int getInsertIndex(final Parameter param, final Widget parent){ // warning : vertical flowbuffer has a reverse order. 0 is at the bottom final List<Widget> widgets = parent.getChildren(); for(int i=0;i<widgets.size();i++){ Widget c = widgets.get(i); final Parameter parameter; if(c instanceof WReceivingParameter){ parameter = ((WReceivingParameter)c).getParameter(); }else{ parameter = ((WOfferingParameter)c).getParameter(); } if(param.getCode().compareTo(parameter.getCode()) < 0){ return i; } } return widgets.size(); } public WOfferingParameter addOfferingParameter(final Parameter param){ final WOfferingParameter widget = new WOfferingParameter((ChainScene) scene, param, editable); w_offerings.addChild(getInsertIndex(param, w_offerings),widget); getScene().validate(); return widget; } public WReceivingParameter addReceivingParameter(final Parameter param) { final WReceivingParameter widget = new WReceivingParameter((ChainScene) scene, param); w_receivings.addChild(getInsertIndex(param, w_receivings),widget); getScene().validate(); return widget; } public WOfferingParameter removeOfferingParameter(final Parameter param){ for(Widget w : w_offerings.getChildren()){ if(param.equals( ((WOfferingParameter)w).getParameter())){ WOfferingParameter off = (WOfferingParameter) w; w_offerings.removeChild(off); getScene().validate(); return off; } } return null; } public WReceivingParameter removeReceivingParameter(final Parameter param){ for(Widget w : w_receivings.getChildren()){ if(param.equals( ((WReceivingParameter)w).getParameter())){ WReceivingParameter off = (WReceivingParameter) w; w_receivings.removeChild(off); getScene().validate(); return off; } } return null; } public WOfferingParameter getInputWidget(String code){ for(Widget w : w_receivings.getChildren()){ if( ((WOfferingParameter)w).getLabel().equals(code)){ return (WOfferingParameter) w; } } return null; } public WReceivingParameter getOutputWidget(String code){ for(Widget w : w_offerings.getChildren()){ if( ((WReceivingParameter)w).getLabel().equals(code)){ return (WReceivingParameter) w; } } return null; } }