Package de.FeatureModellingTool.Pattern.UI

Source Code of de.FeatureModellingTool.Pattern.UI.PatternExplorerImplementation$RemovePatternAction

package de.FeatureModellingTool.Pattern.UI;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.Iterator;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.tree.TreePath;

import org.jdesktop.swingx.JXTreeTable;

import de.FeatureModellingTool.Pattern.ConstantDefinition;
import de.FeatureModellingTool.Pattern.ConstantDefinition.PatternType;
import de.FeatureModellingTool.Pattern.UI.PatternTreeNode.NodeType;
import de.FeatureModellingTool.PatternBase.Pattern;
import de.FeatureModellingTool.PatternBase.PatternBase;
import de.FeatureModellingTool.PatternBase.Templete;
import de.reuse.Context;
import de.reuse.ContextImplementation;

public class PatternExplorerImplementation extends JScrollPane implements PatternExplorer {

    private static final String INNER_SELECTEDNODE = "innerSelectedNode";
    /** ����_�����˵� **/
    protected JPopupMenu popupMenu = null;
    protected NewPatternAction newPatternAction = null;
    protected UpdatePatternAction updatePatternAction = null;
    protected RemovePatternAction removePatternAction = null;
    protected NewPatternAction newTemplateAction = null;
    protected UpdatePatternAction updateTemplateAction = null;
    protected RemovePatternAction removeTemplateAction = null;
    /** ����_�汾�� **/
    private PatternTreeModel patternTreeModel = null;
    private JXTreeTable treeTable = null;
    private Component container = null;
    private PatternInfoEditor pie = null;
    /** ��װ�˶Զ���ģ�͵IJ��� **/
    protected PatternBase patternBase = null;
    /** �������� **/
    protected final ContextImplementation context = new ContextImplementation();

    public PatternExplorerImplementation() {
        PatternTreeNode root = new PatternTreeNode();
        this.patternTreeModel = new PatternTreeModel(root);
        this.treeTable = new JXTreeTable(this.patternTreeModel);
        this.treeTable.addMouseListener(new CustomizationVersionExplorerProbe());

        this.context.addContextChangeListener(new ContextChangeListener());


        this.newPatternAction = new NewPatternAction(PatternType.Pattern);
        this.updatePatternAction = new UpdatePatternAction(PatternType.Pattern);
        this.removePatternAction = new RemovePatternAction(PatternType.Pattern);
        this.newTemplateAction = new NewPatternAction(PatternType.Template);
        this.updateTemplateAction = new UpdatePatternAction(PatternType.Template);
        this.removeTemplateAction = new RemovePatternAction(PatternType.Template);

        this.popupMenu = new JPopupMenu();
        this.popupMenu.add(this.newPatternAction);
        this.popupMenu.add(this.updatePatternAction);
        this.popupMenu.add(this.removePatternAction);
        this.popupMenu.add(this.newTemplateAction);
        this.popupMenu.add(this.updateTemplateAction);
        this.popupMenu.add(this.removeTemplateAction);

        this.pie = new PatternInfoEditor();
    }

    public Context getContext() {
        return context;
    }

    protected class ContextChangeListener implements PropertyChangeListener {

        public void propertyChange(PropertyChangeEvent e) {
            String propertyName = e.getPropertyName();

            if (de.FeatureModellingTool.Pattern.ConstantDefinition.PATTERN_BASE.equals(propertyName)) {
                patternBase = (PatternBase) e.getNewValue();

                refreshTreeNodes(patternBase);
            }
        }
    }

    private void refreshTreeNodes(PatternBase patternBase) {
        PatternTreeNode root = (PatternTreeNode) this.treeTable.getTreeTableModel().getRoot();

        for (Iterator<Pattern> itCV = patternBase.getRootLoadedPatterns().iterator(); itCV.hasNext();) {
            this.refreshTreeNodes(root, itCV.next());
        }

        for (Iterator<Pattern> itCV = patternBase.getRootUserDefPatterns().iterator(); itCV.hasNext();) {
            this.refreshTreeNodes(root, itCV.next());
        }
    }

    private void refreshTreeNodes(PatternTreeNode parentNode, Pattern pattern) {
        PatternTreeNode thisNode = new PatternTreeNode(pattern);
        //parentNode.add(thisNode);
        patternTreeModel.insertNodeInto(thisNode, parentNode, parentNode.getChildCount());

        for (Iterator<Pattern> itPattern = pattern.getChildrenPatterns().iterator(); itPattern.hasNext();) {
            this.refreshTreeNodes(thisNode, itPattern.next());
        }

        for (Iterator<Templete> itTemplate = pattern.getChildrenTempletes().iterator(); itTemplate.hasNext();) {
            this.refreshTreeNodes(thisNode, itTemplate.next());
        }
    }

    private void refreshTreeNodes(PatternTreeNode parentNode, Templete template) {
        PatternTreeNode thisNode = new PatternTreeNode(template);
        //parentNode.add(thisNode);
        patternTreeModel.insertNodeInto(thisNode, parentNode, parentNode.getChildCount());

        for (Iterator<Templete> itTemplate = template.getChildrenTempletes().iterator(); itTemplate.hasNext();) {
            this.refreshTreeNodes(thisNode, itTemplate.next());
        }
    }

    public JComponent getExplorerComponent() {
        return this.treeTable;
    }

    protected abstract class PatternAction extends AbstractAction {

        protected PatternType patternType;

        public PatternAction(PatternType patternType) {
            this.patternType = patternType;
        }
    }

    protected class NewPatternAction extends PatternAction {

        protected static final long serialVersionUID = 0L;

        public NewPatternAction(PatternType patternType) {
            super(patternType);
            this.putValue(Action.NAME, "�½�" + ConstantDefinition.patternTypeToString(super.patternType));
        }

        public void actionPerformed(ActionEvent e) {
            if (!isEnabled()) {
                return;
            }
            pie.setEditName("");

            int result = JOptionPane.showConfirmDialog(container, pie, (String) this.getValue(Action.NAME), JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE);

            if (result == JOptionPane.OK_OPTION) {
                String parentId = null;

                PatternTreeNode ptn = (PatternTreeNode) getContext().getValue(INNER_SELECTEDNODE);
                if (ptn != null) {
                    if (ptn.getNodeType() == NodeType.ntPattern) {
                        parentId = ptn.getPattern().getName();
                    } else {
                        parentId = ptn.getTemplate().getName();
                    }
                }

                PatternTreeNode newPTN = null;
                if (this.patternType == PatternType.Pattern) {
                    Pattern newPattern = newPattern(parentId, pie.getEditName());
                    newPTN = new PatternTreeNode(newPattern);
                } else {
                    Templete newTemplate = newTemplate(parentId, pie.getEditName());
                    newTemplate.getFeatureModelEditor().addFeature("root");
                    newPTN = new PatternTreeNode(newTemplate);
                }

                if (ptn == null) {
                    PatternTreeNode root = (PatternTreeNode) patternTreeModel.getRoot();
                    patternTreeModel.insertNodeInto(newPTN, root, root.getChildCount());
                } else {
                    patternTreeModel.insertNodeInto(newPTN, ptn, ptn.getChildCount());
                }

            }
        }

        @Override
        public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
            super.firePropertyChange(propertyName, oldValue, newValue);
        }
    }

    protected class UpdatePatternAction extends PatternAction {

        protected static final long serialVersionUID = 0L;

        public UpdatePatternAction(PatternType patternType) {
            super(patternType);

            this.putValue(Action.NAME, "�޸�" + ConstantDefinition.patternTypeToString(super.patternType));
        }

        public boolean isEnabled() {
            if (!super.isEnabled()) {
                return false;
            }
            PatternTreeNode ptn = (PatternTreeNode) getContext().getValue(INNER_SELECTEDNODE);
            return ptn != null && ((ptn.getNodeType() == NodeType.ntPattern && this.patternType == PatternType.Pattern) || (ptn.getNodeType() == NodeType.ntTemplate && this.patternType == PatternType.Template));
        }

        public void actionPerformed(ActionEvent e) {
            if (!isEnabled()) {
                return;
            }
            PatternTreeNode ptn = (PatternTreeNode) getContext().getValue(INNER_SELECTEDNODE);

            if (ptn == null) {
                return;
            }

            if (ptn.getNodeType() == NodeType.ntPattern) {
                pie.setEditName(ptn.getPattern().getName());
            } else {
                pie.setEditName(ptn.getTemplate().getName());
            }

            int result = JOptionPane.showConfirmDialog(container, pie, "�޸�" + ConstantDefinition.patternTypeToString(super.patternType),
                    JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE);

            if (result == JOptionPane.OK_OPTION) {
                if (ptn.getNodeType() == NodeType.ntPattern) {
                    updatePattern(pie.getEditName());
                } else {
                    updateTemplate(pie.getEditName());
                }

                treeTable.updateUI();
            }
        }

        @Override
        public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
            super.firePropertyChange(propertyName, oldValue, newValue);
        }
    }

    protected class RemovePatternAction extends PatternAction {

        protected static final long serialVersionUID = 0L;

        public RemovePatternAction(PatternType patternType) {
            super(patternType);

            this.putValue(Action.NAME, "ɾ��" + ConstantDefinition.patternTypeToString(super.patternType));
        }

        @Override
        public boolean isEnabled() {
            if (!super.isEnabled()) {
                return false;
            }
            PatternTreeNode ptn = (PatternTreeNode) getContext().getValue(INNER_SELECTEDNODE);
            return ptn != null && ((ptn.getNodeType() == NodeType.ntPattern && this.patternType == PatternType.Pattern && ptn.getPattern().getChildrenPatterns().size() == 0 && ptn.getPattern().getChildrenTempletes().size() == 0) || (ptn.getNodeType() == NodeType.ntTemplate && this.patternType == PatternType.Template && ptn.getTemplate().getChildrenTempletes().size() == 0));
        }

        public void actionPerformed(ActionEvent e) {
            if (!isEnabled()) {
                return;
            }
            PatternTreeNode ptn = (PatternTreeNode) getContext().getValue(INNER_SELECTEDNODE);
            if (ptn == null || ptn.getChildCount() > 0) {
                return;
            }

            if (ptn.getNodeType() == NodeType.ntPattern) {
                removePattern(ptn.getPattern().getName());
            } else {
                removeTemplate(ptn.getTemplate().getName());
            }

            PatternTreeNode parentNode = (PatternTreeNode) ptn.getParent();
            parentNode.remove(ptn);

            treeTable.updateUI();
        }

        @Override
        public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
            super.firePropertyChange(propertyName, oldValue, newValue);
        }
    }

    private Pattern newPattern(String parentId, String patternName) {
        Pattern pattern = this.patternBase.addPattern(patternName);
        if (parentId != null) {
            pattern.setParentPattern(this.patternBase.getPattern(parentId));
            this.patternBase.getPattern(parentId).addChildPattern(pattern);
        } else {
            this.patternBase.addPattern(pattern);
        }

        return pattern;
    }

    private void updatePattern(String name) {
    }

    private void removePattern(String patternName) {
        this.patternBase.removePattern(patternName);
    }

    private Templete newTemplate(String parentId, String templateName) {
        Templete template = this.patternBase.addTemplete(templateName);
        if (this.patternBase.containsPattern(parentId)) {
            this.patternBase.getPattern(parentId).addChildTemplete(template);
            template.setParentPattern(this.patternBase.getPattern(parentId));
        } else {
            this.patternBase.getTemplete(parentId).addChildTemplete(template);
            template.setParentTemplete(this.patternBase.getTemplete(parentId));
        }

        return template;
    }

    private void updateTemplate(String name) {
    }

    private void removeTemplate(String templateName) {
        this.patternBase.removeTemplete(templateName);
    }

    protected class CustomizationVersionExplorerProbe extends MouseAdapter {

        @Override
        public void mouseClicked(MouseEvent e) {
            PatternTreeNode ptn = null;

            TreePath tp = treeTable.getPathForLocation(e.getX(), e.getY());
            if (tp != null) {
                Object node = tp.getLastPathComponent();
                if ((node != null) && node instanceof PatternTreeNode) {
                    ptn = (PatternTreeNode) node;
                }
            }

            if (ptn != null && (e.getButton() == MouseEvent.BUTTON1 || e.getButton() == MouseEvent.BUTTON3)) {
                Templete template = ptn.getNodeType() == NodeType.ntTemplate
                        ? ptn.getTemplate()
                        : null;
                firePropertyChange(ConstantDefinition.CURRENT_TEMPLATE, null, template);
            }

            if (e.getButton() == MouseEvent.BUTTON3) {
                getContext().putValue(INNER_SELECTEDNODE, ptn);

                updatePatternAction.firePropertyChange("enabled", false, updatePatternAction.isEnabled());
                removePatternAction.firePropertyChange("enabled", false, removePatternAction.isEnabled());
                updateTemplateAction.firePropertyChange("enabled", false, updateTemplateAction.isEnabled());
                removeTemplateAction.firePropertyChange("enabled", false, removeTemplateAction.isEnabled());

                popupMenu.show(treeTable, e.getX(), e.getY());
            }
        }
    }
}
TOP

Related Classes of de.FeatureModellingTool.Pattern.UI.PatternExplorerImplementation$RemovePatternAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.