org.beangle.website.system.service.impl.DictTreeServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.beangle.website.system.service.impl.DictTreeServiceImpl.java

Source

/* Copyright c 2005-2012.
 * Licensed under GNU  LESSER General Public License, Version 3.
 * http://www.gnu.org/licenses
 */
package org.beangle.website.system.service.impl;

import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
import org.beangle.commons.collection.CollectUtils;
import org.beangle.model.persist.impl.BaseServiceImpl;
import org.beangle.model.query.builder.OqlBuilder;
import org.beangle.website.system.model.DictTree;
import org.beangle.website.system.service.DictTreeService;

/**
 * @author chaostone
 * @version $Id: MenuServiceImpl.java Jun 5, 2011 9:25:49 PM chaostone $
 */
public class DictTreeServiceImpl extends BaseServiceImpl implements DictTreeService {

    public void move(DictTree tree, DictTree parent, int indexno) {
        if (ObjectUtils.equals(tree.getParent(), parent)) {
            if (NumberUtils.toInt(tree.getIndexno()) != indexno) {
                shiftCode(tree, parent, indexno);
            }
        } else {
            if (null != tree.getParent()) {
                tree.getParent().getChildren().remove(tree);
            }
            tree.setParent(parent);
            shiftCode(tree, parent, indexno);
        }
    }

    private void shiftCode(DictTree menu, DictTree newParent, int indexno) {
        List<DictTree> sibling = null;
        if (null != newParent) {
            sibling = newParent.getChildren();
        } else {
            sibling = CollectUtils.newArrayList();
            OqlBuilder<DictTree> query = OqlBuilder.from(DictTree.class);
            query.where("parent is null");
            sibling = entityDao.search(query);
        }
        Collections.sort(sibling);
        sibling.remove(menu);
        indexno--;
        if (indexno > sibling.size()) {
            indexno = sibling.size();
        }
        sibling.add(indexno, menu);
        int nolength = String.valueOf(sibling.size()).length();
        Set<DictTree> menus = CollectUtils.newHashSet();
        for (int seqno = 1; seqno <= sibling.size(); seqno++) {
            DictTree one = sibling.get(seqno - 1);
            generateCode(one, StringUtils.leftPad(String.valueOf(seqno), nolength, '0'), menus);
        }
        entityDao.saveOrUpdate(menus);
    }

    private void generateCode(DictTree menu, String indexno, Set<DictTree> menus) {
        menus.add(menu);
        if (null != indexno) {
            ((DictTree) menu).generateCode(indexno);
        } else {
            ((DictTree) menu).generateCode();
        }
        if (null != menu.getChildren()) {
            for (DictTree m : menu.getChildren()) {
                generateCode(m, null, menus);
            }
        }
    }

    /**
     * ???
     * @param dm ?
     * @return
     */
    protected DictTree getDictTreeByDM(String dm) {
        OqlBuilder<DictTree> query = OqlBuilder.from(DictTree.class, "d");
        query.where("d.dm=:dm", dm);
        List<DictTree> dictTrees = entityDao.search(query);
        DictTree dictTree = null;
        if (dictTrees != null && dictTrees.size() > 0) {
            dictTree = dictTrees.get(0);
        }
        return dictTree;
    }

    public List<DictTree> findDictTreeByCode(String code) {
        DictTree dictTree = getDictTreeByDM(code);
        if (dictTree != null) {
            OqlBuilder<DictTree> query = OqlBuilder.from(DictTree.class, "d");
            query.where("d.code like '" + dictTree.getCode() + "%'");
            query.where("d.enabled=1");
            query.orderBy("d.code");
            return entityDao.search(query);
        } else {
            return null;
        }
    }

    public Map<String, DictTree> getDictTreeMap(String code) {
        List<DictTree> list = findDictTreeByCode(code);
        Map<String, DictTree> map = new HashMap<String, DictTree>(list == null ? 0 : list.size());
        for (DictTree dictTree : list) {
            map.put(dictTree.getName(), dictTree);
        }
        return map;
    }

}