blob: d35f08cb047c07971cdb3b9e21aa394093941850 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 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
t https://www.eclipse.org/legal/epl-2.0/
t
t SPDX-License-Identifier: EPL-2.0
*
* Contributors: IBM Corporation - initial API and implementation
******************************************************************************/
package org.eclipse.pde.internal.build.site.compatibility;
import java.util.StringTokenizer;
import org.eclipse.core.runtime.Platform;
import org.eclipse.equinox.p2.publisher.eclipse.IPlatformEntry;
public class SiteManager {
private static String os;
private static String ws;
private static String arch;
private static String nl;
public static void setOS(String os) {
SiteManager.os = os;
}
public static void setWS(String ws) {
SiteManager.ws = ws;
}
public static void setArch(String arch) {
SiteManager.arch = arch;
}
public static void setNL(String nl) {
SiteManager.nl = nl;
}
public static String getOS() {
if (os == null)
os = Platform.getOS();
return os;
}
public static String getWS() {
if (ws == null)
ws = Platform.getWS();
return ws;
}
public static String getArch() {
if (arch == null)
arch = Platform.getOSArch();
return arch;
}
public static String getNL() {
if (nl == null)
nl = Platform.getNL();
return nl;
}
public static boolean isValidEnvironment(IPlatformEntry candidate) {
if (candidate == null)
return false;
String candidateOS = candidate.getOS();
String candidateWS = candidate.getWS();
String candidateArch = candidate.getArch();
String candiateNL = candidate.getNL();
if (candidateOS != null && !isMatching(candidateOS, SiteManager.getOS()))
return false;
if (candidateWS != null && !isMatching(candidateWS, SiteManager.getWS()))
return false;
if (candidateArch != null && !isMatching(candidateArch, SiteManager.getArch()))
return false;
if (candiateNL != null && !isMatchingLocale(candiateNL, SiteManager.getNL()))
return false;
return true;
}
private static boolean isMatching(String candidateValues, String siteValues) {
if (siteValues == null)
return false;
if ("*".equals(candidateValues))return true; //$NON-NLS-1$
if ("".equals(candidateValues))return true; //$NON-NLS-1$
StringTokenizer siteTokens = new StringTokenizer(siteValues, ","); //$NON-NLS-1$
//$NON-NLS-1$
while (siteTokens.hasMoreTokens()) {
StringTokenizer candidateTokens = new StringTokenizer(candidateValues, ","); //$NON-NLS-1$
String siteValue = siteTokens.nextToken();
while (candidateTokens.hasMoreTokens()) {
if (siteValue.equalsIgnoreCase(candidateTokens.nextToken()))
return true;
}
}
return false;
}
private static boolean isMatchingLocale(String candidateValues, String locale) {
if (locale == null)
return false;
if ("*".equals(candidateValues))return true; //$NON-NLS-1$
if ("".equals(candidateValues))return true; //$NON-NLS-1$
locale = locale.toUpperCase();
candidateValues = candidateValues.toUpperCase();
StringTokenizer stok = new StringTokenizer(candidateValues, ","); //$NON-NLS-1$
while (stok.hasMoreTokens()) {
String candidate = stok.nextToken();
if (locale.indexOf(candidate) == 0)
return true;
if (candidate.indexOf(locale) == 0)
return true;
}
return false;
}
}