/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.model.ui.templates.configuration; import java.util.HashMap; import org.eclipse.core.resources.IProject; import org.jboss.tools.common.model.ui.templates.model.MetaElementFactory; public class MetaConfigurationManager { static MetaConfigurationManager instance = new MetaConfigurationManager(); public static MetaConfigurationManager getInstance() { return instance; } private MetaConfigurationLoader loader = new MetaConfigurationLoader(); private MetaConfiguration extensionConfiguration; private MetaConfiguration globalConfiguration; private HashMap<String,MetaConfiguration> projectConfigurations = new HashMap<String,MetaConfiguration>(); public MetaConfiguration getExtensionConfiguration() { if(extensionConfiguration == null) { extensionConfiguration = createExtensionConfiguration(); } return extensionConfiguration; } public MetaConfiguration getGlobalConfiguration() { if(globalConfiguration == null) { globalConfiguration = createGlobalConfiguration(); } return globalConfiguration; } public MetaConfiguration getProjectConfiguration(IProject project) { MetaConfiguration projectConfiguration = (MetaConfiguration)projectConfigurations.get(project.getName()); if(projectConfiguration == null) { projectConfiguration = createProjectConfiguration(project); projectConfigurations.put(project.getName(), projectConfiguration); } return projectConfiguration; } public MetaConfiguration getWorkingCopy(final MetaConfiguration source) { final MetaConfiguration c = MetaElementFactory.instance.createConfiguraton(source); c.setSaveAgent(new IMetaConfigurationSave() { public void save() { c.commitToParent(); source.save(); } }); return c; } private MetaConfiguration createExtensionConfiguration() { MetaConfiguration c = MetaElementFactory.instance.createConfiguraton(null); loader.loadExtensionConfiguration(c); return c; } private MetaConfiguration createGlobalConfiguration() { final MetaConfiguration c = MetaElementFactory.instance.createConfiguraton(getExtensionConfiguration()); loader.loadGlobalConfiguration(c); c.setSaveAgent(new IMetaConfigurationSave() { public void save() { loader.saveGlobalConfiguration(c); } }); return c; } private MetaConfiguration createProjectConfiguration(final IProject p) { final MetaConfiguration c = MetaElementFactory.instance.createConfiguraton(getGlobalConfiguration()); loader.loadProjectConfiguration(c, p); c.setSaveAgent(new IMetaConfigurationSave() { public void save() { loader.saveProjectConfiguration(c, p); } }); return c; } public void saveGlobalConfiguration() { loader.saveGlobalConfiguration(globalConfiguration); } public void saveProjectConfiguration(IProject p) { loader.saveProjectConfiguration(getProjectConfiguration(p), p); } }