blob: 1e65f482bec54f061119d42d3dc0824b061c2f0d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.update.internal.core;
import java.util.*;
import org.eclipse.core.runtime.*;
import org.eclipse.update.core.*;
/**
* ContentConsumer Implementation for a FeatureExecutable
*/
public class FeatureExecutableContentConsumer extends FeatureContentConsumer {
private IFeature feature;
private boolean closed= false;
private boolean aborted= false;
private ISiteContentConsumer contentConsumer;
private IFeatureContentConsumer parent = null;
private List /* of IFeatureContentCOnsumer */ children;
/*
* @see IContentConsumer#open(INonPluginEntry)
*/
public IContentConsumer open(INonPluginEntry nonPluginEntry)
throws CoreException {
ContentConsumer cons = new NonPluginEntryContentConsumer(
getContentConsumer().open(nonPluginEntry));
return cons;
}
/*
* @see IContentConsumer#open(IPluginEntry)
*/
public IContentConsumer open(IPluginEntry pluginEntry) throws CoreException {
ContentConsumer cons = new PluginEntryContentConsumer(getContentConsumer().open(pluginEntry));
return cons;
}
/*
* @see IContentConsumer#addChild(IFeature)
*/
public void addChild(IFeature child) throws CoreException {
IFeatureContentConsumer childConsumer = child.getFeatureContentConsumer();
childConsumer.setParent(this);
if (children==null) children = new ArrayList();
children.add(childConsumer);
return;
}
/*
* @see IFeatureContentConsumer#store(ContentReference, IProgressMonitor)
*/
public void store(ContentReference contentReference, IProgressMonitor monitor)
throws CoreException {
getContentConsumer().store(contentReference, monitor);
}
/*
* @see IFeatureContentConsumer#close()
*/
public IFeatureReference close() throws CoreException {
if (!closed && getParent()!=null){
closed=true;
return null;
}
// parent consumer, log we are about to rename
// log files have been downloaded
if (getParent()==null){
ErrorRecoveryLog.getLog().append(ErrorRecoveryLog.ALL_INSTALLED);
}
IFeatureReference ref= null;
if (contentConsumer != null)
ref = contentConsumer.close();
// close nested feature
IFeatureContentConsumer[] children = getChildren();
for (int i = 0; i < children.length; i++) {
children[i].close();
}
return ref;
}
/*
* @see IFeatureContentConsumer#setFeature(IFeature)
*/
public void setFeature(IFeature feature) {
this.feature= feature;
}
/*
* Sets the parent
*/
public void setParent(IFeatureContentConsumer featureContentConsumer) {
this.parent= featureContentConsumer;
}
/*
* returns the Content Consumer for the feature
*
* Right now we are the only one to implement SiteContentConsumer
* Need to be exposed as API post v2.0
*/
private ISiteContentConsumer getContentConsumer() throws CoreException {
if (contentConsumer == null)
if (feature.getSite() instanceof SiteFile) {
SiteFile site= (SiteFile) feature.getSite();
contentConsumer= site.createSiteContentConsumer(feature);
} else {
throw new UnsupportedOperationException();
}
return contentConsumer;
}
/*
* @see IFeatureContentConsumer#abort()
*/
public void abort() throws CoreException {
if (aborted) return;
IFeatureContentConsumer[] children = getChildren();
for (int i = 0; i < children.length; i++) {
try {
children[i].abort();
} catch (Exception e){
//do Nothing
}
}
// do not close plugin and non plugin content consumer
// the contentConsumer will abort them
// we do not need to abort the NonPluginEntryContentConsumer and PluginEntryContentConsume
//implement the cleanup
if (contentConsumer!=null)
contentConsumer.abort();
aborted = true;
}
/*
* @see IFeatureContentConsumer#getFeature()
*/
public IFeature getFeature(){
return feature;
}
/*
* @see IFeatureContentConsumer#getParent()
*/
public IFeatureContentConsumer getParent(){
return parent;
}
/*
* @see IFeatureContentConsumer#getChildren()
*/
public IFeatureContentConsumer[] getChildren(){
if (children==null)
return new IFeatureContentConsumer[0];
return (IFeatureContentConsumer[]) children.toArray(arrayTypeFor(children));
}
}