/**
*
*/
package org.goko.gcode.rs274ngcv3.ui.workspace.uiprovider.menu.gcodeprovider;
import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
import org.eclipse.core.runtime.URIUtil;
import org.eclipse.jface.action.Action;
import org.goko.core.common.exception.GkException;
import org.goko.core.gcode.element.IGCodeProvider;
import org.goko.core.gcode.rs274ngcv3.element.source.ResourceLocationGCodeSource;
import org.goko.core.gcode.service.IGCodeProviderRepository;
import org.goko.core.log.GkLog;
import org.goko.core.workspace.io.IResourceLocation;
import org.goko.core.workspace.io.URIResourceLocation;
import org.goko.core.workspace.service.IWorkspaceService;
/**
* @author PsyKo
* @date 22 nov. 2015
*/
public class ExternalEditAction extends Action{
/** LOG */
private static final GkLog LOG = GkLog.getLogger(ExternalEditAction.class);
/** Target GCode provider */
private Integer idGCodeProvider;
/** IRS274NGCService */
private IGCodeProviderRepository gcodeProviderRepository;
/** IWorkspaceService */
private IWorkspaceService workspaceService;
/**
* Constructor
* @param gcodeProviderRepository the {@link IGCodeProviderRepository}
* @param idGCodeProvider the target GCodeProvider id
*/
public ExternalEditAction(IGCodeProviderRepository gcodeProviderRepository, IWorkspaceService workspaceService, Integer idGCodeProvider) {
super("Edit");
this.idGCodeProvider = idGCodeProvider;
this.gcodeProviderRepository = gcodeProviderRepository;
this.workspaceService = workspaceService;
}
/** (inheritDoc)
* @see org.eclipse.jface.action.Action#run()
*/
@Override
public void run() {
try {
IGCodeProvider gcode = gcodeProviderRepository.getGCodeProvider(idGCodeProvider);
if(gcode.getSource() instanceof ResourceLocationGCodeSource){
ResourceLocationGCodeSource source = (ResourceLocationGCodeSource) gcode.getSource();
IResourceLocation resourceLocation = source.getResourceLocation();
if(resourceLocation instanceof URIResourceLocation){
URIResourceLocation uriResourceLocation = (URIResourceLocation) resourceLocation;
if(URIUtil.isFileURI(uriResourceLocation.getAbsoluteUri())){
Desktop.getDesktop().edit(new File(uriResourceLocation.getAbsoluteUri()));
}
}
}
} catch (GkException | IOException e) {
LOG.error(e);
}
}
/** (inheritDoc)
* @see org.eclipse.jface.action.Action#isEnabled()
*/
@Override
public boolean isEnabled() {
try {
IGCodeProvider gcode = gcodeProviderRepository.getGCodeProvider(idGCodeProvider);
if(gcode.getSource() instanceof ResourceLocationGCodeSource){
ResourceLocationGCodeSource source = (ResourceLocationGCodeSource) gcode.getSource();
IResourceLocation resourceLocation = source.getResourceLocation();
if(resourceLocation instanceof URIResourceLocation){
URIResourceLocation uriResourceLocation = (URIResourceLocation) resourceLocation;
if(URIUtil.isFileURI(uriResourceLocation.getAbsoluteUri())){
return true;
}
}
}
} catch (GkException e) {
LOG.error(e);
}
return false;
}
}