Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Nov 30, 2017
2 parents 31cf91c + c85bfd0 commit c348f81
Show file tree
Hide file tree
Showing 98 changed files with 1,884 additions and 852 deletions.
Expand Up @@ -1718,7 +1718,7 @@ public boolean isVisible() {

if (getPage() instanceof PageAdminFocus) {
PageAdminFocus page = (PageAdminFocus) getPage();
return page.isOidParameterExists() || page.isObjectAlreadyLoaded;
return page.isOidParameterExists() || page.isEditingFocus();
} else if (getPage() instanceof PageResourceWizard) {
PageResourceWizard page = (PageResourceWizard) getPage();
return !page.isNewResource();
Expand Down Expand Up @@ -1746,7 +1746,7 @@ protected boolean isMenuActive() {

if (PageBase.this.getPage() instanceof PageAdminFocus) {
PageAdminFocus page = (PageAdminFocus) PageBase.this.getPage();
return !page.isOidParameterExists() && !page.isObjectAlreadyLoaded;
return !page.isOidParameterExists() && !page.isEditingFocus();
} else if (PageBase.this.getPage() instanceof PageResourceWizard) {
PageResourceWizard page = (PageResourceWizard) PageBase.this.getPage();
return page.isNewResource();
Expand Down
Expand Up @@ -86,6 +86,7 @@
import org.apache.wicket.util.visit.IVisit;
import org.apache.wicket.util.visit.IVisitor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.joda.time.format.DateTimeFormat;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
Expand Down Expand Up @@ -386,6 +387,24 @@ private static Object[] resolveArguments(Object[] args, Component component) {
return rv;
}

// TODO add other classes; probably move to some enum
@Nullable
public static String getAuthorizationActionForTargetClass(Class targetClass) {
if (UserType.class.equals(targetClass)) {
return AuthorizationConstants.AUTZ_UI_USER_URL;
} else if (OrgType.class.equals(targetClass)) {
return AuthorizationConstants.AUTZ_UI_ORG_UNIT_URL;
} else if (RoleType.class.equals(targetClass)) {
return AuthorizationConstants.AUTZ_UI_ROLE_URL;
} else if (ServiceType.class.equals(targetClass)) {
return AuthorizationConstants.AUTZ_UI_SERVICE_URL;
} else if (ResourceType.class.equals(targetClass)) {
return AuthorizationConstants.AUTZ_UI_RESOURCE_URL;
} else {
return null;
}
}

public enum Channel {
// TODO: move this to schema component
LIVE_SYNC(SchemaConstants.CHANGE_CHANNEL_LIVE_SYNC_URI),
Expand Down Expand Up @@ -1858,16 +1877,20 @@ public static void dispatchToObjectDetailsPage(ObjectReferenceType objectRef, Co
dispatchToObjectDetailsPage(targetClass, objectRef.getOid(), component, failIfUnsupported);
}

// shows the actual object that is passed via parameter (not its state in repository)
public static void dispatchToObjectDetailsPage(PrismObject obj, Component component) {
dispatchToObjectDetailsPage(obj, false, component);
}

// shows the actual object that is passed via parameter (not its state in repository)
public static void dispatchToObjectDetailsPage(PrismObject obj, boolean isNewObject, Component component) {
Class newObjectPageClass = getObjectDetailsPage(obj.getCompileTimeClass());
if (newObjectPageClass == null) {
throw new IllegalArgumentException("Cannot determine details page for "+obj.getCompileTimeClass());
}

Constructor constructor;
try {
constructor = newObjectPageClass.getConstructor(PrismObject.class);
constructor = newObjectPageClass.getConstructor(PrismObject.class, boolean.class);

} catch (NoSuchMethodException | SecurityException e) {
throw new SystemException("Unable to locate constructor (PrismObject) in " + newObjectPageClass
Expand All @@ -1876,7 +1899,7 @@ public static void dispatchToObjectDetailsPage(PrismObject obj, Component compon

PageBase page;
try {
page = (PageBase) constructor.newInstance(obj);
page = (PageBase) constructor.newInstance(obj, isNewObject);
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
throw new SystemException("Error instantiating " + newObjectPageClass + ": " + e.getMessage(), e);
Expand Down
Expand Up @@ -222,7 +222,7 @@ public static <T extends ObjectType> PrismObject<T> loadObject(Class<T> type, St
PageBase page, Task task, OperationResult result) {
return loadObject(type, oid, options, true, page, task, result);
}

@Nullable
public static <T extends ObjectType> PrismObject<T> loadObject(Class<T> type, String oid,
Collection<SelectorOptions<GetOperationOptions>> options, boolean allowNotFound,
Expand Down Expand Up @@ -281,6 +281,67 @@ public static <T extends ObjectType> PrismObject<T> loadObject(Class<T> type, St

return object;
}

//TODO consider using modelServiceLocator instead of PageBase in other methods.. Do we even need it? What about showResult? Should it be
// here or directly in the page? Consider usability and readabiltiy
@Nullable
public static <T extends ObjectType> PrismObject<T> loadObject(ObjectReferenceType objectReference,
ModelServiceLocator page, Task task, OperationResult result) {
Class<T> type = page.getPrismContext().getSchemaRegistry().determineClassForType(objectReference.getType());
String oid = objectReference.getOid();
Collection<SelectorOptions<GetOperationOptions>> options = null;
LOGGER.debug("Loading {} with oid {}, options {}", type.getSimpleName(), oid, options);

OperationResult subResult;
if (result != null) {
subResult = result.createMinorSubresult(OPERATION_LOAD_OBJECT);
} else {
subResult = new OperationResult(OPERATION_LOAD_OBJECT);
}
PrismObject<T> object = null;
try {
if (options == null) {
options = SelectorOptions.createCollection(GetOperationOptions.createResolveNames());
} else {
GetOperationOptions getOpts = SelectorOptions.findRootOptions(options);
if (getOpts == null) {
options.add(new SelectorOptions<>(GetOperationOptions.createResolveNames()));
} else {
getOpts.setResolveNames(Boolean.TRUE);
}
}
object = page.getModelService().getObject(type, oid, options, task, subResult);
} catch (AuthorizationException e) {
// Not authorized to access the object. This is probably caused by a reference that
// point to an object that the current user cannot read. This is no big deal.
// Just do not display that object.
subResult.recordHandledError(e);
LOGGER.debug("User {} is not authorized to read {} {}",
task.getOwner() != null ? task.getOwner().getName() : null, type.getSimpleName(), oid);
return null;
} catch (ObjectNotFoundException e) {
// Object does not exist. It was deleted in the meanwhile, or not created yet. This could happen quite often.
subResult.recordHandledError(e);
LOGGER.debug("{} {} does not exist", type.getSimpleName(), oid, e);
return null;

} catch (Exception ex) {
subResult.recordFatalError("WebModelUtils.couldntLoadObject", ex);
LoggingUtils.logUnexpectedException(LOGGER, "Couldn't load object", ex);
} finally {
subResult.computeStatus();
}
// TODO reconsider this part: until recently, the condition was always 'false'
if (WebComponentUtil.showResultInPage(subResult)) {
if (page instanceof PageBase) {
((PageBase)page).showResult(subResult);
}
}

LOGGER.debug("Loaded {} with result {}", object, subResult);

return object;
}

public static boolean isNoFetch(Collection<SelectorOptions<GetOperationOptions>> options) {
if (options == null) {
Expand Down
Expand Up @@ -29,7 +29,7 @@
</div>

<div class="row" >
<div class="col-md-12" wicket:id="assignmentsTable" style="margin: 5px;"/>
<div class="col-md-12" wicket:id="assignmentsTable" style="margin: 5px 0;"/>
</div>
<div>
<div class="btn btn-success btn-sm" wicket:id="newAssignmentButton"/>
Expand Down
Expand Up @@ -17,12 +17,10 @@
package com.evolveum.midpoint.web.component.assignment;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.xml.namespace.QName;
import javax.xml.validation.Schema;

import com.evolveum.midpoint.prism.PrismContainerValue;
import com.evolveum.midpoint.prism.query.builder.S_AtomicFilterExit;
Expand All @@ -31,23 +29,19 @@
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.web.component.prism.*;
import com.evolveum.midpoint.web.page.admin.PageAdminFocus;
import com.evolveum.midpoint.web.page.admin.users.component.AssignmentPreviewDialog;
import com.evolveum.midpoint.web.page.admin.users.component.AssignmentsPreviewDto;
import com.evolveum.midpoint.web.page.admin.users.component.AssignmentInfoDto;
import com.evolveum.midpoint.web.page.admin.users.component.AllAssignmentsPreviewDialog;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
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.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;

import com.evolveum.midpoint.gui.api.component.TypedAssignablePanel;
import com.evolveum.midpoint.gui.api.page.PageBase;
Expand All @@ -59,16 +53,11 @@
import com.evolveum.midpoint.prism.query.builder.QueryBuilder;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.data.column.CheckBoxHeaderColumn;
import com.evolveum.midpoint.web.component.data.column.IconColumn;
import com.evolveum.midpoint.web.component.data.column.LinkColumn;
import com.evolveum.midpoint.web.component.form.Form;
import com.evolveum.midpoint.web.component.input.DropDownChoicePanel;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.users.dto.UserDtoStatus;
import com.evolveum.midpoint.web.session.UserProfileStorage;
import com.evolveum.midpoint.web.session.UserProfileStorage.TableId;
import org.springframework.expression.spel.ast.Assign;

/**
* Created by honchar.
Expand Down Expand Up @@ -140,13 +129,15 @@ private DropDownChoicePanel<RelationTypes> getRelationPanel() {

protected void showAllAssignments(AjaxRequestTarget target) {
PageBase pageBase = getPageBase();
List<AssignmentsPreviewDto> previewAssignmentsList = new ArrayList<>();
if (pageBase instanceof PageAdminFocus){
previewAssignmentsList = ((PageAdminFocus) pageBase).recomputeAssignmentsPerformed(target);
List<AssignmentInfoDto> previewAssignmentsList;
if (pageBase instanceof PageAdminFocus) {
previewAssignmentsList = ((PageAdminFocus<?>) pageBase).showAllAssignmentsPerformed(target);
} else {
previewAssignmentsList = Collections.emptyList();
}
AssignmentPreviewDialog assignmentPreviewDialog = new AssignmentPreviewDialog(pageBase.getMainPopupBodyId(), previewAssignmentsList,
new ArrayList<>(), pageBase);
pageBase.showMainPopup(assignmentPreviewDialog, target);
AllAssignmentsPreviewDialog assignmentsDialog = new AllAssignmentsPreviewDialog(pageBase.getMainPopupBodyId(), previewAssignmentsList,
pageBase);
pageBase.showMainPopup(assignmentsDialog, target);
}

@Override
Expand Down
Expand Up @@ -27,9 +27,6 @@
import com.evolveum.midpoint.web.component.util.Selectable;
import com.evolveum.midpoint.web.page.admin.users.dto.UserDtoStatus;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ConstructionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.PersonaConstructionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.PolicyRuleType;

public class AssignmentDto extends Selectable<AssignmentDto> implements Comparable<AssignmentDto>, Serializable{

Expand Down
Expand Up @@ -29,7 +29,7 @@
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
import com.evolveum.midpoint.web.page.admin.users.component.AssignmentsPreviewDto;
import com.evolveum.midpoint.web.page.admin.users.component.AssignmentInfoDto;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;

Expand Down Expand Up @@ -86,7 +86,7 @@ public class AssignmentEditorDto extends SelectableBean implements Comparable<As
private AssignmentEditorDtoType type;
private UserDtoStatus status;
private AssignmentType oldAssignment;
private List<AssignmentsPreviewDto> privilegeLimitationList;
private List<AssignmentInfoDto> privilegeLimitationList;
private ObjectViewDto<OrgType> tenantRef;
private ObjectViewDto<OrgType> orgRef;

Expand Down Expand Up @@ -228,12 +228,12 @@ && getPolicyRuleContainer(assignment) != null){

}

private List<AssignmentsPreviewDto> getAssignmentPrivilegesList(AssignmentType assignment){
List<AssignmentsPreviewDto> list = new ArrayList<>();
private List<AssignmentInfoDto> getAssignmentPrivilegesList(AssignmentType assignment){
List<AssignmentInfoDto> list = new ArrayList<>();
AssignmentSelectorType assignmentSelectorType = assignment.getLimitTargetContent();
if (assignmentSelectorType != null && assignmentSelectorType.getTargetRef() != null){
for (ObjectReferenceType objectRef : assignmentSelectorType.getTargetRef()){
AssignmentsPreviewDto dto = new AssignmentsPreviewDto();
AssignmentInfoDto dto = new AssignmentInfoDto();
Class<? extends ObjectType> targetClass = ObjectTypes.getObjectTypeFromTypeQName(objectRef.getType()).getClassDefinition();
dto.setTargetClass(targetClass);
dto.setTargetName(WebModelServiceUtils.resolveReferenceName(objectRef, pageBase,
Expand Down Expand Up @@ -735,11 +735,11 @@ public void setAssignedRelationsList(List<RelationTypes> assignedRelationsList)
this.assignedRelationsList = assignedRelationsList;
}

public List<AssignmentsPreviewDto> getPrivilegeLimitationList() {
public List<AssignmentInfoDto> getPrivilegeLimitationList() {
return privilegeLimitationList;
}

public void setPrivilegeLimitationList(List<AssignmentsPreviewDto> privilegeLimitationList) {
public void setPrivilegeLimitationList(List<AssignmentInfoDto> privilegeLimitationList) {
if (newAssignment.getLimitTargetContent() == null) {
newAssignment.setLimitTargetContent(new AssignmentSelectorType());
}
Expand All @@ -748,7 +748,7 @@ public void setPrivilegeLimitationList(List<AssignmentsPreviewDto> privilegeLimi
referencesList = new ArrayList<>();
}
referencesList.clear();
for (AssignmentsPreviewDto previewDto : privilegeLimitationList){
for (AssignmentInfoDto previewDto : privilegeLimitationList){
ObjectReferenceType ref = new ObjectReferenceType();
ref.setOid(previewDto.getTargetOid());
ref.setTargetName(new PolyStringType(previewDto.getTargetName()));
Expand Down

This file was deleted.

Expand Up @@ -52,7 +52,7 @@
import com.evolveum.midpoint.web.page.admin.PageAdminFocus;
import com.evolveum.midpoint.web.page.admin.configuration.component.ChooseTypePanel;
import com.evolveum.midpoint.web.page.admin.dto.ObjectViewDto;
import com.evolveum.midpoint.web.page.admin.users.component.AssignmentsPreviewDto;
import com.evolveum.midpoint.web.page.admin.users.component.AssignmentInfoDto;
import com.evolveum.midpoint.web.page.admin.users.dto.UserDtoStatus;
import com.evolveum.midpoint.web.page.self.PageAssignmentDetails;
import com.evolveum.midpoint.web.page.self.PageAssignmentsList;
Expand Down Expand Up @@ -137,12 +137,12 @@ public class AssignmentEditorPanel extends BasePanel<AssignmentEditorDto> {
private IModel<List<ACAttributeDto>> attributesModel;
protected WebMarkupContainer headerRow;
protected PageBase pageBase;
protected IModel<List<AssignmentsPreviewDto>> privilegesListModel;
protected IModel<List<AssignmentInfoDto>> privilegesListModel;
protected boolean delegatedToMe;
private LoadableModel<ItemSecurityDecisions> decisionsModel;

public AssignmentEditorPanel(String id, IModel<AssignmentEditorDto> model, boolean delegatedToMe,
LoadableModel<List<AssignmentsPreviewDto>> privilegesListModel, PageBase pageBase) {
LoadableModel<List<AssignmentInfoDto>> privilegesListModel, PageBase pageBase) {
super(id, model);
this.pageBase = pageBase;
this.privilegesListModel = privilegesListModel;
Expand Down
Expand Up @@ -21,7 +21,7 @@
<div wicket:id="assignments" class="main-form-panel">

<div class="row" >
<div class="col-md-12" wicket:id="assignmentsTable" style="margin: 5px;"/>
<div class="col-md-12" wicket:id="assignmentsTable" style="margin: 5px 0;"/>
</div>
<div>
<div class="btn btn-success btn-sm" wicket:id="newAssignmentButton"/>
Expand Down

0 comments on commit c348f81

Please sign in to comment.