/** * <p>Copyright: Copyright (c) 2012</p> * <p>Company: �������ӹɷ����޹�˾</p> */ package com.hundsun.ares.studio.jres.script.internal.useroption; import java.io.InputStream; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import com.hundsun.ares.studio.jres.script.internal.useroption.control.ControlManager; import com.hundsun.ares.studio.jres.script.internal.useroption.control.IUserOptionControlProvider; /** * @author lvgao * */ public class UserOptionConfigReader { private static Logger logger = Logger.getLogger(UserOptionConfigReader.class); ////////////////////////////////////XML�������///////////////////////////////////////////////////////// public static final String ROOT = "useroption"; public static final String ID = "id"; public static final String TEXT = "text"; public static final String VALUE = "value"; public static final String MODULE_ROOT = "module_root"; public static final String DEFAULT_VALUE = "default_value"; public static final String TYPE = "type"; public static final String GROUP = "group"; public static final String ITEM = "item"; public static final String MODULE = "module"; public UserOptionRoot read(InputStream is)throws Exception{ SAXReader reader = new SAXReader(); Document document = null; try { document = reader.read(is); } catch (DocumentException e) { logger.error(e); return null; } Element root = document == null ? null : document.getRootElement(); if(null == root || !StringUtils.equals(ROOT, root.getName())){ throw new Exception(String.format("���ø��ڵ����ӦΪ����Ϊ[%s]�ĸ��ڵ㡣", ROOT)); } UserOptionRoot option = new UserOptionRoot(); for(Object item: root.elements()){ Element itemElment = (Element)item; String name = itemElment.getName(); if(StringUtils.equals(name, MODULE)){ readModuleControl(itemElment, option); } if(StringUtils.equals(name, ITEM)){ readItemControl(itemElment, option); } if(StringUtils.equals(name, GROUP)){ readGroupControl(itemElment, option); } } return option; } private void readGroupControl(Element itemElment,IControlContainer container){ IControl contrl = createControl(IControl.TYPE_GROUP); if(null == contrl){ return; } /** * ������߼�����˳��� * ��Ϊ��radio�Ĺ�ϵ������group�����ȳ�ʼ������Ŀؼ� * Ȼ��������Ĭ��ֵ�� * */ for(Object item: itemElment.elements()){ Element subElment = (Element)item; String name = subElment.getName(); if(StringUtils.equals(name, MODULE)){ readModuleControl(subElment, (IControlContainer)contrl); } if(StringUtils.equals(name, ITEM)){ readItemControl(subElment, (IControlContainer)contrl); } if(StringUtils.equals(name, GROUP)){ readGroupControl(subElment, (IControlContainer)contrl); } } contrl.setType(IControl.TYPE_GROUP); contrl.setID(getAttributeValue(itemElment, ID, "")); contrl.setText(getAttributeValue(itemElment, TEXT, "")); contrl.setValue(getAttributeValue(itemElment, VALUE, "")); contrl.setDefaultValue(getAttributeValue(itemElment, DEFAULT_VALUE, "")); container.addChildren(contrl); } private void readModuleControl(Element itemElment,IControlContainer container){ String itemType = getAttributeValue(itemElment, TYPE, ""); //�ؼ���� IControl contrl = createControl(IControl.TYPE_MODULE); if(null == contrl){ return; } contrl.setType(IControl.TYPE_MODULE); contrl.setControlType(itemType); contrl.setID(getAttributeValue(itemElment, ID, "")); contrl.setText(getAttributeValue(itemElment, TEXT, "")); contrl.setValue(getAttributeValue(itemElment, VALUE, "")); contrl.setModuleRoot(getAttributeValue(itemElment, MODULE_ROOT, "")); contrl.setDefaultValue(getAttributeValue(itemElment, DEFAULT_VALUE, "")); container.addChildren(contrl); } private void readItemControl(Element itemElment,IControlContainer container){ String type = getAttributeValue(itemElment, TYPE, ""); //�ؼ���� IControl contrl = createControl(type); if(null == contrl){ return; } /*** * �������������˳��� * setValue������setDefaultValueǰ�� * ����combo��setValueʱ��ʼ��ѡ�����Ĭ��ֵʱҪУ���Ƿ���ѡ���� */ contrl.setType(type); contrl.setID(getAttributeValue(itemElment, ID, "")); contrl.setText(getAttributeValue(itemElment, TEXT, "")); contrl.setValue(getAttributeValue(itemElment, VALUE, "")); contrl.setDefaultValue(getAttributeValue(itemElment, DEFAULT_VALUE, "")); container.addChildren(contrl); } /** * ��ȡ���Ե�ֵ * @param itemElment * @param key * @param defalutValue * @return */ public String getAttributeValue(Element itemElment,String key,String defalutValue){ Object attr = itemElment.attribute(key); if(null != attr){ return ((Attribute)attr).getValue(); } return defalutValue; } /** * ������Ӧ�Ŀؼ� * @param type * @return */ public static IControl createControl(String type){ if (StringUtils.equals(IControl.TYPE_TEXT, type)) { return new UserOptionControlText(); }else if (StringUtils.equals(IControl.TYPE_COMBO, type)) { return new UserOptionControlCombo(); }else if (StringUtils.equals(IControl.TYPE_CHECK, type)) { return new UserOptionControlCheck(); }else if (StringUtils.equals(IControl.TYPE_RADIO, type)) { return new UserOptionControl(); }else if (StringUtils.equals(IControl.TYPE_GROUP, type)) { return new UserOptionControlGroup(); }else if (StringUtils.equals(IControl.TYPE_MODULE, type)) { return new UserOptionControlTree(); } else { // ���������̶�����֮�⣬����������Ϊ����ͨ����չ����չ�� IUserOptionControlProvider provider = ControlManager.getInstance().getTypeProvider(type); if (provider != null) { return provider.createControl(); } } return null; } }