/*
* Copyright (C) 2003-2011 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.services.jcr.ext.backup;
import java.net.MalformedURLException;
import java.net.URL;
/**
* Created by The eXo Platform SAS.
*
* <br>Date: 2011
*
* @author <a href="mailto:alex.reshetnyak@exoplatform.com.ua">Alex Reshetnyak</a>
* @version $Id$
*/
public class RepositoryChainLogPathHelper
{
private RepositoryChainLogPathHelper()
{
}
/**
* Will be returned relative path {name}/{name}.xml for all OS.
*
* @param path
* String, path to
* @param backupDirCanonicalPath
* String, path to backup dir
* @return String
* Will be returned relative path {name}/{name}.xml for all OS
* @throws MalformedURLException
*
*/
public static String getRelativePath(String path, String backupDirCanonicalPath) throws MalformedURLException
{
URL urlPath = new URL(resolveFileURL("file:" + path));
URL urlBackupDir = new URL(resolveFileURL("file:" + backupDirCanonicalPath));
return urlPath.toString().replace(urlBackupDir.toString() + "/", "");
}
/**
* Will be returned absolute path.
*
* @param relativePath
* String, relative path.
* @param backupDirCanonicalPath
* String, path to backup dir
* @return String
* Will be returned absolute path.
* @throws MalformedURLException
*/
public static String getPath(String relativePath, String backupDirCanonicalPath) throws MalformedURLException
{
String path = "file:" + backupDirCanonicalPath + "/" + relativePath;
URL urlPath = new URL(resolveFileURL(path));
return urlPath.getFile();
}
private static String resolveFileURL(String url)
{
// we ensure that we don't have windows path separator in the url
url = url.replace('\\', '/');
if (!url.startsWith("file:///"))
{
// The url is invalid, so we will fix it
// it happens when we use a path of type file://${path}, under
// linux or mac os the path will start with a '/' so the url
// will be correct but under windows we will have something
// like C:\ so the first '/' is missing
if (url.startsWith("file://"))
{
// The url is of type file://, so one '/' is missing
url = "file:///" + url.substring(7);
}
else if (url.startsWith("file:/"))
{
// The url is of type file:/, so two '/' are missing
url = "file:///" + url.substring(6);
}
else
{
// The url is of type file:, so three '/' are missing
url = "file:///" + url.substring(5);
}
}
return url;
}
}