blob: 34e5116e7f1be3fc6f3674cda5fdcad5a5c2c4c1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 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.model;
import java.net.*;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.update.core.*;
import org.eclipse.update.core.model.*;
import org.eclipse.update.internal.core.*;
/**
*
*/
public class ConfigurationPolicyModel extends ModelObject {
private int policy;
private Map /* of FeatureReferenceModel */configuredFeatureReferences;
private Map /* of FeatureReferenceModel */unconfiguredFeatureReferences;
// since 2.0.2
private ConfiguredSiteModel configuredSiteModel;
// since 2.1
private boolean enable;
/**
* Constructor for ConfigurationPolicyModel.
*/
public ConfigurationPolicyModel() {
super();
enable = true;
configuredFeatureReferences = new HashMap();
// unconfiguredFeatureReferences = new HashMap();
}
/**
* @since 2.0
*/
public int getPolicy() {
return policy;
}
/**
* Sets the policy.
* @param policy The policy to set
*/
public void setPolicy(int policy) {
assertIsWriteable();
this.policy = policy;
}
/**
* @since 2.0
*/
public FeatureReferenceModel[] getConfiguredFeaturesModel() {
if (configuredFeatureReferences==null || configuredFeatureReferences.isEmpty())
return new FeatureReferenceModel[0];
return (FeatureReferenceModel[]) configuredFeatureReferences.keySet().toArray(arrayTypeFor(configuredFeatureReferences.keySet()));
}
/**
* @since 2.0
*/
public FeatureReferenceModel[] getUnconfiguredFeaturesModel() {
// obtain unconfigured features by comparing configured ones with those installed
if (unconfiguredFeatureReferences == null
&& configuredSiteModel != null
&& configuredSiteModel.getSiteModel() != null) {
ISite site = (ISite) configuredSiteModel.getSiteModel();
ISiteFeatureReference[] siteFeatures = site.getFeatureReferences();
if (siteFeatures.length > getConfiguredFeaturesModel().length) {
for (int i=0; i<siteFeatures.length; i++) {
if (!(siteFeatures[i] instanceof SiteFeatureReference))
continue;
Iterator iterator = configuredFeatureReferences.keySet().iterator();
boolean found = false;
while(!found && iterator.hasNext()) {
FeatureReferenceModel f = (FeatureReferenceModel)iterator.next();
if (UpdateManagerUtils.sameURL(f.getURL(), siteFeatures[i].getURL()))
found = true;
}
if (!found)
addUnconfiguredFeatureReference((SiteFeatureReference)siteFeatures[i]);
}
}
}
if (unconfiguredFeatureReferences == null
|| unconfiguredFeatureReferences.isEmpty())
return new FeatureReferenceModel[0];
return (FeatureReferenceModel[]) unconfiguredFeatureReferences.keySet()
.toArray(arrayTypeFor(unconfiguredFeatureReferences.keySet()));
}
/**
* Gets the configuredSiteModel.
* @return Returns a ConfiguredSiteModel
* @since 2.0.2
*/
public ConfiguredSiteModel getConfiguredSiteModel() {
return configuredSiteModel;
}
/**
* Sets the configuredSiteModel.
* @param configuredSiteModel The configuredSiteModel to set
* @since 2.0.2
*/
public void setConfiguredSiteModel(ConfiguredSiteModel configuredSiteModel) {
this.configuredSiteModel = configuredSiteModel;
}
/**
*
*/
private boolean remove(FeatureReferenceModel feature, Map list) {
URL featureURL = feature.getURL();
boolean found = false;
Iterator iter = list.keySet().iterator();
while (iter.hasNext() && !found) {
FeatureReferenceModel element = (FeatureReferenceModel) iter.next();
if (UpdateManagerUtils.sameURL(element.getURL(),featureURL)) {
list.remove(element);
found = true;
}
}
return found;
}
/**
* returns an array of string corresponding to plugins file
*/
/*package*/
/**
*
*/
private void add(FeatureReferenceModel feature, Map list) {
URL featureURL = feature.getURL();
boolean found = false;
Iterator iter = list.keySet().iterator();
while (iter.hasNext() && !found) {
FeatureReferenceModel element = (FeatureReferenceModel) iter.next();
if (UpdateManagerUtils.sameURL(element.getURL(),featureURL)) {
found = true;
}
}
if (!found) {
list.put(feature,null);
} else {
UpdateCore.warn("Feature Reference :"+feature+" already part of the list."); //$NON-NLS-1$ //$NON-NLS-2$
}
}
/**
* adds a feature in the configuredReference list
* also used by the parser to avoid creating another activity
*/
public void addConfiguredFeatureReference(FeatureReferenceModel feature) {
assertIsWriteable();
if (configuredFeatureReferences == null)
this.configuredFeatureReferences = new HashMap();
if (!configuredFeatureReferences.containsKey(feature)){
//DEBUG:
if (UpdateCore.DEBUG && UpdateCore.DEBUG_SHOW_CONFIGURATION){
UpdateCore.debug("Configuring "+feature.getURLString()); //$NON-NLS-1$
}
this.add(feature, configuredFeatureReferences);
}
// when user configure a feature,
// we have to remove it from unconfigured feature if it exists
// because the user doesn't know...
if (unconfiguredFeatureReferences != null) {
boolean success = remove(feature, unconfiguredFeatureReferences);
if (!success)
UpdateCore.warn("Feature not part of Unconfigured list: "+feature.getURLString()); //$NON-NLS-1$
}
}
/**
* adds a feature in the list
* also used by the parser to avoid creating another activity
*/
public void addUnconfiguredFeatureReference(FeatureReferenceModel feature) {
assertIsWriteable();
if (unconfiguredFeatureReferences == null)
this.unconfiguredFeatureReferences = new HashMap();
if (!unconfiguredFeatureReferences.containsKey(feature)){
if (UpdateCore.DEBUG && UpdateCore.DEBUG_SHOW_CONFIGURATION){
UpdateCore.debug("Unconfiguring "+feature.getURLString()); //$NON-NLS-1$
}
this.add(feature, unconfiguredFeatureReferences);
}
// an unconfigured feature is always from a configured one no ?
// unless it was parsed right ?
if (configuredFeatureReferences != null) {
boolean success = remove(feature, configuredFeatureReferences);
if (!success)
UpdateCore.warn("Feature not part of Configured list: "+feature.getURLString()); //$NON-NLS-1$
}
}
/**
* removes a feature from any list
*/
public void removeFeatureReference(FeatureReferenceModel feature) {
assertIsWriteable();
if (unconfiguredFeatureReferences!=null){
boolean success = remove(feature, unconfiguredFeatureReferences);
if (!success)
UpdateCore.warn(feature.getURLString()+" not part of unconfigured list."); //$NON-NLS-1$
}
if (configuredFeatureReferences != null) {
boolean success = remove(feature, configuredFeatureReferences);
if (!success)
UpdateCore.warn(feature.getURLString()+" not part of configured list."); //$NON-NLS-1$
}
}
/**
* Sets the unconfiguredFeatureReferences.
* @param featureReferences The unconfiguredFeatureReferences to set
*/
protected void setUnconfiguredFeatureReferences(IFeatureReference[] featureReferences) {
unconfiguredFeatureReferences = new HashMap();
for (int i = 0; i < featureReferences.length; i++) {
unconfiguredFeatureReferences.put(featureReferences[i],null);
}
}
/**
* Sets the configuredFeatureReferences.
* @param featureReferences The configuredFeatureReferences to set
*/
protected void setConfiguredFeatureReferences(IFeatureReference[] featureReferences) {
configuredFeatureReferences = new HashMap();
for (int i = 0; i < featureReferences.length; i++) {
configuredFeatureReferences.put(featureReferences[i],null);
}
}
/**
* @return boolean
*/
public boolean isEnabled() {
return enable;
}
/**
* @param value
*/
public void setEnabled(boolean value) {
enable = value;
}
}