/*
* 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.Color;
import org.geotoolkit.utility.parameter.ExtendedParameterDescriptor;
import org.geotoolkit.processing.chain.ChainProcessDescriptor;
import org.geotoolkit.processing.chain.model.ClassFull;
import org.geotoolkit.processing.chain.model.Constant;
import org.geotoolkit.processing.chain.model.ElementProcess;
import org.geotoolkit.processing.chain.model.Parameter;
import org.netbeans.api.visual.action.ActionFactory;
import org.netbeans.api.visual.widget.LabelWidget;
import org.opengis.parameter.GeneralParameterDescriptor;
/**
*
* @author Johann Sorel (Geomatys)
*/
public class WOfferingParameter extends LabelWidget{
private final ElementProcess parentDescriptor;
private final GeneralParameterDescriptor descriptor;
private final Parameter parameter;
private final Constant constant;
private final ChainScene scene;
public WOfferingParameter(final ChainScene scene, final Parameter parameter, final boolean editable) {
super(scene,"");
this.scene = scene;
this.parentDescriptor = null;
this.descriptor = null;
this.parameter = parameter;
this.constant = null;
setLabel(parameter.getCode());
setToolTipText(JClassCellRenderer.getShortSymbol(parameter.getType()) +" : "+ parameter.getRemarks());
if (editable) {
getActions().addAction(ActionFactory.createConnectAction(scene.getActionLayer(), new ProviderParameterConnect(scene)));
}
}
protected WOfferingParameter(final ChainScene scene, final Constant cst, final boolean editable) {
super(scene,"");
this.scene = scene;
this.parentDescriptor = null;
this.descriptor = null;
this.parameter = null;
this.constant = cst;
String str = cst.getValue();
if(str.length()>20){
str = str.substring(0, 20);
}
setLabel(JClassCellRenderer.getShortSymbol(cst.getType()) +" : "+ str);
if (editable) {
getActions().addAction(ActionFactory.createConnectAction(scene.getActionLayer(), new ProviderParameterConnect(scene)));
}
}
public WOfferingParameter(final ChainScene scene, final ElementProcess parentDescriptor, final GeneralParameterDescriptor descriptor, final boolean editable) {
super(scene);
this.scene = scene;
this.parentDescriptor = parentDescriptor;
this.descriptor = descriptor;
this.parameter = null;
this.constant = null;
setLabel(descriptor.getName().getCode());
//change color upon mandatory/optional
final int min = descriptor.getMinimumOccurs();
if(min>0){
//mandatory
setForeground(Color.BLACK);
setLabel(descriptor.getName().getCode()+" *");
}else{
//optional
setForeground(Color.GRAY);
}
if(descriptor instanceof ExtendedParameterDescriptor){
final ExtendedParameterDescriptor ed = (ExtendedParameterDescriptor) descriptor;
final ClassFull full = (ClassFull) ed.getUserObject().get(ChainProcessDescriptor.KEY_DISTANT_CLASS);
if(full != null){
setToolTipText(JClassCellRenderer.getShortSymbol(full) +" : "+ descriptor.getRemarks());
}else{
setToolTipText(JClassCellRenderer.getShortSymbol(descriptor.getClass()) +" : "+ descriptor.getRemarks());
}
}else{
setToolTipText(JClassCellRenderer.getShortSymbol(descriptor.getClass()) +" : "+ descriptor.getRemarks());
}
if (editable) {
getActions().addAction(ActionFactory.createConnectAction(scene.getActionLayer(), new ProviderParameterConnect(scene)));
}
}
public GeneralParameterDescriptor getDescriptor() {
return descriptor;
}
public ElementProcess getParentDescriptor() {
return parentDescriptor;
}
public Constant getConstant() {
return constant;
}
public Parameter getParameter() {
return parameter;
}
public int getId(){
if(constant != null){
return constant.getId();
}else if(parentDescriptor != null){
return parentDescriptor.getId();
}else{
//global input parameter
return Integer.MIN_VALUE;
}
}
public String getCode(){
if(constant != null){
//no code on constants
return "";
}else if(parentDescriptor != null){
return descriptor.getName().getCode();
}else{
//global output parameter
return parameter.getCode();
}
}
}