blob: 18ad5431bd6a4552bdc50883a5034e506fa2935f [file] [log] [blame]
/**
*
* Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
*
* 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:
* Florian Pirchner - Initial implementation
*
*/
package org.eclipse.osbp.ecview.extension.grid.editparts.emf;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.osbp.ecview.core.common.context.IViewContext;
import org.eclipse.osbp.ecview.core.common.editpart.IEditPartManager;
import org.eclipse.osbp.ecview.core.common.editpart.IElementEditpart;
import org.eclipse.osbp.ecview.core.common.editpart.emf.ElementEditpart;
import org.eclipse.osbp.ecview.core.common.editpart.emf.common.AbstractEditpartManager;
import org.eclipse.osbp.ecview.core.common.model.core.YElement;
import org.eclipse.osbp.ecview.extension.grid.CxGrid;
import org.eclipse.osbp.ecview.extension.grid.CxGridColumn;
import org.eclipse.osbp.ecview.extension.grid.CxGridDelegateCellStyleGenerator;
import org.eclipse.osbp.ecview.extension.grid.CxGridFooterRow;
import org.eclipse.osbp.ecview.extension.grid.CxGridHeaderRow;
import org.eclipse.osbp.ecview.extension.grid.CxGridMetaCell;
import org.eclipse.osbp.ecview.extension.grid.CxGridPackage;
import org.eclipse.osbp.ecview.extension.grid.editparts.emf.renderer.GridBooleanRendererEditpart;
import org.eclipse.osbp.ecview.extension.grid.editparts.emf.renderer.GridButtonRendererEditpart;
import org.eclipse.osbp.ecview.extension.grid.editparts.emf.renderer.GridDateRendererEditpart;
import org.eclipse.osbp.ecview.extension.grid.editparts.emf.renderer.GridDelegateRendererEditpart;
import org.eclipse.osbp.ecview.extension.grid.editparts.emf.renderer.GridHtmlRendererEditpart;
import org.eclipse.osbp.ecview.extension.grid.editparts.emf.renderer.GridImageRendererEditpart;
import org.eclipse.osbp.ecview.extension.grid.editparts.emf.renderer.GridIndicatorRendererEditpart;
import org.eclipse.osbp.ecview.extension.grid.editparts.emf.renderer.GridNumberRendererEditpart;
import org.eclipse.osbp.ecview.extension.grid.editparts.emf.renderer.GridPriceRendererEditpart;
import org.eclipse.osbp.ecview.extension.grid.editparts.emf.renderer.GridProgressbarRendererEditpart;
import org.eclipse.osbp.ecview.extension.grid.editparts.emf.renderer.GridQuantityRendererEditpart;
import org.eclipse.osbp.ecview.extension.grid.editparts.emf.renderer.GridTextRendererEditpart;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridBooleanRenderer;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridButtonRenderer;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridDateRenderer;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridDelegateRenderer;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridHtmlRenderer;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridImageRenderer;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridIndicatorRenderer;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridNumberRenderer;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridPriceRenderer;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridProgressBarRenderer;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridQuantityRenderer;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridRendererPackage;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridTextRenderer;
import org.osgi.service.component.ComponentContext;
import org.osgi.service.component.annotations.Component;
/**
* An implementation of IEditPartManager for eObjects with
* nsURI=http://eclipse.org/emf/emfclient/uimodel.
*/
@Component(immediate = true, service = { IEditPartManager.class })
public class EditpartManager extends AbstractEditpartManager {
/**
* Activate.
*
* @param context
* the context
*/
protected void activate(ComponentContext context) {
}
/**
* Deactivate.
*
* @param context
* the context
*/
protected void deactivate(ComponentContext context) {
}
/* (non-Javadoc)
* @see org.eclipse.osbp.ecview.core.common.editpart.IEditPartManager#isFor(java.lang.Object)
*/
@Override
public boolean isFor(Object element) {
if (element instanceof EObject) {
String uriString = ((EObject) element).eClass().getEPackage()
.getNsURI();
return uriString.equals(CxGridPackage.eNS_URI)
|| uriString.equals(CxGridRendererPackage.eNS_URI);
} else if (element instanceof String) {
return element.equals(CxGridPackage.eNS_URI)
|| element.equals(CxGridRendererPackage.eNS_URI);
}
return false;
}
/**
* Creates a new instance of the edit part.
*
* @param <A>
* an instance of {@link IElementEditpart}
* @param yElement
* the model element
* @return editpart
*/
@SuppressWarnings("unchecked")
protected <A extends IElementEditpart> A createEditpart(IViewContext context, Object yElement) {
// asserts that no editpart was created already for the given element
assertOneEditpartForModelelement(yElement);
ElementEditpart<YElement> result = null;
if (yElement instanceof CxGrid) {
result = createNewInstance(GridEditpart.class);
} else if (yElement instanceof CxGridColumn) {
result = createNewInstance(GridColumnEditpart.class);
} else if (yElement instanceof CxGridDelegateCellStyleGenerator) {
result = createNewInstance(GridDelegateCellStyleGeneratorEditpart.class);
} else if (yElement instanceof CxGridHeaderRow) {
result = createNewInstance(GridHeaderRowEditpart.class);
} else if (yElement instanceof CxGridFooterRow) {
result = createNewInstance(GridFooterRowEditpart.class);
} else if (yElement instanceof CxGridMetaCell) {
result = createNewInstance(GridMetaCellEditpart.class);
} else if (yElement instanceof CxGridDateRenderer) {
result = createNewInstance(GridDateRendererEditpart.class);
} else if (yElement instanceof CxGridButtonRenderer) {
result = createNewInstance(GridButtonRendererEditpart.class);
} else if (yElement instanceof CxGridHtmlRenderer) {
result = createNewInstance(GridHtmlRendererEditpart.class);
} else if (yElement instanceof CxGridImageRenderer) {
result = createNewInstance(GridImageRendererEditpart.class);
} else if (yElement instanceof CxGridNumberRenderer) {
result = createNewInstance(GridNumberRendererEditpart.class);
} else if (yElement instanceof CxGridProgressBarRenderer) {
result = createNewInstance(GridProgressbarRendererEditpart.class);
} else if (yElement instanceof CxGridTextRenderer) {
result = createNewInstance(GridTextRendererEditpart.class);
} else if (yElement instanceof CxGridDelegateRenderer) {
result = createNewInstance(GridDelegateRendererEditpart.class);
} else if (yElement instanceof CxGridBooleanRenderer) {
result = createNewInstance(GridBooleanRendererEditpart.class);
} else if (yElement instanceof CxGridQuantityRenderer) {
result = createNewInstance(GridQuantityRendererEditpart.class);
} else if (yElement instanceof CxGridPriceRenderer) {
result = createNewInstance(GridPriceRendererEditpart.class);
} else if (yElement instanceof CxGridIndicatorRenderer) {
result = createNewInstance(GridIndicatorRendererEditpart.class);
}
if (result != null) {
result.initialize(context,(YElement) yElement);
}
return (A) result;
}
/**
* Returns a new instance of the type.
*
* @param type
* The type of the editpart for which an instance should be
* created.
* @return editPart
* @throws InstantiationException
* e
* @throws IllegalAccessException
* e
*/
protected IElementEditpart newInstance(
Class<? extends IElementEditpart> type)
throws InstantiationException, IllegalAccessException {
try {
Constructor<? extends IElementEditpart> c = type
.getDeclaredConstructor(new Class<?>[0]);
if (!c.isAccessible()) {
c.setAccessible(true);
return c.newInstance(new Object[0]);
}
} catch (NoSuchMethodException e) {
throw new IllegalStateException(e);
} catch (SecurityException e) {
throw new IllegalStateException(e);
} catch (IllegalArgumentException e) {
throw new IllegalStateException(e);
} catch (InvocationTargetException e) {
throw new IllegalStateException(e);
}
return type.newInstance();
}
}