All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.liferay.poshi.core.elements.IfPoshiElement Maven / Gradle / Ivy
/**
* SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
package com.liferay.poshi.core.elements;
import com.liferay.poshi.core.script.PoshiScriptParserException;
import java.util.List;
import java.util.regex.Pattern;
import org.dom4j.Attribute;
import org.dom4j.Element;
import org.dom4j.Node;
/**
* @author Kenji Heigel
*/
public class IfPoshiElement extends PoshiElement {
@Override
public PoshiElement clone(Element element) {
if (isElementType(_ELEMENT_NAME, element)) {
return new IfPoshiElement(element);
}
return null;
}
@Override
public PoshiElement clone(
PoshiElement parentPoshiElement, String poshiScript)
throws PoshiScriptParserException {
if (_isElementType(parentPoshiElement, poshiScript)) {
return new IfPoshiElement(parentPoshiElement, poshiScript);
}
return null;
}
@Override
public String getPoshiLogDescriptor() {
return getBlockName(getPoshiScript());
}
@Override
public void parsePoshiScript(String poshiScript)
throws PoshiScriptParserException {
for (String poshiScriptSnippet :
getPoshiScriptSnippets(poshiScript, false)) {
String trimmedPoshiScriptSnippet = poshiScriptSnippet.trim();
if (trimmedPoshiScriptSnippet.startsWith(getPoshiScriptKeyword())) {
add(
PoshiNodeFactory.newPoshiNode(
this, getCondition(getBlockName(poshiScriptSnippet))));
add(new ThenPoshiElement(this, poshiScriptSnippet));
continue;
}
add(PoshiNodeFactory.newPoshiNode(this, poshiScriptSnippet));
}
}
@Override
public String toPoshiScript() {
StringBuilder sb = new StringBuilder();
sb.append("\n");
PoshiElement thenElement = (PoshiElement)element("then");
sb.append(createPoshiScriptBlock(thenElement.getPoshiNodes()));
for (PoshiElement elseIfElement : toPoshiElements(elements("elseif"))) {
sb.append(elseIfElement.toPoshiScript());
}
if (element("else") != null) {
PoshiElement elseElement = (PoshiElement)element("else");
sb.append(elseElement.toPoshiScript());
}
return sb.toString();
}
protected IfPoshiElement() {
this(_ELEMENT_NAME);
}
protected IfPoshiElement(Element element) {
super("if", element);
}
protected IfPoshiElement(List attributes, List nodes) {
this(_ELEMENT_NAME, attributes, nodes);
}
protected IfPoshiElement(
PoshiElement parentPoshiElement, String poshiScript)
throws PoshiScriptParserException {
super("if", parentPoshiElement, poshiScript);
}
protected IfPoshiElement(String name) {
super(name);
}
protected IfPoshiElement(String name, Element element) {
super(name, element);
}
protected IfPoshiElement(
String elementName, List attributes, List nodes) {
super(elementName, attributes, nodes);
}
protected IfPoshiElement(
String name, PoshiElement parentPoshiElement, String poshiScript)
throws PoshiScriptParserException {
super(name, parentPoshiElement, poshiScript);
}
@Override
protected String getBlockName() {
StringBuilder sb = new StringBuilder();
sb.append(getPoshiScriptKeyword());
for (String conditionName : _CONDITION_NAMES) {
if (element(conditionName) != null) {
PoshiElement poshiElement = (PoshiElement)element(
conditionName);
String poshiScript = poshiElement.toPoshiScript();
sb.append(" ");
if (!poshiScript.startsWith("(")) {
sb.append("(");
sb.append(poshiScript);
sb.append(")");
}
else {
sb.append(poshiScript);
}
break;
}
}
return sb.toString();
}
protected String getCondition(String poshiScript) {
return getParentheticalContent(poshiScript);
}
@Override
protected String getPoshiScriptKeyword() {
return getName();
}
protected static final Pattern blockNamePattern;
private boolean _isElementType(
PoshiElement parentPoshiElement, String poshiScript) {
if (IfPoshiElement.class.equals(parentPoshiElement.getClass())) {
return false;
}
if (!(parentPoshiElement instanceof CommandPoshiElement) &&
!(parentPoshiElement instanceof ForPoshiElement) &&
!(parentPoshiElement instanceof TaskPoshiElement) &&
!(parentPoshiElement instanceof ThenPoshiElement)) {
return false;
}
return isValidPoshiScriptBlock(blockNamePattern, poshiScript);
}
private static final String[] _CONDITION_NAMES = {
"and", "condition", "contains", "equals", "isset", "not", "or"
};
private static final String _ELEMENT_NAME = "if";
private static final String _POSHI_SCRIPT_KEYWORD = _ELEMENT_NAME;
static {
blockNamePattern = Pattern.compile(
"^" + _POSHI_SCRIPT_KEYWORD + BLOCK_NAME_PARAMETER_REGEX,
Pattern.DOTALL);
}
}