package org.eclipse.stem.ui.adapters.loggerpropertyeditor;

/*******************************************************************************
 * Copyright (c) 2008 IBM 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.stem.loggers.util.SimulationLoggerAdapterFactory;

public class SimulationLoggerPropertyEditorAdapterFactory extends
		SimulationLoggerAdapterFactory implements
		LoggerPropertyEditorAdapterFactory {

	public SimulationLoggerPropertyEditorAdapterFactory() {
		super();
		LoggerPropertyEditorAdapterFactory.INSTANCE
				.addAdapterFactory(this);
	}

//	@Override
//	public Adapter createStandardDiseaseModelAdapter() {
//		return new SimulationLoggerPropertyEditorAdapter();
//	}

	@Override
	public Adapter createSimulationLoggerAdapter() {
		return new SimulationLoggerPropertyEditorAdapter();
	}

	public boolean isFactoryForType(Object type) {
		return type == LoggerPropertyEditorAdapter.class
				|| super.isFactoryForType(type);
	}

} // StandardDiseaseModelPropertyEditorAdapterFactory
