classificationfilterreader.java

来自「Rapla是一个灵活的多用户资源管理系统。它提供的一些功能有:日历GUI」· Java 代码 · 共 117 行

JAVA
117
字号
/*--------------------------------------------------------------------------*
  | Copyright (C) 2006 Christopher Kohlhaas                                  |
  |                                                                          |
  | 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. A copy of the license has been included with   |
  | these distribution in the COPYING file, if not go to www.fsf.org .       |
  |                                                                          |
  | As a special exception, you are granted the permissions to link this     |
  | program with every library, which license fulfills the Open Source       |
  | Definition as published by the Open Source Initiative (OSI).             |
  *--------------------------------------------------------------------------*/

package org.rapla.storage.xml;

import java.util.ArrayList;
import java.util.Collection;

import org.rapla.entities.dynamictype.Attribute;
import org.rapla.entities.dynamictype.ClassificationFilter;
import org.rapla.entities.dynamictype.DynamicType;
import org.rapla.framework.RaplaContext;
import org.rapla.framework.RaplaException;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;

class ClassificationFilterReader extends RaplaXMLReader {
    
    DynamicType dynamicType;
    ClassificationFilter filter;
    Attribute attribute;
    String operator;
    Collection filterList = new ArrayList();
    Collection conditions = new ArrayList();
    int ruleCount;

    public ClassificationFilterReader(RaplaContext sm) throws RaplaException {
        super(sm);
    }

    public void clear() {
        filterList.clear();
    }

    public ClassificationFilter[] getFilters() {
        return (ClassificationFilter[])
            filterList.toArray(ClassificationFilter.CLASSIFICATIONFILTER_ARRAY);
    }

    public void processElement(String namespaceURI,String localName,String qName,Attributes atts)
        throws SAXException
    {
        if (localName.equals("classificationfilter"))
        {
            String id = atts.getValue("dynamictypeidref");
            if ( id != null) {
                dynamicType = (DynamicType) resolve(DynamicType.TYPE,id);
            } else {
                String typeName = getString(atts,"dynamictype");
                dynamicType = getDynamicType( typeName );
                if (dynamicType == null) {
                    getLogger().error("Error reading filter with " + DynamicType.TYPE.getLocalName() + " " + typeName,null);
                    return;
                } 
            }
            filter = dynamicType.newClassificationFilter();
            ruleCount = 0;
            filterList.add(filter);
        }

        if (localName.equals("rule"))
        {
            String id = atts.getValue("attributeidref");
            if ( id != null) {
                attribute = ( Attribute) resolve(Attribute.TYPE, id);
            } else {
                String attributeName = getString(atts,"attribute");
                attribute = dynamicType.getAttribute(attributeName);
                if (attribute == null) {
                	getLogger().error("Error reading filter with " + dynamicType +" Attribute: " + attributeName,null);
                	return;
                }
            }
            conditions.clear();
        }

        if (localName.equals("orCond"))
        {
            operator = getString(atts,"operator");
            startContent();
        }
    }

    private static Object[][] OBJECT_ARRAY = new Object[][] {{"1","2"}};
    public void processEnd(String namespaceURI,String localName,String qName)
        throws SAXException
    {

        if (localName.equals("rule") && filter != null)
        {
            filter.setRule(ruleCount ++
                           ,attribute
                           ,(Object[][]) conditions.toArray( OBJECT_ARRAY )
                           );
        }

        if (localName.equals("orCond") && attribute!= null)
        {
            Object value = parseAttributeValue(attribute, readContent().trim());
            conditions.add(new Object[] {operator,value});
        }

    }

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?