/* * Copyright (c) 2010-2016 Evolveum * * 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 com.evolveum.midpoint.gui.api.util; import com.evolveum.midpoint.model.api.ModelInteractionService; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.task.api.TaskManager; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SystemException; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.web.security.MidPointApplication; import com.evolveum.midpoint.web.security.SecurityUtils; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; import org.apache.wicket.model.IModel; import javax.xml.namespace.QName; import java.util.ArrayList; import java.util.List; /** * Created by Viliam Repan (lazyman). */ public class FocusTabVisibleBehavior<T extends ObjectType> extends VisibleEnableBehaviour { private static final String OPERATION_LOAD_GUI_CONFIGURATION = FocusTabVisibleBehavior.class.getName() + ".loadGuiConfiguration"; private IModel<PrismObject<T>> objectModel; private String uiAuthorizationUrl; public FocusTabVisibleBehavior(IModel<PrismObject<T>> objectModel, String uiAuthorizationUrl) { this.objectModel = objectModel; this.uiAuthorizationUrl = uiAuthorizationUrl; } private ModelInteractionService getModelInteractionService() { return ((MidPointApplication) MidPointApplication.get()).getModelInteractionService(); } private TaskManager getTaskManager() { return ((MidPointApplication) MidPointApplication.get()).getTaskManager(); } @Override public boolean isVisible() { PrismObject obj = objectModel.getObject(); if (obj == null) { return true; } QName type = obj.getDefinition().getTypeName(); Task task = WebModelServiceUtils.createSimpleTask(OPERATION_LOAD_GUI_CONFIGURATION, SecurityUtils.getPrincipalUser().getUser().asPrismObject(), getTaskManager()); OperationResult result = task.getResult(); AdminGuiConfigurationType config; try { config = getModelInteractionService().getAdminGuiConfiguration(task, result); } catch (ObjectNotFoundException | SchemaException e) { throw new SystemException("Cannot load GUI configuration: " + e.getMessage(), e); } // find all object form definitions for specified type, if there is none we'll show all default tabs List<ObjectFormType> forms = findObjectForm(config, type); if (forms.isEmpty()) { return true; } // we'll try to find includeDefault, if there is includeDefault=true, we can return true (all tabs visible) for (ObjectFormType form : forms) { if (BooleanUtils.isTrue(form.isIncludeDefaultForms())) { return true; } } for (ObjectFormType form : forms) { FormSpecificationType spec = form.getFormSpecification(); if (spec == null || StringUtils.isEmpty(spec.getPanelUri())) { continue; } if (ObjectUtils.equals(uiAuthorizationUrl, spec.getPanelUri())) { return true; } } return false; } private List<ObjectFormType> findObjectForm(AdminGuiConfigurationType config, QName type) { List<ObjectFormType> result = new ArrayList<>(); if (config == null || config.getObjectForms() == null) { return result; } ObjectFormsType forms = config.getObjectForms(); List<ObjectFormType> list = forms.getObjectForm(); if (list.isEmpty()) { return result; } for (ObjectFormType form : list) { if (type.equals(form.getType())) { result.add(form); } } return result; } }