/*
* Copyright 2013 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.screens.explorer.client;
import javax.inject.Inject;
import org.guvnor.common.services.project.context.ProjectContext;
import org.kie.workbench.common.screens.explorer.client.resources.i18n.ProjectExplorerConstants;
import org.kie.workbench.common.screens.explorer.client.widgets.ActiveContextOptions;
import org.kie.workbench.common.screens.explorer.client.widgets.BaseViewPresenter;
import org.kie.workbench.common.screens.explorer.client.widgets.business.BusinessViewPresenter;
import org.kie.workbench.common.screens.explorer.client.widgets.technical.TechnicalViewPresenter;
import org.uberfire.client.annotations.DefaultPosition;
import org.uberfire.client.annotations.WorkbenchMenu;
import org.uberfire.client.annotations.WorkbenchPartTitle;
import org.uberfire.client.annotations.WorkbenchPartView;
import org.uberfire.client.annotations.WorkbenchScreen;
import org.uberfire.client.mvp.UberView;
import org.uberfire.lifecycle.OnStartup;
import org.uberfire.mvp.Command;
import org.uberfire.mvp.PlaceRequest;
import org.uberfire.workbench.model.CompassPosition;
import org.uberfire.workbench.model.Position;
import org.uberfire.workbench.model.menu.Menus;
/**
* Repository, Package, Folder and File explorer
*/
@WorkbenchScreen(identifier = "org.kie.guvnor.explorer")
public class ExplorerPresenter {
private ExplorerView view;
private BusinessViewPresenter businessViewPresenter;
private TechnicalViewPresenter technicalViewPresenter;
private ProjectContext context;
private ActiveContextOptions activeOptions;
public ExplorerMenu menu;
private final static String INIT_PATH = "init_path";
private final static String PATH = "path";
public ExplorerPresenter() {
}
@Inject
public ExplorerPresenter( final ExplorerView view,
final BusinessViewPresenter businessViewPresenter,
final TechnicalViewPresenter technicalViewPresenter,
final ProjectContext context,
final ActiveContextOptions activeOptions,
final ExplorerMenu menu ) {
this.view = view;
this.businessViewPresenter = businessViewPresenter;
this.technicalViewPresenter = technicalViewPresenter;
this.context = context;
this.activeOptions = activeOptions;
this.menu = menu;
menu.addRefreshCommand( new Command() {
@Override
public void execute() {
refresh();
}
} );
menu.addUpdateCommand( new Command() {
@Override
public void execute() {
update();
}
} );
}
@OnStartup
public void onStartup( final PlaceRequest placeRequest ) {
activeOptions.init( placeRequest,
new Command() {
@Override
public void execute() {
String path = placeRequest.getParameter( PATH,
null );
path = placeRequest.getParameter( INIT_PATH,
path );
init( path );
}
} );
}
private void init( final String initPath ) {
menu.refresh();
getActiveView().setVisible( true );
getInactiveView().setVisible( false );
if ( initPath == null ) {
technicalViewPresenter.initialiseViewForActiveContext( context );
businessViewPresenter.initialiseViewForActiveContext( context );
} else {
technicalViewPresenter.initialiseViewForActiveContext( initPath );
businessViewPresenter.initialiseViewForActiveContext( initPath );
}
update();
}
@WorkbenchPartView
public UberView<ExplorerPresenter> getView() {
return this.view;
}
@WorkbenchPartTitle
public String getTitle() {
return ProjectExplorerConstants.INSTANCE.explorerTitle();
}
@DefaultPosition
public Position getDefaultPosition() {
return CompassPosition.WEST;
}
@WorkbenchMenu
public Menus buildMenu() {
return menu.asMenu();
}
private void refresh() {
getActiveView().refresh();
}
private void update() {
getActiveView().update();
}
private BaseViewPresenter getActiveView() {
if ( activeOptions.isTechnicalViewActive() ) {
return technicalViewPresenter;
} else {
return businessViewPresenter;
}
}
private BaseViewPresenter getInactiveView() {
if ( activeOptions.isTechnicalViewActive() ) {
return businessViewPresenter;
} else {
return technicalViewPresenter;
}
}
}