All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.roboconf.dm.internal.utils.ConfigurationUtils Maven / Gradle / Ivy

There is a newer version: 0.9.1
Show newest version
/**
 * Copyright 2014-2016 Linagora, Université Joseph Fourier, Floralis
 *
 * The present code is developed in the scope of the joint LINAGORA -
 * Université Joseph Fourier - Floralis research program and is designated
 * as a "Result" pursuant to the terms and conditions of the LINAGORA
 * - Université Joseph Fourier - Floralis research program. Each copyright
 * holder of Results enumerated here above fully & independently holds complete
 * ownership of the complete Intellectual Property rights applicable to the whole
 * of said Results, and may freely exploit it in any manner which does not infringe
 * the moral rights of the other copyright holders.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package net.roboconf.dm.internal.utils;

import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.Properties;
import java.util.logging.Logger;

import net.roboconf.core.Constants;
import net.roboconf.core.model.RuntimeModelIo;
import net.roboconf.core.model.RuntimeModelIo.InstancesLoadResult;
import net.roboconf.core.model.beans.Application;
import net.roboconf.core.model.beans.ApplicationTemplate;
import net.roboconf.core.model.beans.Graphs;
import net.roboconf.core.utils.IconUtils;
import net.roboconf.core.utils.Utils;
import net.roboconf.dm.management.ManagedApplication;

/**
 * @author Vincent Zurczak - Linagora
 */
public final class ConfigurationUtils {

	public static final String TEMPLATES = "application-templates";
	public static final String APPLICATIONS = "applications";
	public static final String TARGETS = "targets";

	public static final String INSTANCES_FILE = "current.instances";
	public static final String APP_BINDINGS_FILE = "application-bindings.properties";

	public static final String TARGETS_ASSOC_FILE = "targets-associations.properties";
	public static final String TARGETS_HINTS_SUFFIX = ".hints.properties";
	public static final String TARGETS_USAGE_SUFFIX = ".usage.properties";


	/**
	 * Private constructor.
	 */
	private ConfigurationUtils() {
		// nothing
	}


	/**
	 * @param applicationName an application name
	 * @param configurationDirectory the configuration directory
	 * @return a non-null file that should point to an application directory
	 */
	public static File findApplicationDirectory( String applicationName, File configurationDirectory ) {
		return new File( configurationDirectory, APPLICATIONS + "/" + applicationName );
	}


	/**
	 * Finds the directory that contains the files for an application template.
	 * @param tpl an application template
	 * @param configurationDirectory the DM's configuration directory
	 * @return a non-null file that should point to a directory
	 */
	public static File findTemplateDirectory( ApplicationTemplate tpl, File configurationDirectory ) {

		StringBuilder sb = new StringBuilder( TEMPLATES );
		sb.append( "/" );
		sb.append( tpl.getName());
		if( ! Utils.isEmptyOrWhitespaces( tpl.getQualifier())) {
			sb.append( " - " );
			sb.append( tpl.getQualifier());
		}

		return new File( configurationDirectory, sb.toString());
	}


	/**
	 * Saves the instances into a file.
	 * @param ma the application (not null)
	 */
	public static void saveInstances( ManagedApplication ma ) {
		saveInstances( ma.getApplication());
	}


	/**
	 * Saves the instances into a file.
	 * @param app the application (not null)
	 * @param configurationDirectory the configuration directory
	 */
	public static void saveInstances( Application app ) {

		File targetFile = new File( app.getDirectory(), Constants.PROJECT_DIR_INSTANCES + "/" + INSTANCES_FILE );
		try {
			Utils.createDirectory( targetFile.getParentFile());
			RuntimeModelIo.writeInstances( targetFile, app.getRootInstances());

		} catch( IOException e ) {
			Logger logger = Logger.getLogger( ConfigurationUtils.class.getName());
			logger.severe( "Failed to save instances. " + e.getMessage());
			Utils.logException( logger, e );
		}
	}


	/**
	 * Restores instances and set them in the application.
	 * @param ma the application
	 * @param configurationDirectory the configuration directory
	 */
	public static InstancesLoadResult restoreInstances( ManagedApplication ma ) {

		File sourceFile = new File( ma.getDirectory(), Constants.PROJECT_DIR_INSTANCES + "/" + INSTANCES_FILE );
		Graphs graphs = ma.getApplication().getTemplate().getGraphs();
		InstancesLoadResult result;
		if( sourceFile.exists())
			result = RuntimeModelIo.loadInstances( sourceFile, sourceFile.getParentFile(), graphs, ma.getApplication().getName());
		else
			result = new InstancesLoadResult();

		return result;
	}


	/**
	 * Finds the icon associated with an application template.
	 * @param name the application or template name
	 * @param qualifier the template qualifier or null for an application
	 * @param configurationDirectory the DM's configuration directory
	 * @return an existing file, or null if no icon was found
	 */
	public static File findIcon( String name, String qualifier, File configurationDirectory ) {

		// Deal with an invalid directory
		if( configurationDirectory == null )
			return null;

		// Find the root directory
		File root;
		if( ! Utils.isEmptyOrWhitespaces( qualifier )) {
			ApplicationTemplate tpl = new ApplicationTemplate( name ).qualifier( qualifier );
			root = ConfigurationUtils.findTemplateDirectory( tpl, configurationDirectory );
		} else {
			root = ConfigurationUtils.findApplicationDirectory( name, configurationDirectory );
		}

		// Find an icon in the directory
		return IconUtils.findIcon( root );
	}


	/**
	 * Loads the application bindings into an application.
	 * @param app a non-null application
	 * @param configurationDirectory the DM's configuration directory
	 */
	public static void loadApplicationBindings( Application app ) {

		File descDir = new File( app.getDirectory(), Constants.PROJECT_DIR_DESC );
		File appBindingsFile = new File( descDir, APP_BINDINGS_FILE );

		Logger logger = Logger.getLogger( ConfigurationUtils.class.getName());
		Properties props = Utils.readPropertiesFileQuietly( appBindingsFile, logger );
		for( Map.Entry entry : props.entrySet())
			app.applicationBindings.put((String) entry.getKey(), (String) entry.getValue());
	}


	/**
	 * Saves the application bindings into the DM's directory.
	 * @param app a non-null application
	 * @param configurationDirectory the DM's configuration directory
	 */
	public static void saveApplicationBindings( Application app ) {

		File descDir = new File( app.getDirectory(), Constants.PROJECT_DIR_DESC );
		File appBindingsFile = new File( descDir, APP_BINDINGS_FILE );

		Properties props = new Properties();
		props.putAll( app.applicationBindings );

		try {
			Utils.createDirectory( descDir );
			Utils.writePropertiesFile( props, appBindingsFile );

		} catch( IOException e ) {
			Logger logger = Logger.getLogger( ConfigurationUtils.class.getName());
			logger.severe( "Failed to save application bindings for " + app + ". " + e.getMessage());
			Utils.logException( logger, e );
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy