package com.founderdpt.comm.xworld.orm.mapping; import java.lang.annotation.Annotation; import java.lang.reflect.InvocationTargetException; import javax.xml.bind.JAXBException; import javax.xml.bind.annotation.XmlRootElement; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang.StringUtils; import com.founderdpt.comm.xworld.orm.mapping.generator.GeneratorFactory; import com.founderdpt.comm.xworld.orm.mapping.model.XworldMapping; public class MappingXqueryManager { public static String getID(Class clazz) throws JAXBException, InstantiationException, IllegalAccessException, ClassNotFoundException { XworldMapping mapping = MappingManager.get(clazz); String generator = mapping.getId().getGenerator().getClazz(); String id = GeneratorFactory.getGenerator(generator,clazz); return id; } public static StringBuilder getDocXPath(Class clazz) throws JAXBException { XworldMapping mapping = MappingManager.get(clazz); StringBuilder xquery = new StringBuilder(); String file = mapping.getFile(); String xpath = mapping.getXpath(); xquery.append("doc('").append(file).append("')"); if (xpath != null) { xquery.append(xpath); } return xquery; } public static String getRootName(Class clazz) { Annotation rootElement = clazz.getAnnotation(XmlRootElement.class); if (rootElement instanceof XmlRootElement) { XmlRootElement xmlrootElement = (XmlRootElement) rootElement; return xmlrootElement.name(); } else { String classname = clazz.getSimpleName(); return classname.substring(0, 1).toLowerCase() + classname.substring(1); } } public static String getIDValue(Object paramObj) throws JAXBException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { XworldMapping mapping = MappingManager.get(paramObj.getClass()); String idc = mapping.getId().getName(); return BeanUtils.getProperty(paramObj, idc); } public static StringBuilder getSelectIDQuery(String id, Class clazz) throws JAXBException { // StringBuilder xquery = new StringBuilder(); StringBuilder xquery = getDocXPath(clazz); XworldMapping mapping = MappingManager.get(clazz); String idc = mapping.getId().getName(); String idtype = mapping.getId().getType(); if (StringUtils.isBlank(idc)) { idc = "id"; } String rootname = getRootName(clazz); ; xquery.append("/" + rootname); if ("node".equals(idtype)) { xquery.append("["); } else { xquery.append("[@"); } xquery.append(idc); xquery.append("='").append(id).append("']"); return xquery; } public static StringBuilder getSelectQuery(Class clazz) throws JAXBException { return getSelectQuery(clazz,null); } public static StringBuilder getSelectQuery(Class clazz,String where) throws JAXBException { // StringBuilder xquery = new StringBuilder(); StringBuilder xquery = new StringBuilder(); if(StringUtils.isNotBlank(where)){ xquery.append(" for $x in "); xquery.append(getDocXPath(clazz)); String rootname = getRootName(clazz); ; xquery.append("/" + rootname); xquery.append(" "); xquery.append(where);//$x/xxx='' xquery.append(" return $x "); }else{ xquery = getDocXPath(clazz); String rootname = getRootName(clazz); ; xquery.append("/" + rootname); } return xquery; } }