Skip to content

Commit

Permalink
Merge remote-tracking branch 'refs/remotes/origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Oct 14, 2020
2 parents c7ab996 + 8b51391 commit 74637ee
Show file tree
Hide file tree
Showing 43 changed files with 838 additions and 691 deletions.
Expand Up @@ -389,24 +389,23 @@ public IModel<?> getDataModel(IModel<SelectableBean<O>> rowModel) {
return Model.of("");
}
Item<?, ?> item = null;
if (columnPath != null) {
item = value.asPrismContainerValue().findItem(columnPath);
}
Item object = value.asPrismObject();
if (item != null) {
object = item;
}
if (expression != null) {
Task task = getPageBase().createSimpleTask("evaluate column expression");
try {
if (columnPath != null) {
item = value.asPrismContainerValue().findItem(columnPath);
}
Item object = value.asPrismObject();
if (item != null) {
object = item;
}
ExpressionVariables expressionVariables = new ExpressionVariables();
expressionVariables.put(ExpressionConstants.VAR_OBJECT, object, object.getClass());
String stringValue = ExpressionUtil.evaluateStringExpression(expressionVariables, getPageBase().getPrismContext(), expression,
MiscSchemaUtil.getExpressionProfile(), getPageBase().getExpressionFactory(), "evaluate column expression",
task, task.getResult()).iterator().next();
return Model.of(stringValue);
} catch (SchemaException | ExpressionEvaluationException | ObjectNotFoundException | CommunicationException
| ConfigurationException | SecurityViolationException e) {
} catch (Exception e) {
LOGGER.error("Couldn't execute expression for name column");
OperationResult result = task.getResult();
OperationResultStatusPresentationProperties props = OperationResultStatusPresentationProperties.parseOperationalResultStatus(result.getStatus());
Expand Down
Expand Up @@ -17,7 +17,6 @@
*/
public interface PrismObjectWrapper<O extends ObjectType> extends PrismContainerWrapper<O> {


ObjectDelta<O> getObjectDelta() throws SchemaException;

PrismObject<O> getObject();
Expand Down
Expand Up @@ -663,7 +663,7 @@ public static TaskType createSingleRecurrenceTask(String taskName, QName applica

public static boolean canSuspendTask(TaskType task, PageBase pageBase) {
return pageBase.isAuthorized(ModelAuthorizationAction.SUSPEND_TASK, task.asPrismObject())
&& (isRunnableTask(task) || isRunningTask(task))
&& (isRunnableTask(task) || isRunningTask(task) || isWaitingTask(task))
&& !isWorkflowTask(task);
}

Expand All @@ -687,6 +687,10 @@ public static boolean isRunningTask(TaskType task) {
return task != null && task.getNodeAsObserved() != null;
}

public static boolean isWaitingTask(TaskType task) {
return task != null && TaskExecutionStatusType.WAITING == task.getExecutionStatus();
}

public static boolean isSuspendedTask(TaskType task) {
return task != null && TaskExecutionStatusType.SUSPENDED == task.getExecutionStatus();
}
Expand Down
Expand Up @@ -6,31 +6,9 @@
*/
package com.evolveum.midpoint.gui.impl.component.box;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;

import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.model.api.util.DashboardUtils;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.xnode.ListXNode;
import com.evolveum.midpoint.prism.xnode.MapXNode;
import com.evolveum.midpoint.prism.xnode.PrimitiveXNode;
import com.evolveum.midpoint.prism.xnode.XNode;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.web.page.admin.server.PageTask;
import com.evolveum.midpoint.web.page.admin.server.PageTasks;
import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
import org.apache.wicket.AttributeModifier;
Expand All @@ -41,31 +19,40 @@
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;

import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.model.api.interaction.DashboardWidget;
import com.evolveum.midpoint.model.api.util.DashboardUtils;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.schema.ResourceShadowDiscriminator;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectQueryUtil;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.CommunicationException;
import com.evolveum.midpoint.util.exception.ConfigurationException;
import com.evolveum.midpoint.util.exception.ExpressionEvaluationException;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.exception.SecurityViolationException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.page.admin.reports.PageAuditLogViewer;
import com.evolveum.midpoint.web.page.admin.resources.PageResource;
import com.evolveum.midpoint.web.page.admin.resources.PageResources;
import com.evolveum.midpoint.web.page.admin.roles.PageRole;
import com.evolveum.midpoint.web.page.admin.roles.PageRoles;
import com.evolveum.midpoint.web.page.admin.server.PageTask;
import com.evolveum.midpoint.web.page.admin.server.PageTasks;
import com.evolveum.midpoint.web.page.admin.services.PageService;
import com.evolveum.midpoint.web.page.admin.services.PageServices;
import com.evolveum.midpoint.web.page.admin.users.PageOrgTree;
import com.evolveum.midpoint.web.page.admin.users.PageOrgUnit;
import com.evolveum.midpoint.web.page.admin.users.PageUser;
import com.evolveum.midpoint.web.page.admin.users.PageUsers;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.query_3.SearchFilterType;

/**
* @author skublik
Expand Down Expand Up @@ -207,10 +194,10 @@ private void navigateToObjectCollectionPage(DashboardWidgetType dashboardWidget)
PageParameters parameters = new PageParameters();
if (QNameUtil.match(collection.getType(), ShadowType.COMPLEX_TYPE)) {
pageType = PageResource.class;
String oid = getResourceOid(collection.getFilter().getFilterClauseXNode());
String oid = getResourceOid(collection.getFilter());
if (oid != null) {
parameters.add(OnePageParameterEncoder.PARAMETER, oid);
Integer tab = getResourceTab(collection.getFilter().getFilterClauseXNode());
Integer tab = getResourceTab(collection.getFilter());
if (tab != null) {
parameters.add(PageResource.PARAMETER_SELECTED_TAB, tab);
} else {
Expand Down Expand Up @@ -257,72 +244,22 @@ private void navigateToObjectPage() {
getPageBase().navigateToNext(pageType, parameters);
}

private Integer getResourceTab(MapXNode mapXNode) {
for (QName name : mapXNode.keySet()) {
XNode xNode = mapXNode.get(name);
if (QNameUtil.match(name, new QName("equal"))) {
List<MapXNode> listXNode = new ArrayList<>();
if (xNode instanceof MapXNode) {
listXNode.add((MapXNode) xNode);
} else if (xNode instanceof ListXNode) {
listXNode.addAll((Collection<? extends MapXNode>) ((ListXNode) xNode).asList());
}
for (MapXNode equalXNode : listXNode) {
if (equalXNode.get(new QName("path")) != null
&& ((ItemPathType) ((PrimitiveXNode) equalXNode.get(new QName("path")))
.getValue()).getItemPath().equivalent(ItemPath.create("kind"))) {
XNode value = equalXNode.get(new QName("value"));
if (value instanceof PrimitiveXNode) {
ShadowKindType kind = ShadowKindType.fromValue(((PrimitiveXNode)value).getValueParser().getStringValue());
if (ShadowKindType.ACCOUNT.equals(kind)) {
return 2;
} else if (ShadowKindType.ENTITLEMENT.equals(kind)) {
return 3;
} else if (ShadowKindType.GENERIC.equals(kind)) {
return 4;
}
return null;
}
}
}
}
if (xNode instanceof MapXNode) {
Integer ret = getResourceTab((MapXNode) xNode);
if (ret != null) {
return ret;
}
}
private Integer getResourceTab(SearchFilterType searchFilterType) {
ResourceShadowDiscriminator discriminator = getResourceShadowDiscriminator(searchFilterType);
if (discriminator == null) {
return null;
}
return null;
}

private String getResourceOid(MapXNode mapXNode) {
for (QName name : mapXNode.keySet()) {
XNode xNode = mapXNode.get(name);
if (QNameUtil.match(name, new QName("ref"))) {
List<MapXNode> listXNode = new ArrayList<>();
if (xNode instanceof MapXNode) {
listXNode.add((MapXNode) xNode);
} else if (xNode instanceof ListXNode) {
listXNode.addAll((Collection<? extends MapXNode>) ((ListXNode) xNode).asList());
}
for (MapXNode equalXNode : listXNode) {
if (equalXNode.get(new QName("path")) != null
&& ((ItemPathType) ((PrimitiveXNode) equalXNode.get(new QName("path")))
.getValue()).getItemPath().equivalent(ItemPath.create("resourceRef"))) {
XNode value = equalXNode.get(new QName("value"));
if (value instanceof MapXNode) {
PrimitiveXNode oid = ((PrimitiveXNode) ((MapXNode) value).get(new QName("oid")));
if (oid != null) {
return oid.getValueParser().getStringValue();
}
}
}
}
}
if (xNode instanceof MapXNode) {
return getResourceOid((MapXNode) xNode);
}
ShadowKindType shadowKindType = discriminator.getKind();
if (shadowKindType == null) {
return null;
}
switch (shadowKindType) {
case ACCOUNT:
return 2;
case ENTITLEMENT:
return 3;
case GENERIC:
return 4;
}
return null;
}
Expand All @@ -341,8 +278,8 @@ protected boolean existLinkRef() {
ObjectCollectionType collection = getObjectCollectionType();
if(collection != null && collection.getType() != null && collection.getType().getLocalPart() != null) {
if (QNameUtil.match(collection.getType(), ShadowType.COMPLEX_TYPE)) {
String oid = getResourceOid(collection.getFilter().getFilterClauseXNode());
return !StringUtils.isEmpty(oid);
String oid = getResourceOid(collection.getFilter());
return StringUtils.isNotBlank(oid);
}
return getLinksRefCollections().containsKey(collection.getType().getLocalPart());
} else {
Expand All @@ -366,45 +303,34 @@ protected boolean existLinkRef() {
return false;
}

private boolean isDataNull(DashboardWidgetType dashboardWidgetType) {
if(dashboardWidgetType.getData() == null) {
LOGGER.error("Data is not found in widget " + dashboardWidgetType.getIdentifier());
return true;
}
return false;
private String getResourceOid(SearchFilterType searchFilterType) {
ResourceShadowDiscriminator discriminator = getResourceShadowDiscriminator(searchFilterType);
if (discriminator == null) {
return null;
}
return discriminator.getResourceOid();
}

private boolean isPresentationNull(IModel<DashboardWidgetType> model) {
if(model.getObject().getPresentation() == null) {
LOGGER.error("Presentation is not found in widget " + model.getObject().getIdentifier());
return true;
}
return false;
}
private ResourceShadowDiscriminator getResourceShadowDiscriminator(SearchFilterType searchFilterType) {
try {
ObjectFilter filter = getPrismContext().getQueryConverter().createObjectFilter(ShadowType.class, searchFilterType);
return ObjectQueryUtil.getCoordinates(filter, getPrismContext());
} catch (SchemaException e) {
LOGGER.error("Cannot convert filter: {}", e.getMessage(), e);

private boolean isViewOfWidgetNull(IModel<DashboardWidgetType> model) {
if(isPresentationNull(model)) {
return true;
}
if(model.getObject().getPresentation().getView() == null) {
LOGGER.error("View of presentation is not found in widget " + model.getObject().getIdentifier());
return true;
}
return false;
return null;
}

private boolean isSourceTypeOfDataNull(DashboardWidgetType dashboardWidgetType) {
if(isDataNull(dashboardWidgetType)) {
return true;
}
if(dashboardWidgetType.getData().getSourceType() == null) {
LOGGER.error("SourceType of data is not found in widget " + dashboardWidgetType.getIdentifier());
private boolean isDataNull(DashboardWidgetType dashboardWidgetType) {
if(dashboardWidgetType.getData() == null) {
LOGGER.error("Data is not found in widget " + dashboardWidgetType.getIdentifier());
return true;
}
return false;
}

private boolean isCollectionOfDataNull(DashboardWidgetType model) {
private boolean isCollectionOfDataNull(DashboardWidgetType model) {
if(isDataNull(model)) {
return true;
}
Expand Down
Expand Up @@ -51,18 +51,18 @@ protected void customInitLayout(WebMarkupContainer parentInfoBox) {
Label moreInfoBoxLabel = new Label(ID_MORE_INFO_BOX_LABEL, getPageBase().createStringResource("PageDashboard.infobox.moreInfo"));
moreInfoBox.add(moreInfoBoxLabel);

moreInfoBox.add(new AjaxEventBehavior("click") {
private static final long serialVersionUID = 1L;

@Override
protected void onEvent(AjaxRequestTarget target) {
navigateToPage();
}
});
moreInfoBox.add(AttributeModifier.append("class", "cursor-pointer"));

setInvisible(moreInfoBox);
moreInfoBox.add(AttributeModifier.append("style", "height: 26px; background:rgba(0, 0, 0, 0.1) !important;"));
moreInfoBox.add(new AjaxEventBehavior("click") {
private static final long serialVersionUID = 1L;

@Override
protected void onEvent(AjaxRequestTarget target) {
navigateToPage();
}
});
moreInfoBox.add(AttributeModifier.append("class", "cursor-pointer"));

setInvisible(moreInfoBox);
moreInfoBox.add(AttributeModifier.append("style", "height: 26px; background:rgba(0, 0, 0, 0.1) !important;"));
}

@Override
Expand Down
Expand Up @@ -10,7 +10,7 @@
<body>
<wicket:panel>
<div class="search-item" wicket:id="searchItemContainer">
<div class="col-sm-3 search-item-label" wicket:id="searchItemLabel" />
<div class="col-sm-3 search-item-label" wicket:id="searchItemLabel" style="width: auto !important;" />
<div class="search-item-field" wicket:id="searchItemField" />
<a wicket:id="removeButton" class="btn btn-xs btn-default search-item-remove-button pull-right">
<i class="fa fa-remove"/>
Expand Down
Expand Up @@ -200,10 +200,10 @@ public void bind(Component component) {
default:
searchItemField = new TextPanel<String>(ID_SEARCH_ITEM_FIELD, new PropertyModel<>(getModel(), "value"));
}
searchItemField.add(AttributeModifier.append("class", "col-sm-7"));
searchItemField.add(AttributeModifier.append("class", "col-sm-6"));
if (searchItemField instanceof InputPanel && !(searchItemField instanceof AutoCompleteTextPanel)) {
((InputPanel) searchItemField).getBaseFormComponent().add(WebComponentUtil.getSubmitOnEnterKeyDownBehavior("searchSimple"));
((InputPanel) searchItemField).getBaseFormComponent().add(AttributeAppender.append("style", "width: 200px; max-width: 400px !important;"));
((InputPanel) searchItemField).getBaseFormComponent().add(AttributeAppender.append("style", "width: 140px; max-width: 400px !important;"));
((InputPanel) searchItemField).getBaseFormComponent().add(new EmptyOnBlurAjaxFormUpdatingBehaviour());
}
}
Expand Down

0 comments on commit 74637ee

Please sign in to comment.