package org.eclipse.osbp.ecview.extension.grid.presentation.converter;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.osbp.ecview.core.common.context.IViewContext;
import org.eclipse.osbp.ecview.core.common.editpart.IConverterEditpart;
import org.eclipse.osbp.ecview.core.common.presentation.IConverterFactory;
import org.eclipse.osbp.ecview.extension.grid.editparts.converter.IGridNestedPropertyConverterEditpart;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridNestedConverter;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridRendererPackage;
import org.osgi.service.component.annotations.Component;

/**
 * A factory for creating Converter objects.
 */
@Component(immediate = true)
public class ConverterFactory implements IConverterFactory {

	@Override
	public boolean isFor(IViewContext uiContext, IConverterEditpart editpart) {
		EObject model = (EObject) editpart.getModel();
		return model.eClass().getEPackage() == CxGridRendererPackage.eINSTANCE;
	}

	@Override
	public Object createConverter(IViewContext uiContext, IConverterEditpart editpart) throws IllegalArgumentException {

		if (editpart instanceof IGridNestedPropertyConverterEditpart) {
			return new GridNestedPropertyConverter((IGridNestedPropertyConverterEditpart) editpart);
		}

		throw new IllegalArgumentException("Not a valid editpart: " + editpart.getClass().getName());
	}

}
