/*******************************************************************************
* Copyright (c) 2007, 2013 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials
* are 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:
* Intel Corporation - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.settings.model.extension.impl;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.core.settings.model.extension.CConfigurationData;
import org.eclipse.cdt.core.settings.model.extension.CConfigurationDataProvider;
import org.eclipse.cdt.core.settings.model.util.CDataSerializer;
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
public class CDefaultConfigurationDataProvider extends CConfigurationDataProvider {
private static final String DEFAULT_STORAGE_ID = "defaultConfigurationDataProvider"; //$NON-NLS-1$
@Override
public CConfigurationData applyConfiguration(ICConfigurationDescription cfgDescription,
ICConfigurationDescription baseCfgDescription, CConfigurationData baseData,
IProgressMonitor monitor) throws CoreException {
ICStorageElement el = getStorageElement(cfgDescription, true);
CDataSerializer serializer = getDataSerializer();
serializer.store(baseData, el);
return baseData;
}
@Override
public CConfigurationData createConfiguration(ICConfigurationDescription cfgDescription,
ICConfigurationDescription baseCfgDescription, CConfigurationData baseData,
boolean clone, IProgressMonitor monitor) throws CoreException {
CDataFactory factory = getDataFactory();
return factory.createConfigurationdata(cfgDescription.getId(), cfgDescription.getName(), baseData, clone);
}
@Override
public CConfigurationData loadConfiguration(ICConfigurationDescription cfgDescription, IProgressMonitor monitor) throws CoreException {
ICStorageElement el = getStorageElement(cfgDescription, false);
if(el != null) {
CDataSerializer serializer = getDataSerializer();
CDataFactory factory = getDataFactory();
try {
return serializer.loadConfigurationData(factory, el);
} catch (CoreException e) {
if(cfgDescription.isPreferenceConfiguration())
return createPreferenceConfig(factory);
throw e;
}
} else if (cfgDescription.isPreferenceConfiguration()) {
return createPreferenceConfig(getDataFactory());
}
return null;
}
@Override
public void removeConfiguration(ICConfigurationDescription cfgDescription, CConfigurationData data, IProgressMonitor monitor) {
//do nothing
}
protected CDataFactory getDataFactory() {
return CDataFactory.getDefault();
}
protected CDataSerializer getDataSerializer() {
return CDataSerializer.getDefault();
}
protected String getStorageId() {
return DEFAULT_STORAGE_ID;
}
protected ICStorageElement getStorageElement(ICConfigurationDescription cfgDescription, boolean create) throws CoreException {
return cfgDescription.getStorage(getStorageId(), create);
}
protected CConfigurationData createPreferenceConfig(CDataFactory factory) {
return CDataUtil.createEmptyData(null, "preference", factory, true); //$NON-NLS-1$
}
}