/* * 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.web.page.admin.configuration.component; import com.evolveum.midpoint.gui.api.component.BasePanel; import com.evolveum.midpoint.gui.api.component.ObjectBrowserPanel; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.prism.query.ObjectQuery; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.web.page.admin.dto.ObjectViewDto; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import javax.xml.namespace.QName; import java.util.ArrayList; import java.util.List; /** * @author shood * * TODO use a better name (ChooseObjectPanel ? ObjectChoosePanel ?) * Distinguish between chooser panels that reside on "main page" and * the one that resides in the popup window (ObjectSelectionPanel). */ public class ChooseTypePanel<T extends ObjectType> extends BasePanel<ObjectViewDto<T>> { private static final long serialVersionUID = 1L; private static final Trace LOGGER = TraceManager.getTrace(ChooseTypePanel.class); private static final String ID_OBJECT_NAME = "name"; private static final String ID_LINK_CHOOSE = "choose"; private static final String ID_LINK_REMOVE = "remove"; public ChooseTypePanel(String id, IModel<ObjectViewDto<T>> model){ super(id, model); initLayout(); } protected void initLayout() { final Label name = new Label(ID_OBJECT_NAME, new AbstractReadOnlyModel<String>(){ private static final long serialVersionUID = 1L; @Override public String getObject() { ObjectViewDto<T> dto = getModel().getObject(); if (dto != null) { if (dto.getName() != null) return getModel().getObject().getName(); else if (ObjectViewDto.BAD_OID.equals(dto.getOid())) { return createStringResource("chooseTypePanel.ObjectNameValue.badOid").getString(); } else { return createStringResource("chooseTypePanel.ObjectNameValue.null").getString(); } } return ""; } }); name.setOutputMarkupId(true); AjaxLink<String> choose = new AjaxLink<String>(ID_LINK_CHOOSE) { private static final long serialVersionUID = 1L; @Override public void onClick(AjaxRequestTarget target) { changeOptionPerformed(target); } }; AjaxLink<String> remove = new AjaxLink<String>(ID_LINK_REMOVE) { private static final long serialVersionUID = 1L; @Override public void onClick(AjaxRequestTarget target) { setToDefault(); target.add(name); } }; add(choose); add(remove); add(name); } protected boolean isSearchEnabled(){ return false; } protected QName getSearchProperty(){ return null; } protected ObjectQuery getChooseQuery(){ return null; } private void choosePerformed(AjaxRequestTarget target, T object){ getPageBase().hideMainPopup(target); ObjectViewDto<T> o = getModel().getObject(); o.setName(WebComponentUtil.getName(object)); o.setOid(object.getOid()); if(LOGGER.isTraceEnabled()){ LOGGER.trace("Choose operation performed: {} ({})", o.getName(), o.getOid()); } target.add(get(ID_OBJECT_NAME)); } private void changeOptionPerformed(AjaxRequestTarget target){ Class<T> type = getObjectTypeClass(); List<QName> supportedTypes = new ArrayList<>(); supportedTypes.add(WebComponentUtil.classToQName(getPageBase().getPrismContext(), type)); ObjectBrowserPanel<T> objectBrowserPanel = new ObjectBrowserPanel<T>(getPageBase().getMainPopupBodyId(), type, supportedTypes, false, getPageBase(), getChooseQuery() != null ? getChooseQuery().getFilter() : null){ private static final long serialVersionUID = 1L; @Override protected void onSelectPerformed(AjaxRequestTarget target, T focus) { choosePerformed(target, focus); } }; objectBrowserPanel.setOutputMarkupId(true); getPageBase().showMainPopup(objectBrowserPanel, target); } private void setToDefault(){ ObjectViewDto<T> dto = new ObjectViewDto<T>(); dto.setType(getObjectTypeClass()); getModel().setObject(dto); } public Class<T> getObjectTypeClass(){ return ChooseTypePanel.this.getModelObject().getType(); } public void setPanelEnabled(boolean isEnabled){ get(ID_LINK_CHOOSE).setEnabled(isEnabled); get(ID_LINK_REMOVE).setEnabled(isEnabled); } }