package de.FeatureModellingTool.DupHelper;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import de.FeatureModellingTool.FeatureModel.CFRelation;
import de.FeatureModellingTool.FeatureModel.CompositeConstraint;
import de.FeatureModellingTool.FeatureModel.CompositeConstraintEditor;
import de.FeatureModellingTool.FeatureModel.Constraint;
import de.FeatureModellingTool.FeatureModel.ConstraintModel;
import de.FeatureModellingTool.FeatureModel.ConstraintModelEditor;
import de.FeatureModellingTool.FeatureModel.Feature;
import de.FeatureModellingTool.FeatureModel.FeatureEditor;
import de.FeatureModellingTool.FeatureModel.FeatureModel;
import de.FeatureModellingTool.FeatureModel.FeatureModelEditor;
import de.FeatureModellingTool.FeatureModel.FeatureRelation;
import de.FeatureModellingTool.FeatureModel.GroupConstraint;
import de.FeatureModellingTool.FeatureModel.GroupConstraintEditor;
import de.FeatureModellingTool.FeatureModel.VPConstraint;
import de.FeatureModellingTool.FeatureModel.VPConstraintEditor;
public class ModelDupHelper {
public static Feature dupFeature(Feature fSrc
, HashMap<String,String> mName , HashMap<String,Feature> mFeature
, FeatureEditor feDest , FeatureModelEditor fmeDest) {
Feature result = fmeDest.addFeature("");
feDest.setBindingTime(result , fSrc.getBindingTime());
feDest.setCategory(result , fSrc.getCategory());
feDest.setDescription(result , fSrc.getDescription());
feDest.setIssueAndDecision(result , fSrc.getIssueAndDecision());
feDest.setName(result , fSrc.getName());
feDest.setNote(result , fSrc.getNote());
feDest.setSource(result , fSrc.getSource());
feDest.setVariability(result , fSrc.getVariability());
mName.put(fSrc.getID() , result.getID());
mFeature.put(result.getID() , result);
return result;
}
public static FeatureRelation dupFeatureRelation(FeatureRelation frSrc
, HashMap<String,String> mName , HashMap<String,FeatureRelation> mRelation
, FeatureModelEditor fmeDest) {
String sStart = mName.get(frSrc.getStartFeature().getID());
String sEnd = mName.get(frSrc.getEndFeature().getID());
FeatureRelation result = fmeDest.addRelation(frSrc.getName() , sStart , sEnd);
mName.put(frSrc.getID() , result.getID());
mRelation.put(result.getID() , result);
return result;
}
public static GroupConstraint dupGroupConstraint(GroupConstraint gcSrc , ConstraintModel cmSrc
, HashMap<String,String> mName , HashMap<String,Feature> mFeature
, HashMap<String,Constraint> mConstraint , HashMap<String,CFRelation> mRelation
, ConstraintModelEditor cmeDest , GroupConstraintEditor gceDest) {
GroupConstraint result = cmeDest.addGroupConstraint();
gceDest.setType(result , gcSrc.getType());
for (Iterator<Feature> itFeature=(Iterator<Feature>)gcSrc.getFeatureSet().iterator() ; itFeature.hasNext() ; ) {
Feature fSrc = itFeature.next();
Feature fDest = mFeature.get(mName.get(fSrc.getID()));
gceDest.addFeature(result , fDest);
boolean isSource = true;
CFRelation cfrSrc = cmSrc.getCFRelation(fSrc , gcSrc , isSource);
if (cfrSrc==null) {
isSource = false;
cfrSrc = cmSrc.getCFRelation(fSrc , gcSrc , isSource);
}
CFRelation cfrDest = cmeDest.addCFRelation(fDest , result , isSource , cfrSrc.getModifier());
mName.put(cfrSrc.getID() , cfrDest.getID());
mRelation.put(cfrDest.getID() , cfrDest);
}
mName.put(gcSrc.getID() , result.getID());
mConstraint.put(result.getID() , result);
return result;
}
public static CompositeConstraint dupCompositeConstraint(CompositeConstraint ccSrc , ConstraintModel cmSrc
, HashMap<String,String> mName , HashMap<String,Feature> mFeature
, HashMap<String,Constraint> mConstraint , HashMap<String,CFRelation> mRelation
, ConstraintModelEditor cmeDest , CompositeConstraintEditor cceDest) {
CompositeConstraint result = cmeDest.addCompositeConstraint();
cceDest.setPLType(result , ccSrc.getPLType());
cceDest.setSourceType(result , ccSrc.getSourceType());
cceDest.setSinkType(result , ccSrc.getSinkType());
for (Iterator<Feature> itFeature=(Iterator<Feature>)ccSrc.getSourceFeatureSet().iterator() ; itFeature.hasNext() ; ) {
Feature fSrc = itFeature.next();
Feature fDest = mFeature.get(mName.get(fSrc.getID()));
cceDest.addSourceFeature(result , fDest);
CFRelation cfrSrc = cmSrc.getCFRelation(fSrc , ccSrc , true);
CFRelation cfrDest = cmeDest.addCFRelation(fDest , result , true , cfrSrc.getModifier());
mName.put(cfrSrc.getID() , cfrDest.getID());
mRelation.put(cfrDest.getID() , cfrDest);
}
for (Iterator<Feature> itFeature=(Iterator<Feature>)ccSrc.getSinkFeatureSet().iterator() ; itFeature.hasNext() ; ) {
Feature fSrc = itFeature.next();
Feature fDest = mFeature.get(mName.get(fSrc.getID()));
cceDest.addSinkFeature(result , fDest);
CFRelation cfrSrc = cmSrc.getCFRelation(fSrc , ccSrc , false);
CFRelation cfrDest = cmeDest.addCFRelation(fDest , result , false , cfrSrc.getModifier());
mName.put(cfrSrc.getID() , cfrDest.getID());
mRelation.put(cfrDest.getID() , cfrDest);
}
mName.put(ccSrc.getID() , result.getID());
mConstraint.put(result.getID() , result);
return result;
}
public static VPConstraint dupVPConstraint(VPConstraint ccSrc , ConstraintModel cmSrc
, HashMap<String,String> mName , HashMap<String,Feature> mFeature
, HashMap<String,Constraint> mConstraint , HashMap<String,CFRelation> mRelation
, ConstraintModelEditor cmeDest , VPConstraintEditor vpceDest) {
VPConstraint result = cmeDest.addVPConstraint();
vpceDest.setType(result , ccSrc.getType());
for (Iterator<Feature> itFeature=(Iterator<Feature>)ccSrc.getSourceFeatureSet().iterator() ; itFeature.hasNext() ; ) {
Feature fSrc = itFeature.next();
Feature fDest = mFeature.get(mName.get(fSrc.getID()));
vpceDest.addSourceFeature(result , fDest);
CFRelation cfrSrc = cmSrc.getCFRelation(fSrc , ccSrc , true);
CFRelation cfrDest = cmeDest.addCFRelation(fDest , result , true , cfrSrc.getModifier());
mName.put(cfrSrc.getID() , cfrDest.getID());
mRelation.put(cfrDest.getID() , cfrDest);
}
for (Iterator<Feature> itFeature=(Iterator<Feature>)ccSrc.getSinkFeatureSet().iterator() ; itFeature.hasNext() ; ) {
Feature fSrc = itFeature.next();
Feature fDest = mFeature.get(mName.get(fSrc.getID()));
vpceDest.addSinkFeature(result , fDest);
CFRelation cfrSrc = cmSrc.getCFRelation(fSrc , ccSrc , false);
CFRelation cfrDest = cmeDest.addCFRelation(fDest , result , false , cfrSrc.getModifier());
mName.put(cfrSrc.getID() , cfrDest.getID());
mRelation.put(cfrDest.getID() , cfrDest);
}
mName.put(ccSrc.getID() , result.getID());
mConstraint.put(result.getID() , result);
return result;
}
public static void dupFeatureModel(FeatureModel fmSrc
, HashMap<String,String> mName , HashMap<String,Feature> mFeature
, HashMap<String,FeatureRelation> mRelation
, FeatureModel fmDest
, FeatureEditor feDest , FeatureModelEditor fmeDest
) {
mFeature.putAll(fmDest.getAllFeature());
mRelation.putAll(fmDest.getAllFeatureRelation());
for (Iterator<Feature> itFeature=fmDest.getAllFeature().values().iterator() ; itFeature.hasNext() ; ) {
Feature fSrc = itFeature.next();
dupFeature(fSrc , mName , mFeature , feDest , fmeDest);
}
for (Iterator<FeatureRelation> itFeatureRelation=fmDest.getAllFeatureRelation().values().iterator() ; itFeatureRelation.hasNext() ; ) {
FeatureRelation frSrc = itFeatureRelation.next();
dupFeatureRelation(frSrc , mName , mRelation , fmeDest);
}
}
public static void dupConstraintModel(ConstraintModel cmSrc
, HashMap<String,String> mName , HashMap<String,Feature> mFeature
, HashMap<String,Constraint> mConstraint , HashMap<String,CFRelation> mRelation
, ConstraintModel cmDest , ConstraintModelEditor cmeDest
, GroupConstraintEditor gceDest , CompositeConstraintEditor cceDest
, VPConstraintEditor vpceDest
) {
mConstraint.putAll(cmDest.getAllConstraint());
mRelation.putAll(cmDest.getAllCFRelation());
for (Iterator<Constraint> itConstraint=cmDest.getAllConstraint().values().iterator() ; itConstraint.hasNext() ; ) {
Constraint cSrc = itConstraint.next();
if (cSrc instanceof GroupConstraint) {
dupGroupConstraint((GroupConstraint)cSrc , cmSrc , mName , mFeature , mConstraint , mRelation , cmeDest , gceDest);
} else if (cSrc instanceof CompositeConstraint) {
dupCompositeConstraint((CompositeConstraint)cSrc , cmSrc , mName , mFeature , mConstraint , mRelation , cmeDest , cceDest);
} else if (cSrc instanceof VPConstraint) {
dupVPConstraint((VPConstraint)cSrc , cmSrc , mName , mFeature , mConstraint , mRelation , cmeDest , vpceDest);
}
}
}
}