/* * Copyright 2015 Nokia Solutions and Networks * Licensed under the Apache License, Version 2.0, * see license.txt file for details. */ package org.rf.ide.core.testdata.text.read.separators; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.rf.ide.core.testdata.text.read.separators.Separator.SeparatorType; public class PipeSeparator extends ALineSeparator { private static final SeparatorType TYPE = SeparatorType.PIPE; private static final String REGEXP_DO_NOT_CONSUME_WHEN_WHITESPACE_SHOULD_BELONGS_TO_NEXT_PIPE = "((?=\\s+[|])|\\s+)"; private static final Pattern PIPE_SEPARATOR = Pattern.compile("(^[ ]?[|]" + REGEXP_DO_NOT_CONSUME_WHEN_WHITESPACE_SHOULD_BELONGS_TO_NEXT_PIPE + ")|" + "(\\s+[|]" + REGEXP_DO_NOT_CONSUME_WHEN_WHITESPACE_SHOULD_BELONGS_TO_NEXT_PIPE + ")|" + "((\\s)+[|](\\s)+$)|" + "((\\s)+[|]$)|" + "(^[|]$)"); private final Matcher matcher; public PipeSeparator(final int lineNumber, final String line) { super(lineNumber, line); this.matcher = PIPE_SEPARATOR.matcher(line); } @Override protected Separator nextSeparator() { final int start = matcher.start(); final int end = matcher.end(); final Separator s = new Separator(); s.setType(TYPE); s.setStartColumn(start); s.setText(line.substring(start, end)); s.setRaw(s.getText()); s.setLineNumber(getLineNumber()); return s; } @Override protected boolean hasNextSeparator() { return matcher.find(); } @Override public SeparatorType getProducedType() { return TYPE; } }