Package de.FeatureModellingTool.GraphicalEditor

Source Code of de.FeatureModellingTool.GraphicalEditor.FigureTransferAction$ContextChangeListener

package de.FeatureModellingTool.GraphicalEditor;

import research.*;
import research.figure.TextFigure;
import research.util.GlobalFunction;

import javax.swing.*;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import java.util.*;

import de.FeatureModellingTool.FeatureModel.*;
import de.reuse.Clipboard;
import de.reuse.GroupMap;

/**
* Created by IntelliJ IDEA.
* User: saturn
* Date: 2003-7-30
* Time: 23:20:01
* To change this template use Options | File Templates.
*/
abstract class FigureTransferAction extends AbstractAction implements ConstantDefinition {

    protected DrawingView drawingView = null;

    protected FeatureModel featureModel = null;
    protected FeatureEditor featureEditor = null;
    protected FeatureModelEditor featureModelEditor = null;

    private ConstraintModel constraintModel = null;
    private ConstraintModelEditor constraintModelEditor = null;
    private CompositeConstraintEditor plConstraintEditor = null;
    private GroupConstraintEditor gConstraintEditor = null;
    private VPConstraintEditor vpConstraintEditor = null;

    private InteractionModel interactionModel = null;
    private InteractionModelEditor interactionModelEditor = null;
    private ResourceComponentEditor  resourceComponentEditor = null;

    private GroupMap idToFigureMap = null;

    public FigureTransferAction() {
        this.addPropertyChangeListener(new ContextChangeListener());
    }

    protected class ContextChangeListener implements PropertyChangeListener {
        public void propertyChange(PropertyChangeEvent e) {
            contextChange(e);
        }
    }

    protected void contextChange(PropertyChangeEvent e) {

        String propertyName = e.getPropertyName();

        if (DRAWING_VIEW.equals(propertyName)) {
            drawingView = (DrawingView) e.getNewValue();
        } else if (FEATURE_MODEL.equals(propertyName)) {
            featureModel = (FeatureModel) e.getNewValue();
        } else if (FEATURE_EDITOR.equals(propertyName)) {
            featureEditor = (FeatureEditor) e.getNewValue();
        } else if (FEATURE_MODEL_EDITOR.equals(propertyName)) {
            featureModelEditor = (FeatureModelEditor) e.getNewValue();
        } else if (ID_TO_FIGURE_MAP.equals(propertyName)) {
            idToFigureMap = (GroupMap) e.getNewValue();
        } else if (CONSTRAINT_MODEL.equals(propertyName)) {
            constraintModel = (ConstraintModel) e.getNewValue();
        } else if (CONSTRAINT_MODEL_EDITOR.equals(propertyName)) {
            constraintModelEditor = (ConstraintModelEditor) e.getNewValue();
        } else if (PL_CONSTRAINT_EDITOR.equals(propertyName)) {
            plConstraintEditor = (CompositeConstraintEditor) e.getNewValue();
        } else if (GROUP_CONSTRAINT_EDITOR.equals(propertyName)) {
            gConstraintEditor = (GroupConstraintEditor) e.getNewValue();
        } else if (VP_CONSTRAINT_EDITOR.equals(propertyName)) {
            vpConstraintEditor = (VPConstraintEditor) e.getNewValue();
        } else if (INTERACTION_MODEL.equals(propertyName)) {
            interactionModel = (InteractionModel) e.getNewValue();
        } else if (INTERACTION_MODEL_EDITOR.equals(propertyName)) {
            interactionModelEditor = (InteractionModelEditor) e.getNewValue();
        } else if (RESOURCE_COMPONENT_EDITOR.equals(propertyName)) {
            resourceComponentEditor = (ResourceComponentEditor) e.getNewValue();
        }

    }

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

    protected void deleteFigures() {
        Vector selection = drawingView.getSelection();
        Iterator iterator = selection.iterator();

        ArrayList figureList = new ArrayList(selection.size());

        //ɾ����ǰ��ѡ��Ĺ�ϵͼԪ�������Ӧ��ģ��Ԫ��
        while (iterator.hasNext()) {
            Figure figure = (Figure) iterator.next();

            if (figure instanceof ConnectionFigure) {

                String id = (String) figure.getAttribute("id");

                drawingView.removeFromSelection(figure);
                drawingView.remove(figure);

                if (id != null) {

                    if (featureModel.containsFeatureRelation(id)) {
                        featureModelEditor.removeRelation(id);
                    } else if (constraintModel.containsCFRelation(id)) {
                        constraintModelEditor.removeCFRelation(id);
                    } else if (interactionModel.containsInteraction(id)) {
                        interactionModelEditor.removeInteraction(id);
                    }

                    //����id��figure��ӳ���
                    if (idToFigureMap != null) {
                        idToFigureMap.remove(id, figure);
                    }
                }

            } else {
                String type = (String) figure.getAttribute("type");
                if ((type == null) || (!type.equals("interactionTitle"))) {
                    figureList.add(figure);
                }
            }
        }

        //ɾ����ǰ��ѡ��ʵ��ͼԪ��ͬʱɾ�����ͼԪ��صĹ�ϵͼԪ���������Ӧ��ģ��Ԫ��
        for (int i = 0; i < figureList.size(); i++) {
            Figure fig = (Figure) figureList.get(i);

            Figure[] figures = GlobalFunction.getObservingFigures(fig, ConnectionFigure.class);

            for (int j = 0; j < figures.length; j++) {
                String id = (String) figures[j].getAttribute("id");

                drawingView.removeFromSelection(figures[j]);
                drawingView.remove(figures[j]);

                if (featureModel.containsFeatureRelation(id)) {
                    featureModelEditor.removeRelation(id);
                } else if (constraintModel.containsCFRelation(id)) {
                    constraintModelEditor.removeCFRelation(id);
                } else if (interactionModel.containsInteraction(id)) {
                    interactionModelEditor.removeInteraction(id);
                }

                //����id��figure��ӳ���
                if (idToFigureMap != null) {
                    idToFigureMap.remove(id, figures[j]);
                }
            }

            String id = (String) fig.getAttribute("id");

            Boolean isALink = (Boolean) fig.getAttribute(FeatureFigure.IS_A_LINK);

            //ɾ����ǰ(�����Ӹ���)ͼԪ���������Ӹ���
            if (idToFigureMap != null) {
                Set set = idToFigureMap.get(id);
                if (((isALink == null) || (!isALink.booleanValue())) && (set != null)) {
                    Iterator linkIterator = set.iterator();
                    while (linkIterator.hasNext()) {
                        Figure f = (Figure) linkIterator.next();
                        if (f == fig) continue;

                        Figure[] fs = GlobalFunction.getObservingFigures(f, ConnectionFigure.class);

                        for (int j = 0; j < fs.length; j++) {
                            String id_tmp = (String) fs[j].getAttribute("id");

                            drawingView.removeFromSelection(fs[j]);
                            drawingView.remove(fs[j]);

                            //
                            if (featureModel.containsFeatureRelation(id_tmp)) {
                                featureModelEditor.removeRelation(id_tmp);
                            } else if (constraintModel.containsCFRelation(id_tmp)) {
                                constraintModelEditor.removeCFRelation(id_tmp);
                            } else if (interactionModel.containsInteraction(id)) {
                                interactionModelEditor.removeInteraction(id);
                            }
                            //

                            //����id��figure��ӳ���
                            if (idToFigureMap != null) {
                                idToFigureMap.remove(id_tmp, fs[j]);
                            }
                        }

                        drawingView.removeFromSelection(f);
                        drawingView.remove(f);

                    }

                }
            }


            drawingView.removeFromSelection(fig);
            drawingView.remove(fig);

            if ((isALink == null) || (!isALink.booleanValue())) {
                //
                if (featureModel.containsFeature(id)) {
                    featureModelEditor.removeFeature(id);
                } else if (constraintModel.containsConstraint(id)) {
                    constraintModelEditor.removeConstraint(id);
                } else if (interactionModel.containsResourceComponent(id)){
                    interactionModelEditor.removeResourceComponent(id);
                }
                //
            }

            //����id��figure��ӳ���
            if (idToFigureMap != null) {
                idToFigureMap.remove(id, fig);
            }

        }

        drawingView.repairDamage();
    }

    protected void copyFigures() {
        ArrayList figureList = new ArrayList();
        ArrayList connectionList = new ArrayList();

        Vector selection = drawingView.getSelection();
        Iterator iterator = selection.iterator();

        //�ѵ�ǰ��ѡ���ͼԪ����ʵ��ͼԪ�͹�ϵͼԪ�ı�׼��Ϊ����
        figureList.clear();
        connectionList.clear();
        while (iterator.hasNext()) {
            Figure figure = (Figure) iterator.next();

            if (figure instanceof ConnectionFigure) {
                connectionList.add(figure);
            } else {
                String type = (String) figure.getAttribute("type");
                if ((type == null) || (!type.equals("interactionTitle"))) {
                    figureList.add(figure);
                }
            }
        }

        //��connectionList������ͼԪ����figureList�е�Ԫ�ش�connectionList�޳�
        for (int i = 0; i < connectionList.size();) {
            ConnectionFigure cf = (ConnectionFigure) connectionList.get(i);

            Figure sf = cf.startFigure();
            Figure ef = cf.endFigure();

            if (figureList.contains(sf) && figureList.contains(ef)) {
                i++;
            } else {
                connectionList.remove(i);
            }
        }

        //ArrayList infoEntityList = new ArrayList(figureList.size() + connectionList.size());
        TreeMap infoEntityMap = new TreeMap();

        //���ͼԪ��Ϣ
        //.1���ʵ��ͼԪ��Ϣ
        Vector figureInfo = new Vector(figureList.size() + connectionList.size());
        for (int i = 0; i < figureList.size(); i++) {
            figureInfo.add(figureList.get(i));
        }

        //.2�����ϵͼԪ��Ϣ
        for (int i = 0; i < connectionList.size(); i++) {
            figureInfo.add(connectionList.get(i));
        }

        FigureEnumerator fe = new FigureEnumerator(figureInfo);
        StandardFigureSelection sfe = new StandardFigureSelection(fe, figureInfo.size());

        //���ģ����Ϣ
        for (int i = 0; i < connectionList.size(); i++) {
            Figure f = (Figure) connectionList.get(i);

            String id = (String) f.getAttribute("id");

            if (featureModel.containsFeatureRelation(id)) {
                //��¼������ϵ��Ϣ
                Map featureRelationInfo = new TreeMap();

                FeatureRelation fr = featureModel.getFeatureRelation(id);
                featureRelationInfo.put(FeatureRelationProperties.ID, fr.getID());
                featureRelationInfo.put(FeatureRelationProperties.NAME, fr.getName());
                featureRelationInfo.put(FeatureRelationProperties.START_FEATURE, fr.getStartFeature().getID());
                featureRelationInfo.put(FeatureRelationProperties.END_FEATURE, fr.getEndFeature().getID());

                //infoEntity
                Map infoEntity = new TreeMap();
                infoEntity.put(ConstantDefinition.TYPE, "featureRelation");
                infoEntity.put(ConstantDefinition.TARGET_MODEL_ELEMENT, featureRelationInfo);

                infoEntityMap.put(id, infoEntity);
            } else if (constraintModel.containsCFRelation(id)) {
                //��¼Լ����ϵ��Ϣ
                Map plRelationInfo = new TreeMap();

                CFRelation plr = constraintModel.getCFRelation(id);
                plRelationInfo.put(CFRelationProperties.ID, plr.getID());
                plRelationInfo.put(CFRelationProperties.NAME, plr.getName());
                plRelationInfo.put(CFRelationProperties.FEATURE, plr.getFeature().getID());
                plRelationInfo.put(CFRelationProperties.CONSTRAINT, plr.getConstraint().getID());
                plRelationInfo.put(CFRelationProperties.IS_SOURCE, Boolean.valueOf(plr.isSource()));
                plRelationInfo.put(CFRelationProperties.MODIFIER, plr.getModifier().getName());

                //infoEntity
                Map infoEntity = new TreeMap();
                infoEntity.put(ConstantDefinition.TYPE, "plRelation");
                infoEntity.put(ConstantDefinition.TARGET_MODEL_ELEMENT, plRelationInfo);

                infoEntityMap.put(id, infoEntity);
            } else if (interactionModel.containsInteraction(id)) {
                //��¼������ϵ��Ϣ
                Map interactionInfo = new TreeMap();

                Interaction interaction = interactionModel.getInteraction(id);
                interactionInfo.put(InteractionProperties.ID, interaction.getID());
                interactionInfo.put(InteractionProperties.NAME, interaction.getName());
                interactionInfo.put(InteractionProperties.TYPE, interaction.getType());
                interactionInfo.put(InteractionProperties.ACTIVER, interaction.getActiver().getID());
                interactionInfo.put(InteractionProperties.PASSIVER, interaction.getPassiver().getID());

                //infoEntity
                Map infoEntity = new TreeMap();
                infoEntity.put(ConstantDefinition.TYPE, "interaction");
                infoEntity.put(ConstantDefinition.TARGET_MODEL_ELEMENT, interactionInfo);

                infoEntityMap.put(id, infoEntity);
            }
        }

        for (int i = 0; i < figureList.size(); i++) {
            Figure fig = (Figure) figureList.get(i);

            String id = (String) fig.getAttribute("id");

            if (id == null) continue;

            if (featureModel.containsFeature(id)) {
                //��¼��������Ϣ
                Map featureInfo = new TreeMap();

                Feature feature = featureModel.getFeature(id);
                featureInfo.put(FeatureProperties.ID, feature.getID());
                featureInfo.put(FeatureProperties.NAME, feature.getName());
                featureInfo.put(FeatureProperties.DESCRIPTION, feature.getDescription());

                featureInfo.put(FeatureProperties.SOURCE, feature.getSource());
                featureInfo.put(FeatureProperties.ISSUE_AND_DECISION, feature.getIssueAndDecision());
                featureInfo.put(FeatureProperties.NOTE, feature.getNote());

                featureInfo.put(FeatureProperties.CATEGORY, feature.getCategory());
                featureInfo.put(FeatureProperties.VARIABILITY, feature.getVariability());
                featureInfo.put(FeatureProperties.BINDINGTIME, feature.getBindingTime());

                //infoEntity
                Map infoEntity = new TreeMap();
                infoEntity.put(ConstantDefinition.TYPE, "feature");
                infoEntity.put(ConstantDefinition.TARGET_MODEL_ELEMENT, featureInfo);

                infoEntityMap.put(id, infoEntity);
            } else if (constraintModel.containsCompositeConstraint(id)) {
                //��¼Լ����Ϣ
                Map plcInfo = new TreeMap();

                CompositeConstraint plc = constraintModel.getCompositeConstraint(id);
                plcInfo.put(CompositeConstraintProperties.ID, plc.getID());

                plcInfo.put(CompositeConstraintProperties.PL_TYPE, plc.getPLType());
                plcInfo.put(CompositeConstraintProperties.SOURCE_TYPE, plc.getSourceType());
                plcInfo.put(CompositeConstraintProperties.SINK_TYPE, plc.getSinkType());

                //infoEntity
                Map infoEntity = new TreeMap();
                infoEntity.put(ConstantDefinition.TYPE, "plConstraint");
                infoEntity.put(ConstantDefinition.TARGET_MODEL_ELEMENT, plcInfo);

                infoEntityMap.put(id, infoEntity);
            } else if (constraintModel.containsGroupConstraint(id)) {
                //��¼Լ����Ϣ
                Map gcInfo = new TreeMap();

                GroupConstraint gc = constraintModel.getGroupConstraint(id);
                gcInfo.put(GroupConstraintProperties.ID, gc.getID());

                gcInfo.put(GroupConstraintProperties.TYPE, gc.getType());

                //infoEntity
                Map infoEntity = new TreeMap();
                infoEntity.put(ConstantDefinition.TYPE, "groupConstraint");
                infoEntity.put(ConstantDefinition.TARGET_MODEL_ELEMENT, gcInfo);

                infoEntityMap.put(id, infoEntity);

            } else if (constraintModel.containsVPConstraint(id)) {
                //��¼Լ����Ϣ
                Map gcInfo = new TreeMap();

                VPConstraint vpc = constraintModel.getVPConstraint(id);
                gcInfo.put(VPConstraintProperties.ID, vpc.getID());

                gcInfo.put(VPConstraintProperties.TYPE, vpc.getType());

                //infoEntity
                Map infoEntity = new TreeMap();
                infoEntity.put(ConstantDefinition.TYPE, "vpConstraint");
                infoEntity.put(ConstantDefinition.TARGET_MODEL_ELEMENT, gcInfo);

                infoEntityMap.put(id, infoEntity);
            } else if (interactionModel.containsResourceComponent(id)) {
                Map rcInfo = new TreeMap();

                ResourceComponent rc = interactionModel.getResourceComponent(id);
                rcInfo.put(EntityProperties.ID, rc.getID());
                rcInfo.put(EntityProperties.NAME, rc.getName());
                rcInfo.put(EntityProperties.DESCRIPTION, rc.getDescription());
                rcInfo.put(EntityProperties.VARIABILITY, rc.getVariability());
                rcInfo.put(EntityProperties.BINDINGTIME, rc.getBindingTime());

                //infoEntity
                Map infoEntity = new TreeMap();
                infoEntity.put(ConstantDefinition.TYPE, "resource-component");
                infoEntity.put(ConstantDefinition.TARGET_MODEL_ELEMENT, rcInfo);

                infoEntityMap.put(id, infoEntity);
            }
        }

        TreeMap clipboradContent = new TreeMap();
        clipboradContent.put("graphInfo", sfe);
        clipboradContent.put("modelInfo", infoEntityMap);

        Clipboard.getInstance().setContent(clipboradContent);
    }

    protected void cutFigures() {
        copyFigures();
        deleteFigures();
    }

    protected void pasteFigures() {
        Map clipboardContent = Clipboard.getInstance().getContent();

        FigureSelection graphInfo = (FigureSelection) clipboardContent.get("graphInfo");
        Map modelInfo = (Map) clipboardContent.get("modelInfo");

        FigureEnumeration fe = (FigureEnumeration) graphInfo.getData(graphInfo.getType());

        ArrayList figureList = new ArrayList(modelInfo.size());
        while (fe.hasMoreElements()) {
            Figure fig = fe.nextFigure();

            if (fig instanceof ConnectionFigure) {
                figureList.add(0, fig);
            } else {
                figureList.add(fig);
            }
        }

        int breakPoint = 0;

        //���ʵ��ͼԪ���ϵͼԪ�ķֽ��
        for (int i = figureList.size() - 1; i >= 0; i--) {
            Figure fig = (Figure) figureList.get(i);

            if (fig instanceof ConnectionFigure) {
                breakPoint = i + 1;
                break;
            }
        }

        //�����µ�ID
        /**
         * ���ȼ��ģ�����Ƿ������ͬ��id,��������������µ�id
         */
        ArrayList oldIDList = new ArrayList(figureList.size());
        ArrayList newIDList = new ArrayList(oldIDList.size());
        for (int i = 0; i < breakPoint; i++) {
            Figure fig = (Figure) figureList.get(i);
            String id = (String) fig.getAttribute("id");
            oldIDList.add(i, id);

            if (featureModel.containsFeatureRelation(id)
                    || constraintModel.containsCFRelation(id)
                    || interactionModel.containsInteraction(id)) {
                Map infoEntity = (Map) modelInfo.get(oldIDList.get(i));
                String infoType = (String) infoEntity.get(ConstantDefinition.TYPE);
                Map relationInfo = (Map) infoEntity.get(ConstantDefinition.TARGET_MODEL_ELEMENT);

                if (infoType.equals("featureRelation")) {
                    String name = (String) relationInfo.get(FeatureRelationProperties.NAME);
                    newIDList.add(i, GIDGenerator.getInstance().createRelationID(name));
                } else if (infoType.equals("plRelation")) {
                    newIDList.add(i, GIDGenerator.getInstance().createRelationID(CFRelation.PL_Relation));
                } else if (infoType.equals("interaction")) {
                    newIDList.add(i, GIDGenerator.getInstance().createGID("interaction"));
                }
            } else {
                newIDList.add(i, id);
            }
        }

        for (int i = breakPoint; i < figureList.size(); i++) {
            Figure fig = (Figure) figureList.get(i);
            String id = (String) fig.getAttribute("id");
            oldIDList.add(i, id);

            Boolean isALink = (Boolean) fig.getAttribute(FeatureFigure.IS_A_LINK);

            if ((isALink != null) && (isALink.booleanValue() == true)) {
                newIDList.add(i, id);
            } else {
                if (featureModel.containsFeature(id)
                        || constraintModel.containsConstraint(id)
                        || interactionModel.containsResourceComponent(id)) {
                    Map infoEntity = (Map) modelInfo.get(oldIDList.get(i));
                    String infoType = (String) infoEntity.get(ConstantDefinition.TYPE);
                    if (infoType.equals("feature")) {
                        newIDList.add(i, GIDGenerator.getInstance().createFeatureID());
                    } else if (infoType.equals("plConstraint")) {
                        newIDList.add(i, GIDGenerator.getInstance().createPLConstraintID());
                    } else if (infoType.equals("groupConstraint")) {
                        newIDList.add(i, GIDGenerator.getInstance().createGroupConstraintID());
                    } else if (infoType.equals("vpConstraint")) {
                        newIDList.add(i, GIDGenerator.getInstance().createVPConstraintID());
                    } else if (infoType.equals("resource-component")) {
                       newIDList.add(i, GIDGenerator.getInstance().createResourceComponentID());
                    }
                } else {
                    newIDList.add(i, id);
                }
            }
        }

        //�ָ�ģ����Ϣ
        //.1�ָ�ʵ��Ԫ����Ϣ
        for (int i = breakPoint; i < figureList.size(); i++) {
            Figure fig = (Figure) figureList.get(i);
            Boolean isALink = (Boolean) fig.getAttribute(FeatureFigure.IS_A_LINK);
            if ((isALink != null) && (isALink.booleanValue() == true)) {
                //����id��figure��ӳ���
                if (idToFigureMap != null) {
                    idToFigureMap.add((String) oldIDList.get(i), fig);
                }

                continue;
            }

            Map infoEntity = (Map) modelInfo.get(oldIDList.get(i));
            String infoType = (String) infoEntity.get(ConstantDefinition.TYPE);
            Map info = (Map) infoEntity.get(ConstantDefinition.TARGET_MODEL_ELEMENT);

            if (infoType.equals("feature")) {

                String id = (String) newIDList.get(i);
                String name = (String) info.get(FeatureProperties.NAME);
                String description = (String) info.get(FeatureProperties.DESCRIPTION);

                String source = (String) info.get(FeatureProperties.SOURCE);
                String iad = (String) info.get(FeatureProperties.ISSUE_AND_DECISION);
                String note = (String) info.get(FeatureProperties.NOTE);

                FeatureCategory category = (FeatureCategory) info.get(FeatureProperties.CATEGORY);
                Variability variability = (Variability) info.get(FeatureProperties.VARIABILITY);
                BindingTime bindingTime = (BindingTime) info.get(FeatureProperties.BINDINGTIME);

                Feature feature = featureModelEditor.addFeature(name, id);

                //����id��figure��ӳ���
                if (idToFigureMap != null) {
                    idToFigureMap.add(id, figureList.get(i));
                }

                featureEditor.setDescription(feature, description);
                featureEditor.setSource(feature, source);
                featureEditor.setIssueAndDecision(feature, iad);
                featureEditor.setNote(feature, note);
                featureEditor.setCategory(feature, category);
                featureEditor.setVariability(feature, variability);
                featureEditor.setBindingTime(feature, bindingTime);
            } else if (infoType.equals("plConstraint")) {
                String id = (String) newIDList.get(i);

                CompositeConstraintType plType = (CompositeConstraintType) info.get(CompositeConstraintProperties.PL_TYPE);
                CompositeConstraintPortType sourceType = (CompositeConstraintPortType) info.get(CompositeConstraintProperties.SOURCE_TYPE);
                CompositeConstraintPortType sinkType = (CompositeConstraintPortType) info.get(CompositeConstraintProperties.SINK_TYPE);

                CompositeConstraint plc = constraintModelEditor.addCompositeConstraint(id);

                //����id��figure��ӳ���
                if (idToFigureMap != null) {
                    idToFigureMap.add(id, figureList.get(i));
                }

                plConstraintEditor.setPLType(plc, plType);
                plConstraintEditor.setSourceType(plc, sourceType);
                plConstraintEditor.setSinkType(plc, sinkType);

            } else if(infoType.equals("groupConstraint")){
                String id = (String) newIDList.get(i);
                GroupConstraintType gType = (GroupConstraintType) info.get(GroupConstraintProperties.TYPE);

                GroupConstraint gc = constraintModelEditor.addGroupConstraint(id);

                //����id��figure��ӳ���
                if (idToFigureMap != null) {
                    idToFigureMap.add(id, figureList.get(i));
                }

                gConstraintEditor.setType(gc, gType);

            } else if (infoType.equals("vpConstraint")) {
                String id = (String) newIDList.get(i);
                VPConstraintType vpType = (VPConstraintType) info.get(VPConstraintProperties.TYPE);

                VPConstraint vpc = constraintModelEditor.addVPConstraint(id);

                //����id��figure��ӳ���
                if (idToFigureMap != null) {
                    idToFigureMap.add(id, figureList.get(i));
                }

                vpConstraintEditor.setType(vpc, vpType);
               
            } else if (infoType.equals("resource-component")){
                String id = (String) newIDList.get(i);
                String name = (String) info.get(EntityProperties.NAME);
                String description = (String) info.get(EntityProperties.DESCRIPTION);
                Variability variability = (Variability) info.get(EntityProperties.VARIABILITY);
                BindingTime bindingTime = (BindingTime) info.get(EntityProperties.BINDINGTIME);

                ResourceComponent rc = interactionModelEditor.addResourceComponent(name, id);

                //����id��figure��ӳ���
                if (idToFigureMap != null) {
                    idToFigureMap.add(id, figureList.get(i));
                }

                resourceComponentEditor.setDescription(rc, description);
                resourceComponentEditor.setVariability(rc, variability);
                resourceComponentEditor.setBindingTime(rc, bindingTime);
            }
        }

        //.1�ָ���ϵԪ����Ϣ
        ArrayList redundancyIndex = new ArrayList();
        TreeMap interactionMap = new TreeMap();
        for (int i = 0; i < breakPoint; i++) {
            Map relationEntity = (Map) modelInfo.get(oldIDList.get(i));
            String relationType = (String) relationEntity.get(ConstantDefinition.TYPE);
            Map relationInfo = (Map) relationEntity.get(ConstantDefinition.TARGET_MODEL_ELEMENT);

            if (relationType.equals("featureRelation")) {

                String id = (String) newIDList.get(i);
                String name = (String) relationInfo.get(FeatureRelationProperties.NAME);
                String sID = (String) relationInfo.get(FeatureRelationProperties.START_FEATURE);
                String eID = (String) relationInfo.get(FeatureRelationProperties.END_FEATURE);

                int sIndex = oldIDList.indexOf(sID);
                int eIndex = oldIDList.indexOf(eID);

                sID = (String) newIDList.get(sIndex);
                eID = (String) newIDList.get(eIndex);

                if (!featureModel.contains(name, sID, eID)) {
                    featureModelEditor.addRelation(name, id, sID, eID);
                    //����id��figure��ӳ���
                    if (idToFigureMap != null) {
                        idToFigureMap.add(id, figureList.get(i));
                    }
                } else {
                    redundancyIndex.add(new Integer(i));
                }

            } else if (relationType.equals("plRelation")) {
                String id = (String) newIDList.get(i);
                String name = (String) relationInfo.get(CFRelationProperties.NAME);
                String fID = (String) relationInfo.get(CFRelationProperties.FEATURE);
                String plcID = (String) relationInfo.get(CFRelationProperties.CONSTRAINT);
                Boolean isSource = (Boolean) relationInfo.get(CFRelationProperties.IS_SOURCE);
                String modifier = (String) relationInfo.get(CFRelationProperties.MODIFIER);

                int fIndex = oldIDList.indexOf(fID);
                int plcIndex = oldIDList.indexOf(plcID);

                fID = (String) newIDList.get(fIndex);
                plcID = (String) newIDList.get(plcIndex);

                constraintModelEditor.addCFRelation(id, featureModel.getFeature(fID),
                        constraintModel.getConstraint(plcID), isSource.booleanValue(), CFRModifier.getInstance(modifier));
                //����id��figure��ӳ���
                if (idToFigureMap != null) {
                    idToFigureMap.add(id, figureList.get(i));
                }
            } else if (relationType.equals("interaction")) {
                String id = (String) newIDList.get(i);
                String type = (String) relationInfo.get(InteractionProperties.TYPE);
                String name = (String) relationInfo.get(InteractionProperties.NAME);
                String activerID = (String) relationInfo.get(InteractionProperties.ACTIVER);
                String passiverID = (String) relationInfo.get(InteractionProperties.PASSIVER);

                int aIndex = oldIDList.indexOf(activerID);
                int pIndex = oldIDList.indexOf(passiverID);

                activerID = (String) newIDList.get(aIndex);
                passiverID = (String) newIDList.get(pIndex);

                if (!interactionModel.containsInteraction(type, name, activerID, passiverID)) {
                    Interaction ita = interactionModelEditor.addInteraction(id, type, name, activerID, passiverID);

                    //����id��figure��ӳ���
                    if (idToFigureMap != null) {
                        idToFigureMap.add(id, figureList.get(i));
                    }

                    interactionMap.put(new Integer(i), ita);

                } else {
                    redundancyIndex.add(new Integer(i));
                }
            }
        }

        //�ָ�ͼԪ��Ϣ
        drawingView.clearSelection();
        for (int i = figureList.size() - 1; i >= 0; i--) {
            Figure fig = (Figure) figureList.get(i);
            fig.setAttribute("id", newIDList.get(i));
           
            //if (!redundancyIndex.contains(Integer.valueOf(i))) {
            if (!redundancyIndex.contains(new Integer(i))) {
                drawingView.add(fig);
                drawingView.addToSelection(fig);
            } else {
                drawingView.add(fig);
                drawingView.remove(fig);
            }
        }

        //.����ƫ��
        for (int i = figureList.size() - 1; i >= breakPoint; i--) {
            //if (!redundancyIndex.contains(Integer.valueOf(i))) {
            if (!redundancyIndex.contains(new Integer(i))) {
                Figure fig = (Figure) figureList.get(i);
                fig.moveBy(20, 20);
            }
        }

        //.�ָ�interaction��titleͼԪ
        Iterator iterator = interactionMap.keySet().iterator();
        while (iterator.hasNext()) {
            Integer integer = (Integer) iterator.next();
            Interaction ita = (Interaction) interactionMap.get(integer);
            Figure fig = (Figure) figureList.get(integer.intValue());

            TextFigure title = new TextFigure();
            title.setText(ita.getType() + ":" + ita.getName());
            title.setAttribute("id", ita.getID());
            title.setAttribute("type", "interactionTitle");
            title.setAttribute("isALink", Boolean.TRUE);

            //����id��figure��ӳ���
            if (idToFigureMap != null) {
                idToFigureMap.add(ita.getID(), title);
            }

            drawingView.add(title);
            title.connect(fig);
        }

        drawingView.repairDamage();

    }

    protected void pasteFiguresAsLink() {
        Map clipboardContent = Clipboard.getInstance().getContent();

        FigureSelection graphInfo = (FigureSelection) clipboardContent.get("graphInfo");
        Map modelInfo = (Map) clipboardContent.get("modelInfo");

        FigureEnumeration fe = (FigureEnumeration) graphInfo.getData(graphInfo.getType());

        //��ü������������ͼԪ�б�
        ArrayList figureList = new ArrayList(modelInfo.size());
        while (fe.hasMoreElements()) {
            Figure fig = fe.nextFigure();

            if ((fig instanceof FeatureFigure) || (fig instanceof ResourceComponentFigure)) {
                figureList.add(fig);
            }
        }

        //�������ͼԪ��Ӧ������id��Ϣ
        ArrayList idList = new ArrayList(figureList.size());
        for (int i = 0; i < figureList.size(); i++) {
            Figure fig = (Figure) figureList.get(i);
            String id = (String) fig.getAttribute("id");
            idList.add(i, fig.getAttribute("id"));

            //����id��figure��ӳ���
            if (idToFigureMap != null) {
                idToFigureMap.add(id, fig);
            }
        }

        //�ָ�ͼԪ��Ϣ
        drawingView.clearSelection();
        for (int i = figureList.size() - 1; i >= 0; i--) {
            Figure fig = (Figure) figureList.get(i);

            Figure[] observers = GlobalFunction.getObservingFigures(fig, ConnectionFigure.class);

            for (int k = 0; k < observers.length; k++) {
                if (observers[k] instanceof FigureChangeListener) {
                    fig.removeFigureChangeListener((FigureChangeListener) observers[k]);
                }
            }

            fig.setAttribute(FeatureFigure.IS_A_LINK, Boolean.TRUE);
            drawingView.add(fig);
            drawingView.addToSelection(fig);
        }

        //.����ƫ��
        for (int i = figureList.size() - 1; i >= 0; i--) {
            Figure fig = (Figure) figureList.get(i);
            fig.moveBy(20, 20);
        }

        drawingView.repairDamage();

    }


}
TOP

Related Classes of de.FeatureModellingTool.GraphicalEditor.FigureTransferAction$ContextChangeListener

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.