Skip to content

Commit

Permalink
MID-4157 MID-4158 focus editors fixed, when accessed through org. uni…
Browse files Browse the repository at this point in the history
…t tree page
  • Loading branch information
1azyman committed Nov 29, 2017
1 parent 6c11da8 commit 1d22f92
Show file tree
Hide file tree
Showing 12 changed files with 88 additions and 69 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 @@ -1858,16 +1858,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 +1880,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 @@ -275,15 +275,15 @@ private void targetObjectDetailsPerformed(AssignmentEditorDto assignment, AjaxRe
if (AssignmentEditorDtoType.ORG_UNIT.equals(assignment.getType())){
PrismObject<OrgType> object = WebModelServiceUtils.loadObject(OrgType.class, assignment.getTargetRef().getOid(),
getPageBase(), task, result);
getPageBase().navigateToNext(new PageOrgUnit(object, true));
getPageBase().navigateToNext(new PageOrgUnit(object, false,true));
} else if (AssignmentEditorDtoType.ROLE.equals(assignment.getType())){
PrismObject<RoleType> object = WebModelServiceUtils.loadObject(RoleType.class, assignment.getTargetRef().getOid(),
getPageBase(), task, result);
getPageBase().navigateToNext(new PageRole(object, true));
getPageBase().navigateToNext(new PageRole(object, false, true));
} else if (AssignmentEditorDtoType.SERVICE.equals(assignment.getType())){
PrismObject<ServiceType> object = WebModelServiceUtils.loadObject(ServiceType.class, assignment.getTargetRef().getOid(),
getPageBase(), task, result);
getPageBase().navigateToNext(new PageService(object, true));
getPageBase().navigateToNext(new PageService(object, false,true));
}
} else {
plusIconClicked = false;
Expand Down
Expand Up @@ -46,14 +46,13 @@ protected void prepareObjectDeltaForModify(ObjectDelta<T> focusDelta) throws Sch
.findContainerDefinition(AbstractRoleType.F_INDUCEMENT);
}


@Override
protected void prepareObjectForAdd(PrismObject<T> focus) throws SchemaException {
super.prepareObjectForAdd(focus);
}

@Override
protected void initializeModel(final PrismObject<T> objectToEdit, boolean isReadonly) {
super.initializeModel(objectToEdit, isReadonly);
protected void initializeModel(final PrismObject<T> objectToEdit, boolean isNewObject, boolean isReadonly) {
super.initializeModel(objectToEdit, isNewObject, isReadonly);
}
}
Expand Up @@ -86,8 +86,8 @@ public abstract class PageAdminFocus<F extends FocusType> extends PageAdminObjec


@Override
protected void initializeModel(final PrismObject<F> objectToEdit, boolean isReadonly) {
super.initializeModel(objectToEdit, isReadonly);
protected void initializeModel(final PrismObject<F> objectToEdit, boolean isNewObject, boolean isReadonly) {
super.initializeModel(objectToEdit, isNewObject, isReadonly);

projectionModel = new LoadableModel<List<FocusSubwrapperDto<ShadowType>>>(false) {
private static final long serialVersionUID = 1L;
Expand Down
Expand Up @@ -102,10 +102,15 @@ public abstract class PageAdminObjectDetails<O extends ObjectType> extends PageA

private AbstractObjectMainPanel<O> mainPanel;
private boolean saveOnConfigure; // ugly hack - whether to invoke 'Save' when returning to this page
public boolean isObjectAlreadyLoaded = false; //before we got isOidParameterExists status depending only on oid parameter existence
//we should set isEdidintFocus=true not only when oid parameter exists but also

private boolean editingFocus = false; //before we got isOidParameterExists status depending only on oid parameter existence
//we should set editingFocus=true not only when oid parameter exists but also
//when object is given as a constructor parameter

public boolean isEditingFocus() {
return editingFocus;
}

@Override
protected void createBreadcrumb() {
createInstanceBreadcrumb();
Expand Down Expand Up @@ -133,7 +138,7 @@ protected IModel<String> createPageTitleModel() {

@Override
protected String load() {
if (!isOidParameterExists() && !isObjectAlreadyLoaded) {
if (!isOidParameterExists() && !editingFocus) {
String key = "PageAdminObjectDetails.title.new" + getCompileTimeClass().getSimpleName();
return createStringResource(key).getObject();
}
Expand Down Expand Up @@ -190,18 +195,23 @@ protected void reviveModels() throws SchemaException {


public void initialize(final PrismObject<O> objectToEdit) {
initialize(objectToEdit, false);
boolean isNewObject = objectToEdit == null;

initialize(objectToEdit, isNewObject, false);
}

public void initialize(final PrismObject<O> objectToEdit, boolean isReadonly) {
initializeModel(objectToEdit, isReadonly);
public void initialize(final PrismObject<O> objectToEdit, boolean isNewObject) {
initialize(objectToEdit, isNewObject, false);
}

public void initialize(final PrismObject<O> objectToEdit, boolean isNewObject, boolean isReadonly) {
initializeModel(objectToEdit, isNewObject, isReadonly);
initLayout();
}

protected void initializeModel(final PrismObject<O> objectToEdit, boolean isReadonly) {
if (objectToEdit != null){
isObjectAlreadyLoaded = true;
}
protected void initializeModel(final PrismObject<O> objectToEdit, boolean isNewObject, boolean isReadonly) {
editingFocus = !isNewObject;

objectModel = new LoadableModel<ObjectWrapper<O>>(false) {
private static final long serialVersionUID = 1L;

Expand Down Expand Up @@ -256,7 +266,7 @@ protected void setSummaryPanelVisibility(FocusSummaryPanel<O> summaryPanel){

@Override
public boolean isVisible() {
return isOidParameterExists() || isObjectAlreadyLoaded;
return isOidParameterExists() || editingFocus;
}
});
}
Expand Down Expand Up @@ -331,7 +341,7 @@ protected ObjectWrapper<O> loadObjectWrapper(PrismObject<O> objectToEdit, boolea
throw new RestartResponseException(getRestartResponsePage());
}

ContainerStatus status = isOidParameterExists() || isObjectAlreadyLoaded ? ContainerStatus.MODIFYING : ContainerStatus.ADDING;
ContainerStatus status = isOidParameterExists() || editingFocus ? ContainerStatus.MODIFYING : ContainerStatus.ADDING;
ObjectWrapper<O> wrapper;
ObjectWrapperFactory owf = new ObjectWrapperFactory(this);
try {
Expand All @@ -347,7 +357,7 @@ protected ObjectWrapper<O> loadObjectWrapper(PrismObject<O> objectToEdit, boolea

loadParentOrgs(wrapper, task, result);

wrapper.setShowEmpty(!isOidParameterExists() && !isObjectAlreadyLoaded);
wrapper.setShowEmpty(!isOidParameterExists() && !editingFocus);
wrapper.setReadonly(isReadonly);

if (LOGGER.isTraceEnabled()) {
Expand Down
Expand Up @@ -15,14 +15,8 @@
*/
package com.evolveum.midpoint.web.page.admin.roles;

import org.apache.wicket.request.mapper.parameter.PageParameters;

import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.delta.ContainerDelta;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.application.AuthorizationAction;
Expand All @@ -34,8 +28,8 @@
import com.evolveum.midpoint.web.page.admin.PageAdminAbstractRole;
import com.evolveum.midpoint.web.page.admin.roles.component.RoleSummaryPanel;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.PolicyConstraintsType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType;
import org.apache.wicket.request.mapper.parameter.PageParameters;

/**
* @author shood
Expand All @@ -61,8 +55,12 @@ public PageRole(PrismObject<RoleType> roleToEdit) {
initialize(roleToEdit);
}

public PageRole(PrismObject<RoleType> roleToEdit, boolean isReadonly) {
initialize(roleToEdit, isReadonly);
public PageRole(final PrismObject<RoleType> unitToEdit, boolean isNewObject) {
initialize(unitToEdit, isNewObject);
}

public PageRole(PrismObject<RoleType> roleToEdit, boolean isNewObject, boolean isReadonly) {
initialize(roleToEdit, isNewObject, isReadonly);
}

public PageRole(PageParameters parameters) {
Expand Down
Expand Up @@ -15,13 +15,8 @@
*/
package com.evolveum.midpoint.web.page.admin.services;

import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;

import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.application.AuthorizationAction;
import com.evolveum.midpoint.web.application.PageDescriptor;
import com.evolveum.midpoint.web.component.FocusSummaryPanel;
Expand All @@ -34,6 +29,8 @@
import com.evolveum.midpoint.web.page.admin.users.component.ServiceSummaryPanel;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ServiceType;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;

@PageDescriptor(url = "/admin/service", encoder = OnePageParameterEncoder.class, action = {
@AuthorizationAction(actionUri = PageAdminServices.AUTH_SERVICES_ALL, label = PageAdminServices.AUTH_SERVICES_ALL_LABEL, description = PageAdminServices.AUTH_SERVICES_ALL_DESCRIPTION),
Expand All @@ -50,8 +47,12 @@ public PageService(final PrismObject<ServiceType> unitToEdit) {
initialize(unitToEdit);
}

public PageService(final PrismObject<ServiceType> unitToEdit, boolean isReadonly) {
initialize(unitToEdit, isReadonly);
public PageService(final PrismObject<ServiceType> unitToEdit, boolean isNewObject) {
initialize(unitToEdit, isNewObject);
}

public PageService(final PrismObject<ServiceType> unitToEdit, boolean isNewObject, boolean isReadonly) {
initialize(unitToEdit, isNewObject, isReadonly);
}

public PageService(PageParameters parameters) {
Expand Down
Expand Up @@ -53,8 +53,12 @@ public PageOrgUnit(final PrismObject<OrgType> unitToEdit) {
initialize(unitToEdit);
}

public PageOrgUnit(final PrismObject<OrgType> unitToEdit, boolean isReadonly) {
initialize(unitToEdit, isReadonly);
public PageOrgUnit(final PrismObject<OrgType> unitToEdit, boolean isNewObject) {
initialize(unitToEdit, isNewObject);
}

public PageOrgUnit(final PrismObject<OrgType> unitToEdit, boolean isNewObject, boolean isReadonly) {
initialize(unitToEdit, isNewObject, isReadonly);
}

public PageOrgUnit(PageParameters parameters) {
Expand Down
Expand Up @@ -18,36 +18,45 @@
import com.evolveum.midpoint.gui.api.ComponentConstants;
import com.evolveum.midpoint.gui.api.component.tabs.CountablePanelTab;
import com.evolveum.midpoint.gui.api.component.tabs.PanelTab;
import com.evolveum.midpoint.gui.api.model.CountableLoadableModel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.util.FocusTabVisibleBehavior;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.model.api.ModelAuthorizationAction;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismReferenceValue;
import com.evolveum.midpoint.prism.delta.ContainerDelta;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.query.builder.QueryBuilder;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.web.component.assignment.AssignmentDto;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.application.AuthorizationAction;
import com.evolveum.midpoint.web.application.PageDescriptor;
import com.evolveum.midpoint.web.component.FocusSummaryPanel;
import com.evolveum.midpoint.web.component.assignment.AssignmentEditorDto;
import com.evolveum.midpoint.web.component.assignment.AssignmentTablePanel;
import com.evolveum.midpoint.web.component.assignment.DelegationEditorPanel;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectMainPanel;
import com.evolveum.midpoint.web.component.objectdetails.FocusMainPanel;
import com.evolveum.midpoint.web.component.objectdetails.UserDelegationsTabPanel;
import com.evolveum.midpoint.web.component.prism.ObjectWrapper;
import com.evolveum.midpoint.web.page.admin.PageAdminFocus;
import com.evolveum.midpoint.web.page.admin.PageAdminObjectDetails;
import com.evolveum.midpoint.web.page.admin.users.component.AssignmentsPreviewDto;
import com.evolveum.midpoint.web.page.admin.users.component.UserSummaryPanel;
import com.evolveum.midpoint.web.page.admin.users.dto.UserDtoStatus;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.tabs.ITab;
Expand All @@ -56,21 +65,10 @@
import org.apache.wicket.model.IModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;

import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.application.AuthorizationAction;
import com.evolveum.midpoint.web.application.PageDescriptor;
import com.evolveum.midpoint.web.component.FocusSummaryPanel;
import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectMainPanel;
import com.evolveum.midpoint.web.component.objectdetails.FocusConsentTabPanel;
import com.evolveum.midpoint.web.component.objectdetails.FocusMainPanel;
import com.evolveum.midpoint.web.page.admin.PageAdminFocus;
import com.evolveum.midpoint.web.page.admin.users.component.UserSummaryPanel;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;

import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

/**
* @author lazyman
Expand Down Expand Up @@ -110,9 +108,14 @@ public PageUser(final PrismObject<UserType> userToEdit) {
initialize(userToEdit);
}

public PageUser(final PrismObject<UserType> unitToEdit, boolean isNewObject) {
initialize(unitToEdit, isNewObject);
}

@Override
protected void initializeModel(final PrismObject<UserType> objectToEdit, boolean isReadonly) {
super.initializeModel(objectToEdit, isReadonly);
protected void initializeModel(final PrismObject<UserType> objectToEdit, boolean isNewObject, boolean isReadonly) {
super.initializeModel(objectToEdit, isNewObject, isReadonly);

delegationsModel = new LoadableModel<List<AssignmentEditorDto>>(false) {
@Override
protected List<AssignmentEditorDto> load() {
Expand Down
Expand Up @@ -402,7 +402,7 @@ private void initObjectForAdd(ObjectReferenceType parentOrgRef, QName type, QNam
objType.getParentOrgRef().add(parentOrgRef.clone());
}

WebComponentUtil.dispatchToObjectDetailsPage(obj, this);
WebComponentUtil.dispatchToObjectDetailsPage(obj, true, this);
}

protected void addMembers(final QName relation, AjaxRequestTarget target) {
Expand Down
Expand Up @@ -296,7 +296,7 @@ private void initObjectForAdd(ObjectReferenceType parentOrgRef, QName type, QNam
objType.getParentOrgRef().add(parentOrgRef.clone());
}

WebComponentUtil.dispatchToObjectDetailsPage(obj, this);
WebComponentUtil.dispatchToObjectDetailsPage(obj, true, this);

}

Expand Down

0 comments on commit 1d22f92

Please sign in to comment.