/*******************************************************************************
* Copyright (c) 2011 Subgraph.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Subgraph - initial API and implementation
******************************************************************************/
package com.subgraph.vega.internal.paths;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.subgraph.vega.api.paths.IPathFinder;
public class PathFinder implements IPathFinder {
private final Logger logger = Logger.getLogger("paths");
private final Properties configProperties = new Properties();
@Override
public File getVegaDirectory() {
final File homeDirectory = new File(System.getProperty("user.home"));
return new File(homeDirectory, ".vega");
}
@Override
public File getWorkspaceDirectory() {
return new File(getVegaDirectory(), "workspaces");
}
@Override
public File getConfigFilePath() {
return new File(getVegaDirectory(), "config");
}
@Override
public File getDataDirectory() {
final File dataDirectoryFromConfig = getDataDirectoryFromConfig();
if(dataDirectoryFromConfig != null)
return dataDirectoryFromConfig;
if(isRunningInEclipse())
return getDataDirectoryForEclipseLaunch();
else
return getInstallDataDirectory();
}
private boolean isRunningInEclipse() {
return System.getProperty("osgi.dev") != null;
}
private File getDataDirectoryForEclipseLaunch() {
final String uglyHack = System.getProperty("osgi.splashPath");
final File splashPathFile = new File(fileURLTrim(uglyHack));
return splashPathFile.getParentFile().getParentFile();
}
private File getInstallDataDirectory() {
final String install = System.getProperty("osgi.install.area");
return new File(fileURLTrim(install));
}
private String fileURLTrim(String fileURL) {
return (fileURL.startsWith("file:")) ? (fileURL.substring(5)) : fileURL;
}
private File getDataDirectoryFromConfig() {
loadConfigProperties();
String pathProp = configProperties.getProperty("vega.scanner.datapath");
if(pathProp != null) {
final File dataDir = new File(pathProp);
if(dataDir.exists() && dataDir.isDirectory())
return dataDir;
}
return null;
}
private void loadConfigProperties() {
final File configFile = getConfigFilePath();
if(!configFile.exists() || !configFile.canRead()) {
return;
}
Reader r = null;
try {
r = new FileReader(configFile);
configProperties.clear();
configProperties.load(r);
} catch (IOException e) {
logger.log(Level.WARNING, "Error opening config file: "+ e.getMessage(), e);
} finally {
if(r != null) {
try {
r.close();
} catch (IOException e) {
logger.log(Level.WARNING, "Error closing config file: "+ e.getMessage(), e);
}
}
}
}
}