/*******************************************************************************
* Copyright 2017 Capital One Services, LLC and Bitwise, Inc.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
package hydrograph.ui.graph.job;
import hydrograph.ui.common.interfaces.parametergrid.DefaultGEFCanvas;
import hydrograph.ui.graph.Activator;
import hydrograph.ui.graph.execution.tracking.preferences.ExecutionPreferenceConstants;
import hydrograph.ui.graph.execution.tracking.utils.TrackingDisplayUtils;
import hydrograph.ui.joblogger.JobLogger;
import hydrograph.ui.logging.factory.LogFactory;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Platform;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.slf4j.Logger;
/**
*
* The abstract class to launch job
*
* @author Bitwise
*
*/
abstract public class AbstractJobLauncher {
private static Logger logger = LogFactory.INSTANCE.getLogger(AbstractJobLauncher.class);
public String webSocketLocalHost = TrackingDisplayUtils.INSTANCE.getWebSocketLocalHost();
/**
*
* Launch job
*
* @param xmlPath
* @param paramFile
* @param job
* @param gefCanvas
*/
abstract public void launchJob(String xmlPath, String paramFile,String userFunctionsPropertyFile, Job job, DefaultGEFCanvas gefCanvas,List<String> externalSchemaFiles,List<String> subJobList);
abstract public void launchJobInDebug(String xmlPath, String debugXmlPath, String paramFile,String userFunctionsPropertyFile, Job job, DefaultGEFCanvas gefCanvas,List<String> externalSchemaFiles,List<String> subJobList);
/**
* Enables locked resouces..like job canvas
*
* @param {@link DefaultGEFCanvas}
*/
protected void enableLockedResources(final DefaultGEFCanvas gefCanvas) {
Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
gefCanvas.enableRunningJobResource();
}
});
}
/**
*
* Refresh project directory corresponding to given {@link DefaultGEFCanvas}
*
* @param gefCanvas
*/
protected void refreshProject(DefaultGEFCanvas gefCanvas) {
IEditorPart iEditorPart = ((IEditorPart)gefCanvas);
String projectName = ((IFileEditorInput) iEditorPart.getEditorInput()).getFile().getProject().getName();
IProject iProject = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
try {
iProject.refreshLocal(IResource.DEPTH_INFINITE, null);
} catch (CoreException e) {
logger.error("Error while refreshing the project", e);
}
}
/**
*
* Initialize job logger
*
* @param gefCanvas
* @param isRemoteMode
* @return
*/
protected JobLogger initJobLogger(DefaultGEFCanvas gefCanvas,String jobRunId) {
final JobLogger joblogger = new JobLogger(gefCanvas.getActiveProject(), gefCanvas.getJobName(),jobRunId);
joblogger.logJobStartInfo(jobRunId);
joblogger.logSystemInformation();
return joblogger;
}
abstract public void killJob(Job jobToKill);
/**
* Check is tracking enabled or not
* @return
*/
public boolean isExecutionTrackingOn(){
boolean isExeTracking = Platform.getPreferencesService().getBoolean(Activator.PLUGIN_ID,
ExecutionPreferenceConstants.EXECUTION_TRACKING, true, null);
return isExeTracking;
}
}