package de.FeatureModellingTool.Pattern.UI;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Label;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Set;
import java.util.Map.Entry;
import javax.swing.Box;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import de.FeatureModellingTool.FeatureModel.Feature;
import de.FeatureModellingTool.Pattern.ConstantDefinition;
import de.FeatureModellingTool.PatternBase.PatternBase;
import de.FeatureModellingTool.PatternBase.Templete;
public class PatternSelection extends JPanel {
PatternBase patternBase = null;
PatternExplorerImplementation explorer = null;
JPanel scrollParameter = null;
public Templete template = null;
public PatternSelection(PatternBase patternBase) {
this.patternBase = patternBase;
this.explorer = new PatternExplorerImplementation();
this.explorer.getContext().putValue(de.FeatureModellingTool.Pattern.ConstantDefinition.PATTERN_BASE , patternBase);
this.explorer.addPropertyChangeListener(this.getCurrentTemplateChangeListener());
JScrollPane scrollExplorer = new JScrollPane(this.explorer.getExplorerComponent());
scrollParameter = new JPanel();
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
setLayout(gbl);
gbc.anchor = GridBagConstraints.NORTHWEST;
gbc.fill = GridBagConstraints.BOTH;
gbc.gridwidth = GridBagConstraints.REMAINDER;
add(Box.createHorizontalStrut(500), gbc);
gbc.gridwidth = 1;
gbc.weightx = 1;
add(scrollExplorer , gbc);
gbc.gridwidth = GridBagConstraints.REMAINDER;
add(scrollParameter , gbc);
}
private Set<Label> sLables = new HashSet<Label>();
private Hashtable<String , JTextField> htFields = new Hashtable<String , JTextField>();
protected void setTemplate(Templete template) {
if (this.template==template) {
return;
}
this.template = template;
while (this.scrollParameter.getComponentCount()>0) {
this.scrollParameter.remove(0);
}
// for (Iterator<JTextField> itField = this.htFields.values().iterator() ; itField.hasNext() ; ) {
// this.scrollParameter.remove(itField.next());
// }
// this.htFields.clear();
// for (Iterator<Label> itLabel = this.sLables.iterator() ; itLabel.hasNext() ; ) {
// this.scrollParameter.remove(itLabel.next());
// }
this.sLables.clear();
if (template!=null) {
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
scrollParameter.setLayout(gbl);
gbc.anchor = GridBagConstraints.NORTHWEST;
gbc.fill = GridBagConstraints.BOTH;
gbc.gridwidth = GridBagConstraints.REMAINDER;
scrollParameter.add(new Label("��ȷ��ģʽ����������������"), gbc);
for (Iterator<Feature> itFeature = (Iterator<Feature>)this.template.getFeatureModel().getAllFeature().values().iterator() ; itFeature.hasNext() ; ) {
Feature feature = itFeature.next();
if (this.template.getParameters().getFeatureNum(feature.getID())==0) {
gbc.gridwidth = 1;
scrollParameter.add(Box.createHorizontalStrut(10), gbc);
Label lbl = new Label(feature.getName());
scrollParameter.add(lbl, gbc);
scrollParameter.add(Box.createHorizontalStrut(15), gbc);
gbc.weightx = 1.0;
JTextField field = new JTextField(20);
field.setText("1");
scrollParameter.add(field, gbc);
gbc.gridwidth = GridBagConstraints.REMAINDER;
scrollParameter.add(Box.createVerticalStrut(10), gbc);
this.sLables.add(lbl);
this.htFields.put(feature.getID() , field);
}
}
scrollParameter.updateUI();
}
}
private CurrentTemplateChangeListener currentTemplateChangeListener = new CurrentTemplateChangeListener();
private CurrentTemplateChangeListener getCurrentTemplateChangeListener() {
return this.currentTemplateChangeListener;
}
protected class CurrentTemplateChangeListener implements PropertyChangeListener {
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getPropertyName().equals(ConstantDefinition.CURRENT_TEMPLATE)) {
Templete template = (Templete)evt.getNewValue();
setTemplate(template);
}
}
}
public Hashtable<String,Integer> getCloneCount() {
Hashtable<String,Integer> result = new Hashtable<String,Integer>();
for (Iterator<Entry<String,JTextField>> itMap = this.htFields.entrySet().iterator() ; itMap.hasNext() ; ) {
Entry<String,JTextField> entry = itMap.next();
if (Integer.parseInt(entry.getValue().getText())>1) {
result.put(entry.getKey() , new Integer(entry.getValue().getText()));
}
}
for (Iterator<Feature> itFeature = this.template.getFeatureModel().getAllFeature().values().iterator() ; itFeature.hasNext() ; ) {
Feature feature = itFeature.next();
if (!result.containsKey(feature.getID())
&& this.template.getParameters().getFeatureNum(feature.getID())>1) {
result.put(feature.getID() , this.template.getParameters().getFeatureNum(feature.getID()));
}
}
return result;
}
}