/*
* 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.users.component;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.data.ObjectDataProvider;
import com.evolveum.midpoint.web.component.data.TablePanel;
import com.evolveum.midpoint.web.component.data.column.CheckBoxHeaderColumn;
import com.evolveum.midpoint.web.component.data.column.LinkColumn;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.StringResourceModel;
import java.util.ArrayList;
import java.util.List;
/**
* @author shood
* */
public class OrgUnitAddDeletePopup extends ModalWindow{
public enum ActionState{
DELETE,
ADD
}
private static final String ID_TABLE = "table";
private static final String ID_BUTTON_CANCEL = "cancelButton";
private static final String ID_BUTTON_ACTION = "actionButton";
private static final String DEFAULT_SORTABLE_PROPERTY = null;
private boolean initialized;
private ActionState state = ActionState.ADD;
public OrgUnitAddDeletePopup(String id){
super(id);
setTitle(createStringResource("orgUnitAddDeletePopup.title"));
showUnloadConfirmation(false);
setCssClassName(ModalWindow.CSS_CLASS_GRAY);
setCookieName(OrgUnitAddDeletePopup.class.getSimpleName() + ((int) (Math.random() * 100)));
setInitialWidth(500);
setInitialHeight(500);
setWidthUnit("px");
WebMarkupContainer content = new WebMarkupContainer(getContentId());
setContent(content);
}
@Override
protected void onBeforeRender(){
super.onBeforeRender();
if(initialized){
return;
}
initLayout((WebMarkupContainer) get(getContentId()));
initialized = true;
}
public void initLayout(WebMarkupContainer content){
List<IColumn<SelectableBean<ObjectType>, String>> columns = initColumns();
ObjectDataProvider provider = new ObjectDataProvider(getPageBase(), OrgType.class);
provider.setQuery(getDataProviderQuery());
TablePanel table = new TablePanel<SelectableBean<ObjectType>>(ID_TABLE, provider, columns);
table.setOutputMarkupId(true);
content.add(table);
AjaxButton cancelButton = new AjaxButton(ID_BUTTON_CANCEL,
createStringResource("orgUnitAddDeletePopup.button.cancel")) {
@Override
public void onClick(AjaxRequestTarget ajaxRequestTarget) {
cancelPerformed(ajaxRequestTarget);
}
};
content.add(cancelButton);
AjaxButton actionButton = new AjaxButton(ID_BUTTON_ACTION,
createActionButtonStringResource()) {
@Override
public void onClick(AjaxRequestTarget target) {
actionPerformed(target);
}
};
actionButton.add(new AttributeAppender("class", getActionButtonClass()));
content.add(actionButton);
}
private List<IColumn<SelectableBean<ObjectType>, String>> initColumns(){
List<IColumn<SelectableBean<ObjectType>, String>> columns = new ArrayList<IColumn<SelectableBean<ObjectType>, String>>();
IColumn column = new CheckBoxHeaderColumn<OrgType>();
columns.add(column);
column = new LinkColumn<SelectableBean<OrgType>>(createStringResource("orgUnitAddDeletePopup.column.name"), getSortableProperty(), "value.name"){
@Override
public void onClick(AjaxRequestTarget target, IModel<SelectableBean<OrgType>> rowModel){
OrgType org = rowModel.getObject().getValue();
chooseOperationPerformed(target, org);
}
};
columns.add(column);
return columns;
}
private StringResourceModel createActionButtonStringResource(){
if(state == ActionState.ADD){
return createStringResource("orgUnitAddDeletePopup.button.add");
} else {
return createStringResource("orgUnitAddDeletePopup.button.remove");
}
}
private String getActionButtonClass(){
if(state == ActionState.ADD){
return "btn btn-primary btn-sm";
} else {
return "btn btn-danger btn-sm";
}
}
public ActionState getState() {
return state;
}
public void setState(ActionState state, AjaxRequestTarget target) {
this.state = state;
AjaxButton actionButton = (AjaxButton) getContent().get(ID_BUTTON_ACTION);
actionButton.setModel(createActionButtonStringResource());
actionButton.add(new AttributeAppender("class", getActionButtonClass()));
target.add(actionButton);
TablePanel panel = getTable();
DataTable table = panel.getDataTable();
ObjectDataProvider provider = (ObjectDataProvider) table.getDataProvider();
provider.setQuery(getDataProviderQuery());
target.add(panel);
}
private TablePanel getTable(){
return (TablePanel) getContent().get(ID_TABLE);
}
private ObjectQuery getDataProviderQuery(){
if(state == ActionState.ADD){
return getAddProviderQuery();
} else {
return getRemoveProviderQuery();
}
}
public ObjectQuery getAddProviderQuery(){
return null;
}
public ObjectQuery getRemoveProviderQuery(){
return null;
}
public StringResourceModel createStringResource(String resourceKey, Object... objects) {
return PageBase.createStringResourceStatic(this, resourceKey, objects);
// return new StringResourceModel(resourceKey, this, null, resourceKey, objects);
}
public String getSortableProperty(){
return DEFAULT_SORTABLE_PROPERTY;
}
private PageBase getPageBase() {
return (PageBase) getPage();
}
private void cancelPerformed(AjaxRequestTarget target) {
close(target);
}
private void actionPerformed(AjaxRequestTarget target){
if(state == ActionState.ADD){
addPerformed(target, null);
} else {
removePerformed(target, null);
}
}
private void chooseOperationPerformed(AjaxRequestTarget target, OrgType org){
if(state == ActionState.ADD){
addPerformed(target, org);
} else {
removePerformed(target, org);
}
}
public void addPerformed(AjaxRequestTarget target, OrgType selected){}
public void removePerformed(AjaxRequestTarget target, OrgType selected){}
}