ExternalLinkInstrument.java

package org.cyclopsgroup.caff.dp.wiki;

import java.io.PrintWriter;
import org.apache.commons.lang3.StringUtils;
import org.cyclopsgroup.caff.dp.Instrument;

public class ExternalLinkInstrument extends Instrument {
  @Override
  public int searchToOpen(String segment, Instrument parent) {
    if (parent != null && parent instanceof PreservedInstrument) {
      return -1;
    }
    return segment.indexOf('[');
  }

  @Override
  public int open(String segment, PrintWriter out) {
    int end = segment.indexOf(']');
    String content = segment.substring(1, end);
    String[] parts = StringUtils.split(content, '|');

    String href, text;
    if (parts.length == 1) {
      href = content;
      text = content;
    } else {
      href = parts[0];
      text = parts[1];
    }
    printLink(href, text, out);
    return end;
  }

  private void printLink(String href, String text, PrintWriter out) {
    if (text == null) {
      text = "link";
    }
    out.write(" <a href=\"" + href + "\">" + text + "</a> ");
  }

  @Override
  public int searchToClose(String segment) {
    return segment.indexOf(']');
  }

  @Override
  public int close(String segment, PrintWriter out) {
    return 1;
  }
}