Search in sources :

Example 66 with Attribute

use of org.dom4j.Attribute in project CodeUtils by boredream.

the class TempUtils method autoCreateSizeSet.

/**
	 * 自动生成TextView size设置代码
	 * 
	 * @param isAutoSetId
	 *    是否自动给没有id的TextView添加id
	 */
public static void autoCreateSizeSet(boolean isAutoSetId) {
    // TODO 自动设置文字id的前缀
    String tvId4SetSizePre = "@+id/tv_set_size";
    // 自动设置文字id的后缀
    int tvId4SetSizeEnd = 1;
    // TODO 项目中的文字大小数组,项目中如果有变化需要修改此处
    Integer[] TEXT_SIZE = { 20, 18, 16, 14, 12, 28 };
    // 数组转成集合,方便indexOf操作
    List<Integer> TEXT_SIZE_LIST = Arrays.asList(TEXT_SIZE);
    // TODO 如果size不在集合中,则默认获取的索引
    int defaultIndex = 2;
    Document document = XmlUtil.read("temp" + File.separator + "SetSize" + File.separator + "layout_size.xml");
    List<Element> docElements = XmlUtil.getAllElements(document);
    List<IdNamingBean> tvIdNameBeans = new ArrayList<IdNamingBean>();
    StringBuilder sbSetTextSize = new StringBuilder();
    // 遍历layout中全部元素
    for (int i = 0; i < docElements.size(); i++) {
        Element element = docElements.get(i);
        // 如果不是TextView,跳过
        if (!element.getName().equals("TextView")) {
            continue;
        }
        // //////////// 处理textSize ////////////////
        Attribute attrTextSize = element.attribute("textSize");
        // TODO 另一种处理,没有textSize参数时不做setSize操作
        // if(attrTextSize == null) {
        // System.out.println("布局内第" + i + "个控件TextView未设置textSize");
        // continue;
        // }
        int indexOf = -1;
        if (attrTextSize == null) {
            // 没有textSize参数时,取默认的size
            indexOf = defaultIndex;
        } else {
            // 有textSize再去数据中获取索引
            int textSizeNum = -1;
            // 获取文字大小
            String textSize = attrTextSize.getValue().replace("dp", "").replace("dip", "").replace("px", "").replace("sp", "");
            try {
                textSizeNum = Integer.parseInt(textSize);
            } catch (Exception e) {
                textSizeNum = -1;
            }
            if (textSizeNum == -1) {
                System.out.println("布局内第" + i + "个控件TextView的textSize格式不对");
                continue;
            }
            indexOf = TEXT_SIZE_LIST.indexOf(textSizeNum);
            if (indexOf == -1) {
                // TODO 另一种处理,获取不到时不做setSize操作
                // System.out.println("布局内第" + i +
                // "个TextView的textSize不在TEXT_SIZE数组中");
                // continue;
                // 获取不到时,去默认索引位置的size
                indexOf = defaultIndex;
            }
        }
        // //////////// 处理id ////////////////
        Attribute attrID = element.attribute("id");
        String id = null;
        if (attrID == null) {
            // 如果没有id,且需要自动设置一个
            if (isAutoSetId) {
                id = tvId4SetSizePre + (tvId4SetSizeEnd++);
                element.addAttribute("android:id", id);
            }
        } else {
            // 如果已有id
            id = attrID.getValue();
        }
        if (id == null) {
            System.out.println("布局内第" + i + "个控件TextView没有id的不做处理");
            continue;
        }
        // 去除"@+id/"后的id名称
        String idName = id.replace("@+id/", "");
        tvIdNameBeans.add(new IdNamingBean(element.getName(), idName, element));
        // 例 tv_set_size1.setTextSize(Constant.TEXT_SIZE[0] *
        // TxtManager.getInstance().getTxtSize(this));
        String setSizeLine = idName + ".setTextSize(Constant.TEXT_SIZE[" + indexOf + "] * TxtManager.getInstance().getTxtSize(this));";
        sbSetTextSize.append(StringUtils.formatSingleLine(2, setSizeLine));
    }
    // 如果要自动setId则将设置好id的xml写回布局layout_size_new.xml中
    if (isAutoSetId) {
        XmlUtil.write2xml(new File("temp" + File.separator + "SetSize" + File.separator + "layout_size_new.xml"), document);
    }
    AndroidUtils.idNamingBeans = tvIdNameBeans;
    // 解析idNamingBeans集合中的信息,生成页面文本信息
    String activityContent = AndroidUtils.createActivityContent();
    // 封装到onResume里
    // @Override
    // protected void onResume() {
    // super.onResume();
    // tv_set_size1.setTextSize(Constant.TEXT_SIZE[0] *
    // TxtManager.getInstance().getTxtSize(context))
    // }
    sbSetTextSize.insert(0, StringUtils.formatSingleLine(2, "super.onResume();"));
    sbSetTextSize.insert(0, StringUtils.formatSingleLine(1, "protected void onResume() {"));
    sbSetTextSize.insert(0, StringUtils.formatSingleLine(1, "@Override"));
    sbSetTextSize.append(StringUtils.formatSingleLine(1, "}"));
    activityContent += sbSetTextSize.toString();
    FileUtils.writeString2File(activityContent, new File("temp" + File.separator + "SetSize" + File.separator + "Layout_Size.java"));
    System.out.println("--------------");
    System.out.println("代码生成正确,请在SetSize/Layout_Size.java中查看");
}
Also used : Attribute(org.dom4j.Attribute) Element(org.dom4j.Element) ArrayList(java.util.ArrayList) IdNamingBean(entity.IdNamingBean) Document(org.dom4j.Document) IOException(java.io.IOException) File(java.io.File)

Example 67 with Attribute

use of org.dom4j.Attribute in project CodeUtils by boredream.

the class AndroidUtils method createActivityContent.

/**
	 * 生成activity文件内容
	 */
public static String createActivityContent() {
    StringBuilder sb = new StringBuilder();
    sb.append("\n\n");
    // private TextView tv_name;
    for (IdNamingBean bean : idNamingBeans) {
        sb.append(StringUtils.formatSingleLine(1, "private " + bean.getViewName() + " " + bean.getIdName() + ";"));
    }
    sb.append("\n");
    // 生成initView自定义方法,并在其中依次findViewById为view成员变量赋值
    // private void initView() {
    //    tv_name = (TextView)findViewById(R.id.tv_name);
    // }
    sb.append(StringUtils.formatSingleLine(1, "private void initView() {"));
    for (IdNamingBean bean : idNamingBeans) {
        sb.append(StringUtils.formatSingleLine(2, bean.getIdName() + " = " + "(" + bean.getViewName() + ") findViewById(R.id." + bean.getIdName() + ");"));
    }
    sb.append("\n");
    // 是否包含EditText控件,如果包含,自动生成非空判断代码
    boolean hasEditText = false;
    ///**
    // * TODO 使用输入内容,可根据需要自行修改补充本方法
    // */
    //private void submit() {
    //	// 开始验证输入内容
    //	String content = et_content.getText().toString().trim();
    //	if(!TextUtils.isEmpty(content)) {
    //		Toast.makeText(this, "content不能为空", Toast.LENGTH_SHORT).show();
    //		return;
    //	}
    //	
    //	// TODO 验证成功,下面开始使用数据
    //	
    //	
    //}
    StringBuilder sbEditText = new StringBuilder();
    sbEditText.append("\n");
    sbEditText.append(StringUtils.formatSingleLine(1, "/**"));
    sbEditText.append(StringUtils.formatSingleLine(1, " * TODO 输入验证,可根据需要自行修改补充"));
    sbEditText.append(StringUtils.formatSingleLine(1, " */"));
    sbEditText.append(StringUtils.formatSingleLine(1, "private void submit() {"));
    sbEditText.append(StringUtils.formatSingleLine(2, "// 开始验证输入内容"));
    for (IdNamingBean bean : idNamingBeans) {
        Attribute attrTag = bean.getElement().attribute("tag");
        // 只判断EditText控件
        if (bean.getViewName().equals("EditText")) {
            // 带有可选标识(tag为optional)的EditText不做非空验证
            if (attrTag != null && attrTag.getValue().equals("optional")) {
                continue;
            }
            // 截取最后一个_后面的内容作为名称,不包含_时使用全部id作为名称
            String idName = bean.getIdName();
            int index = idName.lastIndexOf("_");
            String name = index == -1 ? idName : idName.substring(index + 1);
            sbEditText.append(StringUtils.formatSingleLine(2, "String " + name + " = " + idName + ".getText().toString().trim();"));
            sbEditText.append(StringUtils.formatSingleLine(2, "if(TextUtils.isEmpty(" + name + ")) {"));
            sbEditText.append(StringUtils.formatSingleLine(3, "Toast.makeText(this, \"" + name + "不能为空\", Toast.LENGTH_SHORT).show();"));
            sbEditText.append(StringUtils.formatSingleLine(3, "return;"));
            sbEditText.append(StringUtils.formatSingleLine(2, "}"));
            sbEditText.append(StringUtils.formatSingleLine(2, ""));
            hasEditText = true;
        }
    }
    sbEditText.append(StringUtils.formatSingleLine(2, "// TODO 验证成功,下面开始使用数据"));
    sbEditText.append(StringUtils.formatSingleLine(2, ""));
    sbEditText.append(StringUtils.formatSingleLine(2, ""));
    sbEditText.append(StringUtils.formatSingleLine(1, "}"));
    // 是否包含可点击的控件,如果包含,自动生成onClick相关代码
    boolean hasClickView = false;
    // 点击事件复写的onclick方法
    // @Override
    // public void onClick(View v) {
    //    switch (v.getId()) {
    //    case R.id.btn_ok:
    // 		// doSomething
    // 		break;
    //    }
    // } 
    StringBuilder sbOnClick = new StringBuilder();
    sbOnClick.append("\n");
    sbOnClick.append(StringUtils.formatSingleLine(1, "@Override"));
    sbOnClick.append(StringUtils.formatSingleLine(1, "public void onClick(View v) {"));
    sbOnClick.append(StringUtils.formatSingleLine(2, "switch (v.getId()) {"));
    for (IdNamingBean bean : idNamingBeans) {
        Attribute attrClickable = bean.getElement().attribute("clickable");
        // 只设置Button的点击事件,和参数包含clickable=true的控件
        if (bean.getViewName().equals("Button") || (attrClickable != null && attrClickable.getValue().equals("true"))) {
            // 设置监听
            // btn_ok.setOnClickListener(this);
            sb.append(StringUtils.formatSingleLine(2, bean.getIdName() + ".setOnClickListener(this);"));
            // 在onclick中分别处理不同id的点击
            sbOnClick.append(StringUtils.formatSingleLine(2, "case R.id." + bean.getIdName() + ":"));
            sbOnClick.append("\n");
            sbOnClick.append(StringUtils.formatSingleLine(3, "break;"));
            hasClickView = true;
        }
    }
    sbOnClick.append(StringUtils.formatSingleLine(2, "}"));
    sbOnClick.append(StringUtils.formatSingleLine(1, "}"));
    // 是否包含RadioGroup/Button等控件,如果包含,自动生成onCheckChanged相关代码
    boolean hasCheckedView = false;
    // 点击事件复写的onclick方法
    // @Override
    // public void onCheckedChanged(RadioGroup group, int checkedId) {
    //    switch (checkedId) {
    //    case R.id.rb_home:
    // 		// doSomething
    // 		break;
    //    }
    // }
    StringBuilder sbOnChecked = new StringBuilder();
    sbOnChecked.append("\n");
    sbOnChecked.append(StringUtils.formatSingleLine(1, "@Override"));
    sbOnChecked.append(StringUtils.formatSingleLine(1, "public void onCheckedChanged(RadioGroup group, int checkedId) {"));
    sbOnChecked.append(StringUtils.formatSingleLine(2, "switch (checkedId) {"));
    for (IdNamingBean bean : idNamingBeans) {
        // 只设置Button的点击事件,和参数包含clickable=true的控件
        if (bean.getViewName().equals("RadioGroup")) {
            // 设置监听
            // rg.setOnCheckedChangeListener(this);
            sb.append(StringUtils.formatSingleLine(2, bean.getIdName() + ".setOnCheckedChangeListener(this);"));
            hasCheckedView = true;
        } else if (bean.getViewName().equals("RadioButton")) {
            // 在onCheckedChanged中分别处理不同id的选中
            sbOnChecked.append(StringUtils.formatSingleLine(2, "case R.id." + bean.getIdName() + ":"));
            sbOnChecked.append("\n");
            sbOnChecked.append(StringUtils.formatSingleLine(3, "break;"));
            hasCheckedView = true;
        }
    }
    sbOnChecked.append(StringUtils.formatSingleLine(2, "}"));
    sbOnChecked.append(StringUtils.formatSingleLine(1, "}"));
    sb.append(StringUtils.formatSingleLine(1, "}\n"));
    sb.append("\n");
    if (hasClickView) {
        sb.append(sbOnClick);
    }
    if (hasCheckedView) {
        sb.append(sbOnChecked);
    }
    if (hasEditText) {
        sb.append(sbEditText);
    }
    String activityContent = sb.toString();
    return activityContent;
}
Also used : Attribute(org.dom4j.Attribute) IdNamingBean(entity.IdNamingBean)

Example 68 with Attribute

use of org.dom4j.Attribute in project CodeUtils by boredream.

the class XmlUtil method replaceAttrValue.

/**
	 * 替换XML文件中attribute的value值
	 * @param tarDoc		目标document
	 * @param tarStrList	目标替换文字,模糊替换,即只要匹配list集合里中其中一个就会被抽取替换
	 * @param replacement	替换成的内容
	 * @param matchAttr		匹配参数名,即只会替换该参数名对应的值,null时不做筛选
	 * @return 是否有替换操作
	 */
@SuppressWarnings("unchecked")
public static boolean replaceAttrValue(Document tarDoc, List<String> tarStrList, String replacement, String matchAttr) {
    boolean hasReplace = false;
    List<Element> tarElements = XmlUtil.getAllElements(tarDoc);
    for (Element element : tarElements) {
        List<Attribute> attrs = element.attributes();
        for (Attribute attr : attrs) {
            if (matchAttr == null || !attr.getName().equals(matchAttr + "")) {
                continue;
            }
            String attrValue = attr.getValue();
            int index = tarStrList.indexOf(attrValue);
            if (index != -1) {
                attr.setValue(attrValue.replace(tarStrList.get(index), replacement));
                hasReplace = true;
            }
        }
    }
    return hasReplace;
}
Also used : Attribute(org.dom4j.Attribute) Element(org.dom4j.Element)

Example 69 with Attribute

use of org.dom4j.Attribute in project pentaho-platform by pentaho.

the class BiPlatformRepositoryClientNavigationService method getVisible.

private boolean getVisible(Element element) {
    boolean visible = true;
    // $NON-NLS-1$
    Attribute attr = element.attribute("visible");
    if (attr != null) {
        // $NON-NLS-1$
        visible = "true".equalsIgnoreCase(attr.getText());
    }
    return visible;
}
Also used : Attribute(org.dom4j.Attribute)

Example 70 with Attribute

use of org.dom4j.Attribute in project pentaho-platform by pentaho.

the class BiPlatformRepositoryClientNavigationService method getLastModifiedDate.

private Calendar getLastModifiedDate(Element element) {
    // $NON-NLS-1$
    String lastModifiedDateStr = "";
    // $NON-NLS-1$
    Attribute attr = element.attribute("lastModifiedDate");
    if (attr != null) {
        lastModifiedDateStr = attr.getText();
        long millis = new Long(lastModifiedDateStr);
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(millis);
        return calendar;
    }
    return null;
}
Also used : Attribute(org.dom4j.Attribute) Calendar(java.util.Calendar) PropertyString(org.pentaho.commons.util.repository.type.PropertyString)

Aggregations

Attribute (org.dom4j.Attribute)114 Element (org.dom4j.Element)88 Document (org.dom4j.Document)30 ArrayList (java.util.ArrayList)28 List (java.util.List)26 Iterator (java.util.Iterator)23 Node (org.dom4j.Node)14 HashMap (java.util.HashMap)12 File (java.io.File)11 SAXReader (org.dom4j.io.SAXReader)11 IOException (java.io.IOException)10 Map (java.util.Map)6 VFSItem (org.olat.core.util.vfs.VFSItem)6 QTIObject (org.olat.ims.qti.editor.beecom.objects.QTIObject)6 Namespace (org.dom4j.Namespace)5 QName (org.dom4j.QName)5 PropertyString (org.pentaho.commons.util.repository.type.PropertyString)5 VFSLeaf (org.olat.core.util.vfs.VFSLeaf)4 OutcomesProcessing (org.olat.ims.qti.editor.beecom.objects.OutcomesProcessing)4 AnnotatedElement (java.lang.reflect.AnnotatedElement)3