blob: 7b0e74787fbd1c9390718b72bb5fd86a6ab8b4a0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 EfficiOS Inc., Philippe Proulx
*
* All rights reserved. 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 available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.tracecompass.internal.provisional.analysis.lami.core;
import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Date;
import java.util.Properties;
import org.eclipse.core.runtime.IPath;
import org.eclipse.tracecompass.internal.analysis.lami.core.Activator;
/**
* Utilities related to user-defined LAMI analysis configuration
* files.
*
* @author Philippe Proulx
*/
public final class LamiConfigUtils {
private static final String CONFIG_DIR = "user-defined-configs"; //$NON-NLS-1$
private LamiConfigUtils() {
// Do nothing
}
/**
* Returns the path of the directory, in the workspace, where
* configuration files are stored.
*
* @return Path to configuration directory
*/
public static Path getConfigDirPath() {
IPath path = Activator.instance().getStateLocation();
path = path.addTrailingSeparator().append(CONFIG_DIR);
/* Check if directory exists, otherwise create it */
final File dir = path.toFile();
if (!dir.exists() || !dir.isDirectory()) {
dir.mkdirs();
}
return checkNotNull(dir.toPath());
}
private static Path getConfigFilePath(String name) {
final Path configDirPath = getConfigDirPath();
String normName = name.replaceAll("\\s+", "-"); //$NON-NLS-1$ //$NON-NLS-2$
normName = normName.replaceAll("[^a-zA-Z0-9_]", ""); //$NON-NLS-1$ //$NON-NLS-2$
return checkNotNull(Paths.get(configDirPath.toString(), normName + ".properties")); //$NON-NLS-1$
}
/**
* Creates a new configuration file in the configuration directory.
*
* @param name
* Name of the external analysis
* @param command
* Command of the external analysis
* @return Path of created configuration file
* @throws IOException
* If the file cannot be found or read
*/
public static Path createConfigFile(String name, String command) throws IOException {
final Properties props = new Properties();
props.setProperty(LamiConfigFileStrings.PROP_NAME, name);
props.setProperty(LamiConfigFileStrings.PROP_COMMAND, command);
final Path configFilePath = getConfigFilePath(name);
if (Files.exists(configFilePath)) {
throw new IOException(String.format("Configuration file \"%s\" exists", configFilePath.toString())); //$NON-NLS-1$
}
try (final OutputStream out = Files.newOutputStream(configFilePath)) {
String userName = System.getProperty("user.name"); //$NON-NLS-1$
if (userName == null) {
userName = "unknown user"; //$NON-NLS-1$
}
final Date curDate = new Date();
final String comment = String.format("Trace Compass external analysis descriptor created by user %s on %s", userName, curDate); //$NON-NLS-1$
props.store(out, comment);
}
return configFilePath;
}
/**
* Removes the configuration file which corresponds to the analysis named
* {@code name}.
*
* @param name
* Analysis name
* @throws IOException
* If there was an error attempting to delete the file
*/
public static void removeConfigFile(String name) throws IOException {
Path configFilePath = getConfigFilePath(name);
Files.delete(configFilePath);
}
}