blob: eee87497d7dbae4fd1fecda50efc0fb29b19f3c5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2015 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
/*
* Created on Oct 6, 2003
*/
package org.eclipse.pde.internal.ui.build;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.pde.internal.core.PDECore;
import org.eclipse.pde.internal.core.exports.SiteBuildOperation;
import org.eclipse.pde.internal.core.ifeature.IFeatureModel;
import org.eclipse.pde.internal.core.isite.ISiteFeature;
import org.eclipse.pde.internal.core.isite.ISiteModel;
import org.eclipse.pde.internal.core.site.WorkspaceSiteModel;
import org.eclipse.pde.internal.ui.*;
import org.eclipse.pde.internal.ui.editor.site.SiteEditor;
import org.eclipse.pde.internal.ui.util.PDEModelUtility;
import org.eclipse.ui.*;
import org.eclipse.ui.progress.IProgressConstants;
/**
* Generates an ant build file for an update site
*
*/
public class BuildSiteAction implements IObjectActionDelegate {
private ISiteModel fModel;
private IFile fSiteXML;
@Override
public void setActivePart(IAction action, IWorkbenchPart targetPart) {
}
@Override
public void run(IAction action) {
if (fModel == null)
return;
ISiteFeature[] sbFeatures = fModel.getSite().getFeatures();
IFeatureModel[] models = getFeatureModels(sbFeatures);
if (models.length > 0) {
try {
ensureContentSaved();
fModel.load();
} catch (CoreException e) {
PDEPlugin.logException(e);
}
Job job = new SiteBuildOperation(models, fModel, PDEUIMessages.BuildSiteJob_name);
job.setUser(true);
job.schedule();
job.setProperty(IProgressConstants.ICON_PROPERTY, PDEPluginImages.DESC_SITE_OBJ);
}
}
private IFeatureModel[] getFeatureModels(ISiteFeature[] sFeatures) {
ArrayList<IFeatureModel> list = new ArrayList<>();
for (int i = 0; i < sFeatures.length; i++) {
ISiteFeature siteFeature = sFeatures[i];
IFeatureModel model = PDECore.getDefault().getFeatureModelManager().findFeatureModelRelaxed(siteFeature.getId(), siteFeature.getVersion());
if (model != null)
list.add(model);
}
return list.toArray(new IFeatureModel[list.size()]);
}
@Override
public void selectionChanged(IAction action, ISelection selection) {
if (selection instanceof IStructuredSelection) {
Object obj = ((IStructuredSelection) selection).getFirstElement();
if (obj != null && obj instanceof IFile) {
fSiteXML = (IFile) obj;
fModel = new WorkspaceSiteModel(fSiteXML);
try {
fModel.load();
ISiteFeature[] features = fModel.getSite().getFeatures();
if (features.length <= 0)
action.setEnabled(false);
} catch (CoreException e) {
action.setEnabled(false);
}
}
}
}
private void ensureContentSaved() {
if (fModel != null && fModel.getUnderlyingResource() != null) {
IProject project = fModel.getUnderlyingResource().getProject();
final SiteEditor editor = PDEModelUtility.getOpenUpdateSiteEditor(project);
if (editor != null && editor.isDirty()) {
try {
IRunnableWithProgress op = new IRunnableWithProgress() {
@Override
public void run(IProgressMonitor monitor) {
editor.doSave(monitor);
}
};
PlatformUI.getWorkbench().getProgressService().runInUI(PDEPlugin.getActiveWorkbenchWindow(), op, PDEPlugin.getWorkspace().getRoot());
} catch (InvocationTargetException e) {
PDEPlugin.logException(e);
} catch (InterruptedException e) {
}
}
}
}
}