/**
 * Company Name : 中贸促信息技术有限责任公司
 * Project Name:project
 * File Name:MetadataService.java
 * Package Name:org.ccpit.base.metadataManage
 * Date:2015年9月25日上午10:07:13
 * Copyright (c) 2015, dingwei@ccpit.org All Rights Reserved.
 *
*/

package org.ccpit.base.metadataManage;

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

import javax.transaction.Transactional;

import org.ccpit.base.controller.Convert;
import org.ccpit.base.controller.Page;
import org.ccpit.base.controller.PageBo;
import org.ccpit.base.controller.PageRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

/**
 * ClassName:MetadataService <br/>
 * Function: TODO 数据字典管理业务逻辑控制类. <br/>
 * Reason:	 TODO ADD REASON. <br/>
 * Date:     2015年9月25日 上午10:07:13 <br/>
 * @author   dingwei
 * @version  
 * @since    JDK 1.6
 * @see 	 
 */
@Repository
public class MetadataService {
	
	@Autowired
	private MetadataDao metadataDao;
	/**
	 * addMetadata:(添加元数据信息). <br/>
	 * @author dingwei
	 * @param metadata
	 * @return
	 * @since JDK 1.6
	 */
    @Transactional
	public boolean addMetadata(Metadata metadata){
		return metadataDao.save(metadata);
	}
	/**
	 * updateMetadata:(更新元数据信息). <br/>
	 * @author dingwei
	 * @param metadata
	 * @return
	 * @since JDK 1.6
	 */
    @Transactional
	public boolean updateMetadata(Metadata metadata){
		return metadataDao.update(metadata);
	}
	/**
	 * delMetadata:(根据id删除原数据信息). <br/>
	 * @author dingwei
	 * @param id
	 * @return
	 * @since JDK 1.6
	 */
    @Transactional
	public boolean delMetadata(long id){
		return metadataDao.deleteById(id);
	}
	/**
	 * getMetadataById:(根据id查询元数据详细信息). <br/>
	 * @author dingwei
	 * @param id
	 * @return
	 * @since JDK 1.6
	 */
	public Metadata getMetadataById(long id){
		return (Metadata) metadataDao.queryById(id);
	}
	
	/**
	 * getAllMetadatas:(查询所有元数据列表). <br/>
	 * @author dingwei
	 * @return
	 * @since JDK 1.6
	 */
	public List<Metadata> getAllMetadatas(){
		return metadataDao.getAll();
	}
	/**
	 * getAllMetadatas:(根据查询条件查询所有元数据列表). <br/>
	 * @author dingwei
	 * @param hql
	 * @return
	 * @since JDK 1.6
	 */
	public List<Metadata> getAllMetadatas(String hql){
		return metadataDao.query(hql, null);
	}

    /**
     *
     * getAllMetadatas:(根据查询条件查询所有元数据列表). <br/>
     * TODO(这里描述这个方法适用条件 – 可选).<br/>
     * TODO(这里描述这个方法的执行流程 – 可选).<br/>
     * TODO(这里描述这个方法的使用方法 – 可选).<br/>
     * TODO(这里描述这个方法的注意事项 – 可选).<br/>
     *
     * @author sunqipeng
     * @param dataType
     * @return
     * @since JDK 1.6
     */
    public List<Metadata> getMetadatasByType(String dataType,String language){
        return metadataDao.query("from "+Metadata.class.getName()+" where dataType=? and languageType=?",dataType,language);
    }
    /**
     *
     * getAllMetadatas:(根据查询条件查询所有元数据列表). <br/>
     * TODO(这里描述这个方法适用条件 – 可选).<br/>
     * TODO(这里描述这个方法的执行流程 – 可选).<br/>
     * TODO(这里描述这个方法的使用方法 – 可选).<br/>
     * TODO(这里描述这个方法的注意事项 – 可选).<br/>
     *
     * @author sunqipeng
     * @param dataType
     * @return
     * @since JDK 1.6
     */
    public List<Metadata> getMetadatasByType2(String dataType){
        return metadataDao.query("from "+Metadata.class.getName()+" where dataType= ?",dataType);
    }

    /**
     * 根据datanameid查找唯一的metadata
     * @param dataNameId
     * @param language
     * @return
     */
    public Metadata getMetaDataByDataId(String dataNameId,String language){
        List<Metadata> metadatas = metadataDao.query("from "+Metadata.class.getName()+" where dataNameId=? and languageType=?",dataNameId,language);
        if (metadatas==null ||metadatas.isEmpty())
            return null;

        return metadatas.get(0);
    }

	/**
	 * queryPage:(根据分页查询所有元数据信息按照分页进行显示). <br/>
	 * @author dingwei
	 * @param pageRequest
	 * @return
	 * @since JDK 1.6
	 */
	public Page<Metadata> queryPage(PageRequest pageRequest){
		Page<Metadata> page = metadataDao.findPage(pageRequest, "from " + Metadata.class.getName(), new String[]{});
        return page;
    }
	/**
	 * queryPage:(根据输入的查询条件查询所有元数据信息按照分页进行显示). <br/>
	 * @author dingwei
	 * @param pageRequest
	 * @param hql
	 * @return
	 * @since JDK 1.6
	 */
	public Page<Metadata> queryPage(PageRequest pageRequest,String hql){
		Page<Metadata> page = metadataDao.findPage(pageRequest, hql, new String[]{});
        return page;
    }
	
	public Map<String,Object> convertToMap(Metadata metadata){
        Map<String,Object> map = new HashMap<String, Object>();
        if (metadata==null){
        	return map;
        }
        map.put("id",metadata.getId());
        map.put("dataName",metadata.getDataName());
        map.put("dataType",metadata.getDataType());
        map.put("description",metadata.getDescription());
        map.put("languageType", "english".equals(metadata.getLanguageType())?"英文":"中文");
        return map;
    }

    public PageBo<Metadata> convert(Page<Metadata> page){
        return new PageBo<Metadata>(page, new Convert<Metadata>() {
            @Override
            public Map<String, Object> convert(Metadata obj) {
                return convertToMap(obj);
            }
        });
    }
	
}

