/**
   * The pigeonize/2 method visualizes a list of solutions and a list of interactions using Pigeon.
   *
   * <p>Therefore, we first compile the solutions and the interactions into a Pigeon script, send
   * the script to the Pigeon server, which returns an URL of the resulting Pigeon image.
   *
   * <p>The pigeonize/2 method returns the URL of the Pigeon image that resides on the Pigeon
   * server.
   *
   * @param solutions ... a list of solutions
   * @param interactions ... a list of interactions (i.e. the # Arcs)
   * @return ... a URI of the Pigeon image
   * @throws MiniEugeneException
   */
  public URI pigeonize(List<Component[]> solutions, Set<Interaction> interactions)
      throws MiniEugeneException {

    /*
     * Compilation to Pigeon script
     */

    // SOLUTIONS
    StringBuilder sb = new StringBuilder();

    // components of every solution
    sb.append(this.pigeonizeSolutions(solutions));

    // INTERACTIONS
    sb.append(this.toPigeon(interactions));

    /*
     * Sending the script to the Pigeon server.
     */
    WeyekinPoster.setPigeonText(sb.toString());

    /*
     * return the resulting URL
     */
    return WeyekinPoster.getMyBirdsURL();
  }
  /**
   * The pigeonizeSingle/2 method visualizes one single solution using Pigeon.
   *
   * <p>It takes as input the solution as Component array (Component[]) and a set of interactions
   * among the solution's components.
   *
   * @param solution ... a Component[] representing the solution
   * @param interactions ... a set of interactions representing the Arcs
   * @return
   * @throws MiniEugeneException
   */
  public URI pigeonizeSingle(Component[] solution, Set<Interaction> interactions)
      throws MiniEugeneException {

    /*
     * COMPILATION into a Pigeon script
     */
    StringBuilder sb = new StringBuilder();
    sb.append("fontsize 2.0\r\n");
    for (Component symbol : solution) {
      sb.append(toPigeon(symbol)).append("\r\n");
    }

    // INTERACTIONS
    sb.append(this.toPigeon(interactions));

    /*
     * sending the Pigeon script to the Pigeon server
     */
    WeyekinPoster.setPigeonText(sb.toString());

    /*
     * returning the URL of the Pigeon image
     */
    return WeyekinPoster.getMyBirdsURL();
  }