/*******************************************************************************
 * Copyright (c) 2014 Bosch Software Innovations GmbH and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Eclipse Distribution License v1.0 which accompany this distribution.
 *
 * The Eclipse Public License is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * The Eclipse Distribution License is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 * Bosch Software Innovations GmbH - Please refer to git log
 *
 *******************************************************************************/
package org.eclipse.vorto.api.common.project;

import java.lang.reflect.InvocationTargetException;

import org.eclipse.core.resources.IProject;


public class FunctionBlockProjectFactory implements IProjectFactory {

	private static FunctionBlockProjectFactory instance = null;

	private FunctionBlockProjectFactory() {

	}

	public static FunctionBlockProjectFactory getInstance() {
		if (instance == null) {
			instance = new FunctionBlockProjectFactory();
		}
		return instance;
	}

	public <T extends InfoModelProject, InfoModelProject> T getProject(
			IProject project, Class<T> projectClass) {
		try {
			return projectClass.getConstructor(IProject.class).newInstance(
					project);
		} catch (InstantiationException e) {
			throw new RuntimeException(
					"Problem instantiating information model project", e);
		} catch (IllegalAccessException e) {
			throw new RuntimeException(
					"Problem instantiating information model project", e);
		} catch (IllegalArgumentException e) {
			throw new RuntimeException(
					"Problem instantiating information model project", e);
		} catch (InvocationTargetException e) {
			throw new RuntimeException(
					"Problem instantiating information model project", e);
		} catch (NoSuchMethodException e) {
			throw new RuntimeException(
					"Problem instantiating information model project", e);
		} catch (SecurityException e) {
			throw new RuntimeException(
					"Problem instantiating information model project", e);
		}
	}

}
