/**
*
*/
package org.goko.gcode.rs274ngcv3.ui.workspace.uiprovider;
import org.eclipse.e4.core.contexts.EclipseContextFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.swt.widgets.Composite;
import org.goko.core.common.exception.GkException;
import org.goko.core.gcode.rs274ngcv3.element.GCodeProvider;
import org.goko.core.gcode.rs274ngcv3.element.IModifier;
import org.goko.gcode.rs274ngcv3.ui.workspace.uiprovider.panel.IModifierPropertiesPanel;
import org.osgi.framework.FrameworkUtil;
/**
* @author PsyKo
* @date 16 janv. 2016
*/
public abstract class AbstractModifierUiProvider<T extends IModifier<GCodeProvider>> implements IModifierUiProvider<T>{
private Class<T> modifierClass;
/**
* @param modifierClass
*/
public AbstractModifierUiProvider(Class<T> modifierClass) {
super();
this.modifierClass = modifierClass;
}
/**
* Return the context for the UI component
* @return IEclipseContext
*/
protected IEclipseContext getContext(){
return EclipseContextFactory.getServiceContext(FrameworkUtil.getBundle(getClass()).getBundleContext());
}
/** (inheritDoc)
* @see org.goko.gcode.rs274ngcv3.ui.workspace.uiprovider.IModifierUiProvider#createConfigurationPanelFor(org.eclipse.swt.widgets.Composite, org.goko.core.gcode.rs274ngcv3.element.IModifier)
*/
@SuppressWarnings("unchecked")
@Override
public final IModifierPropertiesPanel<T> createConfigurationPanelFor(Composite parent, IModifier<?> modifier) throws GkException {
if(modifier.getClass().equals(modifierClass)){
IModifierPropertiesPanel<T> panel = createPropertiesPanelForModifier(parent, (T) modifier);
panel.setModifier((T)modifier);
panel.initializeFromModifier();
return panel;
}
return null;
}
protected abstract IModifierPropertiesPanel<T> createPropertiesPanelForModifier(Composite parent, T modifier) throws GkException;
}