/**
 * 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 org.apache.atlas.odf.core.store;

import org.apache.atlas.odf.core.configuration.ConfigContainer;

public class DefaultConfigurationStorage implements ODFConfigurationStorage {

	@Override
	public void storeConfig(ConfigContainer container) {

	}

	@Override
	public ConfigContainer getConfig(ConfigContainer defaultConfiguration) {
		return defaultConfiguration;
	}

	@Override
	public void onConfigChange(ConfigContainer container) {

	}

	@Override
	public void addPendingConfigChange(String changeId) {

	}

	@Override
	public void removePendingConfigChange(String changeId) {

	}

	@Override
	public boolean isConfigChangePending(String changeId) {
		return false;
	}

}
