/*
* ApplicationUtils.java
*
* Copyright (C) 2009-12 by RStudio, Inc.
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.client.application;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.rstudio.core.client.Debug;
import org.rstudio.core.client.dom.WindowEx;
import org.rstudio.core.client.regex.Pattern;
import com.google.gwt.core.client.GWT;
import com.google.gwt.http.client.URL;
import com.google.gwt.user.client.Window;
public class ApplicationUtils
{
public static String getHostPageBaseURLWithoutContext(boolean includeSlash)
{
String replaceWith = includeSlash ? "/" : "";
String url = GWT.getHostPageBaseURL();
Pattern pattern = Pattern.create("/s/[A-Fa-f0-9]{5}[A-Fa-f0-9]{8}[A-Fa-f0-9]{8}/");
return pattern.replaceAll(url, replaceWith);
}
// Returns:
// < 0 if version1 is earlier than version 2
// 0 if version1 and version2 are the same
// > 0 if version1 is later than version 2
public static int compareVersions(String version1, String version2)
{
String[] v1parts = version1.split("\\.");
String[] v2parts = version2.split("\\.");
int numParts = Math.min(v1parts.length, v2parts.length);
for (int i = 0; i < numParts; i++)
{
int result = Integer.parseInt(v1parts[i]) -
Integer.parseInt(v2parts[i]);
if (result != 0)
return result;
}
return 0;
}
public static String getRemainingQueryString(List<String> removeKeys)
{
Map<String, List<String>> params = Window.Location.getParameterMap();
StringBuilder queryString = new StringBuilder();
String prefix = "";
for (Map.Entry<String, List<String>> entry : params.entrySet()) {
// skip keys we are supposed to remove
if (removeKeys.contains(entry.getKey()))
continue;
for (String val : entry.getValue()) {
queryString.append(prefix)
.append(URL.encodeQueryString(entry.getKey()))
.append('=');
if (val != null) {
queryString.append(URL.encodeQueryString(val));
}
prefix = "&";
}
}
// return string
return queryString.toString();
}
public static void removeQueryParam(String param)
{
ArrayList<String> params = new ArrayList<String>();
params.add(param);
removeQueryParams(params);
}
public static void removeQueryParams(List<String> removeKeys)
{
// determine the new URL
String url = GWT.getHostPageBaseURL();
String queryString = getRemainingQueryString(removeKeys);
if (queryString.length() > 0)
url = url + "?" + queryString;
// replace history state (try/catch in case the browser doesn't
// support this or has it disabled)
try
{
WindowEx.get().replaceHistoryState(url);
}
catch(Exception e)
{
Debug.logException(e);
}
}
}