All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.quhaodian.imake.ChainMake Maven / Gradle / Ivy

package com.quhaodian.imake;

import com.quhaodian.data.entity.CatalogEntity;
import com.quhaodian.data.entity.VersionEntity;
import com.quhaodian.imake.command.*;
import com.quhaodian.imake.fields.FormBeanConver;
import com.quhaodian.imake.template.hibernate.TemplateHibernateDir;
import com.quhaodian.imake.templates.ace.TemplateAceDir;
import org.apache.commons.chain.Chain;
import org.apache.commons.chain.Context;
import org.apache.commons.chain.impl.ChainBase;
import org.apache.commons.chain.impl.ContextBase;
import org.reflections.ReflectionUtils;
import org.reflections.Reflections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.File;
import java.lang.reflect.Field;
import java.net.URL;
import java.util.List;
import java.util.Set;

public class ChainMake {

	private Logger logger= LoggerFactory.getLogger("imake");

	private File view;

	private boolean isAction = true;
	private boolean isDao = true;
	private boolean isService = true;
	private boolean isView = true;
	private boolean isSo = true;

	/**
	 * 菜单编号
	 */
	private String menus;


	private Class dir;
	
	private Class codeDir;


	public ChainMake(Class dir,Class codeDir) {
		super();
		this.dir = dir;
		this.codeDir=codeDir;
	}

	public ChainMake() {
		super();
		this.dir = TemplateAceDir.class;
		this.codeDir=TemplateHibernateDir.class;
	}

	public boolean isAction() {
		return isAction;
	}

	public void setAction(boolean isAction) {
		this.isAction = isAction;
	}

	public boolean isDao() {
		return isDao;
	}

	public void setDao(boolean isDao) {
		this.isDao = isDao;
	}

	public boolean isService() {
		return isService;
	}

	public void setService(boolean isService) {
		this.isService = isService;
	}

	public boolean isView() {
		return isView;
	}

	public void setView(boolean isView) {
		this.isView = isView;
	}

	public void setSo(boolean isSo) {
		this.isSo = isSo;
	}


	public File getView() {
		return view;
	}

	public void setView(File view) {
		this.view = view;
	}

	private String action;

	public String getAction() {
		return action;
	}

	public void setAction(String action) {
		this.action = action;
	}

	public void make(Class entity) {
		// TODO Auto-generated method stub
		Chain chain = new ChainBase();
		chain.addCommand(new DaoCommand());
		chain.addCommand(new ManagerCommand());
		chain.addCommand(new SoCommand());
		chain.addCommand(new ActionCommand());
		chain.addCommand(new PageCommand());

		try {
			Context contex = makeContext(entity);
			chain.execute(contex);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public String getMenus() {
		return menus;
	}

	public void setMenus(String menus) {
		this.menus = menus;
	}

	@SuppressWarnings("unchecked")
	private Context makeContext(Class entity) {
		Context contex = new ContextBase();
		contex.put("entity", entity);
		contex.put("action", action);
		URL entityUrl=entity.getResource(".");
		if (entityUrl!=null){
			File entityPath = new File(entityUrl.getFile());
			contex.put("basedir", entityPath.getParentFile());
		}else{
			logger.info("实体路径不存在");
		}
		contex.put("config_entity", entity.getSimpleName().toLowerCase());
		contex.put("view", view);
		contex.put("isAction", isAction);
		contex.put("isDao", isDao);
		contex.put("isService", isService);
		contex.put("isView", isView);
		contex.put("isSo", isSo);
		contex.put("dir", dir);
		contex.put("menus", menus);
		contex.put("codeDir", codeDir);
		contex.put("bean", new FormBeanConver().converClass(entity));


		Class b = CatalogEntity.class;
		if (entity.getSuperclass().equals(b)) {
			contex.put("catalog", true);
		} else {
			contex.put("catalog", false);
		}
		Class VersionEntity = VersionEntity.class;
		if (entity.getSuperclass().equals(VersionEntity)) {
			contex.put("versionentity", true);
		} else {
			contex.put("versionentity", false);
		}
        String entityPackage = entity.getName();
        String lastpackage = entityPackage.substring(0, entityPackage.lastIndexOf("."));
        String packageBase = entityPackage.substring(0, lastpackage.lastIndexOf("."));
		contex.put("dao_p",packageBase +".dao");
		contex.put("manager_p", packageBase +".service");
		contex.put("page_p", packageBase+ ".page");
		contex.put("so_p", packageBase+ ".so");

		Set files = ReflectionUtils.getAllFields(entity);
		for (Field field : files) {
			Id id = field.getAnnotation(Id.class);
			if (id != null) {
				contex.put("id", field.getType());
			}
		}
		return contex;
	}

	public void makes(String packagestr) {

		Reflections reflections = new Reflections(packagestr);
		Set> ss = reflections.getTypesAnnotatedWith(Entity.class);
		for (Class class1 : ss) {
			make(class1);
		}

	}

	public void makes(Class... entitys) {

		for (Class entity : entitys) {
			make(entity);

		}
	}

	public void makes(List> entitys) {

		for (Class entity : entitys) {

			make(entity);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy