package de.FeatureModellingTool.ElementInfoEditor;
import de.reuse.ContextImplementation;
import de.reuse.Context;
import de.reuse.TextPaneCellRenderer;
import de.FeatureModellingTool.FeatureModel.FeatureModel;
import de.FeatureModellingTool.FeatureModel.Feature;
import de.FeatureModellingTool.FeatureModel.FeatureRelation;
import de.FeatureModellingTool.FeatureModel.FeatureProperties;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import java.util.List;
import java.util.Iterator;
import research.DrawingEditor;
import org.jdesktop.swingx.JXTable;
public class ElementPropertiesView2 extends JXTable implements PropertyChangeListener {
protected final ContextImplementation context = new ContextImplementation();
private FeatureModel featureModel = null;
protected final FeatureModelPropertyChangeListener featureModelPropertyChangeListener = new FeatureModelPropertyChangeListener();
protected final DefaultTableModel tableModel = new DefaultTableModel();
protected class ContextChangeListener implements PropertyChangeListener {
public void propertyChange(PropertyChangeEvent e) {
contextChange(e);
}
}
protected class FeatureModelPropertyChangeListener implements PropertyChangeListener {
public void propertyChange(PropertyChangeEvent evt) {
featureModelPropertyChange(evt);
}
}
public ElementPropertiesView2() {
tableModel.addColumn("Element");
tableModel.addColumn("Description");
this.setModel(tableModel);
this.setRowHeightEnabled(true);
int width = this.getColumnModel().getTotalColumnWidth();
this.getColumnModel().getColumn(0).setWidth(width / 4);
this.getColumnModel().getColumn(1).setWidth(width * 3 / 4);
this.getColumnModel().getColumn(1).setCellRenderer(new TextPaneCellRenderer());
context.addContextChangeListener(new ContextChangeListener());
}
public void propertyChange(PropertyChangeEvent e) {
if (!e.getPropertyName().equals(DrawingEditor.SELECTION_CHANGED))
return;
List selections = (List) e.getNewValue();
showElementProperties(selections);
}
protected void showElementProperties(List selections) {
int rowCount = tableModel.getRowCount();
for (int i = rowCount - 1; i >= 0; i--) {
tableModel.removeRow(i);
}
if (selections == null)
return;
Iterator it = selections.iterator();
while (it.hasNext()) {
String id = (String) it.next();
if (id == null)
continue;
Feature feature = featureModel.getFeature(id);
FeatureRelation relation = featureModel.getFeatureRelation(id);
if (feature != null) {
tableModel.addRow(new Object[]{feature.getName(), feature.getDescription()});
} else if (relation != null) {
tableModel.addRow(new Object[]{relation.getName(), ""});
} else {
tableModel.addRow(new Object[]{"", ""});
}
}
}
public Context getContext() {
return context;
}
private void contextChange(PropertyChangeEvent e) {
String property = e.getPropertyName();
if (!property.equals(de.FeatureModellingTool.ElementInfoEditor.ConstantDefinition.FEATURE_MODEL))
return;
if (featureModel != null)
featureModel.removePropertyChangeListener(featureModelPropertyChangeListener);
featureModel = (FeatureModel) e.getNewValue();
if (featureModel != null)
featureModel.addPropertyChangeListener(featureModelPropertyChangeListener);
}
private void featureModelPropertyChange(PropertyChangeEvent e) {
Object source = e.getSource();
String property = e.getPropertyName();
if (!(source instanceof Feature) || !property.equals(FeatureProperties.DESCRIPTION))
return;
Feature feature = (Feature) source;
//--todo: ���༭ijfeature��description����propertiesView�е���ʾ
int rowCount = tableModel.getRowCount();
for (int i = rowCount - 1; i >= 0; i--) {
tableModel.removeRow(i);
}
tableModel.addRow(new Object[]{feature.getName(), feature.getDescription()});
}
}