⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textrule.java

📁 JAVA 文章管理系统源码
💻 JAVA
字号:
package org.apache.commons.betwixt.digester;

/*
 * Copyright 2001-2004 The Apache Software Foundation.
 * 
 * Licensed 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.
 */ 

import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

import org.apache.commons.betwixt.ElementDescriptor;
import org.apache.commons.betwixt.TextDescriptor;
import org.apache.commons.betwixt.XMLBeanInfo;
import org.apache.commons.betwixt.expression.ConstantExpression;
import org.apache.commons.betwixt.expression.MethodExpression;
import org.apache.commons.betwixt.expression.MethodUpdater;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;

/** 
  * <p>Rule for parsing &lt;text&gt; elements.
  * These allow mixed content text to be specified.
  * A mixed content element example:
  * <pre>
  *     &lt;foo&gt;text&lt;bar/&gt;&lt;/foo&gt;
  * </pre>
  * </p>
  *
  * @author Robert Burrell Donkin
  * @version $Id: TextRule.java,v 1.9 2004/06/13 21:32:45 rdonkin Exp $
  */
public class TextRule extends MappedPropertyRule {

    /** Logger */
    private static final Log log = LogFactory.getLog( TextRule.class );
    /** Base constructor */
    public TextRule() {}
    
    // Rule interface
    //-------------------------------------------------------------------------    
    
    /**
     * Process the beginning of this element.
     *
     * @param attributes The attribute list of this element
     * @throws SAXException 1. If this tag's parent is not an element tag.
     * 2. If this tag has a value attribute together with either a property
     * or type attribute.
     */
    public void begin(String name, String namespace, Attributes attributes) throws SAXException {
        
        TextDescriptor descriptor = new TextDescriptor();
        
        String value = attributes.getValue( "value" );
        String propertyName = attributes.getValue( "property" );
        String propertyType = attributes.getValue( "type" );
        
        if ( value != null) {
            if ( propertyName != null || propertyType != null ) {
                // not allowed
                throw new SAXException(
                    "You cannot specify attribute 'value' together with either " 
                    + " the 'property' or 'type' attributes");                
            }
            // fixed value text
            descriptor.setTextExpression( new ConstantExpression( value ) );
            
        } else {
            // property based text
            descriptor.setPropertyName( propertyName );
            
            Class beanClass = getBeanClass();
            
            // set the property type using reflection
            descriptor.setPropertyType( 
                getPropertyType( propertyType, beanClass, propertyName ) 
            );
            
            if ( beanClass != null ) {
                String descriptorPropertyName = descriptor.getPropertyName();
                PropertyDescriptor propertyDescriptor = 
                    getPropertyDescriptor( beanClass, descriptorPropertyName );
                if ( propertyDescriptor != null ) { 
                        Method readMethod = propertyDescriptor.getReadMethod();
                        descriptor.setTextExpression( new MethodExpression( readMethod ) );
                        Method writeMethod = propertyDescriptor.getWriteMethod();
                        if (writeMethod != null) {
                            descriptor.setUpdater( new MethodUpdater(writeMethod));
                        }
                        getProcessedPropertyNameSet().add( descriptorPropertyName );
                }
            }
        }
        
        Object top = digester.peek();
        if ( top instanceof XMLBeanInfo ) {
            XMLBeanInfo beanInfo = (XMLBeanInfo) top;
            ElementDescriptor elementDescriptor = beanInfo.getElementDescriptor();
            if (elementDescriptor == null) {
                elementDescriptor.addContentDescriptor( descriptor );
            }
            
        } else if ( top instanceof ElementDescriptor ) {
            ElementDescriptor parent = (ElementDescriptor) top;
            parent.addContentDescriptor( descriptor );
            
        } else {
            throw new SAXException( "Invalid use of <text>. It should " 
                + "be nested <text> nodes" );
        }
    }
}

⌨️ 快捷键说明

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