/*
* Copyright 2012 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.drools.workbench.client.perspectives;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import org.drools.workbench.client.resources.i18n.AppConstants;
import org.guvnor.asset.management.client.editors.repository.wizard.CreateRepositoryWizard;
import org.guvnor.common.services.shared.security.AppRoles;
import org.guvnor.structure.client.editors.repository.clone.CloneRepositoryPresenter;
import org.jboss.errai.ioc.client.container.SyncBeanManager;
import org.kie.workbench.common.widgets.client.handlers.NewResourcePresenter;
import org.kie.workbench.common.workbench.client.PerspectiveIds;
import org.uberfire.client.annotations.Perspective;
import org.uberfire.client.annotations.WorkbenchMenu;
import org.uberfire.client.annotations.WorkbenchPerspective;
import org.uberfire.client.callbacks.Callback;
import org.uberfire.client.mvp.PlaceManager;
import org.uberfire.client.workbench.panels.impl.MultiListWorkbenchPanelPresenter;
import org.uberfire.client.workbench.panels.impl.SimpleWorkbenchPanelPresenter;
import org.uberfire.mvp.Command;
import org.uberfire.mvp.impl.DefaultPlaceRequest;
import org.uberfire.workbench.model.CompassPosition;
import org.uberfire.workbench.model.PanelDefinition;
import org.uberfire.workbench.model.PerspectiveDefinition;
import org.uberfire.workbench.model.impl.PanelDefinitionImpl;
import org.uberfire.workbench.model.impl.PartDefinitionImpl;
import org.uberfire.workbench.model.impl.PerspectiveDefinitionImpl;
import org.uberfire.workbench.model.menu.MenuFactory;
import org.uberfire.workbench.model.menu.MenuItem;
import org.uberfire.workbench.model.menu.Menus;
/**
* A Perspective for Administrators
*/
@ApplicationScoped
@WorkbenchPerspective(identifier = PerspectiveIds.DROOLS_ADMIN)
public class AdministrationPerspective {
@Inject
private NewResourcePresenter newResourcePresenter;
@Inject
private PlaceManager placeManager;
@Inject
private SyncBeanManager iocManager;
@Inject
private CloneRepositoryPresenter cloneRepositoryPresenter;
@Perspective
public PerspectiveDefinition buildPerspective() {
final PerspectiveDefinition perspective = new PerspectiveDefinitionImpl( MultiListWorkbenchPanelPresenter.class.getName() );
perspective.setName( AppConstants.INSTANCE.AdministrationPerspectiveName() );
perspective.getRoot().addPart( new PartDefinitionImpl( new DefaultPlaceRequest( "RepositoriesEditor" ) ) );
final PanelDefinition west = new PanelDefinitionImpl( SimpleWorkbenchPanelPresenter.class.getName() );
west.setWidth( 300 );
west.setMinWidth( 200 );
west.addPart( new PartDefinitionImpl( new DefaultPlaceRequest( "FileExplorer" ) ) );
perspective.getRoot().insertChild( CompassPosition.WEST,
west );
return perspective;
}
@WorkbenchMenu
public Menus buildMenuBar() {
return MenuFactory
.newTopLevelMenu( AppConstants.INSTANCE.MenuExplore() )
.withItems( getExploreMenuItems() )
.endMenu()
.newTopLevelMenu( AppConstants.INSTANCE.MenuOrganizationalUnits() )
.withItems( getOrganizationalUnitsMenuItem() )
.endMenu()
.newTopLevelMenu( AppConstants.INSTANCE.MenuRepositories() )
.withItems( getRepositoriesMenuItems() )
.endMenu()
.newTopLevelMenu( "Editor Properties" )
.withItems( getEditorsMenuItem() )
.endMenu()
.build();
}
private List<? extends MenuItem> getRepositoriesMenuItems() {
ArrayList<MenuItem> menuItems = new ArrayList<MenuItem>();
menuItems.add( MenuFactory.newSimpleItem( AppConstants.INSTANCE.MenuListRepositories() ).respondsWith(
new Command() {
@Override
public void execute() {
placeManager.goTo( "RepositoriesEditor" );
}
} ).endMenu().build().getItems().get( 0 ) );
menuItems.add( MenuFactory.newSimpleItem( AppConstants.INSTANCE.MenuCloneRepository() ).respondsWith(
new Command() {
@Override
public void execute() {
cloneRepositoryPresenter.showForm();
}
} ).endMenu().build().getItems().get( 0 ) );
menuItems.add( MenuFactory.newSimpleItem( AppConstants.INSTANCE.MenuNewRepository() ).respondsWith(
new Command() {
@Override
public void execute() {
final CreateRepositoryWizard newRepositoryWizard = iocManager.lookupBean( CreateRepositoryWizard.class ).getInstance();
//When pop-up is closed destroy bean to avoid memory leak
newRepositoryWizard.onCloseCallback( new Callback<Void>() {
@Override
public void callback( Void result ) {
iocManager.destroyBean( newRepositoryWizard );
}
} );
newRepositoryWizard.start();
}
} ).endMenu().build().getItems().get( 0 ) );
return menuItems;
}
private List<? extends MenuItem> getEditorsMenuItem() {
ArrayList<MenuItem> menuItems = new ArrayList<MenuItem>();
menuItems.add( MenuFactory.newSimpleItem( "Test Scenario Editor" ).respondsWith(
new Command() {
@Override
public void execute() {
placeManager.goTo( "WiresPropertiesScreen" );
}
} ).endMenu().build().getItems().get( 0 ) );
return menuItems;
}
private List<? extends MenuItem> getOrganizationalUnitsMenuItem() {
ArrayList<MenuItem> menuItems = new ArrayList<MenuItem>();
menuItems.add( MenuFactory.newSimpleItem( AppConstants.INSTANCE.MenuManageOrganizationalUnits() ).respondsWith(
new Command() {
@Override
public void execute() {
placeManager.goTo( "org.kie.workbench.common.screens.organizationalunit.manager.OrganizationalUnitManager" );
}
} ).endMenu().build().getItems().get( 0 ) );
return menuItems;
}
private List<? extends MenuItem> getExploreMenuItems() {
ArrayList<MenuItem> menuItems = new ArrayList<MenuItem>();
menuItems.add( MenuFactory.newSimpleItem( AppConstants.INSTANCE.MenuExploreFiles() ).respondsWith(
new Command() {
@Override
public void execute() {
placeManager.goTo( "FileExplorer" );
}
} ).endMenu().build().getItems().get( 0 ) );
return menuItems;
}
}