/*
* Copyright (c) 2010-2017 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.server;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.query.builder.QueryBuilder;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.data.ObjectDataProvider;
import com.evolveum.midpoint.web.component.data.TablePanel;
import com.evolveum.midpoint.web.component.form.Form;
import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectTabPanel;
import com.evolveum.midpoint.web.component.prism.ObjectWrapper;
import com.evolveum.midpoint.web.page.admin.server.dto.TaskDto;
import com.evolveum.midpoint.web.page.admin.server.dto.TaskErrorDto;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.wicket.Component;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.model.IModel;
import java.util.*;
/**
* Created by honchar.
*/
public class TaskErrorsTabPanel extends AbstractObjectTabPanel<TaskType> implements TaskTabPanel {
private static final long serialVersionUID = 1L;
private static final String ID_TASK_ERRORS = "taskErrors";
public TaskErrorsTabPanel(String id, Form mainForm,
LoadableModel<ObjectWrapper<TaskType>> taskWrapperModel,
IModel<TaskDto> taskDtoModel, PageBase pageBase) {
super(id, mainForm, taskWrapperModel, pageBase);
initLayout(taskDtoModel, pageBase);
setOutputMarkupId(true);
}
private void initLayout(final IModel<TaskDto> taskDtoModel, PageBase pageBase) {
ObjectDataProvider<TaskErrorDto, ObjectType> provider = new ObjectDataProvider<TaskErrorDto, ObjectType>
(TaskErrorsTabPanel.this, ObjectType.class) {
private static final long serialVersionUID = 1L;
@Override
public TaskErrorDto createDataObjectWrapper(PrismObject<ObjectType> obj) {
return convertToTaskErrorDto(obj.asObjectable(), taskDtoModel);
}
@Override
public void setQuery(ObjectQuery query) {
super.setQuery(query);
}
@Override
public ObjectQuery getQuery() {
return createContentQuery(taskDtoModel.getObject().getOid(), pageBase);
}
};
TablePanel resultTablePanel = new TablePanel<>(ID_TASK_ERRORS, provider, initColumns());
resultTablePanel.setStyle("padding-top: 0px;");
resultTablePanel.setShowPaging(false);
resultTablePanel.setOutputMarkupId(true);
add(resultTablePanel);
}
private TaskErrorDto convertToTaskErrorDto(ObjectType object, IModel<TaskDto> taskDtoModel){
return new TaskErrorDto(object, taskDtoModel.getObject().getOid());
}
private List<IColumn<TaskErrorDto, String>> initColumns() {
List<IColumn<TaskErrorDto, String>> columns = new ArrayList<IColumn<TaskErrorDto, String>>();
columns.add(new PropertyColumn<>(createStringResource("pageTaskEdit.taskErros.objectName"), TaskErrorDto.F_OBJECT_REF_NAME));
columns.add(new PropertyColumn<>(createStringResource("pageTaskEdit.taskErros.status"), TaskErrorDto.F_STATUS));
columns.add(new PropertyColumn<>(createStringResource("pageTaskEdit.taskErros.message"), TaskErrorDto.F_MESSAGE));
return columns;
}
private ObjectQuery createContentQuery(String taskOid, PageBase pageBase){
return QueryBuilder.queryFor(ObjectType.class, pageBase.getPrismContext())
.exists(ObjectType.F_OPERATION_EXECUTION)
.block()
.item(OperationExecutionType.F_TASK_REF).ref(taskOid)
.and()
.block().item(OperationExecutionType.F_STATUS)
.eq(OperationResultStatusType.FATAL_ERROR)
.or().item(OperationExecutionType.F_STATUS)
.eq(OperationResultStatusType.PARTIAL_ERROR)
.or().item(OperationExecutionType.F_STATUS)
.eq(OperationResultStatusType.WARNING)
.endBlock()
.endBlock()
.build();
}
@Override
public Collection<Component> getComponentsToUpdate() {
return Collections.singleton(get(ID_TASK_ERRORS));
}
}