/**
 * Copyright (c) 2009-2010 Thales Corporate Services S.A.S.
 * 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:
 * Thales Corporate Services S.A.S - initial API and implementation
 */
package org.eclipse.egf.emf.wrapper;

import java.util.ArrayList;

import org.eclipse.emf.codegen.ecore.genmodel.generator.GenBaseGeneratorAdapter;

public class EgfEmfEditorTask extends EgfEmfAbstractTask {

	@Override
	protected ArrayList<String> getProjectTypeList() {
		ArrayList<String> projectTypeList = new ArrayList<String>();
		projectTypeList.add(GenBaseGeneratorAdapter.EDITOR_PROJECT_TYPE);
		return projectTypeList;
	}

}
