Package com.alibaba.citrus.service.form.support

Source Code of com.alibaba.citrus.service.form.support.FormTool

/*
* Copyright 2010 Alibaba Group Holding Limited.
* All rights reserved.
*
* 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.
*/

package com.alibaba.citrus.service.form.support;

import static com.alibaba.citrus.springext.util.SpringExtUtil.*;
import static com.alibaba.citrus.util.Assert.*;
import static com.alibaba.citrus.util.BasicConstant.*;
import static com.alibaba.citrus.util.ObjectUtil.*;

import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;

import org.apache.ecs.xhtml.input;
import org.springframework.beans.factory.annotation.Autowired;

import com.alibaba.citrus.service.form.Field;
import com.alibaba.citrus.service.form.Form;
import com.alibaba.citrus.service.form.FormService;
import com.alibaba.citrus.service.form.Group;
import com.alibaba.citrus.service.pull.ToolFactory;
import com.alibaba.citrus.service.requestcontext.parser.ParserRequestContext;
import com.alibaba.citrus.service.requestcontext.util.RequestContextUtil;
import com.alibaba.citrus.springext.support.parser.AbstractSingleBeanDefinitionParser;
import com.alibaba.citrus.util.StringEscapeUtil;

/**
* ����ģ��ʹ�õ�pull tool��
*
* @author Michael Zhou
*/
public class FormTool implements ToolFactory {
    private FormService formService;
    private HttpServletRequest request;

    @Autowired
    public void setFormService(FormService formService) {
        this.formService = formService;
    }

    @Autowired
    public void setRequest(HttpServletRequest request) {
        this.request = assertProxy(request);
    }

    /**
     * ÿ���󷵻���ͬ��form tool��
     */
    public boolean isSingleton() {
        return true;
    }

    public Object createTool() throws Exception {
        return this;
    }

    /**
     * ȡ��ָ�����Ƶ�group helper��
     */
    public GroupHelper get(String groupName) {
        return new GroupHelper(groupName);
    }

    /**
     * ȡ������groupʵ����
     */
    public Iterator<GroupInstanceHelper> getGroups() {
        return new GroupInstanceHelperIterator(getForm().getGroups().iterator());
    }

    /**
     * ȡ��ָ�����Ƶ�groupʵ����
     */
    public Iterator<GroupInstanceHelper> getGroups(String groupName) {
        return new GroupInstanceHelperIterator(getForm().getGroups(groupName).iterator());
    }

    /**
     * �ж�����form�Ƿ�ͨ����֤��
     */
    public boolean isValid() {
        return getForm().isValid();
    }

    private Form getForm() {
        return formService.getForm();
    }

    @Override
    public String toString() {
        return formService == null ? "FormTool[no FormService]" : formService.toString();
    }

    /**
     * ����ģ��ʹ�õĸ����ࡣ
     */
    public class GroupHelper {
        private final String groupName;

        /**
         * ����group helper��
         */
        public GroupHelper(String groupName) {
            this.groupName = groupName;
        }

        /**
         * ȡ�õ�ǰgroup��Ĭ��instance��
         */
        public GroupInstanceHelper getDefaultInstance() {
            Group group = getForm().getGroup(groupName);
            return group == null ? null : new GroupInstanceHelper(group);
        }

        /**
         * ȡ�õ�ǰgroup��ָ��instance��
         */
        public GroupInstanceHelper getInstance(String instanceName) {
            Group group = getForm().getGroup(groupName, instanceName);
            return group == null ? null : new GroupInstanceHelper(group);
        }

        /**
         * ȡ�õ�ǰgroup��ָ��instance��
         */
        public GroupInstanceHelper getInstance(String instanceName, boolean create) {
            Group group = getForm().getGroup(groupName, instanceName, create);
            return group == null ? null : new GroupInstanceHelper(group);
        }

        @Override
        public String toString() {
            return "Group[" + groupName + "]";
        }
    }

    /**
     * ����ģ��ʹ�õĸ����ࡣ
     */
    public class GroupInstanceHelper {
        private final Group group;

        /**
         * ����group instance helper��
         */
        public GroupInstanceHelper(Group group) {
            this.group = group;
        }

        /**
         * ȡ��ָ�����Ƶ�field helper��
         */
        public FieldHelper get(String fieldName) {
            Field field = group.getField(fieldName);
            return field == null ? null : new FieldHelper(field);
        }

        /**
         * ȡ�����е�fields��
         */
        public Iterator<FieldHelper> getFields() {
            return new FieldHelperIterator(group.getFields().iterator());
        }

        /**
         * �ж�����group instance�Ƿ�ͨ����֤��
         */
        public boolean isValid() {
            return group.isValid();
        }

        /**
         * �ж����group��û�б���֤����
         */
        public boolean isValidated() {
            return group.isValidated();
        }

        /**
         * �������е�ֵ���뵱ǰgroup instance�С�
         */
        public void mapTo(Object object) {
            group.mapTo(object);
        }

        @Override
        public String toString() {
            return group.toString();
        }
    }

    /**
     * ȡ��group instance helper�ı�������
     */
    private class GroupInstanceHelperIterator extends FilterIterator<GroupInstanceHelper, Group> {
        private GroupInstanceHelperIterator(Iterator<Group> i) {
            super(i);
        }

        public GroupInstanceHelper next() {
            return new GroupInstanceHelper(i.next());
        }
    }

    /**
     * ����ģ��ʹ�õĸ����ࡣ
     */
    public class FieldHelper {
        private final Field field;
        private String htmlFieldSuffix;

        /**
         * ����field helper��
         */
        public FieldHelper(Field field) {
            this.field = field;
        }

        /**
         * ȡ��field��������ʾ�����ơ�
         */
        public String getDisplayName() {
            return field.getFieldConfig().getDisplayName();
        }

        /**
         * ȡ����form��Ψһ��ʾ��field��key��
         */
        public String getKey() {
            return field.getKey();
        }

        /**
         * ȡ����form��Ψһ��ʾ��field��key��
         */
        public String getHtmlKey() {
            if (htmlFieldSuffix == null) {
                htmlFieldSuffix = RequestContextUtil.findRequestContext(request, ParserRequestContext.class)
                        .getHtmlFieldSuffix();
            }

            return field.getKey() + htmlFieldSuffix;
        }

        /**
         * ȡ����form��Ψһ��ʾ��field��key�����û��ύ�ı���δ������field����Ϣʱ��ȡ���key��ֵ��Ϊ��field��ֵ��
         */
        public String getAbsentKey() {
            return field.getAbsentKey();
        }

        /**
         * ȡ����form�к͵�ǰfield�󶨵ĸ�����key��
         */
        public String getAttachmentKey() {
            return field.getAttachmentKey();
        }

        /**
         * ȡ��field��ֵ��
         */
        public String getValue() {
            return field.getStringValue();
        }

        /**
         * ȡ��field��ֵ��������<code>escapeHtml</code>���롣
         */
        public String getEscapedValue() {
            return StringEscapeUtil.escapeHtml(field.getStringValue());
        }

        /**
         * ȡ��field��ֵ��
         */
        public String[] getValues() {
            return field.getStringValues();
        }

        /**
         * ȡ��field��ֵ��������<code>escapeHtml</code>���롣
         */
        public String[] getEscapedValues() {
            String[] values = field.getStringValues();
            String[] escapedValues = new String[values.length];

            for (int i = 0; i < values.length; i++) {
                escapedValues[i] = StringEscapeUtil.escapeHtml(values[i]);
            }

            return escapedValues;
        }

        /**
         * ȡ��absent�ֶε�HTML hidden field��
         */
        public input getAbsentHiddenField(String value) {
            return new input("hidden", field.getAbsentKey(), defaultIfNull(value, EMPTY_STRING));
        }

        /**
         * ȡ�ø�����
         */
        public Object getAttachment() {
            return field.getAttachment();
        }

        /**
         * ȡ�ñ����ĸ�����
         */
        public String getAttachmentEncoded() {
            return defaultIfNull(field.getAttachmentEncoded(), EMPTY_STRING);
        }

        /**
         * �Ƿ����������
         */
        public boolean hasAttachment() {
            return field.hasAttachment();
        }

        /**
         * ���ø�����
         */
        public void setAttachment(Object attachment) {
            field.setAttachment(attachment);
        }

        /**
         * ȡ�ô�������HTML hidden field��
         */
        public input getAttachmentHiddenField() {
            return new input("hidden", field.getAttachmentKey(), getAttachmentEncoded());
        }

        /**
         * ���������
         */
        public void clearAttachment() {
            field.clearAttachment();
        }

        /**
         * �ж����field�Ƿ��ǺϷ��ġ�
         */
        public boolean isValid() {
            return field.isValid();
        }

        /**
         * ȡ�����field���Ӧ�ij�����Ϣ��
         */
        public String getMessage() {
            return field.getMessage();
        }

        @Override
        public String toString() {
            return field.toString();
        }
    }

    /**
     * ȡ��field helper�ı�������
     */
    private class FieldHelperIterator extends FilterIterator<FieldHelper, Field> {
        private FieldHelperIterator(Iterator<Field> i) {
            super(i);
        }

        public FieldHelper next() {
            return new FieldHelper(i.next());
        }
    }

    private static abstract class FilterIterator<E, F> implements Iterator<E> {
        protected final Iterator<F> i;

        public FilterIterator(Iterator<F> i) {
            this.i = assertNotNull(i);
        }

        public boolean hasNext() {
            return i.hasNext();
        }

        public void remove() {
            i.remove();
        }
    }

    public static class DefinitionParser extends AbstractSingleBeanDefinitionParser<FormTool> {
    }
}
TOP

Related Classes of com.alibaba.citrus.service.form.support.FormTool

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.