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
mederly committed Mar 17, 2015
2 parents e47f578 + c7b89fe commit f798c3a
Show file tree
Hide file tree
Showing 18 changed files with 598 additions and 79 deletions.
Expand Up @@ -61,7 +61,7 @@ public class MultiValueChoosePanel <T extends ObjectType> extends SimplePanel<Li
private static final String ID_BUTTON_GROUP = "buttonGroup";
private static final String ID_EDIT = "edit";

private static final String MODAL_ID_CHOOSE_PANEL = "showPopup";
protected static final String MODAL_ID_CHOOSE_PANEL = "showPopup";

private static final String CLASS_MULTI_VALUE = "multivalue-form";

Expand Down Expand Up @@ -274,6 +274,7 @@ protected T createNewEmptyItem() {
*
*/
protected void choosePerformed(AjaxRequestTarget target, T object){
choosePerformedHook(target, object);
ModalWindow window = (ModalWindow)get(MODAL_ID_CHOOSE_PANEL);
window.close(target);

Expand Down Expand Up @@ -321,4 +322,11 @@ protected void removeValuePerformed(AjaxRequestTarget target, ListItem<T> item)

target.add(this);
}

/**
* A custom code in form of hook that can be run on event of
* choosing new object with this chooser component
* */
protected void choosePerformedHook(AjaxRequestTarget target, T object){}

}
Expand Up @@ -49,6 +49,9 @@ <h3 style="margin-left: 20px;"><wicket:message key="PageRoleEditor.subtitle.basi
</div>
</div>

<!-- Approver ref -->
<div class="form-group" wicket:id="approverRef" />

<!-- Activation -->
<h3 style="margin-left: 20px;"><wicket:message key="PageRoleEditor.subtitle.activation"/></h3>
<div class="form-group" wicket:id="adminStatus" />
Expand Down
Expand Up @@ -20,6 +20,7 @@
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.schema.SchemaRegistry;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
Expand All @@ -31,6 +32,7 @@
import com.evolveum.midpoint.web.component.AjaxSubmitButton;
import com.evolveum.midpoint.web.component.assignment.*;
import com.evolveum.midpoint.web.component.form.*;
import com.evolveum.midpoint.web.component.form.multivalue.MultiValueChoosePanel;
import com.evolveum.midpoint.web.component.prism.*;
import com.evolveum.midpoint.web.component.progress.ProgressReporter;
import com.evolveum.midpoint.web.component.progress.ProgressReportingAwarePage;
Expand Down Expand Up @@ -65,6 +67,7 @@
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.util.string.StringValue;

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

Expand All @@ -86,7 +89,8 @@ public class PageRole extends PageAdminRoles implements ProgressReportingAwarePa
private static final String OPERATION_LOAD_ROLE = DOT_CLASS + "loadRole";
private static final String OPERATION_CREATE_ROLE_WRAPPER = DOT_CLASS + "createRoleWrapper";
private static final String OPERATION_SAVE_ROLE = DOT_CLASS + "saveRole";
private static final String OPERATION_LOAD_OWNER = "getOwner";
private static final String OPERATION_LOAD_OWNER = DOT_CLASS + "getOwner";
private static final String OPERATION_LOAD_APPROVERS = DOT_CLASS + "loadApprovers";

private static final String ID_MAIN_FORM = "mainForm";
private static final String ID_BUTTON_BACK = "backButton";
Expand All @@ -108,6 +112,7 @@ public class PageRole extends PageAdminRoles implements ProgressReportingAwarePa
private static final String ID_OWNER_WRAPPER = "ownerRefWrapper";
private static final String ID_OWNER_EDIT = "ownerRefEdit";
private static final String ID_OWNER_LABEL = "ownerRefLabel";
private static final String ID_APPROVER_REF = "approverRef";

private static final String ID_INDUCEMENTS = "inducementsPanel";
private static final String ID_ASSIGNMENTS = "assignmentsPanel";
Expand All @@ -118,6 +123,7 @@ public class PageRole extends PageAdminRoles implements ProgressReportingAwarePa
private static final String ID_INPUT_SIZE = "col-md-6";

private IModel<PrismObject<RoleType>> model;
private IModel<List<ObjectType>> approversModel;
private IModel<ContainerWrapper> extensionModel;
private ObjectWrapper roleWrapper;

Expand Down Expand Up @@ -149,6 +155,14 @@ protected ContainerWrapper load() {
}
};

approversModel = new LoadableModel<List<ObjectType>>(false) {

@Override
protected List<ObjectType> load() {
return loadApprovers();
}
};

initLayout();
}

Expand Down Expand Up @@ -250,6 +264,34 @@ private ContainerWrapper loadRoleWrapper(){
return extensionContainer;
}

private List<ObjectType> loadApprovers(){
List<ObjectType> approverList = new ArrayList<>();
List<ObjectReferenceType> refList = new ArrayList<>();
ObjectType helper;
OperationResult result = new OperationResult(OPERATION_LOAD_APPROVERS);

RoleType actRole = model.getObject().asObjectable();

if(actRole != null){
refList.addAll(actRole.getApproverRef());
}

if(!refList.isEmpty()){
for(ObjectReferenceType ref: refList){
String oid = ref.getOid();
helper = WebModelUtils.loadObject(ObjectType.class, oid, null, result, this).asObjectable();
approverList.add(helper);
}
}
result.computeStatus();

if(approverList.isEmpty()){
approverList.add(new UserType());
}

return approverList;
}

private boolean isEditingRole(){
StringValue oid = getPageParameters().get(OnePageParameterEncoder.PARAMETER);
return oid != null && StringUtils.isNotEmpty(oid.toString());
Expand Down Expand Up @@ -319,6 +361,70 @@ public void onClick(AjaxRequestTarget target) {
};
ownerRefContainer.add(editOwnerRef);

MultiValueChoosePanel approverRef = new MultiValueChoosePanel<ObjectType>(ID_APPROVER_REF, approversModel,
createStringResource("PageRoleEditor.label.approverRef"), ID_LABEL_SIZE, ID_INPUT_SIZE, false, ObjectType.class) {

@Override
protected IModel<String> createTextModel(final IModel<ObjectType> model) {
return prepareApproverRefLabel(model);
}

@Override
protected ObjectType createNewEmptyItem() {
return new UserType();
}

@Override
protected ObjectQuery createChooseQuery() {
// TODO
return super.createChooseQuery();
}

@Override
protected void replaceIfEmpty(Object object) {
boolean added = false;

List<ObjectType> approverList = approversModel.getObject();
for (ObjectType approver : approverList) {
if (WebMiscUtil.getName(approver) == null || WebMiscUtil.getName(approver).isEmpty()) {
approverList.remove(approver);
approverList.add((ObjectType) object);
added = true;
break;
}
}

if (!added) {
approverList.add((ObjectType)object);
}
}

@Override
protected void initDialog(Class<ObjectType> type) {
ModalWindow dialog = new ChooseTypeDialog(MODAL_ID_CHOOSE_PANEL, type){

@Override
protected void chooseOperationPerformed(AjaxRequestTarget target, ObjectType object){
choosePerformed(target, object);
}

@Override
protected WebMarkupContainer createExtraContentContainer(String extraContentId) {
return new UserOrgReferenceChoosePanel(extraContentId, Boolean.FALSE){

@Override
protected void onReferenceTypeChangePerformed(AjaxRequestTarget target, Boolean newValue) {
updateTableByTypePerformed(target, Boolean.FALSE.equals(newValue) ? UserType.class : OrgType.class);
}
};
}
};
add(dialog);
}
};
approverRef.setOutputMarkupId(true);
form.add(approverRef);

initModalWindows();
initExtension(form);
initAssignmentsAndInducements(form);
Expand Down Expand Up @@ -461,6 +567,36 @@ public String getObject() {
};
}

private IModel<String> prepareApproverRefLabel(final IModel<ObjectType> refModel){
return new AbstractReadOnlyModel<String>() {

@Override
public String getObject() {
if(refModel == null || refModel.getObject() == null || refModel.getObject().getOid() == null){
return getString("PageRoleEditor.label.approverRef.placeholder");
}

ObjectType object = refModel.getObject();

StringBuilder sb = new StringBuilder();

if(object instanceof UserType){
sb.append(WebMiscUtil.getName(object));
sb.append("- (");
sb.append(UserType.class.getSimpleName());
sb.append(")");
} else if(object instanceof OrgType){
sb.append(WebMiscUtil.getName(object));
sb.append("- (");
sb.append(OrgType.class.getSimpleName());
sb.append(")");
}

return sb.toString();
}
};
}

private void initButtons(Form form){
AjaxSubmitButton save = new AjaxSubmitButton(ID_BUTTON_SAVE, createStringResource("PageBase.button.save")) {

Expand Down Expand Up @@ -541,11 +677,73 @@ private void ownerChoosePerformed(AjaxRequestTarget target, ObjectType newOwner)
target.add(getFeedbackPanel(), getOwnerRefContainer());
}

private void handleApproverReferences(PrismObject<RoleType> rolePrism){
RoleType role = rolePrism.asObjectable();

if(isEditingRole()){
if(approversModel != null && approversModel.getObject() != null){
for(ObjectType approver: approversModel.getObject()){
if(approver != null && WebMiscUtil.getName(approver) != null && !WebMiscUtil.getName(approver).isEmpty()){
if(!isApprover(approver, role.getApproverRef())){
ObjectReferenceType ref = new ObjectReferenceType();
ref.setOid(approver.getOid());
ref.setType(approver instanceof UserType ? UserType.COMPLEX_TYPE : OrgType.COMPLEX_TYPE);
role.getApproverRef().add(ref);
}
}
}
}
} else {
if(approversModel != null && approversModel.getObject() != null){
for(ObjectType approver: approversModel.getObject()){
if(approver != null && WebMiscUtil.getName(approver) != null && !WebMiscUtil.getName(approver).isEmpty()){
ObjectReferenceType ref = new ObjectReferenceType();
ref.setOid(approver.getOid());
ref.setType(approver instanceof UserType ? UserType.COMPLEX_TYPE : OrgType.COMPLEX_TYPE);
role.getApproverRef().add(ref);
}
}
}
}

//Delete approver references deleted during role edition
if(isEditingRole()){
if(approversModel != null && approversModel.getObject() != null){
for(ObjectReferenceType ref: role.getApproverRef()){
if(!isRefInApproverModel(ref)){
role.getApproverRef().remove(ref);
}
}
}
}
}

private boolean isRefInApproverModel(ObjectReferenceType reference){
for(ObjectType approver: approversModel.getObject()){
if(reference.getOid().equals(approver.getOid())){
return true;
}
}
return false;
}

private boolean isApprover(ObjectType approver, List<ObjectReferenceType> approverList){
for(ObjectReferenceType ref: approverList){
if(ref.getOid().equals(approver.getOid())){
return true;
}
}

return false;
}

private void savePerformed(AjaxRequestTarget target){
OperationResult result = new OperationResult(OPERATION_SAVE_ROLE);
try {
WebMiscUtil.revive(model, getPrismContext());
WebMiscUtil.revive(approversModel, getPrismContext());
PrismObject<RoleType> newRole = model.getObject();
handleApproverReferences(newRole);

ObjectDelta delta = null;
if (!isEditingRole()) {
Expand Down
Expand Up @@ -31,8 +31,11 @@ PageRoleEditor.label.requestable=Requestable
PageRoleEditor.label.identifier=Identifier
PageRoleEditor.label.ownerRef=Owner
PageRoleEditor.label.ownerRef.placeholder=Set Owner
PageRoleEditor.label.approverRef=Approver
PageRoleEditor.label.approverRef.placeholder=Set Approver
PageRoleEditor.extension=Extension
PageRoleEditor.message.cantCreateExtensionDelta=Can't create delta for role extension
PageRoleEditor.message.cantAddOwner=Can't setup the selected owner.
PageRoleEditor.message.addOwnerOk=Owner with name: '{0}' was added successfully.
PageRoleEditor.message.addApproverOk=Approver with name: '{0}' was added successfully.

Expand Up @@ -580,6 +580,7 @@ private PrismObject<OrgType> buildUnitFromModel(List<ObjectReferenceType> parent
}
}
}

//We are editing OrgUnit
}else if (parentOrgUnitsModel != null && parentOrgUnitsModel.getObject() != null) {
for (OrgType parent : parentOrgUnitsModel.getObject()) {
Expand Down
Expand Up @@ -28,6 +28,7 @@
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.path.ItemPathSegment;
import com.evolveum.midpoint.prism.path.NameItemPathSegment;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType;

Expand Down Expand Up @@ -141,7 +142,8 @@ public static boolean hasToLoadPath(QName container, Collection<SelectorOptions<
new ItemPath(UserType.F_JPEG_PHOTO),
new ItemPath(TaskType.F_SUBTASK),
new ItemPath(TaskType.F_NODE_AS_OBSERVED),
new ItemPath(TaskType.F_NEXT_RUN_START_TIMESTAMP)));
new ItemPath(TaskType.F_NEXT_RUN_START_TIMESTAMP),
new ItemPath(LookupTableType.F_TABLE)));

public static boolean hasToLoadPath(ItemPath path, Collection<SelectorOptions<GetOperationOptions>> options) {
List<SelectorOptions<GetOperationOptions>> retrieveOptions = filterRetrieveOptions(options);
Expand Down
Expand Up @@ -258,19 +258,19 @@ ds-cfg-enabled: TRUE
ds-cfg-index-entry-limit: 4000
ds-cfg-java-class: org.opends.server.backends.jeb.BackendImpl
ds-cfg-writability-mode: enabled
ds-cfg-db-cache-percent: 50
ds-cfg-db-cache-percent: 1
ds-cfg-db-evictor-lru-only: false
ds-cfg-entries-compressed: false
ds-cfg-db-cache-size: 0 megabytes
ds-cfg-db-cache-size: 5 megabytes
ds-cfg-db-directory-permissions: 700
ds-cfg-db-cleaner-min-utilization: 50
ds-cfg-db-logging-file-handler-on: true
ds-cfg-db-log-file-max: 100 megabytes
ds-cfg-db-evictor-nodes-per-scan: 10
ds-cfg-db-evictor-max-threads: 10
ds-cfg-db-evictor-max-threads: 2
ds-cfg-db-log-filecache-size: 100
ds-cfg-db-evictor-core-threads: 1
ds-cfg-db-run-cleaner: true
ds-cfg-db-run-cleaner: false
ds-cfg-db-txn-no-sync: false
ds-cfg-db-txn-write-no-sync: true
modifyTimestamp: 20150309121529Z
Expand Down

0 comments on commit f798c3a

Please sign in to comment.