blob: cf8436f9f441755ee4d94b6ab2a5a431662888b5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2006 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
*******************************************************************************/
package org.eclipse.update.internal.operations;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.update.configuration.IConfiguredSite;
import org.eclipse.update.core.IFeature;
import org.eclipse.update.operations.IOperation;
import org.eclipse.update.operations.IOperationListener;
public abstract class BatchFeatureOperation extends Operation implements IBatchFeatureOperation {
private IFeature[] features;
private IConfiguredSite[] targetSites;
public BatchFeatureOperation(IConfiguredSite[] targetSites, IFeature[] features) {
super();
this.features = features;
this.targetSites = targetSites;
}
public IFeature[] getFeatures() {
return features;
}
public IConfiguredSite[] getTargetSites() {
return targetSites;
}
public void setTargetSites(IConfiguredSite[] targetSites) {
this.targetSites = targetSites;
}
public boolean execute(IProgressMonitor pm, IOperationListener listener)
throws CoreException, InvocationTargetException {
if (getFeatures() == null || getFeatures().length == 0)
return false;
IOperation[] operations = new IOperation[getFeatures().length];
for ( int i = 0; i < getFeatures().length; i ++) {
operations[i] = createOperation(getTargetSites()[i], getFeatures()[i]);
}
boolean restartNeeded = false;
for ( int i = 0; i < operations.length; i ++) {
try {
boolean status = operations[i].execute(pm, listener);
if (status)
restartNeeded = true;
} catch (Throwable t) {
t.printStackTrace();
}
}
return restartNeeded;
}
protected abstract IOperation createOperation(IConfiguredSite targetSite, IFeature feature);
}