package de.FeatureModellingTool.DupHelper;
import java.util.HashMap;
import research.ConnectionFigure;
import research.DrawingView;
import research.Figure;
import research.FigureEnumeration;
import de.FeatureModellingTool.FeatureModel.FeatureProperties;
import de.FeatureModellingTool.GraphicalEditor.ConstraintConnection;
import de.FeatureModellingTool.GraphicalEditor.ConstraintFigure;
import de.FeatureModellingTool.GraphicalEditor.AttributeConnection;
import de.FeatureModellingTool.GraphicalEditor.FeatureFigure;
import de.FeatureModellingTool.GraphicalEditor.GroupConstraintFigure;
import de.FeatureModellingTool.GraphicalEditor.DecomposeConnection;
import de.FeatureModellingTool.GraphicalEditor.PLConnection;
import de.FeatureModellingTool.GraphicalEditor.PLFigure;
import de.FeatureModellingTool.GraphicalEditor.VPConstraintFigure;
public class UIDupHelper {
public static String FIGURE_ID_PREFIX = "FIGURE_ID_PREFIX_";
public static FeatureFigure dupFeatureFigure(FeatureFigure ffSrc
, HashMap<String,String> mName , HashMap<String,Figure> mFigure
, DrawingView dvDest) {
FeatureFigure result = new FeatureFigure();
result.setAttribute("id", mName.get(ffSrc.getAttribute("id")));
result.setAttribute(FeatureFigure.IS_A_LINK, ffSrc.getAttribute(FeatureFigure.IS_A_LINK));
result.setAttribute("text", ffSrc.getAttribute("text"));
result.setAttribute(FeatureProperties.VARIABILITY, ffSrc.getAttribute(FeatureProperties.VARIABILITY));
result.setAttribute(FeatureProperties.BINDINGTIME, ffSrc.getAttribute(FeatureProperties.BINDINGTIME));
dvDest.add(result);
result.moveBy(ffSrc.getDisplayBox().x , ffSrc.getDisplayBox().y);
mName.put((String)ffSrc.getAttribute("id") , UIDupHelper.FIGURE_ID_PREFIX + ffSrc.getAttribute("id"));
mFigure.put(UIDupHelper.FIGURE_ID_PREFIX + ffSrc.getAttribute("id") , result);
return result;
}
public static ConnectionFigure dupConnectionFigure(ConnectionFigure cfSrc
, HashMap<String,String> mName , HashMap<String,Figure> mFigure
, DrawingView dvDest) {
ConnectionFigure result = null;
if (cfSrc instanceof AttributeConnection) {
result = new AttributeConnection();
} else if (cfSrc instanceof DecomposeConnection) {
result = new DecomposeConnection();
} else if (cfSrc instanceof ConstraintConnection) {
result = new ConstraintConnection((String)cfSrc.getAttribute("type"));
((ConstraintConnection)result).setStartDecoration(((ConstraintConnection)cfSrc).getStartDecoration());
((ConstraintConnection)result).setMidDecoration(((ConstraintConnection)cfSrc).getMidDecoration());
((ConstraintConnection)result).setEndDecoration(((ConstraintConnection)cfSrc).getEndDecoration());
} else if (cfSrc instanceof PLConnection){
result = new PLConnection();
result.setAttribute("frameColor" , cfSrc.getAttribute("frameColor"));
result.setAttribute("type" , cfSrc.getAttribute("type"));
result.setAttribute("CFRModifier" , cfSrc.getAttribute("CFRModifier"));
} else {
return null;
}
result.setAttribute("id" , mName.get(cfSrc.getAttribute("id")));
result.startPoint(cfSrc.startPoint().x , cfSrc.startPoint().y);
result.endPoint(cfSrc.endPoint().x , cfSrc.endPoint().y);
dvDest.add(result);
mName.put((String)cfSrc.getAttribute("id") , UIDupHelper.FIGURE_ID_PREFIX + cfSrc.getAttribute("id"));
mFigure.put(UIDupHelper.FIGURE_ID_PREFIX + cfSrc.getAttribute("id") , result);
return result;
}
public static GroupConstraintFigure dupGroupConstraintFigure(GroupConstraintFigure gcfSrc
, HashMap<String,String> mName , HashMap<String,Figure> mFigure
, DrawingView dvDest) {
GroupConstraintFigure result = new GroupConstraintFigure();
result.setAttribute("id" , mName.get(gcfSrc.getAttribute("id")));
result.setAttribute("GroupType" , gcfSrc.getAttribute("GroupType"));
result.setAttribute("PortPosition" , gcfSrc.getAttribute("PortPosition"));
result.setAttribute("bounds" , gcfSrc.getAttribute("bounds"));
result.setAttribute("frameColor" , gcfSrc.getAttribute("frameColor"));
dvDest.add(result);
result.moveBy(gcfSrc.getDisplayBox().x , gcfSrc.getDisplayBox().y);
mName.put((String)gcfSrc.getAttribute("id") , UIDupHelper.FIGURE_ID_PREFIX + gcfSrc.getAttribute("id"));
mFigure.put(UIDupHelper.FIGURE_ID_PREFIX + gcfSrc.getAttribute("id") , result);
return result;
}
public static PLFigure dupPLFigure(PLFigure gcfSrc
, HashMap<String,String> mName , HashMap<String,Figure> mFigure
, DrawingView dvDest) {
PLFigure result = new PLFigure();
result.setAttribute("id" , mName.get(gcfSrc.getAttribute("id")));
result.setAttribute("bounds" , gcfSrc.getAttribute("bounds"));
result.setAttribute("frameColor" , gcfSrc.getAttribute("frameColor"));
result.setAttribute("PLType" , gcfSrc.getAttribute("PLType"));
result.setAttribute("SourceType" , gcfSrc.getAttribute("SourceType"));
result.setAttribute("SinkType" , gcfSrc.getAttribute("SinkType"));
dvDest.add(result);
result.moveBy(gcfSrc.getDisplayBox().x , gcfSrc.getDisplayBox().y);
mName.put((String)gcfSrc.getAttribute("id") , UIDupHelper.FIGURE_ID_PREFIX + gcfSrc.getAttribute("id"));
mFigure.put(UIDupHelper.FIGURE_ID_PREFIX + gcfSrc.getAttribute("id") , result);
return result;
}
public static VPConstraintFigure dupVPConstraintFigure(VPConstraintFigure vpcfSrc
, HashMap<String,String> mName , HashMap<String,Figure> mFigure
, DrawingView dvDest) {
VPConstraintFigure result = new VPConstraintFigure();
result.setAttribute("id" , mName.get(vpcfSrc.getAttribute("id")));
result.setAttribute("bounds" , vpcfSrc.getAttribute("bounds"));
result.setAttribute("topLeg" , vpcfSrc.getAttribute("topLeg"));
result.setAttribute("botLeg" , vpcfSrc.getAttribute("botLeg"));
result.setAttribute("frameColor" , vpcfSrc.getAttribute("frameColor"));
result.setAttribute("VPType" , vpcfSrc.getAttribute("VPType"));
dvDest.add(result);
result.moveBy(vpcfSrc.getDisplayBox().x , vpcfSrc.getDisplayBox().y);
mName.put((String)vpcfSrc.getAttribute("id") , UIDupHelper.FIGURE_ID_PREFIX + vpcfSrc.getAttribute("id"));
mFigure.put(UIDupHelper.FIGURE_ID_PREFIX + vpcfSrc.getAttribute("id") , result);
return result;
}
public static ConstraintFigure dupConstraintFigure(ConstraintFigure cfSrc
, HashMap<String,String> mName , HashMap<String,Figure> mFigure
, DrawingView dvDest) {
if (cfSrc instanceof GroupConstraintFigure) {
return dupGroupConstraintFigure((GroupConstraintFigure)cfSrc , mName , mFigure , dvDest);
} else if (cfSrc instanceof PLFigure) {
return dupPLFigure((PLFigure)cfSrc , mName , mFigure , dvDest);
} else if (cfSrc instanceof VPConstraintFigure) {
return dupVPConstraintFigure((VPConstraintFigure)cfSrc , mName , mFigure , dvDest);
} else {
return null;
}
}
// public static PLConnection dupPLConnection(PLConnection plcSrc
// , HashMap<String,String> mName , HashMap<String,Figure> mFigure
// , DrawingView dvDest) {
// PLConnection result = new PLConnection();
//
// result.setAttribute("id" , mName.get(plcSrc.getAttribute("id")));
// result.setAttribute("frameColor" , plcSrc.getAttribute("frameColor"));
// result.setAttribute("type" , plcSrc.getAttribute("type"));
// result.setAttribute("CFRModifier" , plcSrc.getAttribute("CFRModifier"));
//
// dvDest.add(result);
// result.startPoint(plcSrc.startPoint().x , plcSrc.startPoint().y);
// result.endPoint(plcSrc.endPoint().x , plcSrc.endPoint().y);
//
// mName.put((String)plcSrc.getAttribute("id") , UIDupHelper.FIGURE_ID_PREFIX + plcSrc.getAttribute("id"));
// mFigure.put(UIDupHelper.FIGURE_ID_PREFIX + plcSrc.getAttribute("id") , result);
//
// return result;
// }
public static void dupDrawingViews(DrawingView[] dvsSrc
, HashMap<String,String> mName , HashMap<String,Figure> mFigure
, DrawingView[] dvsDest) {
for (int i=0 ; i<dvsSrc.length ; i++) {
FigureEnumeration feSrc = dvsSrc[i].getDrawing().getFigures();
while (feSrc.hasMoreElements()) {
Figure fSrc = feSrc.nextFigure();
if (fSrc instanceof FeatureFigure) {
dupFeatureFigure((FeatureFigure)fSrc , mName , mFigure , dvsDest[i]);
}
}
feSrc = dvsSrc[i].getDrawing().getFigures();
while (feSrc.hasMoreElements()) {
Figure fSrc = feSrc.nextFigure();
if (fSrc instanceof ConstraintFigure) {
dupConstraintFigure((ConstraintFigure)fSrc , mName , mFigure , dvsDest[i]);
}
}
feSrc = dvsSrc[i].getDrawing().getFigures();
while (feSrc.hasMoreElements()) {
Figure fSrc = feSrc.nextFigure();
if (fSrc instanceof ConnectionFigure) {
dupConnectionFigure((ConnectionFigure)fSrc , mName , mFigure , dvsDest[i]);
}
}
}
}
}