package com.wingsofts.mvphelper.biz.checker.impl; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.psi.PsiJavaFile; import com.wingsofts.mvphelper.biz.checker.Checker; import com.wingsofts.mvphelper.biz.dir.generator.DirGenerator; import com.wingsofts.mvphelper.biz.dir.generator.impl.ContractModeDirGenerator; import com.wingsofts.mvphelper.biz.dir.generator.impl.PresenterModeDirGenerator; /** * The class used to check generation conditions and start file generation. * * @author Administrator * @since 2017/4/9 */ @SuppressWarnings("ConstantConditions") public class EnvironmentChecker implements Checker { private static final String CONTRACT = "Contract"; private static final String PRESENTER = "Presenter"; private final AnActionEvent actionEvent; private String className = "";//Never NPE, =) private String packageName = ""; private Mode mode; private String prefix; public EnvironmentChecker(AnActionEvent actionEvent) { this.actionEvent = actionEvent; PsiJavaFile javaFile = (PsiJavaFile) actionEvent.getData(CommonDataKeys.PSI_FILE); packageName = javaFile.getPackageName(); String fileName = javaFile.getName(); className = fileName.substring(0, fileName.indexOf(".java")); } @Override public boolean hasSuffix() { if (className.endsWith(CONTRACT)) { mode = Mode.CONTRACT; prefix = className.replace(CONTRACT, ""); return true; } else if (className.endsWith(PRESENTER)) { mode = Mode.PRESENTER; prefix = className.replace(PRESENTER, ""); return true; } return false; } @Override public boolean isInRightPlace() {//split packageName by '.' String[] subPackages = packageName.split("\\."); if (mode == Mode.CONTRACT) { for (String subPackage : subPackages) { if (subPackage.endsWith("contract")) { return true; } } } else if (mode == Mode.PRESENTER) { for (String subPackage : subPackages) { if (subPackage.endsWith("presenter")) { return true; } } }//A Presenter-class not in presenter-package return false; } @Override public void start() { DirGenerator dirGenerator; if (mode == Mode.CONTRACT) { dirGenerator = new ContractModeDirGenerator(actionEvent, prefix); } else {// mode == Mode.PRESENTER dirGenerator = new PresenterModeDirGenerator(actionEvent, prefix); } dirGenerator.start(); } }