/**
* This file is protected by Copyright.
* Please refer to the COPYRIGHT file distributed with this source distribution.
*
* This file is part of REDHAWK IDE.
*
* All rights reserved. This program and the accompanying materials are made available under
* the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package gov.redhawk.logging.ui.handlers;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.handlers.HandlerUtil;
import CF.LogConfigurationOperations;
import gov.redhawk.logging.ui.LogLevels;
import gov.redhawk.logging.ui.dialogs.LoggingDetailsDialog;
import gov.redhawk.logging.ui.jobs.CreateEventChannelLogger;
import gov.redhawk.logging.ui.jobs.TailEventChannelJob;
import gov.redhawk.model.sca.CorbaObjWrapper;
import gov.redhawk.model.sca.ScaDomainManager;
import gov.redhawk.model.sca.ScaEventChannel;
import gov.redhawk.model.sca.provider.ScaItemProviderAdapterFactory;
import mil.jpeojtrs.sca.util.ScaEcoreUtils;
public class TailLog extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
// Selection
ISelection sel = HandlerUtil.getActiveMenuSelection(event);
if (sel == null) {
sel = HandlerUtil.getCurrentSelection(event);
}
if (!(sel instanceof IStructuredSelection)) {
return null;
}
IStructuredSelection ss = (IStructuredSelection) sel;
// Shell
Shell shell = HandlerUtil.getActiveShellChecked(event);
// Adapt selection and perform the tail
for (Object obj : ss.toList()) {
CorbaObjWrapper< ? > wrapper = Platform.getAdapterManager().getAdapter(obj, CorbaObjWrapper.class);
if (wrapper != null && (wrapper instanceof LogConfigurationOperations)) {
ScaDomainManager domMgr = ScaEcoreUtils.getEContainerOfType(wrapper, ScaDomainManager.class);
if (domMgr != null) {
handleTailLog(shell, wrapper);
}
}
}
return null;
}
public void handleTailLog(Shell shell, final CorbaObjWrapper< ? > wrapper) {
// Get a label for the model object
ScaItemProviderAdapterFactory adapterFactory = new ScaItemProviderAdapterFactory();
ILabelProvider labelProvider = new AdapterFactoryLabelProvider(adapterFactory);
String label = labelProvider.getText(wrapper);
labelProvider.dispose();
adapterFactory.dispose();
// Display dialog to get logger and log level
LoggingDetailsDialog dialog = new LoggingDetailsDialog(shell);
dialog.create();
dialog.getShell().setText(Messages.bind(Messages.TailLog_0, label));
if (dialog.open() != LoggingDetailsDialog.OK) {
return;
}
String logger = dialog.getLogger();
LogLevels logLevel = dialog.getLogLevel();
// Adjust logging
final CreateEventChannelLogger createJob = new CreateEventChannelLogger(wrapper, logger, logLevel);
createJob.setUser(true);
createJob.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
// Do nothing if we failed
IStatus result = event.getResult();
if (result == null || !result.isOK()) {
return;
}
// Grab the new event channel, and create a cleanup job for later
ScaEventChannel eventChannel = createJob.getEventChannel();
Job destroyJob = createJob.createCleanupJob();
// View the event channel log
Job viewJob = new TailEventChannelJob(eventChannel, destroyJob);
viewJob.setUser(true);
viewJob.schedule();
}
});
createJob.schedule();
}
}