// DiseaseModelPropertyEditorAdapterFactory.java
package org.eclipse.stem.ui.graphgenerators.adapters.graphgeneratorpropertyeditor;

/******************************************************************************
 * 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.edit.provider.ComposedAdapterFactory;

/**
 * This class represents
 */
public interface IGraphGeneratorPropertyEditorAdapterFactory {

	GraphGeneratorPropertyEditorAdapterFactoryImpl INSTANCE = new GraphGeneratorPropertyEditorAdapterFactoryImpl();

	public class GraphGeneratorPropertyEditorAdapterFactoryImpl extends
			ComposedAdapterFactory implements
			IGraphGeneratorPropertyEditorAdapterFactory {

		@Override
		public boolean isFactoryForType(Object type) {
			return type == GraphGeneratorPropertyEditorAdapter.class;
		}

	} // GraphGeneratorPropertyEditorAdapterFactoryImpl
} // IGraphGeneratorPropertyEditorAdapterFactory
