/**
  * Removes the routing info.
  *
  * @param connection the connection
  * @param info the info
  * @return the string
  */
 public static String removeRoutingInfo(Connection connection, String info) {
   String newInfo = null;
   if (info != null && !info.isEmpty()) {
     newInfo = getRoutingInfo(connection);
     if (newInfo != null && !newInfo.isEmpty()) {
       String a[] = newInfo.split(","); // $NON-NLS-1$
       String b[] = info.split(","); // $NON-NLS-1$
       for (int i = 0; i < a.length; ++i) {
         for (String sb : b) {
           if (a[i].startsWith(sb)) {
             a[i] = null;
             break;
           }
         }
       }
       newInfo = ""; // $NON-NLS-1$
       for (int i = 0; i < a.length; ++i) {
         if (a[i] != null && !a[i].isEmpty()) {
           if (!newInfo.isEmpty()) newInfo += ","; // $NON-NLS-1$
           newInfo += a[i];
         }
       }
     }
   }
   if (newInfo == null || newInfo.isEmpty()) peService.removeProperty(connection, ROUTING_INFO);
   else peService.setPropertyValue(connection, ROUTING_INFO, newInfo);
   return newInfo;
 }
  /**
   * Adds the routing info.
   *
   * @param connection the connection
   * @param info the info
   * @return the string
   */
  public static String addRoutingInfo(Connection connection, String info) {
    Assert.isTrue(info != null && !info.isEmpty());
    String newInfo = getRoutingInfo(connection);
    if (!newInfo.isEmpty()) newInfo += ","; // $NON-NLS-1$
    newInfo += info;

    peService.setPropertyValue(connection, ROUTING_INFO, newInfo);
    return newInfo;
  }
  @Override
  public PictogramElement add(IAddContext context) {
    IPeService peService = Graphiti.getPeService();
    IGaService gaService = Graphiti.getGaService();

    BaseElement element = (BaseElement) context.getNewObject();
    IAddConnectionContext addConContext = (IAddConnectionContext) context;

    Connection connection = peService.createFreeFormConnection(getDiagram());

    Object importProp = context.getProperty(DIImport.IMPORT_PROPERTY);
    if (importProp != null && (Boolean) importProp) {
      connection.setStart(addConContext.getSourceAnchor());
      connection.setEnd(addConContext.getTargetAnchor());
    } else {
      ContainerShape sourceContainer =
          (ContainerShape) addConContext.getSourceAnchor().eContainer();
      ContainerShape targetContainer =
          (ContainerShape) addConContext.getTargetAnchor().eContainer();
      Tuple<FixPointAnchor, FixPointAnchor> anchors =
          AnchorUtil.getSourceAndTargetBoundaryAnchors(
              sourceContainer, targetContainer, connection);

      connection.setStart(anchors.getFirst());
      connection.setEnd(anchors.getSecond());
    }

    if (ModelUtil.hasName(element)) {
      ConnectionDecorator labelDecorator =
          Graphiti.getPeService().createConnectionDecorator(connection, true, 0.5, true);
      Text text = gaService.createText(labelDecorator, ModelUtil.getName(element));
      peService.setPropertyValue(
          labelDecorator, UpdateBaseElementNameFeature.TEXT_ELEMENT, Boolean.toString(true));
      text.setStyle(StyleUtil.getStyleForText(getDiagram()));
    }

    Polyline connectionLine = gaService.createPolyline(connection);
    connectionLine.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));

    decorateConnectionLine(connectionLine);

    createDIEdge(connection, element);
    createConnectionDecorators(connection);
    hook(addConContext, connection, element);

    return connection;
  }