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