/** * Create a pattern for text parsing * * @param pattern pattern definition * @return pattern pattern */ private ProcPattern createPattern(Pattern pattern) { if (pattern.getElements() == null || pattern.getElements().isEmpty()) { throw new IllegalStateException("Pattern elements list can't be empty."); } List<ProcPatternElement> elements = new ArrayList<ProcPatternElement>(); for (PatternElement element : pattern.getElements()) { if (element instanceof Variable) { Variable variable = (Variable) element; if (variable.getAction() != Action.check) { elements.add( new ProcVariable( variable.getName(), variable.getRegex(), variable.isGhost(), variable.getAction())); } else { elements.add(new Check(variable.getName(), variable.isGhost())); } } else if (element instanceof Text) { elements.add(create((Text) element)); } else if (element instanceof Constant) { elements.add(createPatternConstant((Constant) element)); } else if (element instanceof Junk) { elements.add(JUNK); } else if (element instanceof Eol) { elements.add(new ProcEol(((Eol) element).isGhost())); } else if (element instanceof Bol) { elements.add(PROC_BOL); } else if (element instanceof BlankLine) { elements.add(new ProcBlankLine(((BlankLine) element).isGhost())); } else if (element instanceof Url) { Url url = (Url) element; elements.add(new ProcUrl(url.getName(), url.isGhost(), url.isLocal(), url.isSchemaless())); } } return new ProcPattern(elements); }