/***********************************************************************************
*
* Copyright (c) 2014 Kamil Baczkowicz
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* The Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
*
* Kamil Baczkowicz - initial API and implementation and/or initial documentation
*
*/
package pl.baczkowicz.mqttspy.configuration;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pl.baczkowicz.mqttspy.Main;
import pl.baczkowicz.mqttspy.common.generated.MessageLog;
import pl.baczkowicz.mqttspy.configuration.generated.UserInterfaceMqttConnectionDetails;
import pl.baczkowicz.mqttspy.utils.MqttConfigurationUtils;
import pl.baczkowicz.spy.storage.MessageList;
public class ConfigurationUtils
{
private final static Logger logger = LoggerFactory.getLogger(ConfigurationUtils.class);
public final static int DEFAULT_RECONNECTION_INTERVAL = 5000;
public static void populateConnectionDefaults(final UserInterfaceMqttConnectionDetails connection)
{
MqttConfigurationUtils.populateConnectionDefaults(connection);
if (connection.getMessageLog() == null)
{
connection.setMessageLog(new MessageLog());
MqttConfigurationUtils.populateMessageLogDefaults(connection.getMessageLog());
}
else
{
MqttConfigurationUtils.populateMessageLogDefaults(connection.getMessageLog());
}
if (connection.getMaxMessagesStored() == null)
{
connection.setMaxMessagesStored(MessageList.DEFAULT_MAX_SIZE);
}
if (connection.getMinMessagesStoredPerTopic() == null)
{
connection.setMinMessagesStoredPerTopic(MessageList.DEFAULT_MIN_MESSAGES_PER_TOPIC);
}
if (connection.isAutoOpen() == null)
{
connection.setAutoOpen(false);
}
if (connection.isAutoConnect() == null)
{
connection.setAutoConnect(true);
}
if (connection.isAutoSubscribe() == null)
{
connection.setAutoSubscribe(false);
}
}
public static void streamToFile (final InputStream input, final File output) throws IOException
{
try (FileOutputStream out = new FileOutputStream(output))
{
IOUtils.copy(input, out);
}
}
public static boolean createDefaultConfigFromFile(final File orig)
{
try
{
final File dest = ConfigurationManager.getDefaultConfigurationFile();
dest.mkdirs();
Files.copy(orig.toPath(), dest.toPath(), StandardCopyOption.REPLACE_EXISTING);
return true;
}
catch (IOException e)
{
// TODO: show warning dialog for invalid
logger.error("Cannot copy configuration file", e);
}
return false;
}
private static boolean copyFileFromClassPath(final InputStream orig, final File dest) throws IOException
{
ConfigurationManager.getDefaultHomeDirectoryFile().mkdirs();
ConfigurationUtils.streamToFile(orig, dest);
return true;
}
public static boolean createDefaultConfigFromClassPath(final String name)
{
final String origin = "/samples" + "/" + name + "-mqtt-spy-configuration.xml";
try
{
return copyFileFromClassPath(Main.class.getResourceAsStream(origin), ConfigurationManager.getDefaultConfigurationFile());
}
catch (IllegalArgumentException | IOException e)
{
// TODO: show warning dialog for invalid
logger.error("Cannot copy configuration file from {}", origin, e);
}
return false;
}
public static boolean createUiPropertyFileFromClassPath()
{
final String origin = "/samples" + ConfigurationManager.UI_PROPERTIES_FILE_NAME;
try
{
return copyFileFromClassPath(Main.class.getResourceAsStream(origin), ConfigurationManager.getUiPropertiesFile());
}
catch (IllegalArgumentException | IOException e)
{
// TODO: show warning dialog for invalid
logger.error("Cannot copy file from {}", origin, e);
}
return false;
}
}