/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package org.eclipse.stem.evolvingcrossspeciesmodel.presentation;

import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.stem.evolvingcrossspeciesmodel.util.EvolvingCrossSpeciesModelAdapterFactory;
import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapter;
import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapterFactory;
import org.eclipse.ui.IStartup;

/**
 * @generated
 */
public class EvolvingCrossSpeciesModelPropertyEditorAdapterFactory extends
		EvolvingCrossSpeciesModelAdapterFactory implements IStartup, DiseaseModelPropertyEditorAdapterFactory {

	/**
	 * @generated
	 */
	public EvolvingCrossSpeciesModelPropertyEditorAdapterFactory() {
		super();
		DiseaseModelPropertyEditorAdapterFactory.INSTANCE.addAdapterFactory(this);
	}

	/**
	 * @generated
	 */
	public void earlyStartup() {
		new EvolvingCrossSpeciesModelPropertyStringProviderAdapterFactory();
	}

	/**
	 * @generated
	 */
	@Override
	public Adapter createEvolvingCrossSpeciesModelAdapter() {
		return new EvolvingCrossSpeciesModelPropertyEditorAdapter();
	}
	

	/**
	 * @generated
	 */
	public boolean isFactoryForType(Object type) {
		boolean isType = super.isFactoryForType(type);
		isType = isType || type == DiseaseModelPropertyEditorAdapter.class;
		return isType;
	}
}