blob: 66f2680135dfef0b25ca346cf102bdba5d102a7b [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.pde.internal.core.text.bundle;
import org.eclipse.osgi.util.ManifestElement;
import org.eclipse.pde.internal.core.ICoreConstants;
import org.eclipse.pde.internal.core.bundle.BundlePluginBase;
import org.osgi.framework.Constants;
public class RequireBundleObject extends PDEManifestElement {
private static final long serialVersionUID = 1L;
public RequireBundleObject(ManifestHeader header, String value) {
super(header, value);
}
public RequireBundleObject(ManifestHeader header, ManifestElement manifestElement) {
super(header, manifestElement);
}
public void setId(String id) {
String old = getId();
setValue(id);
fHeader.update();
firePropertyChanged(this, fHeader.getName(), old, id);
}
public String getId() {
return getValue();
}
public void setVersion(String version) {
String old = getVersion();
// Reset the previous value
setAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE, null);
// Parse the version String into segments
String[] values = ManifestElement.getArrayFromList(version);
// If there are values, add them
if ((values != null) && (values.length > 0)) {
for (int i = 0; i < values.length; i++) {
addAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE, values[i]);
}
}
fHeader.update();
firePropertyChanged(this, Constants.BUNDLE_VERSION_ATTRIBUTE, old, version);
}
public String getVersion() {
String[] versionSegments = getAttributes(Constants.BUNDLE_VERSION_ATTRIBUTE);
StringBuffer version = new StringBuffer();
if (versionSegments == null) {
return null;
} else if (versionSegments.length == 0) {
return null;
} else if (versionSegments.length == 1) {
version.append(versionSegments[0]);
} else if (versionSegments.length == 2) {
version.append(versionSegments[0]);
version.append(',');
version.append(versionSegments[1]);
}
return version.toString();
}
public void setOptional(boolean optional) {
boolean old = isOptional();
int bundleManifestVersion = BundlePluginBase.getBundleManifestVersion(fHeader.getBundle());
if (optional) {
if (bundleManifestVersion > 1)
setDirective(Constants.RESOLUTION_DIRECTIVE, Constants.RESOLUTION_OPTIONAL);
else
setAttribute(ICoreConstants.OPTIONAL_ATTRIBUTE, "true"); //$NON-NLS-1$
} else {
if (bundleManifestVersion > 1)
setDirective(Constants.RESOLUTION_DIRECTIVE, null);
else
setAttribute(ICoreConstants.OPTIONAL_ATTRIBUTE, null);
}
fHeader.update();
firePropertyChanged(this, Constants.RESOLUTION_DIRECTIVE, Boolean.toString(old), Boolean.toString(optional));
}
public boolean isOptional() {
int bundleManifestVersion = BundlePluginBase.getBundleManifestVersion(fHeader.getBundle());
if (bundleManifestVersion > 1)
return Constants.RESOLUTION_OPTIONAL.equals(getDirective(Constants.RESOLUTION_DIRECTIVE));
return "true".equals(getAttribute(ICoreConstants.OPTIONAL_ATTRIBUTE)); //$NON-NLS-1$
}
public void setReexported(boolean export) {
boolean old = isReexported();
int bundleManifestVersion = BundlePluginBase.getBundleManifestVersion(fHeader.getBundle());
if (export) {
if (bundleManifestVersion > 1)
setDirective(Constants.VISIBILITY_DIRECTIVE, Constants.VISIBILITY_REEXPORT);
else
setAttribute(ICoreConstants.REPROVIDE_ATTRIBUTE, "true"); //$NON-NLS-1$
} else {
if (bundleManifestVersion > 1)
setDirective(Constants.VISIBILITY_DIRECTIVE, null);
else
setAttribute(ICoreConstants.REPROVIDE_ATTRIBUTE, null);
}
fHeader.update();
firePropertyChanged(this, Constants.VISIBILITY_DIRECTIVE, Boolean.toString(old), Boolean.toString(export));
}
public boolean isReexported() {
int bundleManifestVersion = BundlePluginBase.getBundleManifestVersion(fHeader.getBundle());
if (bundleManifestVersion > 1)
return Constants.VISIBILITY_REEXPORT.equals(getDirective(Constants.VISIBILITY_DIRECTIVE));
return "true".equals(getAttribute(ICoreConstants.REPROVIDE_ATTRIBUTE)); //$NON-NLS-1$
}
}