package org.goko.gcode.rs274ngcv3.ui.workspace.uiprovider.menu.gcodeprovider; import org.eclipse.jface.action.Action; import org.goko.common.dialog.GkDialog; import org.goko.core.common.exception.GkException; import org.goko.core.gcode.rs274ngcv3.IRS274NGCService; import org.goko.core.gcode.rs274ngcv3.element.GCodeProvider; import org.goko.core.gcode.rs274ngcv3.element.IModifier; import org.goko.core.log.GkLog; import org.goko.gcode.rs274ngcv3.ui.workspace.RS274WorkspaceService; import org.goko.gcode.rs274ngcv3.ui.workspace.uiprovider.IModifierUiProvider; public class CreateModifierAction extends Action{ /** LOG */ private static final GkLog LOG = GkLog.getLogger(CreateModifierAction.class); /** Modifier provider */ private IModifierUiProvider<?> modifierUiProvider; /** Target GCode provider */ private Integer idGCodeProvider; /** IRS274NGCService */ private IRS274NGCService rs274Service; /** * Constructor * @param rs274WorkspaceService the {@link RS274WorkspaceService} * @param idGCodeProvider the target GCodeProvider id */ public CreateModifierAction(IRS274NGCService rs274Service, IModifierUiProvider<?> modifierUiProvider, Integer idGCodeProvider) { super(modifierUiProvider.getModifierName()); this.modifierUiProvider = modifierUiProvider; this.idGCodeProvider = idGCodeProvider; this.rs274Service = rs274Service; } /** (inheritDoc) * @see org.eclipse.jface.action.Action#isEnabled() */ @Override public boolean isEnabled() { boolean locked = true; try { locked = rs274Service.getGCodeProvider(idGCodeProvider).isLocked(); } catch (GkException e) { LOG.error(e); } return !locked; } /** (inheritDoc) * @see org.eclipse.jface.action.Action#run() */ @Override public void run() { IModifier<GCodeProvider> modifier = null; try { modifier = modifierUiProvider.createDefaultModifier(idGCodeProvider); rs274Service.addModifier(modifier); } catch (GkException e) { if(modifier != null){ try { rs274Service.deleteModifier(modifier); } catch (GkException e1) { LOG.error(e1); } } LOG.error(e); GkDialog.openDialog(null, e); } } }