/*
* Copyright 2016 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.uberfire.ext.security.management.client.screens.explorer;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.enterprise.context.Dependent;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import com.google.gwt.user.client.ui.IsWidget;
import org.uberfire.client.annotations.WorkbenchPartTitle;
import org.uberfire.client.annotations.WorkbenchPartView;
import org.uberfire.client.annotations.WorkbenchScreen;
import org.uberfire.client.mvp.PlaceManager;
import org.uberfire.client.mvp.UberView;
import org.uberfire.client.workbench.widgets.common.ErrorPopupPresenter;
import org.uberfire.ext.security.management.client.ClientUserSystemManager;
import org.uberfire.ext.security.management.client.resources.i18n.UsersManagementWorkbenchConstants;
import org.uberfire.ext.security.management.client.screens.editor.GroupEditorScreen;
import org.uberfire.ext.security.management.client.screens.editor.RoleEditorScreen;
import org.uberfire.ext.security.management.client.screens.editor.UserEditorScreen;
import org.uberfire.ext.security.management.client.widgets.management.events.NewGroupEvent;
import org.uberfire.ext.security.management.client.widgets.management.events.NewUserEvent;
import org.uberfire.ext.security.management.client.widgets.management.events.OnErrorEvent;
import org.uberfire.ext.security.management.client.widgets.management.events.ReadGroupEvent;
import org.uberfire.ext.security.management.client.widgets.management.events.ReadRoleEvent;
import org.uberfire.ext.security.management.client.widgets.management.events.ReadUserEvent;
import org.uberfire.ext.security.management.client.widgets.management.explorer.GroupsExplorer;
import org.uberfire.ext.security.management.client.widgets.management.explorer.RolesExplorer;
import org.uberfire.ext.security.management.client.widgets.management.explorer.UsersExplorer;
import org.uberfire.lifecycle.OnClose;
import org.uberfire.lifecycle.OnStartup;
import org.uberfire.mvp.PlaceRequest;
import org.uberfire.mvp.impl.DefaultPlaceRequest;
import static org.uberfire.commons.validation.PortablePreconditions.checkNotNull;
@Dependent
@WorkbenchScreen(identifier = SecurityExplorerScreen.SCREEN_ID)
public class SecurityExplorerScreen {
public static final String SCREEN_ID = "SecurityExplorerScreen";
public static final String ROLES_TAB = "RolesTab";
public static final String GROUPS_TAB = "GroupsTab";
public static final String USERS_TAB = "UsersTab";
@Inject
View view;
@Inject
RolesExplorer rolesExplorer;
@Inject
GroupsExplorer groupsExplorer;
@Inject
UsersExplorer usersExplorer;
@Inject
ErrorPopupPresenter errorPopupPresenter;
@Inject
PlaceManager placeManager;
@Inject
ClientUserSystemManager userSystemManager;
@WorkbenchPartTitle
public String getTitle() {
return UsersManagementWorkbenchConstants.INSTANCE.securityExplorer();
}
@WorkbenchPartView
public IsWidget getWidget() {
return view;
}
@PostConstruct
public void init() {
view.init(this,
rolesExplorer,
groupsExplorer,
usersExplorer);
rolesExplorer.show();
view.rolesEnabled(true);
view.groupsEnabled(false);
view.usersEnabled(false);
}
@OnStartup
public void onStartup(final PlaceRequest placeRequest) {
final String activeTab = placeRequest.getParameter("activeTab",
ROLES_TAB);
userSystemManager.waitForInitialization(() -> {
if (userSystemManager.isActive()) {
groupsExplorer.show();
usersExplorer.show();
view.groupsEnabled(true);
view.usersEnabled(true);
if (activeTab.equals(USERS_TAB)) {
view.rolesActive(false);
view.groupsActive(false);
view.usersActive(true);
} else if (activeTab.equals(GROUPS_TAB)) {
view.rolesActive(false);
view.groupsActive(true);
view.usersActive(false);
}
}
});
}
@OnClose
public void onClose() {
rolesExplorer.clear();
groupsExplorer.clear();
usersExplorer.clear();
}
void onRoleRead(@Observes final ReadRoleEvent readRoleEvent) {
checkNotNull("event",
readRoleEvent);
final String name = readRoleEvent.getName();
final Map<String, String> params = new HashMap(1);
params.put(RoleEditorScreen.ROLE_NAME,
name);
placeManager.goTo(new DefaultPlaceRequest(RoleEditorScreen.SCREEN_ID,
params));
}
// Event processing
void onGroupRead(@Observes final ReadGroupEvent readGroupEvent) {
final String name = readGroupEvent.getName();
final Map<String, String> params = new HashMap<String, String>(1);
params.put(GroupEditorScreen.GROUP_NAME,
name);
placeManager.goTo(new DefaultPlaceRequest(GroupEditorScreen.SCREEN_ID,
params));
}
void onUserRead(@Observes final ReadUserEvent readUserEvent) {
checkNotNull("event",
readUserEvent);
final String id = readUserEvent.getIdentifier();
final Map<String, String> params = new HashMap<String, String>(1);
params.put(UserEditorScreen.USER_ID,
id);
placeManager.goTo(new DefaultPlaceRequest(UserEditorScreen.SCREEN_ID,
params));
}
void onGroupCreate(@Observes final NewGroupEvent newGroupEvent) {
checkNotNull("event",
newGroupEvent);
final Map<String, String> params = new HashMap(1);
params.put(GroupEditorScreen.ADD_GROUP,
"true");
placeManager.goTo(new DefaultPlaceRequest(GroupEditorScreen.SCREEN_ID,
params));
}
void onUserCreate(@Observes final NewUserEvent newUserEvent) {
checkNotNull("event",
newUserEvent);
final Map<String, String> params = new HashMap(1);
params.put(UserEditorScreen.ADD_USER,
"true");
placeManager.goTo(new DefaultPlaceRequest(UserEditorScreen.SCREEN_ID,
params));
}
void onErrorEvent(@Observes final OnErrorEvent onErrorEvent) {
checkNotNull("event",
onErrorEvent);
final Throwable cause = onErrorEvent.getCause();
final String message = onErrorEvent.getMessage();
final String m = message != null ? message : cause.getMessage();
errorPopupPresenter.showMessage(m);
}
public interface View extends UberView<SecurityExplorerScreen> {
void init(SecurityExplorerScreen presenter,
IsWidget rolesExplorer,
IsWidget groupsExplorer,
IsWidget usersExplorer);
void rolesEnabled(boolean enabled);
void groupsEnabled(boolean enabled);
void usersEnabled(boolean enabled);
void rolesActive(boolean active);
void groupsActive(boolean active);
void usersActive(boolean active);
}
}