/*******************************************************************************
* Copyright (c) 2016 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.windup.ui.internal.services;
import java.io.File;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.eclipse.core.runtime.IPath;
import org.eclipse.e4.core.di.annotations.Creatable;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.ui.di.UIEventTopic;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
import org.eclipse.e4.ui.model.application.ui.advanced.MPlaceholder;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.workbench.UIEvents;
import org.eclipse.e4.ui.workbench.UIEvents.EventTags;
import org.eclipse.e4.ui.workbench.modeling.EPartService;
import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState;
import org.eclipse.swt.widgets.Display;
import org.jboss.tools.windup.model.domain.ModelService;
import org.jboss.tools.windup.ui.WindupPerspectiveFactory;
import org.jboss.tools.windup.ui.internal.explorer.IssueExplorer;
import org.jboss.tools.windup.ui.internal.views.WindupReportView;
import org.jboss.tools.windup.windup.ConfigurationElement;
import org.jboss.tools.windup.windup.Input;
import org.osgi.service.event.Event;
/**
* Service for view related functionality.
*/
@Creatable
@Singleton
public class ViewService {
@Inject private EPartService partService;
@Inject private MApplication application;
@Inject private ModelService modelService;
public WindupReportView activateWindupReportView() {
application.getChildren().get(0).getContext().activate();
MPlaceholder holder = partService.createSharedPart(WindupReportView.ID, false);
MPart part = (MPart)holder.getRef();
partService.showPart(part, PartState.ACTIVATE);
return (WindupReportView)part.getObject();
}
public void renderReport(ConfigurationElement configuration) {
if (configuration.isGenerateReport() && !configuration.getInputs().isEmpty()) {
Input input = configuration.getInputs().get(0);
IPath path = modelService.getGeneratedReport(configuration, input);
File file = new File(path.toString());
if (file.exists()) {
Display.getDefault().asyncExec(() -> {
final WindupReportView view = activateWindupReportView();
if (view != null) {
view.showReport(path, true);
}
});
}
}
}
public void launchStarting() {
Display.getDefault().asyncExec(() -> {
WindupReportView view = activateWindupReportView();
if (view != null) {
view.showMessage("No report available.", true);
}
});
}
@Inject
@Optional
public void showIssueExplorer(@UIEventTopic(UIEvents.UILifeCycle.PERSPECTIVE_OPENED) Event event) {
Object element = event.getProperty(EventTags.ELEMENT);
if (element instanceof MPerspective) {
MPerspective perspective = (MPerspective) element;
if (perspective.getElementId().equals(WindupPerspectiveFactory.ID)) {
MPart part = partService.findPart(IssueExplorer.VIEW_ID);
if (part != null) {
partService.activate(part);
}
}
}
}
}