/*
* Copyright 2017 Red Hat, Inc. and/or its affiliates.
*
* 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 org.kie.workbench.common.stunner.client.widgets.presenters.session.impl;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Event;
import javax.inject.Inject;
import org.jboss.errai.ioc.client.api.ManagedInstance;
import org.kie.workbench.common.stunner.client.widgets.event.SessionDiagramOpenedEvent;
import org.kie.workbench.common.stunner.client.widgets.notification.NotificationsObserver;
import org.kie.workbench.common.stunner.client.widgets.palette.factory.BS3PaletteFactory;
import org.kie.workbench.common.stunner.client.widgets.presenters.session.SessionDiagramPreview;
import org.kie.workbench.common.stunner.client.widgets.presenters.session.SessionEditor;
import org.kie.workbench.common.stunner.client.widgets.presenters.session.SessionPresenter;
import org.kie.workbench.common.stunner.client.widgets.presenters.session.SessionPresenterFactory;
import org.kie.workbench.common.stunner.client.widgets.presenters.session.SessionPreview;
import org.kie.workbench.common.stunner.client.widgets.presenters.session.SessionViewer;
import org.kie.workbench.common.stunner.client.widgets.toolbar.impl.EditorToolbarFactory;
import org.kie.workbench.common.stunner.client.widgets.toolbar.impl.ViewerToolbarFactory;
import org.kie.workbench.common.stunner.client.widgets.views.WidgetWrapperView;
import org.kie.workbench.common.stunner.core.client.api.SessionManager;
import org.kie.workbench.common.stunner.core.client.canvas.AbstractCanvasHandler;
import org.kie.workbench.common.stunner.core.client.command.CanvasCommandManager;
import org.kie.workbench.common.stunner.core.client.session.impl.AbstractClientFullSession;
import org.kie.workbench.common.stunner.core.client.session.impl.AbstractClientReadOnlySession;
import org.kie.workbench.common.stunner.core.client.session.impl.AbstractClientSession;
import org.kie.workbench.common.stunner.core.diagram.Diagram;
@ApplicationScoped
public class SessionPresenterFactoryImpl implements SessionPresenterFactory<Diagram, AbstractClientReadOnlySession, AbstractClientFullSession> {
private final SessionManager sessionManager;
private final ManagedInstance<CanvasCommandManager<AbstractCanvasHandler>> commandManagerInstances;
private final ManagedInstance<ViewerToolbarFactory> viewerToolbarFactoryInstances;
private final ManagedInstance<EditorToolbarFactory> editorToolbarFactoryInstances;
private final ManagedInstance<SessionDiagramPreview<AbstractClientSession>> sessionPreviewInstances;
private final ManagedInstance<WidgetWrapperView> diagramViewerViewInstances;
private final ManagedInstance<SessionPresenter.View> viewInstances;
private final ManagedInstance<NotificationsObserver> notificationsObserverInstances;
private final BS3PaletteFactory paletteWidgetFactory;
private final Event<SessionDiagramOpenedEvent> sessionDiagramOpenedEventInstances;
protected SessionPresenterFactoryImpl() {
this(null,
null,
null,
null,
null,
null,
null,
null,
null,
null);
}
@Inject
public SessionPresenterFactoryImpl(final SessionManager sessionManager,
final ManagedInstance<CanvasCommandManager<AbstractCanvasHandler>> commandManagerInstances,
final ManagedInstance<ViewerToolbarFactory> viewerToolbarFactoryInstances,
final ManagedInstance<EditorToolbarFactory> editorToolbarFactoryInstances,
final ManagedInstance<SessionDiagramPreview<AbstractClientSession>> sessionPreviewInstances,
final ManagedInstance<WidgetWrapperView> diagramViewerViewInstances,
final ManagedInstance<SessionPresenter.View> viewInstances,
ManagedInstance<NotificationsObserver> notificationsObserverInstances,
final BS3PaletteFactory paletteWidgetFactory,
final Event<SessionDiagramOpenedEvent> sessionDiagramOpenedEventInstances) {
this.sessionManager = sessionManager;
this.commandManagerInstances = commandManagerInstances;
this.viewerToolbarFactoryInstances = viewerToolbarFactoryInstances;
this.editorToolbarFactoryInstances = editorToolbarFactoryInstances;
this.sessionPreviewInstances = sessionPreviewInstances;
this.diagramViewerViewInstances = diagramViewerViewInstances;
this.paletteWidgetFactory = paletteWidgetFactory;
this.notificationsObserverInstances = notificationsObserverInstances;
this.viewInstances = viewInstances;
this.sessionDiagramOpenedEventInstances = sessionDiagramOpenedEventInstances;
}
@Override
@SuppressWarnings("unchecked")
public SessionPreview<AbstractClientSession, Diagram> newPreview() {
return sessionPreviewInstances.get();
}
@Override
public SessionViewer<AbstractClientReadOnlySession, ?, Diagram> newViewer() {
return new SessionViewerImpl<>(commandManagerInstances.get(),
diagramViewerViewInstances.get());
}
@Override
public SessionEditor<AbstractClientFullSession, ?, Diagram> newEditor() {
return new SessionEditorImpl<>(commandManagerInstances.get(),
diagramViewerViewInstances.get());
}
@Override
public SessionPresenter<AbstractClientReadOnlySession, ?, Diagram> newPresenterViewer() {
return new SessionViewerPresenter<>(sessionManager,
commandManagerInstances.get(),
viewerToolbarFactoryInstances.get(),
sessionDiagramOpenedEventInstances,
diagramViewerViewInstances.get(),
notificationsObserverInstances.get(),
viewInstances.get());
}
@Override
public SessionPresenter<AbstractClientFullSession, ?, Diagram> newPresenterEditor() {
return new SessionEditorPresenter<>(sessionManager,
commandManagerInstances.get(),
sessionDiagramOpenedEventInstances,
editorToolbarFactoryInstances.get(),
paletteWidgetFactory,
diagramViewerViewInstances.get(),
notificationsObserverInstances.get(),
viewInstances.get());
}
}