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

jlibs.util.logging.ConditionParser Maven / Gradle / Ivy

/**
 * Copyright 2015 Santhosh Kumar Tekuri
 *
 * The JLibs authors license this file to you under the Apache License,
 * version 2.0 (the "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at:
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */

package jlibs.util.logging;

import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

/**
 * @author Santhosh Kumar T
 */
public class ConditionParser{
    public static Condition parse(File file, LogHeaderDefinition definition) throws Exception{
        Element root = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file).getDocumentElement();
        return parse(root, definition);
    }
    
    private static Condition parse(Element element, LogHeaderDefinition definition){
        String name = element.getTagName();
        if("message".equals(name))
            try{
                return new MessageCondition(Pattern.compile(element.getTextContent()));
            }catch(PatternSyntaxException ex){
                throw new RuntimeException("[LogFilter] invalid regex "+element.getTextContent()+" in message element", ex);
            }
        else if("field".equals(name)){
            Attr attr = element.getAttributeNode("name");
            if(attr==null)
                throw new IllegalArgumentException("[LogFilter] name attribute missing in field element");
            int index = Arrays.asList(definition.groupNames).indexOf(attr.getNodeValue());
            try{
                Pattern pattern = Pattern.compile(element.getTextContent());
                return new FieldCondition(pattern, index);
            }catch(PatternSyntaxException ex){
                throw new RuntimeException("[LogFilter] invalid regex "+element.getTextContent()+" in field element", ex);
            }
        }else if("and".equals(name))
            return new AndCondition(getChildConditions(element, definition));
        else if("or".equals(name))
            return new OrCondition(getChildConditions(element, definition));
        else if("not".equals(name)){
            return new NotCondition(getChildConditions(element, definition)[0]);
        }else if("index".equals(name)){
            return new IndexCondition(Integer.parseInt(element.getTextContent()));
        }else if("following".equals(name)){
            boolean includeSelf = Boolean.parseBoolean(element.getAttribute("includeSelf"));
            return new FollowingCondition(getChildConditions(element, definition)[0], includeSelf);
        }else if("preceding".equals(name)){
            boolean includeSelf = Boolean.parseBoolean(element.getAttribute("includeSelf"));
            return new PrecedingCondition(getChildConditions(element, definition)[0], includeSelf);
        }else
            throw new RuntimeException("[LogFilter] invalid element "+name);
    }
    
    private static Condition[] getChildConditions(Element parent, LogHeaderDefinition definition){
        List conditions = new ArrayList();
        NodeList children = parent.getChildNodes();
        for(int i=0; i




© 2015 - 2025 Weber Informatics LLC | Privacy Policy