package org.goko.gcode.rs274ngcv3.ui.workspace; import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.SubMonitor; import org.goko.core.common.exception.GkException; import org.goko.core.common.io.xml.IXmlPersistenceService; import org.goko.core.common.service.IGokoService; import org.goko.core.gcode.element.IGCodeProvider; import org.goko.core.gcode.element.IGCodeProviderSource; import org.goko.core.gcode.rs274ngcv3.IRS274NGCService; import org.goko.core.gcode.rs274ngcv3.element.GCodeProvider; import org.goko.core.gcode.rs274ngcv3.modifier.AbstractModifier; import org.goko.core.log.GkLog; import org.goko.core.workspace.io.IProjectLocation; import org.goko.core.workspace.service.AbstractProjectLoadParticipant; import org.goko.core.workspace.service.IMapperService; import org.goko.core.workspace.service.IProjectLoadParticipant; import org.goko.gcode.rs274ngcv3.ui.workspace.io.XmlRS274GContent; import org.goko.gcode.rs274ngcv3.xml.bean.XmlGCodeModifier; import org.goko.gcode.rs274ngcv3.xml.bean.XmlGCodeProvider; public class RS274LoadParticipant extends AbstractProjectLoadParticipant<XmlRS274GContent> implements IGokoService, IProjectLoadParticipant { /** LOG */ private static final GkLog LOG = GkLog.getLogger(RS274LoadParticipant.class); /** Service ID */ private static final String SERVICE_ID = "org.goko.gcode.rs274ngcv3.ui.workspace.RS274LoadParticipant"; /** Type of the RS274 content container */ private static final String RS274_CONTENT_TYPE = "rs274Content"; /** Load priority */ private static final int LOAD_PRIORITY = 100; /** Workspace service */ private IRS274NGCService gcodeService; /** XML persistence service */ private IXmlPersistenceService xmlPersistenceService; /** Mapper service */ private IMapperService mapperService; /** * Constructor */ public RS274LoadParticipant() { super(XmlRS274GContent.class); } /** (inheritDoc) * @see org.goko.core.common.service.IGokoService#getServiceId() */ @Override public String getServiceId() throws GkException { return SERVICE_ID; } /** (inheritDoc) * @see org.goko.core.common.service.IGokoService#start() */ @Override public void start() throws GkException { LOG.info("Starting "+getServiceId()); LOG.info("Successfully started "+getServiceId()); } /** (inheritDoc) * @see org.goko.core.common.service.IGokoService#stop() */ @Override public void stop() throws GkException { LOG.info("Stopping "+getServiceId()); LOG.info("Successfully stopped "+getServiceId()); } /** (inheritDoc) * @see org.goko.core.workspace.service.IProjectLoadParticipant#getPriority() */ @Override public int getPriority() { return LOAD_PRIORITY; } /** (inheritDoc) * @see org.goko.core.workspace.service.IProjectLoadParticipant#clearContent() */ @Override public void clearContent() throws GkException { gcodeService.clearAll(); } /** (inheritDoc) * @see org.goko.core.workspace.service.AbstractProjectLoadParticipant#loadContainer(org.goko.core.workspace.io.XmlProjectContainer, org.goko.core.workspace.io.IProjectInputLocation, org.eclipse.core.runtime.IProgressMonitor) */ @Override protected void loadContainer(XmlRS274GContent container, IProjectLocation input, IProgressMonitor monitor) throws GkException { // Load the GCodeProvider List<XmlGCodeProvider> lstGCodeProvider = container.getLstGCodeProvider(); SubMonitor submonitor = SubMonitor.convert(monitor, CollectionUtils.size(lstGCodeProvider)); if(CollectionUtils.isNotEmpty(lstGCodeProvider)){ for (XmlGCodeProvider xmlGCodeProvider : lstGCodeProvider) { IGCodeProviderSource source = mapperService.load(xmlGCodeProvider.getSource(), IGCodeProviderSource.class); IGCodeProvider provider = gcodeService.parse(source, submonitor); provider.setCode(xmlGCodeProvider.getCode()); gcodeService.addGCodeProvider(provider); loadModifiers(provider, xmlGCodeProvider, submonitor); submonitor.worked(1); } } submonitor.done(); } @SuppressWarnings("unchecked") protected void loadModifiers(IGCodeProvider provider, XmlGCodeProvider xmlGCodeProvider, IProgressMonitor monitor) throws GkException { if(CollectionUtils.isNotEmpty(xmlGCodeProvider.getModifiers())){ for (XmlGCodeModifier xmlGCodeModifier : xmlGCodeProvider.getModifiers()) { AbstractModifier<GCodeProvider> modifier = mapperService.load(xmlGCodeModifier, AbstractModifier.class); modifier.setRS274NGCService(gcodeService); modifier.setIdGCodeProvider(provider.getId()); gcodeService.addModifier(modifier); } } } /** (inheritDoc) * @see org.goko.core.workspace.service.IProjectLoadParticipant#getContainerType() */ @Override public String getContainerType() { return XmlRS274GContent.CONTAINER_TYPE; } /** (inheritDoc) * @see org.goko.core.workspace.service.IProjectLoadParticipant#getContainerClass() */ @Override public Class<XmlRS274GContent> getContainerClass() { return XmlRS274GContent.class; } /** * @return the gcodeService */ public IRS274NGCService getGcodeService() { return gcodeService; } /** * @param gcodeService the gcodeService to set */ public void setGcodeService(IRS274NGCService gcodeService) { this.gcodeService = gcodeService; } /** * @return the xmlPersistenceService */ public IXmlPersistenceService getXmlPersistenceService() { return xmlPersistenceService; } /** * @param xmlPersistenceService the xmlPersistenceService to set */ public void setXmlPersistenceService(IXmlPersistenceService xmlPersistenceService) { this.xmlPersistenceService = xmlPersistenceService; } /** * @return the mapperService */ public IMapperService getMapperService() { return mapperService; } /** * @param mapperService the mapperService to set */ public void setMapperService(IMapperService mapperService) { this.mapperService = mapperService; } }