Program: 161785
Project: 161785
Buggy source:
@Override protected void toSVG(RRDiagramToSVG rrDiagramToSVG,int xOffset,int yOffset,SvgContent svgContent){
  LayoutInfo layoutInfo=getLayoutInfo();
  int width=layoutInfo.getWidth();
  int height=layoutInfo.getHeight();
  if (link != null) {
    svgContent.addElement("String_Node_Str" + Utils.escapeXML(link) + "String_Node_Str");
  }
  Insets insets;
  Font font;
  String cssClass;
  String cssTextClass;
  BoxShape shape;
switch (type) {
case RULE:
    insets=rrDiagramToSVG.getRuleInsets();
  font=rrDiagramToSVG.getRuleFont();
cssClass=RRDiagram.CSS_RULE_CLASS;
cssTextClass=RRDiagram.CSS_RULE_TEXT_CLASS;
if (!svgContent.isStyleDefined(cssClass)) {
String ruleBorderColor=Utils.convertColorToHtml(rrDiagramToSVG.getRuleBorderColor());
String ruleFillColor=Utils.convertColorToHtml(rrDiagramToSVG.getRuleFillColor());
Font ruleFont=rrDiagramToSVG.getRuleFont();
String ruleTextColor=Utils.convertColorToHtml(rrDiagramToSVG.getRuleTextColor());
cssClass=svgContent.setCSSClass(cssClass,"String_Node_Str" + ruleFillColor + "String_Node_Str"+ ruleBorderColor+ "String_Node_Str");
cssTextClass=svgContent.setCSSClass(cssTextClass,"String_Node_Str" + ruleTextColor + "String_Node_Str"+ Utils.convertFontToCss(ruleFont));
}
shape=rrDiagramToSVG.getRuleShape();
break;
case LITERAL:
insets=rrDiagramToSVG.getLiteralInsets();
font=rrDiagramToSVG.getLiteralFont();
cssClass=RRDiagram.CSS_LITERAL_CLASS;
cssTextClass=RRDiagram.CSS_LITERAL_TEXT_CLASS;
if (!svgContent.isStyleDefined(cssClass)) {
String literalBorderColor=Utils.convertColorToHtml(rrDiagramToSVG.getLiteralBorderColor());
String literalFillColor=Utils.convertColorToHtml(rrDiagramToSVG.getLiteralFillColor());
Font literalFont=rrDiagramToSVG.getLiteralFont();
String literalTextColor=Utils.convertColorToHtml(rrDiagramToSVG.getLiteralTextColor());
cssClass=svgContent.setCSSClass(cssClass,"String_Node_Str" + literalFillColor + "String_Node_Str"+ literalBorderColor+ "String_Node_Str");
cssTextClass=svgContent.setCSSClass(cssTextClass,"String_Node_Str" + literalTextColor + "String_Node_Str"+ Utils.convertFontToCss(literalFont));
}
shape=rrDiagramToSVG.getLiteralShape();
break;
case SPECIAL_SEQUENCE:
insets=rrDiagramToSVG.getSpecialSequenceInsets();
font=rrDiagramToSVG.getSpecialSequenceFont();
cssClass=RRDiagram.CSS_SPECIAL_SEQUENCE_CLASS;
cssTextClass=RRDiagram.CSS_SPECIAL_SEQUENCE_TEXT_CLASS;
if (!svgContent.isStyleDefined(cssClass)) {
String specialSequenceBorderColor=Utils.convertColorToHtml(rrDiagramToSVG.getSpecialSequenceBorderColor());
String specialSequenceFillColor=Utils.convertColorToHtml(rrDiagramToSVG.getSpecialSequenceFillColor());
Font specialSequenceFont=rrDiagramToSVG.getSpecialSequenceFont();
String specialSequenceTextColor=Utils.convertColorToHtml(rrDiagramToSVG.getSpecialSequenceTextColor());
cssClass=svgContent.setCSSClass(cssClass,"String_Node_Str" + specialSequenceFillColor + "String_Node_Str"+ specialSequenceBorderColor+ "String_Node_Str");
cssTextClass=svgContent.setCSSClass(cssTextClass,"String_Node_Str" + specialSequenceTextColor + "String_Node_Str"+ Utils.convertFontToCss(specialSequenceFont));
}
shape=rrDiagramToSVG.getSpecialSequenceShape();
break;
default :
throw new IllegalStateException("String_Node_Str" + type);
}
switch (shape) {
case RECTANGLE:
svgContent.addElement("String_Node_Str" + cssClass + "String_Node_Str"+ xOffset+ "String_Node_Str"+ yOffset+ "String_Node_Str"+ width+ "String_Node_Str"+ height+ "String_Node_Str");
break;
case ROUNDED_RECTANGLE:
int rx=(insets.left + insets.right + insets.top+ insets.bottom) / 4;
svgContent.addElement("String_Node_Str" + cssClass + "String_Node_Str"+ xOffset+ "String_Node_Str"+ yOffset+ "String_Node_Str"+ width+ "String_Node_Str"+ height+ "String_Node_Str"+ rx+ "String_Node_Str");
break;
case HEXAGON:
int connectorOffset=layoutInfo.getConnectorOffset();
svgContent.addLineConnector(xOffset,yOffset + connectorOffset,xOffset + insets.left,yOffset + connectorOffset);
svgContent.addElement("String_Node_Str" + cssClass + "String_Node_Str"+ xOffset+ "String_Node_Str"+ (yOffset + height / 2)+ "String_Node_Str"+ (xOffset + insets.left)+ "String_Node_Str"+ yOffset+ "String_Node_Str"+ (xOffset + width - insets.right)+ "String_Node_Str"+ yOffset+ "String_Node_Str"+ (xOffset + width)+ "String_Node_Str"+ (yOffset + height / 2)+ "String_Node_Str"+ (xOffset + width - insets.right)+ "String_Node_Str"+ (yOffset + height)+ "String_Node_Str"+ (xOffset + insets.left)+ "String_Node_Str"+ (yOffset + height)+ "String_Node_Str");
svgContent.addLineConnector(xOffset + width,yOffset + connectorOffset,xOffset + width - insets.right,yOffset + connectorOffset);
break;
}
FontRenderContext fontRenderContext=new FontRenderContext(null,true,false);
Rectangle2D stringBounds=font.getStringBounds(text,fontRenderContext);
int textXOffset=xOffset + insets.left;
int textYOffset=yOffset + insets.top + (int)Math.round(stringBounds.getHeight()) - fontYOffset;
svgContent.addElement("String_Node_Str" + cssTextClass + "String_Node_Str"+ textXOffset+ "String_Node_Str"+ textYOffset+ "String_Node_Str"+ Utils.escapeXML(text)+ "String_Node_Str");
if (link != null) {
svgContent.addElement("String_Node_Str");
}
}

Fixed version (ground truth):
@Override protected void toSVG(RRDiagramToSVG rrDiagramToSVG,int xOffset,int yOffset,SvgContent svgContent){
  LayoutInfo layoutInfo=getLayoutInfo();
  int width=layoutInfo.getWidth();
  int height=layoutInfo.getHeight();
  if (link != null) {
    svgContent.addElement("String_Node_Str" + Utils.escapeXML(link) + "String_Node_Str");
  }
  Insets insets;
  Font font;
  String cssClass;
  String cssTextClass;
  BoxShape shape;
switch (type) {
case RULE:
    insets=rrDiagramToSVG.getRuleInsets();
  font=rrDiagramToSVG.getRuleFont();
cssClass=svgContent.getDefinedCSSClass(RRDiagram.CSS_RULE_CLASS);
cssTextClass=svgContent.getDefinedCSSClass(RRDiagram.CSS_RULE_TEXT_CLASS);
if (cssClass == null) {
String ruleBorderColor=Utils.convertColorToHtml(rrDiagramToSVG.getRuleBorderColor());
String ruleFillColor=Utils.convertColorToHtml(rrDiagramToSVG.getRuleFillColor());
Font ruleFont=rrDiagramToSVG.getRuleFont();
String ruleTextColor=Utils.convertColorToHtml(rrDiagramToSVG.getRuleTextColor());
cssClass=svgContent.setCSSClass(RRDiagram.CSS_RULE_CLASS,"String_Node_Str" + ruleFillColor + "String_Node_Str"+ ruleBorderColor+ "String_Node_Str");
cssTextClass=svgContent.setCSSClass(RRDiagram.CSS_RULE_TEXT_CLASS,"String_Node_Str" + ruleTextColor + "String_Node_Str"+ Utils.convertFontToCss(ruleFont));
}
shape=rrDiagramToSVG.getRuleShape();
break;
case LITERAL:
insets=rrDiagramToSVG.getLiteralInsets();
font=rrDiagramToSVG.getLiteralFont();
cssClass=svgContent.getDefinedCSSClass(RRDiagram.CSS_LITERAL_CLASS);
cssTextClass=svgContent.getDefinedCSSClass(RRDiagram.CSS_LITERAL_TEXT_CLASS);
if (cssClass == null) {
String literalBorderColor=Utils.convertColorToHtml(rrDiagramToSVG.getLiteralBorderColor());
String literalFillColor=Utils.convertColorToHtml(rrDiagramToSVG.getLiteralFillColor());
Font literalFont=rrDiagramToSVG.getLiteralFont();
String literalTextColor=Utils.convertColorToHtml(rrDiagramToSVG.getLiteralTextColor());
cssClass=svgContent.setCSSClass(RRDiagram.CSS_LITERAL_CLASS,"String_Node_Str" + literalFillColor + "String_Node_Str"+ literalBorderColor+ "String_Node_Str");
cssTextClass=svgContent.setCSSClass(RRDiagram.CSS_LITERAL_TEXT_CLASS,"String_Node_Str" + literalTextColor + "String_Node_Str"+ Utils.convertFontToCss(literalFont));
}
shape=rrDiagramToSVG.getLiteralShape();
break;
case SPECIAL_SEQUENCE:
insets=rrDiagramToSVG.getSpecialSequenceInsets();
font=rrDiagramToSVG.getSpecialSequenceFont();
cssClass=svgContent.getDefinedCSSClass(RRDiagram.CSS_SPECIAL_SEQUENCE_CLASS);
cssTextClass=svgContent.getDefinedCSSClass(RRDiagram.CSS_SPECIAL_SEQUENCE_TEXT_CLASS);
if (cssClass == null) {
String specialSequenceBorderColor=Utils.convertColorToHtml(rrDiagramToSVG.getSpecialSequenceBorderColor());
String specialSequenceFillColor=Utils.convertColorToHtml(rrDiagramToSVG.getSpecialSequenceFillColor());
Font specialSequenceFont=rrDiagramToSVG.getSpecialSequenceFont();
String specialSequenceTextColor=Utils.convertColorToHtml(rrDiagramToSVG.getSpecialSequenceTextColor());
cssClass=svgContent.setCSSClass(RRDiagram.CSS_SPECIAL_SEQUENCE_CLASS,"String_Node_Str" + specialSequenceFillColor + "String_Node_Str"+ specialSequenceBorderColor+ "String_Node_Str");
cssTextClass=svgContent.setCSSClass(RRDiagram.CSS_SPECIAL_SEQUENCE_TEXT_CLASS,"String_Node_Str" + specialSequenceTextColor + "String_Node_Str"+ Utils.convertFontToCss(specialSequenceFont));
}
shape=rrDiagramToSVG.getSpecialSequenceShape();
break;
default :
throw new IllegalStateException("String_Node_Str" + type);
}
switch (shape) {
case RECTANGLE:
svgContent.addElement("String_Node_Str" + cssClass + "String_Node_Str"+ xOffset+ "String_Node_Str"+ yOffset+ "String_Node_Str"+ width+ "String_Node_Str"+ height+ "String_Node_Str");
break;
case ROUNDED_RECTANGLE:
int rx=(insets.left + insets.right + insets.top+ insets.bottom) / 4;
svgContent.addElement("String_Node_Str" + cssClass + "String_Node_Str"+ xOffset+ "String_Node_Str"+ yOffset+ "String_Node_Str"+ width+ "String_Node_Str"+ height+ "String_Node_Str"+ rx+ "String_Node_Str");
break;
case HEXAGON:
int connectorOffset=layoutInfo.getConnectorOffset();
svgContent.addLineConnector(xOffset,yOffset + connectorOffset,xOffset + insets.left,yOffset + connectorOffset);
svgContent.addElement("String_Node_Str" + cssClass + "String_Node_Str"+ xOffset+ "String_Node_Str"+ (yOffset + height / 2)+ "String_Node_Str"+ (xOffset + insets.left)+ "String_Node_Str"+ yOffset+ "String_Node_Str"+ (xOffset + width - insets.right)+ "String_Node_Str"+ yOffset+ "String_Node_Str"+ (xOffset + width)+ "String_Node_Str"+ (yOffset + height / 2)+ "String_Node_Str"+ (xOffset + width - insets.right)+ "String_Node_Str"+ (yOffset + height)+ "String_Node_Str"+ (xOffset + insets.left)+ "String_Node_Str"+ (yOffset + height)+ "String_Node_Str");
svgContent.addLineConnector(xOffset + width,yOffset + connectorOffset,xOffset + width - insets.right,yOffset + connectorOffset);
break;
}
FontRenderContext fontRenderContext=new FontRenderContext(null,true,false);
Rectangle2D stringBounds=font.getStringBounds(text,fontRenderContext);
int textXOffset=xOffset + insets.left;
int textYOffset=yOffset + insets.top + (int)Math.round(stringBounds.getHeight()) - fontYOffset;
svgContent.addElement("String_Node_Str" + cssTextClass + "String_Node_Str"+ textXOffset+ "String_Node_Str"+ textYOffset+ "String_Node_Str"+ Utils.escapeXML(text)+ "String_Node_Str");
if (link != null) {
svgContent.addElement("String_Node_Str");
}
}