com.centurylink.mdw.plugin.project.RemoteWorkflowProjectWizard.java Source code

Java tutorial

Introduction

Here is the source code for com.centurylink.mdw.plugin.project.RemoteWorkflowProjectWizard.java

Source

/*
 * Copyright (C) 2017 CenturyLink, Inc.
 *
 * 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 com.centurylink.mdw.plugin.project;

import java.io.File;
import java.lang.reflect.InvocationTargetException;

import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchWindow;

import com.centurylink.mdw.dataaccess.file.VersionControlGit;
import com.centurylink.mdw.plugin.MdwPlugin;
import com.centurylink.mdw.plugin.PluginMessages;
import com.centurylink.mdw.plugin.designer.DesignerPerspective;
import com.centurylink.mdw.plugin.project.assembly.ProjectInflator;
import com.centurylink.mdw.plugin.project.model.VcsRepository;
import com.centurylink.mdw.plugin.project.model.WorkflowProject;
import com.centurylink.mdw.plugin.project.model.WorkflowProject.PersistType;

public class RemoteWorkflowProjectWizard extends Wizard implements INewWizard {
    public static final String WIZARD_ID = "mdw.designer.remote.project";

    private WorkflowProjectPage workflowProjectPage;

    public WorkflowProjectPage getWorkflowProjectPage() {
        return workflowProjectPage;
    }

    private RemoteHostInfoPage remoteHostInfoPage;

    public RemoteHostInfoPage getRemoteHostInfoPage() {
        return remoteHostInfoPage;
    }

    private GitRepositoryPage gitRepositoryPage;

    public GitRepositoryPage getGitRepositoryPage() {
        return gitRepositoryPage;
    }

    private DataSourcePage dataSourcePage;

    public DataSourcePage getDataSourcePage() {
        return dataSourcePage;
    }

    private WorkflowProject workflowProject;

    public WorkflowProject getProject() {
        return workflowProject;
    }

    public void setProject(WorkflowProject project) {
        this.workflowProject = project;
    }

    private IWorkbenchWindow activeWindow;

    public void init(IWorkbench workbench, IStructuredSelection selection) {
        activeWindow = workbench.getActiveWorkbenchWindow();
    }

    @Override
    public void addPages() {
        setDefaultPageImageDescriptor(MdwPlugin.getImageDescriptor("icons/mdw_wiz.png"));

        workflowProject = (WorkflowProject) new WorkflowProject.Factory().create();
        workflowProject.setRemote(true);

        workflowProjectPage = new WorkflowProjectPage();
        workflowProjectPage.setConfig(workflowProject);
        addPage(workflowProjectPage);

        remoteHostInfoPage = new RemoteHostInfoPage();
        remoteHostInfoPage.setConfig(workflowProject);
        addPage(remoteHostInfoPage);

        gitRepositoryPage = new GitRepositoryPage();
        gitRepositoryPage.setConfig(workflowProject);
        addPage(gitRepositoryPage);

        dataSourcePage = new DataSourcePage();
        dataSourcePage.setConfig(workflowProject);
        addPage(dataSourcePage);
    }

    @Override
    public boolean performFinish() {
        try {
            getContainer().run(false, false, new IRunnableWithProgress() {
                public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
                    monitor.beginTask("Creating workflow project", 100);
                    if (workflowProject.isFilePersist()) {
                        try {
                            File projectDir = new File(
                                    ResourcesPlugin.getWorkspace().getRoot().getLocation().toFile() + "/"
                                            + workflowProject.getName());
                            projectDir.mkdir();
                            String repositoryUrl = workflowProject.getMdwVcsRepository().getRepositoryUrl();
                            if (repositoryUrl != null && repositoryUrl.length() > 0) {
                                workflowProject.setPersistType(PersistType.Git);
                                workflowProject.getMdwVcsRepository().setProvider(VcsRepository.PROVIDER_GIT);
                                monitor.subTask("Cloning Git repository");
                                monitor.worked(10);
                                Platform.getBundle("org.eclipse.egit.ui").start(); // avoid
                                                                                   // Eclipse
                                                                                   // default
                                                                                   // Authenticator
                                monitor.worked(10);
                                VcsRepository gitRepo = workflowProject.getMdwVcsRepository();
                                VersionControlGit vcsGit = new VersionControlGit();
                                vcsGit.connect(gitRepo.getRepositoryUrl(), gitRepo.getUser(), gitRepo.getPassword(),
                                        projectDir);
                                vcsGit.cloneRepo();
                            } else {
                                File assetDir = new File(
                                        projectDir + "/" + workflowProject.getMdwVcsRepository().getLocalPath());
                                assetDir.mkdirs();
                            }
                        } catch (Exception ex) {
                            throw new InvocationTargetException(ex);
                        }
                    }
                    monitor.worked(50);
                    ProjectInflator projectInflator = new ProjectInflator(workflowProject, MdwPlugin.getSettings());
                    projectInflator.inflateRemoteProject(getContainer());
                    WorkflowProjectManager.addProject(workflowProject);
                    monitor.worked(25);

                    monitor.done();
                }
            });
        } catch (Exception ex) {
            PluginMessages.uiError(ex, "Remote Project", workflowProject);
            return false;
        }

        DesignerPerspective.promptForShowPerspective(activeWindow, workflowProject);
        return true;
    }

    @Override
    public boolean needsProgressMonitor() {
        return true;
    }

}