blob: 240091bfc499148cfb45c9913e9b50de3fa74491 [file] [log] [blame]
package org.eclipse.update.internal.core;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
/**
*/
import org.eclipse.core.internal.boot.update.*;
import org.eclipse.core.internal.boot.LaunchInfo;
public class UMSessionDefinerReferenceUpdate implements ISessionDefiner {
/**
* UMUpdaterCached constructor comment.
*/
public UMSessionDefinerReferenceUpdate() {
super();
}
/**
* Creates one or more operations for the current parcel.
*/
public void defineComponentOperation(UMSessionManagerParcel parcel, IInstallable descriptor, boolean bVerifyJars) {
IComponentDescriptor componentDescriptor = null;
if (descriptor instanceof IComponentDescriptor) {
componentDescriptor = (IComponentDescriptor) descriptor;
}
else if (descriptor instanceof IComponentEntryDescriptor) {
componentDescriptor = ((IComponentEntryDescriptor) descriptor).getComponentDescriptor();
}
if (componentDescriptor == null)
return;
UMSessionManagerOperation operation = null;
// Create download operation
//--------------------------
operation = parcel.createOperation();
operation.setAction(UpdateManagerConstants.OPERATION_COPY);
operation.setId(componentDescriptor.getUniqueIdentifier());
operation.setSource(componentDescriptor.getDownloadURL().toExternalForm());
String downloadTarget = UMEclipseTree.getStagingArea().toExternalForm() + componentDescriptor.getDirName() + ".jar";
operation.setTarget(downloadTarget);
operation.setData(descriptor);
// Create jar verification operation
//----------------------------------
if (bVerifyJars == true) {
operation = parcel.createOperation();
operation.setAction(UpdateManagerConstants.OPERATION_VERIFY_JAR);
operation.setId(componentDescriptor.getUniqueIdentifier());
operation.setSource(downloadTarget);
operation.setTarget(null);
operation.setData(descriptor);
}
// Create apply operation for component files (files not in plugins/ dir structure)
//---------------------------------------------------------------------------------
operation = parcel.createOperation();
operation.setAction(UpdateManagerConstants.OPERATION_UNZIP_INSTALL);
operation.setId(componentDescriptor.getUniqueIdentifier());
operation.setSource(downloadTarget);
String applyTarget = UMEclipseTree.getBaseInstallURL().toExternalForm();
// String applyTarget = "file:///c:/temp/x/" ;
operation.setTarget(applyTarget);
operation.setData(descriptor);
// Create apply operation for plug-ins
//------------------------------------
IPluginEntryDescriptor[] plugins = componentDescriptor.getPluginEntries();
IFragmentEntryDescriptor[] fragments = componentDescriptor.getFragmentEntries();
if ((plugins.length > 0) || (fragments.length >0)) {
operation = parcel.createOperation();
operation.setAction(UpdateManagerConstants.OPERATION_UNZIP_PLUGINS);
operation.setId(componentDescriptor.getUniqueIdentifier());
operation.setSource(downloadTarget);
// by specifiying the install dir with a trailing slash, the unzip method
// will just unzip the contents of the jar into the dir
applyTarget = UMEclipseTree.getBaseInstallURL().toExternalForm();
// applyTarget = "file:///c:/temp/x/" ;
operation.setTarget(applyTarget);
operation.setData(descriptor);
}
}
/**
* Creates one or more operations for the current session.
*/
public void defineOperations(UMSessionManagerSession session, IInstallable[] descriptors, boolean bVerifyJars) {
for (int i = 0; i < descriptors.length; ++i) {
// Products
//---------
if (descriptors[i] instanceof IProductDescriptor) {
UMSessionManagerParcel parcel = null;
// Create parcel
//--------------
parcel = session.createParcel();
parcel.setType(IManifestAttributes.PRODUCT);
parcel.setAction(UpdateManagerConstants.OPERATION_ACTION_INSTALL);
parcel.setId(((IProductDescriptor) descriptors[i]).getUniqueIdentifier());
parcel.setData((IProductDescriptor) descriptors[i]);
defineProductOperation(parcel, descriptors[i], bVerifyJars);
}
// Components
//-----------
else if (descriptors[i] instanceof IComponentDescriptor) {
UMSessionManagerParcel parcel = null;
// Create parcel
//--------------
parcel = session.createParcel();
parcel.setType(IManifestAttributes.COMPONENT);
parcel.setAction(UpdateManagerConstants.OPERATION_ACTION_INSTALL);
parcel.setId(((IComponentDescriptor) descriptors[i]).getUniqueIdentifier());
parcel.setData((IComponentDescriptor) descriptors[i]);
defineComponentOperation(parcel, descriptors[i], bVerifyJars);
}
// Component Entries
//------------------
else if (descriptors[i] instanceof IComponentEntryDescriptor) {
UMSessionManagerParcel parcel = null;
// Create parcel
//--------------
parcel = session.createParcel();
parcel.setType(IManifestAttributes.COMPONENT);
parcel.setAction(UpdateManagerConstants.OPERATION_ACTION_INSTALL);
parcel.setId(((IComponentEntryDescriptor) descriptors[i]).getUniqueIdentifier());
parcel.setData((IComponentEntryDescriptor) descriptors[i]);
defineComponentOperation(parcel, descriptors[i], bVerifyJars);
}
}
}
/**
* Creates one or more operations for the current parcel.
*/
public void defineProductOperation(UMSessionManagerParcel parcel, IInstallable descriptor, boolean bVerifyJars) {
IProductDescriptor productDescriptor = (IProductDescriptor) descriptor;
UMSessionManagerOperation operation = null;
// Create download operation
//--------------------------
operation = parcel.createOperation();
operation.setAction(UpdateManagerConstants.OPERATION_COPY);
operation.setId(productDescriptor.getUniqueIdentifier());
operation.setSource(productDescriptor.getDownloadURL().toExternalForm());
String downloadTarget = UMEclipseTree.getStagingArea().toString() + productDescriptor.getDirName() + ".jar";
operation.setTarget(downloadTarget);
operation.setData(productDescriptor);
// Create jar verification operation
//----------------------------------
if (bVerifyJars == true) {
operation = parcel.createOperation();
operation.setAction(UpdateManagerConstants.OPERATION_VERIFY_JAR);
operation.setId(productDescriptor.getUniqueIdentifier());
operation.setSource(downloadTarget);
operation.setTarget(null);
operation.setData(productDescriptor);
}
// Create apply operation for product files
//-----------------------------------------
operation = parcel.createOperation();
operation.setAction(UpdateManagerConstants.OPERATION_UNZIP_INSTALL);
operation.setId(productDescriptor.getUniqueIdentifier());
operation.setSource(downloadTarget);
String applyTarget = UMEclipseTree.getBaseInstallURL().toExternalForm();
operation.setTarget(applyTarget);
operation.setData(productDescriptor);
// Create component sub-parcels
//-----------------------------
IComponentEntryDescriptor[] entries = productDescriptor.getComponentEntries();
for (int j = 0; j < entries.length; ++j) {
if (entries[j].isSelected()) {
UMSessionManagerParcel subparcel = null;
// Create parcel for each component
//---------------------------------
subparcel = parcel.createParcel();
subparcel.setType(IManifestAttributes.COMPONENT);
subparcel.setAction(UpdateManagerConstants.OPERATION_ACTION_INSTALL);
subparcel.setId(entries[j].getUniqueIdentifier());
subparcel.setData(entries[j]);
defineComponentOperation(subparcel, entries[j], bVerifyJars);
}
}
// Create apply operation for product files
//-----------------------------------------
String app = LaunchInfo.getCurrent().getApplicationConfigurationIdentifier();
if ((app != null) && (app.equals(productDescriptor.getUniqueIdentifier()))) { // dominant app?
operation = parcel.createOperation();
operation.setAction(UpdateManagerConstants.OPERATION_UNZIP_BINDIR);
operation.setId(productDescriptor.getUniqueIdentifier());
operation.setSource(downloadTarget);
operation.setTarget(applyTarget);
operation.setData(productDescriptor);
}
}
}