Skip to content

Commit

Permalink
Merge branch 'master' of github.com:Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
semancik committed Jun 13, 2017
2 parents 8fe65ee + bb3468c commit 5da42dc
Show file tree
Hide file tree
Showing 28 changed files with 355 additions and 108 deletions.
Expand Up @@ -20,23 +20,26 @@
import java.util.Collection;
import java.util.List;

import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.model.api.ModelAuthorizationAction;
import com.evolveum.midpoint.prism.PrismObject;
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.component.AjaxIconButton;
import com.evolveum.midpoint.web.component.util.Selectable;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AuthorizationPhaseType;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
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.extensions.markup.html.repeater.data.table.export.CSVDataExporter;
import org.apache.wicket.extensions.markup.html.repeater.data.table.export.ExportToolbar;
import org.apache.wicket.extensions.markup.html.repeater.data.table.export.IDataExporter;
import org.apache.wicket.extensions.markup.html.repeater.data.table.export.IExportableColumn;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.link.AbstractLink;
import org.apache.wicket.markup.html.link.ResourceLink;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.markup.repeater.data.IDataProvider;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;

Expand All @@ -49,7 +52,6 @@
import com.evolveum.midpoint.web.page.admin.configuration.PageImportObject;
import com.evolveum.midpoint.web.session.UserProfileStorage.TableId;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.request.resource.ResourceStreamResource;
import org.apache.wicket.util.resource.IResourceStream;

Expand All @@ -64,6 +66,7 @@ public abstract class MainObjectListPanel<O extends ObjectType> extends ObjectLi
private static final String ID_IMPORT_OBJECT = "importObject";
private static final String ID_EXPORT_DATA = "exportData";
private static final String ID_BUTTON_BAR = "buttonBar";
private static final Trace LOGGER = TraceManager.getTrace(MainObjectListPanel.class);

public MainObjectListPanel(String id, Class<O> type, TableId tableId, Collection<SelectorOptions<GetOperationOptions>> options, PageBase parentPage) {
super(id, type, tableId, options, parentPage);
Expand Down Expand Up @@ -160,6 +163,26 @@ public void onClick(AjaxRequestTarget target) {
mainObjectListPanel.newObjectPerformed(target);
}
};
newObjectIcon.add(new VisibleEnableBehaviour(){
private static final long serialVersionUID = 1L;

@Override
public boolean isVisible(){

boolean isVisible = false;
try {
PrismObject<O> objectToCreate = mainObjectListPanel.getNewObjectListObject();
mainObjectListPanel.adoptNewObject(objectToCreate);
isVisible = ((PageBase) getPage()).getSecurityEnforcer().isAuthorized(ModelAuthorizationAction.ADD.getUrl(),
null, objectToCreate, null, null, null)
&& WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_USERS_ALL_URL, AuthorizationConstants.AUTZ_UI_USER_URL);
} catch (Exception ex){
LOGGER.error("Failed to check authorization for ADD action on new object of " + mainObjectListPanel.getType().getSimpleName()
+ " type, ", ex);
}
return isVisible;
}
});
add(newObjectIcon);

AjaxIconButton importObject = new AjaxIconButton(ID_IMPORT_OBJECT, new Model<>("fa fa-upload"),
Expand All @@ -172,6 +195,25 @@ public void onClick(AjaxRequestTarget target) {
((PageBase) getPage()).navigateToNext(PageImportObject.class);
}
};
importObject.add(new VisibleEnableBehaviour(){
private static final long serialVersionUID = 1L;

@Override
public boolean isVisible(){

boolean isVisible = false;
try {
isVisible = ((PageBase) getPage()).getSecurityEnforcer().isAuthorized(ModelAuthorizationAction.IMPORT_OBJECTS.getUrl(),
null, null, null, null, null)
&& WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_CONFIGURATION_ALL_URL,
AuthorizationConstants.AUTZ_UI_CONFIGURATION_IMPORT_URL);
} catch (Exception ex){
LOGGER.error("Failed to check authorization for IMPORT action for " + mainObjectListPanel.getType().getSimpleName()
+ " object, ", ex);
}
return isVisible;
}
});
add(importObject);

String fileName = mainObjectListPanel.getType().getSimpleName() +
Expand All @@ -188,4 +230,12 @@ protected IResourceStream getResourceStream() {

}
}

protected PrismObject<O> getNewObjectListObject(){
return null;
}

private void adoptNewObject(PrismObject<O> object) throws SchemaException{
getPageBase().getMidpointApplication().getPrismContext().adopt(object);
}
}
Expand Up @@ -39,6 +39,8 @@
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.web.util.ObjectTypeGuiDescriptor;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
import org.apache.commons.lang.math.NumberUtils;
Expand Down Expand Up @@ -77,6 +79,7 @@
import org.joda.time.format.DateTimeFormat;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.component.MainObjectListPanel;
import com.evolveum.midpoint.gui.api.component.result.OpResult;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.model.NonEmptyModel;
Expand Down Expand Up @@ -109,6 +112,7 @@
import com.evolveum.midpoint.prism.query.ObjectPaging;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.query.QueryJaxbConvertor;
import com.evolveum.midpoint.prism.query.builder.QueryBuilder;
import com.evolveum.midpoint.prism.xml.XmlTypeConverter;
import com.evolveum.midpoint.schema.DeltaConvertor;
import com.evolveum.midpoint.schema.SchemaConstantsGenerated;
Expand All @@ -135,8 +139,10 @@
import com.evolveum.midpoint.web.component.TabbedPanel;
import com.evolveum.midpoint.web.component.data.BaseSortableDataProvider;
import com.evolveum.midpoint.web.component.data.Table;
import com.evolveum.midpoint.web.component.data.column.ColumnMenuAction;
import com.evolveum.midpoint.web.component.input.DropDownChoicePanel;
import com.evolveum.midpoint.web.component.util.Selectable;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.PageDialog;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnBlurAjaxFormUpdatingBehaviour;
Expand Down Expand Up @@ -1933,5 +1939,32 @@ public static boolean getElementVisibility(UserInterfaceElementVisibilityType vi
}
return true;
}

public static <AR extends AbstractRoleType> IModel<String> createAbstractRoleConfirmationMessage(String actionName, ColumnMenuAction action, MainObjectListPanel<AR> abstractRoleTable, PageBase pageBase) {
List<AR> selectedRoles = new ArrayList<>();
if (action.getRowModel() == null) {
selectedRoles.addAll(abstractRoleTable.getSelectedObjects());
} else {
selectedRoles.add(((SelectableBean<AR>) action.getRowModel().getObject()).getValue());
}
OperationResult result = new OperationResult("Search Members");
boolean atLeastOneWithMembers = false;
for (AR selectedRole : selectedRoles) {
ObjectQuery query = QueryBuilder.queryFor(FocusType.class, pageBase.getPrismContext()).item(FocusType.F_ROLE_MEMBERSHIP_REF).ref(ObjectTypeUtil.createObjectRef(selectedRole).asReferenceValue()).maxSize(1).build();
List<PrismObject<FocusType>> members = WebModelServiceUtils.searchObjects(FocusType.class, query, result, pageBase);
if (CollectionUtils.isNotEmpty(members)) {
atLeastOneWithMembers = true;
break;
}
}
String members = atLeastOneWithMembers ? ".members" : "";
if (action.getRowModel() == null) {
return pageBase.createStringResource("pageRoles.message.confirmationMessageForMultipleObject" + members,
actionName, abstractRoleTable.getSelectedObjectsCount() );
} else {
return pageBase.createStringResource("pageRoles.message.confirmationMessageForSingleObject" + members,
actionName, ((ObjectType)((SelectableBean)action.getRowModel().getObject()).getValue()).getName());
}
}

}
Expand Up @@ -280,24 +280,29 @@ public void onClick(AjaxRequestTarget target) {
});
items.add(item);
}
item = new InlineMenuItem(createStringResource("AssignmentTablePanel.menu.showAllAssignments"),
new InlineMenuItemAction() {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
showAllAssignments(target);
}
});
items.add(item);
if (isShowAllAssignmentsVisible()) {
item = new InlineMenuItem(createStringResource("AssignmentTablePanel.menu.showAllAssignments"),
new InlineMenuItemAction() {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
showAllAssignments(target);
}
});
items.add(item);
}
return items;
}

protected void showAllAssignments(AjaxRequestTarget target) {

}

protected boolean isShowAllAssignmentsVisible(){
return false;
}

private List<AssignmentEditorDto> getSelectedAssignments() {
List<AssignmentEditorDto> selected = new ArrayList<>();

Expand Down
Expand Up @@ -17,6 +17,8 @@

import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.prism.PrismContainer;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.assignment.AssignmentEditorDto;
Expand Down Expand Up @@ -68,6 +70,13 @@ protected boolean getAssignmentMenuVisibility() {
return !getObjectWrapper().isReadonly();
}

@Override
protected boolean isShowAllAssignmentsVisible(){
PrismContainer assignmentContainer = getObjectWrapper().getObject().findContainer(new ItemPath(FocusType.F_ASSIGNMENT));
return assignmentContainer != null && assignmentContainer.getDefinition() != null ?
assignmentContainer.getDefinition().canRead() : super.isShowAllAssignmentsVisible();
}

@Override
protected void showAllAssignments(AjaxRequestTarget target) {
List<AssignmentsPreviewDto> assignmentsPreviewDtos = ((PageAdminFocus) getPageBase()).recomputeAssignmentsPerformed(target);
Expand Down
Expand Up @@ -231,11 +231,10 @@ public void deleteConfirmedPerformed(AjaxRequestTarget target, F selectedObject)
try {
Task task = parentPage.createSimpleTask(getOperationName(OPERATION_DELETE_OBJECT));

ObjectDelta delta = new ObjectDelta(objectClass, ChangeType.DELETE, parentPage.getPrismContext());
delta.setOid(object.getOid());
parentPage.getModelService().executeChanges(WebComponentUtil.createDeltaCollection(delta), null, task, subResult);
ObjectDelta<F> delta = ObjectDelta.createDeleteDelta(objectClass, object.getOid(), parentPage.getPrismContext());
WebModelServiceUtils.save(delta, subResult, task, parentPage);
subResult.computeStatus();
} catch (CommonException|RuntimeException ex) {
} catch (RuntimeException ex) {
subResult.recomputeStatus();
subResult.recordFatalError("Couldn't delete object.", ex);
LoggingUtils.logUnexpectedException(LOGGER, "Couldn't delete object", ex);
Expand Down
Expand Up @@ -19,6 +19,7 @@
import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.component.MainObjectListPanel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.result.OperationResultStatus;
Expand Down Expand Up @@ -99,6 +100,11 @@ public void objectDetailsPerformed(AjaxRequestTarget target, AccessCertification
PageCertDefinitions.this.detailsPerformed(target, service);
}

@Override
protected PrismObject<AccessCertificationDefinitionType> getNewObjectListObject(){
return (new AccessCertificationDefinitionType()).asPrismObject();
}

@Override
protected List<IColumn<SelectableBean<AccessCertificationDefinitionType>, String>> createColumns() {
return PageCertDefinitions.this.initColumns();
Expand Down
Expand Up @@ -971,19 +971,11 @@ protected String resourceKey(ObjectTypes object) {

WebMarkupContainer choiceContainer = new WebMarkupContainer(ID_CHOICE_CONTAINER);
choiceContainer.setOutputMarkupId(true);
choiceContainer.add(new AttributeAppender("style", new LoadableModel<String>() {
private static final long serialVersionUID = 1L;
@Override
public String load(){
PageDebugList page = (PageDebugList) getPage();
return page.searchModel.getObject().getSearch().isFullTextSearchEnabled() ?
"margin-top: -15px;" : "";
}
}));
searchForm.add(choiceContainer);

DropDownChoice choice = new DropDownChoice(ID_CHOICE,
new PropertyModel(model, DebugSearchDto.F_TYPE), createChoiceModel(renderer), renderer);
choice.add(getDropDownStyleAppender());
choiceContainer.add(choice);
choice.add(new OnChangeAjaxBehavior() {

Expand All @@ -997,6 +989,7 @@ protected void onUpdate(AjaxRequestTarget target) {
DropDownChoice resource = new DropDownChoice(ID_RESOURCE,
new PropertyModel(model, DebugSearchDto.F_RESOURCE), resourcesModel,
createResourceRenderer());
resource.add(getDropDownStyleAppender());
resource.setNullValid(true);
resource.add(new AjaxFormComponentUpdatingBehavior("blur") {

Expand Down Expand Up @@ -1085,5 +1078,17 @@ public Object getDisplayValue(ObjectViewDto object) {

};
}

private AttributeAppender getDropDownStyleAppender(){
return new AttributeAppender("style", new LoadableModel<String>() {
private static final long serialVersionUID = 1L;
@Override
public String load(){
PageDebugList page = (PageDebugList) getPage();
return page.searchModel.getObject().getSearch().isFullTextSearchEnabled() ?
"margin-top: -15px;" : "";
}
});
}
}
}
Expand Up @@ -60,6 +60,7 @@ public class LoggingDto implements Serializable {
componentMap.put("com.evolveum.midpoint.wf", LoggingComponentType.WORKFLOWS);
componentMap.put("com.evolveum.midpoint.notifications", LoggingComponentType.NOTIFICATIONS);
componentMap.put("com.evolveum.midpoint.certification", LoggingComponentType.ACCESS_CERTIFICATION);
componentMap.put("com.evolveum.midpoint.security", LoggingComponentType.SECURITY);
}

private LoggingLevelType rootLevel;
Expand Down
Expand Up @@ -26,7 +26,9 @@ public enum StandardLoggerType {
PROJECTOR("com.evolveum.midpoint.model.impl.lens.projector.Projector"),
PROJECTOR_DETAIL("com.evolveum.midpoint.model.impl.lens.projector"),
CLOCKWORK("com.evolveum.midpoint.model.impl.lens.Clockwork"),
CHANGE_EXECUTOR("com.evolveum.midpoint.model.impl.lens.ChangeExecutor");
CHANGE_EXECUTOR("com.evolveum.midpoint.model.impl.lens.ChangeExecutor"),
SYNCHRONIZATION("com.evolveum.midpoint.model.impl.sync.SynchronizationServiceImpl"),
AUTHORIZATION("com.evolveum.midpoint.security.impl.SecurityEnforcerImpl");

private final String value;

Expand Down
Expand Up @@ -28,6 +28,7 @@

import javax.xml.namespace.QName;

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.OnChangeAjaxBehavior;
Expand Down Expand Up @@ -79,10 +80,6 @@
import com.evolveum.midpoint.web.page.admin.reports.dto.ReportDeleteDialogDto;
import com.evolveum.midpoint.web.session.UserProfileStorage;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ExportType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.MetadataType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ReportOutputType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ReportType;

/**
* @author lazyman
Expand Down Expand Up @@ -214,8 +211,13 @@ protected List<InlineMenuItem> createInlineMenu() {
protected List<IColumn<SelectableBean<ReportOutputType>, String>> createColumns() {
return PageCreatedReports.this.initColumns(ajaxDownloadBehavior);
}

@Override

@Override
protected PrismObject<ReportOutputType> getNewObjectListObject(){
return (new ReportOutputType()).asPrismObject();
}

@Override
protected void objectDetailsPerformed(AjaxRequestTarget target, ReportOutputType object) {
// TODO Auto-generated method stub

Expand Down

0 comments on commit 5da42dc

Please sign in to comment.