All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dpfmanager.conformancechecker.tiff.implementation_checker.rules.RuleElement Maven / Gradle / Ivy

/**
 * 

RuleElement.java

This program is free software: you can redistribute it * and/or modify it under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) any later version; or, * at your choice, under the terms of the Mozilla Public License, v. 2.0. SPDX GPL-3.0+ or MPL-2.0+. *

This program is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License and the Mozilla Public License for more details.

*

You should have received a copy of the GNU General Public License and the Mozilla Public * License along with this program. If not, see http://www.gnu.org/licenses/ * and at http://mozilla.org/MPL/2.0 .

NB: for the * © statement, include Easy Innova SL or other company/Person contributing the code.

© * 2015 Easy Innova, SL

* * @author Víctor Muñoz Solà * @version 1.0 * @since 23/7/2015 */ package dpfmanager.conformancechecker.tiff.implementation_checker.rules; import dpfmanager.conformancechecker.tiff.implementation_checker.model.TiffNode; import dpfmanager.conformancechecker.tiff.implementation_checker.model.TiffTag; import java.util.List; /** * Created by easy on 14/03/2016. */ public class RuleElement { String fieldName; String index; Filter filter; TiffNode node; TiffNode model; public boolean valid; String multiplier; String elevator; public RuleElement(String field, TiffNode nodeBase, TiffNode model) { valid = true; this.node = nodeBase; this.model = model; filter = null; fieldName = field; if (fieldName.contains("*")) { multiplier = fieldName.substring(0, fieldName.indexOf("*")); fieldName = fieldName.substring(fieldName.indexOf("*")+1); } if (fieldName.contains("^")) { elevator = fieldName.substring(0, fieldName.indexOf("^")); fieldName = fieldName.substring(fieldName.indexOf("^")+1); } if (!fieldName.startsWith("$")) { while (fieldName.contains(".") || fieldName.contains("[") || fieldName.contains("(")) { int indexDot = fieldName.indexOf("."); int indexCla = fieldName.indexOf("["); int indexPar = fieldName.indexOf("("); if (indexDot > -1 && (indexCla == -1 || indexDot < indexCla) && (indexPar == -1 || indexDot < indexPar)) { String parent = fieldName.substring(0, indexDot); if (parent.length() > 0) { if (node != null) node = node.getChild(parent); else { valid = false; break; } } fieldName = fieldName.substring(indexDot + 1); } else if (indexCla > -1 && (indexPar == -1 || indexCla < indexPar)) { String filter = fieldName.substring(indexCla + 1); String remaining = filter.substring(filter.indexOf("]") + 1).trim(); if (filter.indexOf("]") == -1) filter.toString(); filter = filter.substring(0, filter.indexOf("]")).trim(); this.filter = new Filter(filter); String currentfield = fieldName.substring(0, indexCla).trim(); if (remaining.length() == 0) { fieldName = currentfield; } else { if (node != null) node = node.getChild(currentfield, this.filter); else { valid = false; break; } this.filter = null; fieldName = remaining; } } else { String filter = fieldName.substring(indexPar + 1); String remaining = filter.substring(filter.indexOf(")") + 1).trim(); index = filter.substring(0, filter.indexOf(")")).trim(); fieldName = remaining; } } } } String getName() { String val = fieldName; if (fieldName.contains("%")) { val = val.substring(0, val.indexOf("%")); } if (fieldName.contains("*")) { val = val.substring(0, val.indexOf("*")); } return val.trim(); } String operate(String value) { String val = value; if (this.fieldName.contains("%")) { String op = this.fieldName.substring(this.fieldName.indexOf("%") + 1); val = (Integer.parseInt(value) % Integer.parseInt(op)) + ""; } if (this.fieldName.contains("*")) { String op = this.fieldName.substring(this.fieldName.indexOf("*") + 1); val = (Integer.parseInt(value) * Integer.parseInt(op)) + ""; } return val; } public List getChildren() { if (node == null) return null; return node.getChildren(getName(), filter); } String operateMultiplier(String val) { String value = val; if (elevator != null) { value = (int)(Math.pow(Double.parseDouble(elevator), Double.parseDouble(val))) + ""; } if (multiplier != null) { value = (int)(Double.parseDouble(value) * Integer.parseInt(multiplier)) + ""; } return value; } public String getValue() { if (fieldName.startsWith("$") && fieldName.endsWith("$")) { String val = fieldName.replace("$", ""); TiffNode node = null; String[] parts = val.split("\\."); for (String nodeName : parts) { if (node == null) { if (model == null) model.toString(); if (model.getContext().equals(nodeName)) node = model; } else { node = node.getChild(nodeName); } if (node == null) return null; } val = node.getValue(); return operateMultiplier(val); } else if (fieldName.startsWith("'") && fieldName.endsWith("'")) { String val = fieldName.substring(1); val = val.substring(0, val.length() - 1); return operateMultiplier(val); } try { int ival = Integer.parseInt(fieldName); return operateMultiplier(ival + ""); } catch (Exception ex) { } if(fieldName.equals("true") || fieldName.equals("false")) return fieldName; if (node == null) return null; if (index != null) { TiffTag ttag = ((TiffTag)node); String tagvalue = ttag.getValue().replace("[", "").replace("]", ""); return tagvalue.split(",")[Integer.parseInt(index)]; } if (!node.hasChild(getName(), filter)) return null; String op1value = node.getChild(getName(), filter).getValue(); String value = operate(op1value); if (value != null) { if (value.contains("/")) { try { int inum = Integer.parseInt(value.substring(0, value.indexOf("/"))); int iden = Integer.parseInt(value.substring(value.indexOf("/") + 1)); if (inum == 0 && iden == 0) return "0"; return (inum / (float) iden) + ""; } catch (Exception ex) { } } if (value.startsWith("[") && value.endsWith("]")) { String val = value.substring(1); val = val.substring(0, val.length() - 1); val = val.split(",")[0]; value = val; } } else { value = ""; } return operateMultiplier(value); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy