use of com.l2fprod.common.propertysheet.PropertySheetTableModel in project cytoscape-impl by cytoscape.
the class CellEditorEventHandler method switchMappingType.
private VisualMappingFunction<?, ?> switchMappingType(final VizMapperProperty<?, ?, ?> prop, final VisualProperty<?> vp, final VisualMappingFunctionFactory oldFactory, final VisualMappingFunctionFactory newFactory, final String controllingAttrName, final PropertySheetPanel propertySheetPanel) {
// This is the currently selected Visual Style.
final VisualStyle style = servicesUtil.get(VisualMappingManager.class).getCurrentVisualStyle();
final VisualMappingFunction<?, ?> mapping = style.getVisualMappingFunction(vp);
VisualMappingFunction<?, ?> newMapping = mapping;
final Class<?> newMappingType = newFactory.getMappingFunctionType();
if (mapping == null || mapping.getClass() != newMappingType || !mapping.getMappingColumnName().equals(controllingAttrName)) {
final CyApplicationManager appMgr = servicesUtil.get(CyApplicationManager.class);
final CyNetwork currentNet = appMgr.getCurrentNetwork();
if (currentNet == null)
return newMapping;
// Mapping does not exist. Need to create new one.
final AttributeSet attrSet = attrProxy.getAttributeSet(currentNet, vp.getTargetDataType());
Class<?> attributeDataType = attrSet.getAttrMap().get(controllingAttrName);
if (attributeDataType == null) {
JOptionPane.showMessageDialog(null, "The current table does not have the selected column (\"" + controllingAttrName + "\").\nPlease select another column.", "Invalid Column.", JOptionPane.WARNING_MESSAGE);
prop.setValue(oldFactory);
return newMapping;
}
if (newMappingType == ContinuousMapping.class) {
if (!Number.class.isAssignableFrom(attributeDataType)) {
JOptionPane.showMessageDialog(null, "Selected column data type is not Number.\nPlease select a numerical column type.", "Incompatible Column Type.", JOptionPane.WARNING_MESSAGE);
prop.setValue(oldFactory);
return newMapping;
}
} else if (newMappingType == DiscreteMapping.class) {
if (attributeDataType == List.class)
attributeDataType = String.class;
}
// Create new mapping
newMapping = newFactory.createVisualMappingFunction(controllingAttrName, attributeDataType, vp);
// Keep old mapping values if the new mapping has the same type
if (oldFactory != null && oldFactory.getMappingFunctionType() == newMappingType)
copyMappingValues(mapping, newMapping);
}
// Disable listeners to avoid unnecessary updates
final PropertySheetTableModel model = (PropertySheetTableModel) propertySheetPanel.getTable().getModel();
final TableModelListener[] modelListeners = model.getTableModelListeners();
for (final TableModelListener tm : modelListeners) model.removeTableModelListener(tm);
vizMapPropertyBuilder.createMappingProperties(newMapping, propertySheetPanel, newFactory);
// Restore listeners
for (final TableModelListener tm : modelListeners) model.addTableModelListener(tm);
return newMapping;
}
Aggregations