blob: dc1ecd4fd3b5f4f2002f9f4793c76bd4236fb848 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2021, 2022 Hannes Wellmann 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:
* Hannes Wellmann - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.internal.core.ifeature;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.regex.Pattern;
import org.eclipse.core.runtime.Platform;
import org.eclipse.pde.core.target.ITargetDefinition;
class EnvironmentHelper {
private EnvironmentHelper() {
}
/** @see IEnvironment#matchesEnvironment(ITargetDefinition) */
static boolean matchesTargetEnvironment(IEnvironment environment, ITargetDefinition target) {
return matchesProperty(environment.getOS(), target, ITargetDefinition::getOS, Platform::getOS)
&& matchesProperty(environment.getWS(), target, ITargetDefinition::getWS, Platform::getWS)
&& matchesProperty(environment.getArch(), target, ITargetDefinition::getArch, Platform::getOSArch)
&& matchesProperty(environment.getNL(), target, ITargetDefinition::getNL, Platform::getNL);
}
private static final Pattern ENVIRONMENT_FILTER_ELEMENT_SEPARATOR = Pattern.compile(","); //$NON-NLS-1$
private static boolean matchesProperty(String filter, ITargetDefinition target,
Function<ITargetDefinition, String> targetGetter, Supplier<String> defaultValue) {
if (filter == null) {
return true;
}
String targetEnvironment = targetGetter.apply(target);
if (targetEnvironment == null) {
targetEnvironment = defaultValue.get();
}
return ENVIRONMENT_FILTER_ELEMENT_SEPARATOR.splitAsStream(filter).map(String::strip)
.anyMatch(targetEnvironment::equals);
}
}