/** * */ package org.goko.tools.macro.part.management; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.inject.Inject; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.eclipse.core.databinding.observable.list.WritableList; import org.eclipse.e4.core.services.events.IEventBroker; import org.goko.common.bindings.AbstractController; import org.goko.core.common.exception.GkException; import org.goko.core.gcode.rs274ngcv3.element.source.StringGCodeSource; import org.goko.core.log.GkLog; import org.goko.tools.editor.GCodeEditorTopic; import org.goko.tools.macro.bean.GCodeMacro; import org.goko.tools.macro.document.GCodeMacroDocument; import org.goko.tools.macro.service.DefaultGCodeMacroService; import org.goko.tools.macro.service.IGCodeMacroServiceListener; import org.osgi.service.event.Event; import org.osgi.service.event.EventAdmin; /** * @author Psyko * @date 17 oct. 2016 */ public class MacroManagementController extends AbstractController<MacroManagementModel> implements IGCodeMacroServiceListener{ private static final GkLog LOG = GkLog.getLogger(MacroManagementController.class); @Inject private DefaultGCodeMacroService macroService; /** Event admin */ @Inject private EventAdmin eventAdmin; /** * @param binding */ public MacroManagementController() { super(new MacroManagementModel()); } /** (inheritDoc) * @see org.goko.common.bindings.AbstractController#initialize() */ @Override public void initialize() throws GkException { macroService.addListener(this); updateMacroList(); } private void updateMacroList() throws GkException{ List<GCodeMacro> macros = macroService.getGCodeMacro(); getDataModel().setAvailableMacro(new WritableList(macros, GCodeMacro.class)); // Handle last selection if(CollectionUtils.isNotEmpty(macros)){ if(getDataModel().getSelectedMacro() == null){ selectMacro(macros.get(0)); }else{ GCodeMacro selectedMacro = macroService.getGCodeMacro(getDataModel().getSelectedMacro().getId()); selectMacro(selectedMacro); } } } public void createNewMacro() throws GkException{ GCodeMacro macro = new GCodeMacro(); macro.setCode("New macro"); macro.setRequestConfirmBeforeExecution(true); macro.setShowInMacroPanel(true); macro.setContent(new StringGCodeSource(StringUtils.EMPTY)); macroService.addGCodeMacro(macro); selectMacro(macro); } /** * @param firstElement */ public void selectMacro(GCodeMacro selectedMacro) { getDataModel().setSelectedMacro(selectedMacro); getDataModel().setRequestConfirmation(selectedMacro.isRequestConfirmBeforeExecution()); getDataModel().setMacroName(selectedMacro.getCode()); getDataModel().setDisplayMacroButton(selectedMacro.isShowInMacroPanel()); getDataModel().setOverrideButtonColor(selectedMacro.getButtonColor() != null); getDataModel().setButtonColor(selectedMacro.getButtonColor()); getDataModel().setDirty(false); } public void unselectMacro() { getDataModel().setSelectedMacro(null); getDataModel().setRequestConfirmation(false); getDataModel().setMacroName(StringUtils.EMPTY); getDataModel().setDisplayMacroButton(false); getDataModel().setOverrideButtonColor(false); getDataModel().setButtonColor(null); getDataModel().setDirty(false); } public void applyChangesToGCodeMacro() throws GkException{ if(getDataModel().getSelectedMacro() != null){ GCodeMacro sourceMacro = getDataModel().getSelectedMacro(); GCodeMacro macro = new GCodeMacro(); macro.setId(sourceMacro.getId()); macro.setCode( getDataModel().getMacroName() ); macro.setRequestConfirmBeforeExecution( getDataModel().isRequestConfirmation() ); macro.setShowInMacroPanel( getDataModel().isDisplayMacroButton() ); macro.setContent(sourceMacro.getContent()); // Don't change the content as it's managed by the editor directly macro.setButtonColor(getDataModel().getButtonColor()); macroService.updateGCodeMacro(macro); getDataModel().setSelectedMacro(macroService.getGCodeMacro(macro.getId())); getDataModel().setDirty(false); getDataModel().setEditionMode(false); } } public void enableEditionMode(){ getDataModel().setEditionMode(true); getDataModel().setDirty(true); } public void cancelChangesToGCodeMacro(){ if(getDataModel().getSelectedMacro() != null){ selectMacro(getDataModel().getSelectedMacro()); getDataModel().setDirty(false); getDataModel().setEditionMode(false); } } public void openMacroInEditor() throws GkException{ if(getDataModel().getSelectedMacro() != null){ GCodeMacro macro = getDataModel().getSelectedMacro(); Map<String, Object> map = new HashMap<String, Object>(); GCodeMacroDocument documentProvider = new GCodeMacroDocument(macroService, macro, macroService.getGCodeProviderByMacro(macro.getId())); map.put(IEventBroker.DATA, documentProvider); eventAdmin.sendEvent(new Event(GCodeEditorTopic.TOPIC_OPEN_EDITOR, map)); } } protected void deleteSelectedMacro() throws GkException{ if(getDataModel().getSelectedMacro() != null){ GCodeMacro macro = getDataModel().getSelectedMacro(); unselectMacro(); macroService.deleteGCodeMacro(macro); } } /** (inheritDoc) * @see org.goko.tools.macro.service.IGCodeMacroServiceListener#onGCodeMacroCreate(org.goko.tools.macro.bean.GCodeMacro) */ @Override public void onGCodeMacroCreate(GCodeMacro macro) { try { updateMacroList(); } catch (GkException e) { LOG.error(e); } } /** (inheritDoc) * @see org.goko.tools.macro.service.IGCodeMacroServiceListener#onGCodeMacroUpdate(org.goko.tools.macro.bean.GCodeMacro) */ @Override public void onGCodeMacroUpdate(GCodeMacro macro) { try { updateMacroList(); } catch (GkException e) { LOG.error(e); } } /** (inheritDoc) * @see org.goko.tools.macro.service.IGCodeMacroServiceListener#beforeGCodeMacroDelete(org.goko.tools.macro.bean.GCodeMacro) */ @Override public void beforeGCodeMacroDelete(GCodeMacro macro) { } /** (inheritDoc) * @see org.goko.tools.macro.service.IGCodeMacroServiceListener#afterGCodeMacroDelete(org.goko.tools.macro.bean.GCodeMacro) */ @Override public void afterGCodeMacroDelete(GCodeMacro macro) { try { updateMacroList(); } catch (GkException e) { LOG.error(e); } } }