net.sourceforge.appgen.job.GenerateFileJob.java Source code

Java tutorial

Introduction

Here is the source code for net.sourceforge.appgen.job.GenerateFileJob.java

Source

/*
 * Copyright 2009 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package net.sourceforge.appgen.job;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import net.sourceforge.appgen.editor.MappingDataEditor;
import net.sourceforge.appgen.generator.AttachFileFileGenerator;
import net.sourceforge.appgen.generator.AttachFilePersisterFileGenerator;
import net.sourceforge.appgen.generator.AttachFilePropertyEditorFileGenerator;
import net.sourceforge.appgen.generator.BaseCriteriaFileGenerator;
import net.sourceforge.appgen.generator.BaseServiceFileGenerator;
import net.sourceforge.appgen.generator.ControllerFileGenerator;
import net.sourceforge.appgen.generator.CriteriaFileGenerator;
import net.sourceforge.appgen.generator.DaoClassFileGenerator;
import net.sourceforge.appgen.generator.DaoInterfaceFileGenerator;
import net.sourceforge.appgen.generator.DefaultMethodInvocationLoggerFileGenerator;
import net.sourceforge.appgen.generator.DefaultPagingFileGenerator;
import net.sourceforge.appgen.generator.DetailPageFileGenerator;
import net.sourceforge.appgen.generator.EditPageFileGenerator;
import net.sourceforge.appgen.generator.EntityFileGenerator;
import net.sourceforge.appgen.generator.FileGenerator;
import net.sourceforge.appgen.generator.FilenameGeneratorFileGenerator;
import net.sourceforge.appgen.generator.FormControllerFileGenerator;
import net.sourceforge.appgen.generator.IndexFileGenerator;
import net.sourceforge.appgen.generator.JdbcDriverFileGenerator;
import net.sourceforge.appgen.generator.JdbcPropertiesFileGenerator;
import net.sourceforge.appgen.generator.ListPageFileGenerator;
import net.sourceforge.appgen.generator.Log4jDtdFileGenerator;
import net.sourceforge.appgen.generator.Log4jXmlFileGenerator;
import net.sourceforge.appgen.generator.MessageKoPropertiesFileGenerator;
import net.sourceforge.appgen.generator.MessagePropertiesFileGenerator;
import net.sourceforge.appgen.generator.MethodInvocationInfoInterceptorFileGenerator;
import net.sourceforge.appgen.generator.MethodInvocationLoggerFileGenerator;
import net.sourceforge.appgen.generator.MethodInvocationLoggingAdviceFileGenerator;
import net.sourceforge.appgen.generator.PagingFileGenerator;
import net.sourceforge.appgen.generator.PomFileGenerator;
import net.sourceforge.appgen.generator.ResourcePropertiesFileGenerator;
import net.sourceforge.appgen.generator.ServiceClassFileGenerator;
import net.sourceforge.appgen.generator.ServiceInterfaceFileGenerator;
import net.sourceforge.appgen.generator.ServletXmlFileGenerator;
import net.sourceforge.appgen.generator.SqlMapConfigFileGenerator;
import net.sourceforge.appgen.generator.SqlMapFileGenerator;
import net.sourceforge.appgen.generator.StyleFileGenerator;
import net.sourceforge.appgen.generator.TagsFileGenerator;
import net.sourceforge.appgen.generator.UUIDFilenameGeneratorFileGenerator;
import net.sourceforge.appgen.generator.UploadSaveDirectoryGenerator;
import net.sourceforge.appgen.generator.ValidatorFileGenerator;
import net.sourceforge.appgen.generator.WebXmlFileGenerator;
import net.sourceforge.appgen.generator.WritePageFileGenerator;
import net.sourceforge.appgen.model.ConnectionInformation;
import net.sourceforge.appgen.model.Entity;
import net.sourceforge.appgen.model.GenerationInformation;
import net.sourceforge.appgen.model.MappingData;

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.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.actions.RefreshAction;
import org.eclipse.ui.console.MessageConsole;
import org.eclipse.ui.console.MessageConsoleStream;
import org.eclipse.ui.part.EditorPart;

/**
 * @author Byeongkil Woo
 */
public class GenerateFileJob extends Job {

    private EditorPart editor;

    private MappingData mappingData;

    public GenerateFileJob(MappingData mappingData, EditorPart editor, String text) {
        super(text);

        this.mappingData = mappingData;
        this.editor = editor;
    }

    @Override
    protected IStatus run(final IProgressMonitor monitor) {
        Display.getDefault().asyncExec(new Runnable() {
            public void run() {
                runInternal(monitor);
            }
        });

        return Status.OK_STATUS;
    }

    private void runInternal(IProgressMonitor monitor) {
        try {
            List<FileGenerator> fileGeneratorList = new ArrayList<FileGenerator>();

            ConnectionInformation connectionInformation = mappingData.getConnectionInformation();
            GenerationInformation generationInformation = mappingData.getGenerationInformation();
            List<Entity> entityList = mappingData.getEntityList();

            fileGeneratorList.add(new PomFileGenerator(generationInformation));
            fileGeneratorList.add(new WebXmlFileGenerator(generationInformation));
            fileGeneratorList.add(new ServletXmlFileGenerator(generationInformation, entityList));
            fileGeneratorList.add(new SqlMapConfigFileGenerator(generationInformation, entityList));
            fileGeneratorList.add(new Log4jDtdFileGenerator(generationInformation));
            fileGeneratorList.add(new Log4jXmlFileGenerator(generationInformation));
            fileGeneratorList.add(new MessagePropertiesFileGenerator(generationInformation));
            fileGeneratorList.add(new MessageKoPropertiesFileGenerator(generationInformation));

            fileGeneratorList.add(new JdbcPropertiesFileGenerator(generationInformation, connectionInformation));
            fileGeneratorList.add(new ResourcePropertiesFileGenerator(generationInformation));

            fileGeneratorList.add(new JdbcDriverFileGenerator(generationInformation, connectionInformation));

            fileGeneratorList.add(new BaseCriteriaFileGenerator(generationInformation));
            fileGeneratorList.add(new BaseServiceFileGenerator(generationInformation));
            fileGeneratorList.add(new PagingFileGenerator(generationInformation));

            fileGeneratorList.add(new UploadSaveDirectoryGenerator(generationInformation));
            fileGeneratorList.add(new AttachFileFileGenerator(generationInformation));
            fileGeneratorList.add(new AttachFilePersisterFileGenerator(generationInformation));
            fileGeneratorList.add(new AttachFilePropertyEditorFileGenerator(generationInformation));
            fileGeneratorList.add(new FilenameGeneratorFileGenerator(generationInformation));
            fileGeneratorList.add(new UUIDFilenameGeneratorFileGenerator(generationInformation));

            fileGeneratorList.add(new DefaultMethodInvocationLoggerFileGenerator(generationInformation));
            fileGeneratorList.add(new MethodInvocationInfoInterceptorFileGenerator(generationInformation));
            fileGeneratorList.add(new MethodInvocationLoggerFileGenerator(generationInformation));
            fileGeneratorList.add(new MethodInvocationLoggingAdviceFileGenerator(generationInformation));

            fileGeneratorList.add(new EntityFileGenerator(generationInformation));
            fileGeneratorList.add(new CriteriaFileGenerator(generationInformation));
            fileGeneratorList.add(new ValidatorFileGenerator(generationInformation));
            fileGeneratorList.add(new DaoInterfaceFileGenerator(generationInformation));
            fileGeneratorList.add(new DaoClassFileGenerator(generationInformation));
            fileGeneratorList.add(new SqlMapFileGenerator(generationInformation));
            fileGeneratorList.add(new ServiceInterfaceFileGenerator(generationInformation));
            fileGeneratorList.add(new ServiceClassFileGenerator(generationInformation));
            fileGeneratorList.add(new ControllerFileGenerator(generationInformation));
            fileGeneratorList.add(new FormControllerFileGenerator(generationInformation));

            fileGeneratorList.add(new StyleFileGenerator(generationInformation));
            fileGeneratorList.add(new TagsFileGenerator(generationInformation));
            fileGeneratorList.add(new DefaultPagingFileGenerator(generationInformation));

            fileGeneratorList.add(new IndexFileGenerator(generationInformation, entityList));
            fileGeneratorList.add(new ListPageFileGenerator(generationInformation));
            fileGeneratorList.add(new DetailPageFileGenerator(generationInformation));
            fileGeneratorList.add(new WritePageFileGenerator(generationInformation));
            fileGeneratorList.add(new EditPageFileGenerator(generationInformation));

            // IProgressMonitor monitor = editor.getEditorSite().getActionBars().getStatusLineManager().getProgressMonitor();

            monitor.beginTask("Generate soure files",
                    (entityList != null && entityList.size() > 0) ? entityList.size() * fileGeneratorList.size()
                            : 0);

            if (entityList != null && entityList.size() > 0) {
                boolean overwriteYesToAll = false;
                boolean overwriteNoToAll = false;

                List<File> generatedFileList = new ArrayList<File>();

                // outer:
                for (FileGenerator fileGenerator : fileGeneratorList) {
                    fileGenerator.generateDirectory();

                    for (Entity entity : entityList) {
                        monitor.subTask(fileGenerator.getFile(entity).getPath());

                        if (entity.isCreate()) {
                            try {
                                if (fileGenerator.existFile(entity)) {
                                    if (overwriteNoToAll) {
                                        continue;
                                    }

                                    if (!overwriteYesToAll) {
                                        boolean overwrite = false;

                                        MessageDialog overwriteDialog = new MessageDialog(
                                                editor.getSite().getShell(), "Question", null,
                                                "The file '" + fileGenerator.getFile(entity)
                                                        + "' already exists. Do you want to replace the existing file?",
                                                MessageDialog.WARNING,
                                                new String[] { IDialogConstants.YES_LABEL,
                                                        IDialogConstants.NO_LABEL,
                                                        IDialogConstants.YES_TO_ALL_LABEL,
                                                        IDialogConstants.NO_TO_ALL_LABEL },
                                                1);

                                        int value = overwriteDialog.open();

                                        switch (value) {
                                        case 0:
                                            overwrite = true;
                                            break;
                                        case 1:
                                            overwrite = false;
                                            break;
                                        case 2:
                                            overwrite = true;
                                            overwriteYesToAll = true;
                                            break;
                                        case 3:
                                            overwrite = false;
                                            overwriteNoToAll = true;
                                            break;
                                        default:
                                            overwriteNoToAll = true;
                                            break;
                                        }

                                        if (!overwrite) {
                                            continue;
                                        }
                                    }
                                }

                                entity.setPackageName(generationInformation.getPackageName());

                                File file = fileGenerator.generate(entity);

                                if (file != null) {
                                    generatedFileList.add(file);
                                }
                            } catch (Exception e) {
                                MessageDialog.openError(editor.getSite().getShell(), "Error - generate",
                                        e.getMessage());
                            }
                        }

                        monitor.worked(1);
                    }
                }

                printGeneratedFileList(generatedFileList);
            }

            RefreshAction refreshAction = new RefreshAction(editor.getEditorSite());
            refreshAction.refreshAll();

            monitor.done();
        } catch (Exception e) {
            MessageDialog.openError(editor.getSite().getShell(), "Generate file error", e.getMessage());
        } finally {
        }
    }

    private void printGeneratedFileList(List<File> generatedFileList) {
        if (generatedFileList == null) {
            return;
        }

        Collections.sort(generatedFileList);

        MappingDataEditor mappingDataEditor = (MappingDataEditor) editor;
        MessageConsole console = mappingDataEditor.getConsole();
        MessageConsoleStream out = console.newMessageStream();
        out.setActivateOnWrite(true);

        out.println(
                "---- AppGen: Generated information ----------------------------------------------------------------");
        out.println(generatedFileList.size() + " files generated.");
        out.println(
                "---- file list ------------------------------------------------------------------------------------");

        for (File file : generatedFileList) {
            out.println(file.toString());
        }

        out.println(
                "---------------------------------------------------------------------------------------------------");
    }

}