| /******************************************************************************* |
| * Copyright (c) 2009, 2011 IBM Corporation and others. |
| * |
| * This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.equinox.p2.internal.repository.tools.tasks; |
| |
| import java.util.Map; |
| import java.util.StringTokenizer; |
| import org.apache.tools.ant.BuildException; |
| import org.apache.tools.ant.Task; |
| import org.eclipse.equinox.p2.internal.repository.tools.Messages; |
| import org.eclipse.equinox.p2.internal.repository.tools.SlicingOptions; |
| import org.eclipse.osgi.util.NLS; |
| |
| public class SlicingOption extends Task { |
| |
| SlicingOptions options = null; |
| |
| public SlicingOption() { |
| options = new SlicingOptions(); |
| options.forceFilterTo(true); |
| options.considerStrictDependencyOnly(false); |
| options.everythingGreedy(true); |
| options.includeOptionalDependencies(true); |
| options.followOnlyFilteredRequirements(false); |
| options.installTimeLikeResolution(false); |
| setIncludeFeatures(true); |
| } |
| |
| /** |
| * Setting this to true will cause the optional dependencies to be considered. |
| */ |
| public void setIncludeOptional(boolean optional) { |
| options.includeOptionalDependencies(optional); |
| } |
| |
| /** |
| * |
| */ |
| public void setPlatformFilter(String platformFilter) { |
| if (platformFilter == null || platformFilter.trim().equals("")) //$NON-NLS-1$ |
| return; |
| if (platformFilter.equalsIgnoreCase("true")) { //$NON-NLS-1$ |
| options.forceFilterTo(true); |
| return; |
| } |
| if (platformFilter.equalsIgnoreCase("false")) { //$NON-NLS-1$ |
| options.forceFilterTo(false); |
| return; |
| } |
| StringTokenizer tok = new StringTokenizer(platformFilter, ","); //$NON-NLS-1$ |
| if (tok.countTokens() != 3) |
| throw new BuildException(NLS.bind(Messages.SlicingOption_invalid_platform, platformFilter)); |
| Map<String, String> filter = options.getFilter(); |
| filter.put("osgi.os", tok.nextToken().trim()); //$NON-NLS-1$ |
| filter.put("osgi.ws", tok.nextToken().trim()); //$NON-NLS-1$ |
| filter.put("osgi.arch", tok.nextToken().trim()); //$NON-NLS-1$ |
| options.setFilter(filter); |
| } |
| |
| public void setIncludeNonGreedy(boolean greed) { |
| options.everythingGreedy(greed); |
| } |
| |
| public void setIncludeFeatures(boolean includeFeatures) { |
| Map<String, String> filter = options.getFilter(); |
| filter.put("org.eclipse.update.install.features", String.valueOf(includeFeatures)); //$NON-NLS-1$ |
| options.setFilter(filter); |
| } |
| |
| public void setFilter(String filterString) { |
| if (filterString == null || filterString.trim().equals("")) //$NON-NLS-1$ |
| return; |
| Map<String, String> filter = options.getFilter(); |
| StringTokenizer tok = new StringTokenizer(filterString, ","); //$NON-NLS-1$ |
| while (tok.hasMoreTokens()) { |
| String rule = tok.nextToken().trim(); |
| int eqIndex = rule.indexOf('='); |
| if (eqIndex == -1) |
| throw new BuildException(NLS.bind(Messages.SlicingOption_invalidFilterFormat, rule)); |
| filter.put(rule.substring(0, eqIndex), rule.substring(eqIndex + 1)); |
| } |
| options.setFilter(filter); |
| } |
| |
| /** |
| * Set this property to true if only strict dependencies must be followed. A strict dependency is defined by a version range only including one version (e.g. [1.0.0.v2009, 1.0.0.v2009]) |
| * The default value is false. |
| */ |
| public void setFollowStrict(boolean strict) { |
| options.considerStrictDependencyOnly(strict); |
| } |
| |
| public void setFollowOnlyFilteredRequirements(boolean onlyFiltered) { |
| options.followOnlyFilteredRequirements(onlyFiltered); |
| } |
| |
| public void setLatestVersionOnly(boolean latest) { |
| options.latestVersionOnly(latest); |
| } |
| |
| public void setResolve(boolean resolve) { |
| options.installTimeLikeResolution(resolve); |
| } |
| |
| public SlicingOptions getOptions() { |
| return options; |
| } |
| |
| } |