org.apache.easyant4e.ivyde.extension.page.BuildLifecycleBlock.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.easyant4e.ivyde.extension.page.BuildLifecycleBlock.java

Source

/*
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You 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 org.apache.easyant4e.ivyde.extension.page;

import org.apache.easyant.core.report.PhaseReport;
import org.apache.easyant.core.report.TargetReport;
import org.apache.easyant4e.EasyAntConstants;
import org.apache.easyant4e.console.EasyAntConsole;
import org.apache.easyant4e.providers.ImageProvider;
import org.apache.easyant4e.services.EasyantProjectService;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.WorkspaceJob;
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.internal.ui.callhierarchy.HistoryListAction;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.forms.DetailsPart;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.MasterDetailsBlock;
import org.eclipse.ui.forms.SectionPart;
import org.eclipse.ui.forms.editor.FormPage;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;

import com.google.inject.Inject;

//import com.google.inject.Inject;

public class BuildLifecycleBlock extends MasterDetailsBlock {
    private FormPage page;

    private BuildLifeCycleContentProvider buildLifeCycleContentProvider;
    private BuildLifecycleLabelProvider buildLifecycleLabelProvider;
    private EasyantProjectService easyantProjectService;
    private PhaseDetailsPage phaseDetailsPage;
    private TargetDetailsPage targetDetailsPage;
    private EasyAntConsole console;
    private ImageProvider imageProvider;
    private boolean enableInfoLogLevel = false;
    private boolean enableVerboseLogLevel = false;
    private boolean enableDebugLogLevel = false;

    public BuildLifecycleBlock() {
    }

    @Inject
    public void setImageProvider(ImageProvider imageProvider) {
        this.imageProvider = imageProvider;
    }

    @Inject
    public void setConsole(EasyAntConsole console) {
        this.console = console;
    }

    @Inject
    public void setPhaseDetailsPage(PhaseDetailsPage phaseDetailsPage) {
        this.phaseDetailsPage = phaseDetailsPage;
    }

    @Inject
    public void setTargetDetailsPage(TargetDetailsPage targetDetailsPage) {
        this.targetDetailsPage = targetDetailsPage;
    }

    @Inject
    public void setEasyantProjectService(EasyantProjectService easyantProjectService) {
        this.easyantProjectService = easyantProjectService;
    }

    @Inject
    public void setBuildLifecycleLabelProvider(BuildLifecycleLabelProvider buildLifecycleLabelProvider) {
        this.buildLifecycleLabelProvider = buildLifecycleLabelProvider;
    }

    @Inject
    public void setBuildLifeCycleContentProvider(BuildLifeCycleContentProvider buildLifeCycleContentProvider) {
        this.buildLifeCycleContentProvider = buildLifeCycleContentProvider;
    }

    public void setPage(FormPage page) {
        this.page = page;
    }

    @Override
    protected void createMasterPart(final IManagedForm managedForm, final Composite parent) {
        createBuildLifecyclePart(managedForm, parent);
    }

    protected void createBuildLifecyclePart(final IManagedForm managedForm, final Composite parent) {
        FormToolkit toolkit = managedForm.getToolkit();
        Section section = toolkit.createSection(parent, Section.DESCRIPTION | Section.TITLE_BAR);
        section.setText("Build Lifecycle");
        section.setDescription("The build lifecycle has the following build phases:");
        section.marginWidth = 10;
        section.marginHeight = 5;
        Composite client = toolkit.createComposite(section, SWT.WRAP);
        GridLayout layout = new GridLayout();
        layout.numColumns = 2;
        layout.marginWidth = 2;
        layout.marginHeight = 2;
        client.setLayout(layout);
        toolkit.paintBordersFor(client);

        section.setClient(client);
        final SectionPart spart = new SectionPart(section);
        managedForm.addPart(spart);
        TreeViewer viewer = new TreeViewer(client);
        GridData gd = new GridData(GridData.FILL_BOTH);
        gd.heightHint = 20;
        gd.widthHint = 100;
        viewer.getTree().setLayoutData(gd);
        viewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                managedForm.fireSelectionChanged(spart, event.getSelection());
            }
        });
        viewer.addDoubleClickListener(new IDoubleClickListener() {
            public void doubleClick(DoubleClickEvent event) {
                ISelection selection = event.getSelection();
                if (selection instanceof StructuredSelection) {
                    StructuredSelection structuredSelection = (StructuredSelection) selection;
                    if (!structuredSelection.isEmpty()) {
                        Object o = structuredSelection.getFirstElement();
                        if (o instanceof PhaseReport) {
                            runPhase((PhaseReport) o);
                        } else if (o instanceof TargetReport) {
                            runTarget((TargetReport) o);
                        }
                    }
                }
            }
        });
        viewer.setContentProvider(buildLifeCycleContentProvider);
        viewer.setLabelProvider(buildLifecycleLabelProvider);
        viewer.setInput(page.getEditor().getEditorInput());
        // viewer.expandAll();
    }

    private void runPhase(final PhaseReport phase) {
        Job job = new WorkspaceJob("Easyant running phase " + phase.getName() + "...") {
            @Override
            public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
                easyantProjectService.runBuild(getProject(), phase.getName(), getLogLevel(), monitor);
                return Status.OK_STATUS;
            }
        };
        job.schedule();
    }

    private void runTarget(final TargetReport target) {
        Job job = new WorkspaceJob("Easyant running target " + target.getName() + "...") {
            @Override
            public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
                easyantProjectService.runBuild(getProject(), target.getName(), getLogLevel(), monitor);
                return Status.OK_STATUS;
            }
        };
        job.schedule();
    }

    private int getLogLevel() {
        int logLevel = EasyAntConstants.ANT_LOGLEVEL_WARN;
        if (enableInfoLogLevel) {
            logLevel = EasyAntConstants.ANT_LOGLEVEL_INFO;
        }
        if (enableVerboseLogLevel) {
            logLevel = EasyAntConstants.ANT_LOGLEVEL_VERBOSE;
        }
        if (enableDebugLogLevel) {
            logLevel = EasyAntConstants.ANT_LOGLEVEL_DEBUG;
        }
        return logLevel;
    }

    protected void registerPages(DetailsPart detailsPart) {
        phaseDetailsPage.setProject(getProject());
        detailsPart.registerPage(PhaseReport.class, phaseDetailsPage);
        targetDetailsPage.setProject(getProject());
        detailsPart.registerPage(TargetReport.class, targetDetailsPage);
    }

    @Override
    protected void createToolBarActions(IManagedForm managedForm) {
        final ScrolledForm form = managedForm.getForm();
        Action setLogLevelAction = new LogLevelDropDownAction();
        form.getToolBarManager().add(setLogLevelAction);
    }

    private IProject getProject() {
        if (page.getEditor().getEditorInput() instanceof IFileEditorInput) {
            IFileEditorInput fileEditorInput = (IFileEditorInput) page.getEditor().getEditorInput();
            IFile ivyFile = fileEditorInput.getFile();
            return ivyFile.getProject();
        }
        return null;
    }

    private class LogLevelDropDownAction extends Action implements IMenuCreator {
        private Menu menu;

        public LogLevelDropDownAction() {
            super("setDebugLogLevel", Action.AS_DROP_DOWN_MENU);
            setMenuCreator(this);
            setToolTipText("Set the log level in console view.");
            setImageDescriptor(imageProvider.getDebugLogLevelImage());
        }

        public Menu getMenu(Menu parent) {
            return null;
        }

        public Menu getMenu(Control parent) {
            if (menu == null) {
                menu = new Menu(parent);
                MenuItem info = new MenuItem(menu, SWT.CHECK);
                info.setText("INFO");
                info.addSelectionListener(new SelectionListener() {
                    public void widgetSelected(SelectionEvent e) {
                        enableInfoLogLevel = !enableInfoLogLevel;
                        phaseDetailsPage.setLogLevel(getLogLevel());
                        targetDetailsPage.setLogLevel(getLogLevel());
                    }

                    public void widgetDefaultSelected(SelectionEvent e) {
                    }
                });
                MenuItem verbose = new MenuItem(menu, SWT.CHECK);
                verbose.setText("VERBOSE");
                verbose.addSelectionListener(new SelectionListener() {
                    public void widgetSelected(SelectionEvent e) {
                        enableVerboseLogLevel = !enableVerboseLogLevel;
                        phaseDetailsPage.setLogLevel(getLogLevel());
                        targetDetailsPage.setLogLevel(getLogLevel());
                    }

                    public void widgetDefaultSelected(SelectionEvent e) {
                    }
                });
                MenuItem debug = new MenuItem(menu, SWT.CHECK);
                debug.setText("DEBUG");
                debug.addSelectionListener(new SelectionListener() {
                    public void widgetSelected(SelectionEvent e) {
                        enableDebugLogLevel = !enableDebugLogLevel;
                        phaseDetailsPage.setLogLevel(getLogLevel());
                        targetDetailsPage.setLogLevel(getLogLevel());
                    }

                    public void widgetDefaultSelected(SelectionEvent e) {
                    }
                });
            }
            return menu;
        }

        public void dispose() {
            if (menu != null) {
                menu.dispose();
                menu = null;
            }
        }

        public void run() {
        }
    }

}