org.openlegacy.ide.eclipse.actions.EclipseDesignTimeExecuter.java Source code

Java tutorial

Introduction

Here is the source code for org.openlegacy.ide.eclipse.actions.EclipseDesignTimeExecuter.java

Source

/*******************************************************************************
 * Copyright (c) 2014 OpenLegacy Inc.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     OpenLegacy Inc. - initial API and implementation
 *******************************************************************************/
package org.openlegacy.ide.eclipse.actions;

import org.apache.commons.io.IOUtils;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.actions.GlobalBuildAction;
import org.openlegacy.EntityDefinition;
import org.openlegacy.designtime.EntityUserInteraction;
import org.openlegacy.designtime.PreferencesConstants;
import org.openlegacy.designtime.UserInteraction;
import org.openlegacy.designtime.enums.BackendSolution;
import org.openlegacy.designtime.mains.DesignTimeExecuter;
import org.openlegacy.designtime.mains.DesignTimeExecuterImpl;
import org.openlegacy.designtime.mains.GenerateControllerRequest;
import org.openlegacy.designtime.mains.GenerateServiceRequest;
import org.openlegacy.designtime.mains.GenerateViewRequest;
import org.openlegacy.designtime.mains.ProjectCreationRequest;
import org.openlegacy.designtime.mains.ServiceEntityParameter;
import org.openlegacy.designtime.rpc.GenerateRpcModelRequest;
import org.openlegacy.designtime.rpc.ImportSourceRequest;
import org.openlegacy.designtime.terminal.GenerateScreenModelRequest;
import org.openlegacy.exceptions.GenerationException;
import org.openlegacy.exceptions.OpenLegacyException;
import org.openlegacy.ide.eclipse.Activator;
import org.openlegacy.ide.eclipse.Messages;
import org.openlegacy.ide.eclipse.util.JavaUtils;
import org.openlegacy.ide.eclipse.util.PathsUtil;
import org.openlegacy.terminal.TerminalSnapshot;
import org.openlegacy.terminal.definitions.ScreenEntityDefinition;
import org.openlegacy.utils.FileUtils;
import org.openlegacy.utils.StringUtil;

import java.io.File;
import java.io.IOException;

public class EclipseDesignTimeExecuter {

    private static final EclipseDesignTimeExecuter instance = new EclipseDesignTimeExecuter();

    private DesignTimeExecuter designTimeExecuter = new DesignTimeExecuterImpl();

    private final static Logger logger = Logger.getLogger(EclipseDesignTimeExecuter.class);

    public static EclipseDesignTimeExecuter instance() {
        return instance;
    }

    public void createProject(ProjectCreationRequest projectCreationRequest) throws IOException {

        designTimeExecuter.createProject(projectCreationRequest);

        Display.getDefault().asyncExec(new Runnable() {

            @Override
            public void run() {
                try {
                    ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IResource.DEPTH_INFINITE, null);
                } catch (CoreException e) {
                    // OK
                }
            }
        });
    }

    public void generateScreenModel(final IFile trailFile, IPackageFragmentRoot sourceDirectory, String packageDir,
            EntityUserInteraction<EntityDefinition<?>> entityUserInteraction, boolean generateAspect,
            boolean generateTest, TerminalSnapshot... terminalSnapshots) throws GenerationException {
        File projectDirectory = PathsUtil.toOsLocation(trailFile.getProject());
        File templatesDirectory = new File(projectDirectory, DesignTimeExecuterImpl.TEMPLATES_DIR);

        GenerateScreenModelRequest generateScreenRequest = new GenerateScreenModelRequest();
        generateScreenRequest.setPackageDirectory(PathsUtil.packageToPath(packageDir));
        generateScreenRequest.setProjectPath(projectDirectory);
        generateScreenRequest.setSourceDirectory(PathsUtil.toSourceDirectory(sourceDirectory));
        generateScreenRequest.setTemplatesDirectory(templatesDirectory);
        generateScreenRequest.setTrailFile(PathsUtil.toOsLocation(trailFile));
        generateScreenRequest.setTerminalSnapshots(terminalSnapshots);
        generateScreenRequest.setGenerateAspectJ(generateAspect);
        generateScreenRequest.setGenerateTest(generateTest);
        generateScreenRequest.setEntityUserInteraction(entityUserInteraction);

        designTimeExecuter.generateScreenModel(generateScreenRequest);

        Display.getDefault().asyncExec(new Runnable() {

            @Override
            public void run() {
                (new GlobalBuildAction(Activator.getActiveWorkbenchWindow(),
                        IncrementalProjectBuilder.INCREMENTAL_BUILD)).run();
            }
        });

    }

    public void generateScreenEntityDefinition(final IFile trailFile, IPackageFragmentRoot sourceDirectory,
            String packageDir, EntityUserInteraction<EntityDefinition<?>> entityUserInteraction,
            boolean generateAspect, ScreenEntityDefinition entityDefinition) throws GenerationException {
        File projectDirectory = PathsUtil.toOsLocation(trailFile.getProject());
        File templatesDirectory = new File(projectDirectory, DesignTimeExecuterImpl.TEMPLATES_DIR);

        GenerateScreenModelRequest generateScreenRequest = new GenerateScreenModelRequest();
        generateScreenRequest.setPackageDirectory(PathsUtil.packageToPath(packageDir));
        generateScreenRequest.setProjectPath(projectDirectory);
        generateScreenRequest.setSourceDirectory(PathsUtil.toSourceDirectory(sourceDirectory));
        generateScreenRequest.setTemplatesDirectory(templatesDirectory);
        generateScreenRequest.setTrailFile(PathsUtil.toOsLocation(trailFile));
        generateScreenRequest.setTerminalSnapshots(entityDefinition.getSnapshot());
        generateScreenRequest.setGenerateAspectJ(generateAspect);
        generateScreenRequest.setEntityUserInteraction(entityUserInteraction);

        designTimeExecuter.generateScreenEntityDefinition(generateScreenRequest, entityDefinition);

        Display.getDefault().asyncExec(new Runnable() {

            @Override
            public void run() {
                (new GlobalBuildAction(Activator.getActiveWorkbenchWindow(),
                        IncrementalProjectBuilder.INCREMENTAL_BUILD)).run();
            }
        });

    }

    public boolean generateAspect(IResource resource) {
        File javaFile = new File(resource.getLocation().toOSString());
        return designTimeExecuter.generateAspect(javaFile);
    }

    public void initialize() {
        initialize(null);
    }

    public void initialize(final File projectPath) {
        Job job = new Job(Messages.getString("message_initializing_ol_analyzer")) {

            @Override
            protected IStatus run(IProgressMonitor arg0) {
                designTimeExecuter.initialize(projectPath);
                return Status.OK_STATUS;
            }

        };
        job.schedule();
    }

    public void generateView(IFile entitySourceFile, IProject project, UserInteraction userInteraction,
            boolean generateHelp) {

        File projectPath = new File(PathsUtil.toOsLocation(project), DesignTimeExecuterImpl.TEMPLATES_DIR);

        GenerateViewRequest generatePageRequest = new GenerateViewRequest();
        generatePageRequest.setProjectPath(PathsUtil.toOsLocation(project));
        File sourceFile = PathsUtil.toOsLocation(entitySourceFile);
        generatePageRequest.setEntitySourceFile(sourceFile);
        generatePageRequest.setPackageDirectory(PathsUtil.packageToPath(sourceFile.getParent()));
        File sourceDirectory = sourceFile.getParentFile();
        while (!sourceDirectory.getName().equals("java")) {
            sourceDirectory = sourceDirectory.getParentFile();
        }
        generatePageRequest.setSourceDirectory(sourceDirectory);
        generatePageRequest.setTemplatesDirectory(projectPath);
        generatePageRequest.setUserInteraction(userInteraction);
        generatePageRequest.setGenerateHelp(generateHelp);
        designTimeExecuter.generateView(generatePageRequest);

    }

    public void generateController(IFile entitySourceFile, IPackageFragmentRoot sourceDirectory, String packageDir,
            UserInteraction userInteraction) {

        File projectPath = new File(PathsUtil.toOsLocation(entitySourceFile.getProject()),
                DesignTimeExecuterImpl.TEMPLATES_DIR);

        GenerateControllerRequest generateControllerRequest = new GenerateControllerRequest();
        generateControllerRequest.setProjectPath(PathsUtil.toOsLocation(entitySourceFile.getProject()));
        generateControllerRequest.setEntitySourceFile(PathsUtil.toOsLocation(entitySourceFile));
        generateControllerRequest.setSourceDirectory(PathsUtil.toSourceDirectory(sourceDirectory));
        if (!StringUtil.isEmpty(packageDir)) {
            generateControllerRequest.setPackageDirectory(PathsUtil.packageToPath(packageDir));
        }
        generateControllerRequest.setTemplatesDirectory(projectPath);
        generateControllerRequest.setUserInteraction(userInteraction);
        designTimeExecuter.generateController(generateControllerRequest);

    }

    public void copyCodeGenerationTemplates(IProject project) {
        File projectPath = PathsUtil.toOsLocation(project);
        designTimeExecuter.copyCodeGenerationTemplates(projectPath);
        try {
            project.refreshLocal(IResource.DEPTH_INFINITE, null);
        } catch (CoreException e) {
            logger.fatal(e);
        }
    }

    public String getPreference(IProject project, String key) {
        return designTimeExecuter.getPreferences(PathsUtil.toProjectOsLocation(project), key);
    }

    public String getPreference(File projectPath, String key) {
        return designTimeExecuter.getPreferences(projectPath, key);
    }

    public void reloadPreference(IProject project) {
        designTimeExecuter.reloadPreferences(PathsUtil.toProjectOsLocation(project));
    }

    public void savePreference(IProject project, String key, Boolean value) {
        if (value) {
            designTimeExecuter.savePreference(PathsUtil.toProjectOsLocation(project), key, "1");
        } else {
            designTimeExecuter.savePreference(PathsUtil.toProjectOsLocation(project), key, "0");
        }
    }

    public void savePreference(IProject project, String key, String value) {
        designTimeExecuter.savePreference(PathsUtil.toProjectOsLocation(project), key, value);
    }

    public void copyDesigntimeContext(IProject project) {
        File projectPath = PathsUtil.toOsLocation(project);
        designTimeExecuter.copyDesigntimeContext(projectPath);
        try {
            project.refreshLocal(IResource.DEPTH_INFINITE, null);
        } catch (CoreException e) {
            logger.fatal(e);
        }
    }

    public void generateRpcModel(final IFile sourceFile, IPackageFragmentRoot sourceDirectory, String packageDir,
            EntityUserInteraction<EntityDefinition<?>> entityUserInteraction, boolean generateAspect,
            String readAction, String navigation) throws GenerationException {
        File projectDirectory = PathsUtil.toOsLocation(sourceFile.getProject());
        File templatesDirectory = new File(projectDirectory, DesignTimeExecuterImpl.TEMPLATES_DIR);

        GenerateRpcModelRequest generateRpcRequest = new GenerateRpcModelRequest();
        generateRpcRequest.setPackageDirectory(PathsUtil.packageToPath(packageDir));
        generateRpcRequest.setProjectPath(projectDirectory);
        generateRpcRequest.setSourceDirectory(PathsUtil.toSourceDirectory(sourceDirectory));
        generateRpcRequest.setTemplatesDirectory(templatesDirectory);
        generateRpcRequest.setSourceFile(PathsUtil.toOsLocation(sourceFile));
        generateRpcRequest.setGenerateAspectJ(generateAspect);
        generateRpcRequest.setEntityUserInteraction(entityUserInteraction);
        generateRpcRequest.setReadAction(readAction);
        generateRpcRequest.setNavigation(navigation);
        designTimeExecuter.generateRpcModel(generateRpcRequest);

        Display.getDefault().asyncExec(new Runnable() {

            @Override
            public void run() {
                (new GlobalBuildAction(Activator.getActiveWorkbenchWindow(),
                        IncrementalProjectBuilder.INCREMENTAL_BUILD)).run();
            }
        });
    }

    public boolean isSupportControllerGeneration(IFile entityFile) {
        return designTimeExecuter.isSupportControllerGeneration(PathsUtil.toOsLocation(entityFile));
    }

    public String importFile(String workingDirPath, String host, String user, String pwd, String legacyFile,
            UserInteraction userInteraction) throws OpenLegacyException {
        ImportSourceRequest importSourceRequest = new ImportSourceRequest();
        importSourceRequest.setWorkingDirPath(workingDirPath);
        importSourceRequest.setHost(host);
        importSourceRequest.setUser(user);
        importSourceRequest.setPwd(pwd);
        importSourceRequest.setLegacyFile(legacyFile);
        importSourceRequest.setUserInteraction(userInteraction);
        designTimeExecuter.importSourceFile(importSourceRequest);

        Display.getDefault().asyncExec(new Runnable() {

            @Override
            public void run() {
                (new GlobalBuildAction(Activator.getActiveWorkbenchWindow(),
                        IncrementalProjectBuilder.INCREMENTAL_BUILD)).run();
            }
        });
        return importSourceRequest.getNewFileName();

    }

    public boolean isSupportServiceGeneration(IProject project) {
        return designTimeExecuter.isSupportServiceGeneration(PathsUtil.toOsLocation(project));
    }

    public void generateServiceFromEntity(IFile entityJavaFile, IPackageFragmentRoot sourceDirectory,
            String packageDir, final UserInteraction userInteraction, boolean generateTest, boolean generatePool) {
        IProject project = entityJavaFile.getProject();
        File projectPath = new File(PathsUtil.toOsLocation(project), DesignTimeExecuterImpl.TEMPLATES_DIR);

        GenerateServiceRequest generateServiceRequest = new GenerateServiceRequest();
        File javaFile = PathsUtil.toOsLocation(entityJavaFile);
        EntityDefinition<?> entityDefinition = designTimeExecuter.initEntityDefinition(javaFile);
        generateServiceRequest.setServiceType(
                entityDefinition instanceof ScreenEntityDefinition ? BackendSolution.SCREEN : BackendSolution.RPC);
        generateServiceRequest.getOutputParameters().add(new ServiceEntityParameter(entityDefinition));
        generateServiceRequest.setProjectPath(PathsUtil.toOsLocation(project));
        final String serviceName = FileUtils.fileWithoutExtension(entityJavaFile.getName());
        generateServiceRequest.setServiceName(serviceName);
        final File sourceDirectoryPath = PathsUtil.toSourceDirectory(sourceDirectory);
        generateServiceRequest.setSourceDirectory(sourceDirectoryPath);
        final String packagePath = PathsUtil.packageToPath(packageDir);
        generateServiceRequest.setPackageDirectory(packagePath);
        generateServiceRequest.setTemplatesDirectory(projectPath);
        generateServiceRequest.setUserInteraction(userInteraction);
        generateServiceRequest.setGenerateTest(generateTest);
        generateServiceRequest.setGeneratePool(generatePool);
        designTimeExecuter.generateService(generateServiceRequest);

        designTimeExecuter.addServiceOutputAnnotation(javaFile);

        userInteraction.open(new File(sourceDirectoryPath, packagePath + "/" + serviceName + "ServiceImpl.java"));
        userInteraction.open(new File(sourceDirectoryPath, packagePath + "/" + serviceName + "Service.java"));

    }

    public void generateScreenEntityResources(IFile trailFile, TerminalSnapshot snapshot, String entityName) {
        File projectDirectory = PathsUtil.toOsLocation(trailFile.getProject());
        IProject project = trailFile.getProject();
        String prefrenceSourceFolderPath = getPreference(project, PreferencesConstants.API_SOURCE_FOLDER);
        IJavaProject javaProject = JavaUtils.getJavaProjectFromIProject(project);
        IPackageFragmentRoot sourceDirectory = javaProject.getPackageFragmentRoot(prefrenceSourceFolderPath);

        String packageDir = getPreference(project, PreferencesConstants.API_PACKAGE);

        GenerateScreenModelRequest generateScreenRequest = new GenerateScreenModelRequest();
        generateScreenRequest.setProjectPath(projectDirectory);
        generateScreenRequest.setSourceDirectory(PathsUtil.toSourceDirectory(sourceDirectory));
        generateScreenRequest.setPackageDirectory(PathsUtil.packageToPath(packageDir));
        generateScreenRequest.setGenerateSnapshotImage(true);
        generateScreenRequest.setGenerateSnapshotText(true);
        generateScreenRequest.setGenerateSnapshotXml(true);
        generateScreenRequest.setTerminalSnapshots(new TerminalSnapshot[] { snapshot });

        designTimeExecuter.generateScreenEntityResources(entityName, generateScreenRequest);

        Display.getDefault().asyncExec(new Runnable() {

            @Override
            public void run() {
                (new GlobalBuildAction(Activator.getActiveWorkbenchWindow(),
                        IncrementalProjectBuilder.INCREMENTAL_BUILD)).run();
            }
        });
    }

    public void renameViews(String fileNoExtension, String newName, ICompilationUnit compilationUnit) {
        IResource resource = compilationUnit.getResource();
        if (resource instanceof IFile) {
            File javaFile = PathsUtil.toOsLocation(resource);
            designTimeExecuter.renameViews(fileNoExtension, newName, javaFile, resource.getFileExtension());
        }
    }

    public String translate(String text, File projectPath) {
        return designTimeExecuter.translate(text, projectPath);
    }

    public boolean isSupportDirectDeployment(IProject project) {
        IFile pomFile = project.getFile("pom.xml");
        if (!pomFile.exists()) {
            return false;
        }
        try {
            String content = IOUtils.toString(pomFile.getContents());
            return content.matches("(?s).*<packaging>war</packaging>.*");
        } catch (Exception e) {
            return false;
        }
    }

    public void obfuscateTrail(IFile trailFile) {
        designTimeExecuter.obfuscateTrail(PathsUtil.toOsLocation(trailFile));
    }

    public BackendSolution getServiceType(File projectPath) {
        return designTimeExecuter.getServiceType(projectPath);
    }

    public void generateService(GenerateServiceRequest request) {
        designTimeExecuter.generateService(request);
    }

    public boolean isSupportRestControllerGeneration(IFile file) {
        return designTimeExecuter.isSupportRestControllerGeneration(PathsUtil.toOsLocation(file));
    }

    public void generateRestController(IFile entitySourceFile, IPackageFragmentRoot sourceFolder, String packageDir,
            UserInteraction userInteraction) {
        File projectPath = new File(PathsUtil.toOsLocation(entitySourceFile.getProject()),
                DesignTimeExecuterImpl.TEMPLATES_DIR);

        GenerateControllerRequest generateControllerRequest = new GenerateControllerRequest();
        generateControllerRequest.setProjectPath(PathsUtil.toOsLocation(entitySourceFile.getProject()));
        generateControllerRequest.setEntitySourceFile(PathsUtil.toOsLocation(entitySourceFile));
        generateControllerRequest.setSourceDirectory(PathsUtil.toSourceDirectory(sourceFolder));
        if (!StringUtil.isEmpty(packageDir)) {
            generateControllerRequest.setPackageDirectory(PathsUtil.packageToPath(packageDir));
        }
        generateControllerRequest.setTemplatesDirectory(projectPath);
        generateControllerRequest.setUserInteraction(userInteraction);
        designTimeExecuter.generateRestController(generateControllerRequest);

    }
}