| /* |
| * 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() {} |
| } |
| |
| } |