package com.evolveum.midpoint.web.page.admin.certification.dto;
import com.evolveum.midpoint.prism.PrismConstants;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.query.ObjectOrdering;
import com.evolveum.midpoint.prism.query.OrderDirection;
import com.evolveum.midpoint.schema.SchemaConstantsGenerated;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCaseType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
import org.jetbrains.annotations.NotNull;
import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static com.evolveum.midpoint.prism.PrismConstants.T_PARENT;
/**
* TODO better class name
* @author mederly
*/
public class SearchingUtils {
@SuppressWarnings("unused")
private static final Trace LOGGER = TraceManager.getTrace(SearchingUtils.class);
public static final String TARGET_NAME = AccessCertificationCaseType.F_TARGET_REF.getLocalPart();
public static final String OBJECT_NAME = AccessCertificationCaseType.F_OBJECT_REF.getLocalPart();
public static final String TENANT_NAME = AccessCertificationCaseType.F_TENANT_REF.getLocalPart(); // seem to be unused now
public static final String ORG_NAME = AccessCertificationCaseType.F_ORG_REF.getLocalPart(); // seem to be unused now
public static final String CURRENT_REVIEW_DEADLINE = AccessCertificationCaseType.F_CURRENT_STAGE_DEADLINE.getLocalPart();
public static final String CURRENT_REVIEW_REQUESTED_TIMESTAMP = AccessCertificationCaseType.F_CURRENT_STAGE_CREATE_TIMESTAMP.getLocalPart();
public static final String CAMPAIGN_NAME = "campaignName";
@NotNull
public static List<ObjectOrdering> createObjectOrderings(SortParam<String> sortParam, boolean isWorkItem) {
if (sortParam == null || sortParam.getProperty() == null) {
return Collections.emptyList();
}
String propertyName = sortParam.getProperty();
ItemPath casePath = isWorkItem ? new ItemPath(T_PARENT) : ItemPath.EMPTY_PATH;
ItemPath campaignPath = casePath.subPath(T_PARENT);
ItemPath primaryItemPath;
if (TARGET_NAME.equals(propertyName)) {
primaryItemPath = casePath.subPath(AccessCertificationCaseType.F_TARGET_REF, PrismConstants.T_OBJECT_REFERENCE, ObjectType.F_NAME);
} else if (OBJECT_NAME.equals(propertyName)) {
primaryItemPath = casePath.subPath(AccessCertificationCaseType.F_OBJECT_REF, PrismConstants.T_OBJECT_REFERENCE, ObjectType.F_NAME);
} else if (TENANT_NAME.equals(propertyName)) {
primaryItemPath = casePath.subPath(AccessCertificationCaseType.F_TENANT_REF, PrismConstants.T_OBJECT_REFERENCE, ObjectType.F_NAME);
} else if (ORG_NAME.equals(propertyName)) {
primaryItemPath = casePath.subPath(AccessCertificationCaseType.F_ORG_REF, PrismConstants.T_OBJECT_REFERENCE, ObjectType.F_NAME);
} else if (CURRENT_REVIEW_DEADLINE.equals(propertyName)) {
primaryItemPath = casePath.subPath(AccessCertificationCaseType.F_CURRENT_STAGE_DEADLINE);
} else if (CURRENT_REVIEW_REQUESTED_TIMESTAMP.equals(propertyName)) {
primaryItemPath = casePath.subPath(AccessCertificationCaseType.F_CURRENT_STAGE_CREATE_TIMESTAMP);
} else if (CAMPAIGN_NAME.equals(propertyName)) {
primaryItemPath = campaignPath.subPath(ObjectType.F_NAME);
} else {
primaryItemPath = new ItemPath(new QName(SchemaConstantsGenerated.NS_COMMON, propertyName));
}
List<ObjectOrdering> rv = new ArrayList<>();
rv.add(ObjectOrdering.createOrdering(primaryItemPath, sortParam.isAscending() ? OrderDirection.ASCENDING : OrderDirection.DESCENDING));
// additional criteria are used to avoid random shuffling if first criteria is too vague)
rv.add(ObjectOrdering.createOrdering(campaignPath.subPath(PrismConstants.T_ID), OrderDirection.ASCENDING)); // campaign OID
rv.add(ObjectOrdering.createOrdering(casePath.subPath(PrismConstants.T_ID), OrderDirection.ASCENDING)); // case ID
if (isWorkItem) {
rv.add(ObjectOrdering.createOrdering(new ItemPath(PrismConstants.T_ID), OrderDirection.ASCENDING)); // work item ID
}
return rv;
}
}