package com.gratex.perconik.activity.ide.listeners; import org.eclipse.core.resources.IProject; import org.eclipse.debug.core.ILaunch; import org.eclipse.ui.IPerspectiveDescriptor; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPartReference; import com.gratex.perconik.activity.uaca.IdeUacaProxy; import com.gratex.perconik.activity.uaca.IdeUacaUris; import com.gratex.perconik.services.uaca.ide.IdeStateChangeEventRequest; import sk.stuba.fiit.perconik.core.listeners.LaunchListener; import sk.stuba.fiit.perconik.core.listeners.PerspectiveListener; import sk.stuba.fiit.perconik.eclipse.core.resources.Projects; import static com.gratex.perconik.activity.ide.IdeData.setApplicationData; import static com.gratex.perconik.activity.ide.IdeData.setEventData; import static com.gratex.perconik.activity.ide.IdeData.setProjectData; import static com.gratex.perconik.activity.ide.listeners.Utilities.currentTime; /** * A listener of IDE state change events. This listener handles desired * events and eventually builds corresponding data transfer objects * of type {@link IdeStateChangeEventRequest} and passes them to the * {@link IdeUacaProxy} to be transferred into the <i>User Activity Central * Application</i> for further processing. * * <p>State changes are logged when an application launches from Eclipse, * or Eclipse perspective changes. * * <p>Data available in an {@code IdeStateChangeEventRequest}: * * <ul> * <li>{@code stateTypeUri} - in case of an application run or debug start * the state type consists of the launch mode concatenated to a string * {@code " (launch)"}, for example {@code "run (launch)"} or * {@code "debug (launch)"}. In case of a perspective change it * consists of the perspective name in lowercase concatenated to string * {@code " (perspective)"}, for example {@code java (perspective)} or * {@code debug (perspective)}. * <li>See {@link IdeListener} for documentation of inherited data. * </ul> * * @author Pavol Zbell * @since 1.0 */ public final class IdeStateListener extends IdeListener implements LaunchListener, PerspectiveListener { public IdeStateListener() {} static IdeStateChangeEventRequest build(final long time, final IProject project, final String state) { final IdeStateChangeEventRequest data = new IdeStateChangeEventRequest(); data.setStateTypeUri(IdeUacaUris.forStateChangeType(state)); setProjectData(data, project); setApplicationData(data); setEventData(data, time); return data; } void processLaunch(final long time, final ILaunch launch) { Iterable<IProject> projects = Projects.fromLaunch(launch); String state = launch.getLaunchMode() + " (launch)"; for (IProject project: projects) { this.proxy.sendStateChangeEvent(build(time, project, state)); } } void processPerspective(final long time, final IWorkbenchPage page, final IPerspectiveDescriptor descriptor) { IProject project = Projects.fromPage(page); String state = descriptor.getLabel().toLowerCase() + " (perspective)"; this.proxy.sendStateChangeEvent(build(time, project, state)); } public void launchAdded(final ILaunch launch) { final long time = currentTime(); execute(new Runnable() { public void run() { processLaunch(time, launch); } }); } public void launchRemoved(final ILaunch launch) {} public void launchChanged(final ILaunch launch) {} public void perspectiveOpened(final IWorkbenchPage page, final IPerspectiveDescriptor descriptor) {} public void perspectiveClosed(final IWorkbenchPage page, final IPerspectiveDescriptor descriptor) {} public void perspectiveActivated(final IWorkbenchPage page, final IPerspectiveDescriptor descriptor) { final long time = currentTime(); execute(new Runnable() { public void run() { processPerspective(time, page, descriptor); } }); } public void perspectiveDeactivated(final IWorkbenchPage page, final IPerspectiveDescriptor descriptor) {} public void perspectivePreDeactivate(final IWorkbenchPage page, final IPerspectiveDescriptor descriptor) {} public void perspectiveChanged(final IWorkbenchPage page, final IPerspectiveDescriptor descriptor, final String change) {} public void perspectiveChanged(final IWorkbenchPage page, final IPerspectiveDescriptor descriptor, final IWorkbenchPartReference reference, final String change) {} public void perspectiveSavedAs(final IWorkbenchPage page, final IPerspectiveDescriptor before, final IPerspectiveDescriptor after) {} }