package ru.naumen.servacc.platform;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import ru.naumen.servacc.exception.ServerAccessException;
import ru.naumen.servacc.settings.ListProvider;
import ru.naumen.servacc.settings.impl.DefaultConfiguration;
import ru.naumen.servacc.util.FileUtil;
/**
* @author Andrey Hitrin
* @since 31.01.13
*/
public class OS
{
private static final GUIOptions MAC_OS_X_LOOK = new GUIOptions(false, true, true);
private static final GUIOptions UNITY_LOOK = new GUIOptions(false, true, true);
private static final GUIOptions MAINSTREAM_LOOK = new GUIOptions(true, false, false);
private final Platform platform;
private final DefaultConfiguration configuration;
private final GUIOptions guiOptions;
public OS()
{
if (isMacOSX())
{
platform = new MacOsX();
guiOptions = MAC_OS_X_LOOK;
}
else if (isWindows())
{
platform = new Windows();
guiOptions = MAINSTREAM_LOOK;
}
else if (isUnityDesktop())
{
platform = new Linux();
guiOptions = UNITY_LOOK;
}
else
{
platform = new Linux();
guiOptions = MAINSTREAM_LOOK;
}
configuration = DefaultConfiguration.create(platform.getConfigDirectory());
}
private static boolean isMacOSX()
{
return "Mac OS X".equalsIgnoreCase(System.getProperty("os.name"));
}
private static boolean isWindows()
{
return System.getProperty("os.name").startsWith("Windows");
}
private static boolean isUnityDesktop()
{
return "Unity".equals(System.getenv("XDG_CURRENT_DESKTOP"));
}
public GUIOptions getGUIOptions()
{
return guiOptions;
}
public DefaultConfiguration getConfiguration()
{
return configuration;
}
public Command getBrowser()
{
return buildCommand(configuration.filterProperties("browser"), platform.defaultBrowser());
}
public Command getFTPBrowser()
{
return buildCommand(configuration.filterProperties("ftp"), platform.defaultFTPBrowser());
}
public Command getTerminal()
{
return buildCommand(configuration.filterProperties("terminal"), platform.defaultTerminal());
}
private Command buildCommand(ListProvider settingsProvider, Command defaultCommand)
{
Iterator<String> iterator = settingsProvider.list().iterator();
if (iterator.hasNext())
{
return new Command(iterator.next());
}
return defaultCommand;
}
public File getKeyStoreDirectory()
{
return platform.getKeyStoreDirectory();
}
public File getTempKeyStoreDirectory()
{
return platform.getTempKeyStoreDirectory();
}
public void initTempDirectories()
{
removeTempDirectories();
platform.getTempKeyStoreDirectory().mkdir();
}
public void removeTempDirectories()
{
try
{
FileUtil.deleteDirReqursivelyIfExists(platform.getTempKeyStoreDirectory());
}
catch (IOException e)
{
throw new ServerAccessException(e);
}
}
}