From 61efd9f46a1c514073c4af649b9a8b4696a918c3 Mon Sep 17 00:00:00 2001 From: ozkanbayraktar Date: Tue, 11 Oct 2016 10:34:33 +0200 Subject: [PATCH 1/6] refresh facility is added to the the table on the audit log viewer page by using the search button --- .../midpoint/web/page/admin/reports/PageAuditLogViewer.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.java index 9b41ed418da..84891f1b9f4 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.java @@ -113,7 +113,7 @@ private void initParametersPanel(Form mainForm){ AjaxButton ajaxButton = new AjaxButton(ID_SEARCH_BUTTON, createStringResource("BasicSearchPanel.search")) { @Override public void onClick(AjaxRequestTarget arg0) { - Form mainForm = (Form)get(ID_MAIN_FORM); + Form mainForm = (Form)getParent().getParent(); initTable(mainForm); arg0.add(mainForm); // TODO Auto-generated method stub @@ -131,7 +131,8 @@ private void initTable(Form mainForm){ (int) getItemsPerPage(UserProfileStorage.TableId.PAGE_AUDIT_LOG_VIEWER)); table.setShowPaging(true); table.setOutputMarkupId(true); - mainForm.add(table); + // mainForm.add(table); + mainForm.addOrReplace(table); } private List, String>> initColumns() { From f4c970a06ac94fc983b9c770c2e4c1bef99285a1 Mon Sep 17 00:00:00 2001 From: ozkanbayraktar Date: Tue, 11 Oct 2016 11:09:23 +0200 Subject: [PATCH 2/6] AuditSearchDto is integrated --- .../page/admin/reports/PageAuditLogViewer.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.java index 84891f1b9f4..4e0ac89017b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.java @@ -14,6 +14,7 @@ import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; import org.apache.wicket.model.util.ListModel; import com.evolveum.midpoint.audit.api.AuditEventRecord; @@ -30,6 +31,7 @@ import com.evolveum.midpoint.web.component.util.SelectableBean; import com.evolveum.midpoint.web.page.admin.configuration.PageAdminConfiguration; import com.evolveum.midpoint.web.page.admin.reports.dto.AuditEventRecordProvider; +import com.evolveum.midpoint.web.page.admin.reports.dto.AuditSearchDto; import com.evolveum.midpoint.web.session.UserProfileStorage; import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType; @@ -59,20 +61,26 @@ public class PageAuditLogViewer extends PageBase{ private static final String ID_MAIN_FORM = "mainForm"; private static final String ID_SEARCH_BUTTON = "searchButton"; + /* private IModel fromModel; private IModel toModel; private IModel initiatorModel; private IModel channelModel; private IModel channelListModel; private IModel propertyModel; - + */ + + private IModel auditSearchDto; + public PageAuditLogViewer(){ + /* fromModel = new Model(); toModel = new Model(); initiatorModel = new Model(); channelModel = new Model(); channelListModel = new ListModel(new WebComponentUtil().getChannelList()); propertyModel = new Model(); + */ initLayout(); } @@ -90,6 +98,14 @@ private void initParametersPanel(Form mainForm){ parametersPanel.setOutputMarkupId(true); mainForm.add(parametersPanel); + IModel fromModel = new PropertyModel<>(auditSearchDto, "fromGreg"); + IModel toModel = new PropertyModel<>(auditSearchDto, "toGreg"); + IModel initiatorModel = new PropertyModel<>(auditSearchDto, "initiator"); + IModel channelModel = new PropertyModel<>(auditSearchDto, "channel"); + IModel propertyModel = new PropertyModel<>(auditSearchDto, "property"); + + IModel channelListModel = new ListModel(new WebComponentUtil().getChannelList()); + final DatePanel from = new DatePanel(ID_FROM, fromModel); from.setOutputMarkupId(true); parametersPanel.add(from); From 1c52f5a161504f0d8abdc8491519dcda4185d368 Mon Sep 17 00:00:00 2001 From: Radovan Semancik Date: Wed, 12 Oct 2016 11:18:51 +0200 Subject: [PATCH 3/6] Fixing orgstruct tests --- .../midpoint/model/intest/orgstruct/TestOrgStruct.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/orgstruct/TestOrgStruct.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/orgstruct/TestOrgStruct.java index 00855d015a8..4839e2fab2d 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/orgstruct/TestOrgStruct.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/orgstruct/TestOrgStruct.java @@ -342,7 +342,7 @@ public void test211JackAssignMinistryOfOffenseMinister() throws Exception { // THEN PrismObject userJack = getUser(USER_JACK_OID); display("User jack after", userJack); - assertAssignedOrgs(userJack, ORG_MINISTRY_OF_OFFENSE_OID); + assertAssignedOrgs(userJack, ORG_MINISTRY_OF_OFFENSE_OID, ORG_MINISTRY_OF_OFFENSE_OID); assertHasOrgs(userJack, ORG_MINISTRY_OF_OFFENSE_OID, ORG_MINISTRY_OF_OFFENSE_OID, ORG_MINISTRY_OF_DEFENSE_OID); assertAssignedOrg(userJack, ORG_MINISTRY_OF_OFFENSE_OID, SchemaConstants.ORG_MANAGER); assertHasOrg(userJack, ORG_MINISTRY_OF_OFFENSE_OID, SchemaConstants.ORG_MANAGER); @@ -770,7 +770,7 @@ public void test350AddJackAsMinistryOfOffenseManager() throws Exception { // THEN userJack = getUser(USER_JACK_OID); display("User jack after", userJack); - assertAssignedOrgs(userJack, ORG_MINISTRY_OF_OFFENSE_OID); + assertAssignedOrgs(userJack, ORG_MINISTRY_OF_OFFENSE_OID, ORG_MINISTRY_OF_OFFENSE_OID); assertHasOrgs(userJack, ORG_MINISTRY_OF_OFFENSE_OID, ORG_MINISTRY_OF_OFFENSE_OID); assertAssignedOrg(userJack, ORG_MINISTRY_OF_OFFENSE_OID, SchemaConstants.ORG_MANAGER); assertHasOrg(userJack, ORG_MINISTRY_OF_OFFENSE_OID, SchemaConstants.ORG_MANAGER); From 21f8052f6565e607513404ab1f8eb405ddda19c3 Mon Sep 17 00:00:00 2001 From: ozkanbayraktar Date: Wed, 12 Oct 2016 11:18:56 +0200 Subject: [PATCH 4/6] AuditSearchDto.java is added to the reports dto --- .../admin/reports/PageAuditLogViewer.html | 12 +- .../admin/reports/PageAuditLogViewer.java | 27 +-- .../reports/dto/AuditEventRecordProvider.java | 5 - .../admin/reports/dto/AuditSearchDto.java | 174 ++++++++++++++++++ 4 files changed, 192 insertions(+), 26 deletions(-) create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditSearchDto.java diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.html index 6902a4cee8b..ccc66c1f329 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.html @@ -34,22 +34,18 @@
- - -
-
- -
+ + - -
+ +
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.java index f612f769bb9..45856b11e1d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.java @@ -1,6 +1,7 @@ package com.evolveum.midpoint.web.page.admin.reports; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -20,6 +21,7 @@ import com.evolveum.midpoint.audit.api.AuditEventRecord; import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.schema.result.OperationResultStatus; import com.evolveum.midpoint.security.api.AuthorizationConstants; import com.evolveum.midpoint.web.application.AuthorizationAction; import com.evolveum.midpoint.web.application.PageDescriptor; @@ -36,6 +38,8 @@ import com.evolveum.midpoint.web.page.admin.reports.dto.AuditSearchDto; import com.evolveum.midpoint.web.session.UserProfileStorage; import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType; +import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventStageType; +import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventTypeType; /** * Created by honchar. @@ -61,12 +65,11 @@ public class PageAuditLogViewer extends PageBase{ private static final String ID_CHANNEL = "channelField"; private static final String ID_HOST_IDENTIFIER = "hostIdentifierField"; private static final String ID_TARGET_NAME = "targetNameField"; - private static final String ID_TARGET_TYPE = "targetTypeField"; private static final String ID_TARGET_OWNER_NAME = "targetOwnerNameField"; private static final String ID_EVENT_TYPE = "eventTypeField"; private static final String ID_EVENT_STAGE = "eventStageField"; private static final String ID_OUTCOME = "outcomeField"; - + private static final String ID_MAIN_FORM = "mainForm"; private static final String ID_SEARCH_BUTTON = "searchButton"; @@ -148,13 +151,6 @@ private void initParametersPanel(Form mainForm){ targetName.setOutputMarkupId(true); parametersPanel.add(targetName); - IModel targetTypeModel = new PropertyModel<>(auditSearchDto, AuditSearchDto.F_TARGET_TYPE); - TextPanel targetType = new TextPanel(ID_TARGET_TYPE, targetTypeModel); - targetType.getBaseFormComponent().add(new EmptyOnChangeAjaxFormUpdatingBehavior()); - targetType.getBaseFormComponent().add(new EmptyOnBlurAjaxFormUpdatingBehaviour()); - targetType.setOutputMarkupId(true); - parametersPanel.add(targetType); - IModel targetOwnerNameModel = new PropertyModel<>(auditSearchDto, AuditSearchDto.F_TARGET_OWNER_NAME); TextPanel targetOwnerName = new TextPanel(ID_TARGET_OWNER_NAME, targetOwnerNameModel); targetOwnerName.getBaseFormComponent().add(new EmptyOnChangeAjaxFormUpdatingBehavior()); @@ -162,22 +158,28 @@ private void initParametersPanel(Form mainForm){ targetOwnerName.setOutputMarkupId(true); parametersPanel.add(targetOwnerName); + IModel eventTypeListModel = new ListModel(Arrays.asList(AuditEventTypeType.values())); IModel eventTypeModel = new PropertyModel<>(auditSearchDto, AuditSearchDto.F_EVENT_TYPE); - TextPanel eventType = new TextPanel(ID_EVENT_TYPE, eventTypeModel); + DropDownChoicePanel eventType = new DropDownChoicePanel(ID_EVENT_TYPE, eventTypeModel, eventTypeListModel); + // TextPanel eventType = new TextPanel(ID_EVENT_TYPE, eventTypeModel); eventType.getBaseFormComponent().add(new EmptyOnChangeAjaxFormUpdatingBehavior()); eventType.getBaseFormComponent().add(new EmptyOnBlurAjaxFormUpdatingBehaviour()); eventType.setOutputMarkupId(true); parametersPanel.add(eventType); + IModel eventStageListModel = new ListModel(Arrays.asList(AuditEventStageType.values())); IModel eventStageModel = new PropertyModel<>(auditSearchDto, AuditSearchDto.F_EVENT_STAGE); - TextPanel eventStage = new TextPanel(ID_EVENT_STAGE, eventStageModel); + DropDownChoicePanel eventStage = new DropDownChoicePanel(ID_EVENT_STAGE, eventStageModel, eventStageListModel); + // TextPanel eventStage = new TextPanel(ID_EVENT_STAGE, eventStageModel); eventStage.getBaseFormComponent().add(new EmptyOnChangeAjaxFormUpdatingBehavior()); eventStage.getBaseFormComponent().add(new EmptyOnBlurAjaxFormUpdatingBehaviour()); eventStage.setOutputMarkupId(true); parametersPanel.add(eventStage); + IModel outcomeListModel = new ListModel(Arrays.asList(OperationResultStatus.values())); IModel outcomeModel = new PropertyModel<>(auditSearchDto, AuditSearchDto.F_OUTCOME); - TextPanel outcome = new TextPanel(ID_OUTCOME, outcomeModel); + // TextPanel outcome = new TextPanel(ID_OUTCOME, outcomeModel); + DropDownChoicePanel outcome = new DropDownChoicePanel(ID_OUTCOME, outcomeModel, outcomeListModel); outcome.getBaseFormComponent().add(new EmptyOnChangeAjaxFormUpdatingBehavior()); outcome.getBaseFormComponent().add(new EmptyOnBlurAjaxFormUpdatingBehaviour()); outcome.setOutputMarkupId(true); @@ -223,7 +225,6 @@ public Map getParameters() { parameters.put("channel", auditSearchDto.getObject().getChannel()); parameters.put("hostIdentifier", auditSearchDto.getObject().getHostIdentifier()); parameters.put("targetName", auditSearchDto.getObject().getTargetName()); - parameters.put("targetType", auditSearchDto.getObject().getTargetType()); parameters.put("targetOwnerName", auditSearchDto.getObject().getTargetOwnerName()); parameters.put("eventType", auditSearchDto.getObject().getEventType()); parameters.put("eventStage", auditSearchDto.getObject().getEventStage()); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditEventRecordProvider.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditEventRecordProvider.java index bb78439c36a..4ea1f7df5d3 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditEventRecordProvider.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditEventRecordProvider.java @@ -163,11 +163,6 @@ private String generateFullQuery(String query, boolean orderBy){ } else { queryParameters.remove("hostIdentifier"); } - if (queryParameters.get("targetType") != null) { - query += "(aer.targetType = :targetType) and "; - } else { - queryParameters.remove("targetType"); - } if (queryParameters.get("targetOwnerName") != null) { query += "(aer.targetOwnerName = :targetOwnerName) and "; } else { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditSearchDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditSearchDto.java new file mode 100644 index 00000000000..c5bc7f22a77 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditSearchDto.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2010-2013 Evolveum + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.evolveum.midpoint.web.page.admin.reports.dto; + +import java.io.Serializable; +import java.sql.Timestamp; +import java.util.Date; + +import com.evolveum.midpoint.audit.api.AuditEventType; +import com.evolveum.midpoint.util.MiscUtil; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ExportType; + +import javax.xml.datatype.XMLGregorianCalendar; + +/** + * TODO - get rid of XMLGregorianCalendar - Date conversions + * + * @author lazyman + */ +public class AuditSearchDto implements Serializable { + + public static final String F_FROM_GREG = "fromGreg"; + public static final String F_TO_GREG = "toGreg"; + public static final String F_FROM = "from"; + public static final String F_TO = "to"; + public static final String F_INITIATOR_NAME = "initiatorName"; + public static final String F_CHANNEL = "channel"; + public static final String F_HOST_IDENTIFIER = "hostIdentifier"; + public static final String F_TARGET_NAME = "targetName"; + public static final String F_TARGET_OWNER_NAME = "targetOwnerName"; + public static final String F_EVENT_TYPE = "eventType"; + public static final String F_EVENT_STAGE = "eventStage"; + public static final String F_OUTCOME = "outcome"; + + private XMLGregorianCalendar fromGreg; + private XMLGregorianCalendar toGreg; + private Date from; + private Date to; + private String initiatorName; + private String channel; + private String hostIdentifier; + private String targetName; + private String targetOwnerName; + private String eventType; + private String eventStage; + private String outcome; + + public XMLGregorianCalendar getFromGreg() { + return MiscUtil.asXMLGregorianCalendar(from); + } + + public void setFromGreg(XMLGregorianCalendar fromGreg) { + this.from = MiscUtil.asDate(fromGreg); + this.fromGreg = fromGreg; + } + + public XMLGregorianCalendar getToGreg() { + return MiscUtil.asXMLGregorianCalendar(to); + } + + public void setToGreg(XMLGregorianCalendar toGreg) { + this.to = MiscUtil.asDate(toGreg); + this.toGreg = toGreg; + } + + public Date getFrom() { + if (from == null) { + from = new Date(); + } + return from; + } + + public void setFrom(Date from) { + this.from = from; + } + + public Date getTo() { + if (to == null) { + to = new Date(); + } + return to; + } + + public void setTo(Date to) { + this.to = to; + } + + public Timestamp getDateFrom() { + return new Timestamp(getFrom().getTime()); + } + + public Timestamp getDateTo() { + return new Timestamp(getTo().getTime()); + } + + public String getInitiatorName() { + return initiatorName; + } + + public void setInitiatorName(String initiatorName) { + this.initiatorName = initiatorName; + } + + public String getChannel() { + return channel; + } + + public void setChannel(String channel) { + this.channel = channel; + } + + public String getHostIdentifier() { + return hostIdentifier; + } + + public void setHostIdentifier(String hostIdentifier) { + this.hostIdentifier = hostIdentifier; + } + + public String getTargetName() { + return targetName; + } + + public void setTargetName(String targetName) { + this.targetName = targetName; + } + + public String getTargetOwnerName() { + return targetOwnerName; + } + + public void setTargetOwnerName(String targetOwnerName) { + this.targetOwnerName = targetOwnerName; + } + + public String getEventType() { + return eventType; + } + + public void setEventType(String eventType) { + this.eventType = eventType; + } + + public String getEventStage() { + return eventStage; + } + + public void setEventStage(String eventStage) { + this.eventStage = eventStage; + } + + public String getOutcome() { + return outcome; + } + + public void setOutcome(String outcome) { + this.outcome = outcome; + } + +} From 3e586836f967a61d3491e740b8ceb520b4923507 Mon Sep 17 00:00:00 2001 From: Radovan Semancik Date: Wed, 12 Oct 2016 11:50:35 +0200 Subject: [PATCH 5/6] Support for multiple merge configurations (MID-3460) --- .../xml/ns/public/common/common-core-3.xsd | 50 +++++++++++++++---- .../model/api/ModelInteractionService.java | 4 +- .../midpoint/model/api/ModelService.java | 5 +- .../impl/controller/ModelController.java | 7 +-- .../ModelInteractionServiceImpl.java | 8 +-- .../model/impl/controller/ObjectMerger.java | 23 +++++++-- .../midpoint/model/intest/TestMerge.java | 19 ++++--- .../resources/common/system-configuration.xml | 19 +++++++ 8 files changed, 104 insertions(+), 31 deletions(-) diff --git a/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd b/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd index 0bc7ca1ade5..49a7bef79a0 100644 --- a/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd +++ b/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd @@ -9378,12 +9378,10 @@ - + - Configuration for object merging. E.g. for merging two users. - Note: this is a single-valued item now. But it will most likely be - switched to multi-valued item in future midPoint versions. + Configurations for object merging. E.g. for merging two users. 3.5 @@ -12488,17 +12486,51 @@ - TODO + Configuration that specifies automatic merging of two objects. - - - - + + + + Short name of the merge cofiguration that also works as identifier for this configuration. + It has to be unique among all the applicable merge configurations. + + + + + + + Free form-name that can be displayed in user interfaces. + + + + + + + Free form description that can be displayed in user interfaces. It may be + longer text (more than few lines). + + + + + + + Item merge configuration. It will be applied to the specified (named) item. + + + + + + + Default merge configuration. It will be applied to all the items that are not + explicitly specified in the item merge configurations. + + + diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelInteractionService.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelInteractionService.java index 5e0997e3fe9..bf4655d17a3 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelInteractionService.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelInteractionService.java @@ -183,11 +183,11 @@ ConnectorOperationalStatus getConnectorOperationalStatus(String resourceOid, Ope throws SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException; ObjectDelta mergeObjectsPreviewDelta(Class type, - String leftOid, String rightOid, Task task, OperationResult result) + String leftOid, String rightOid, String mergeConfigurationName, Task task, OperationResult result) throws ObjectNotFoundException, SchemaException, ConfigurationException; PrismObject mergeObjectsPreviewObject(Class type, - String leftOid, String rightOid, Task task, OperationResult result) + String leftOid, String rightOid, String mergeConfigurationName, Task task, OperationResult result) throws ObjectNotFoundException, SchemaException, ConfigurationException; } diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelService.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelService.java index 8f0a3b79ba4..025f51f8493 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelService.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelService.java @@ -664,10 +664,13 @@ CompareResultType compareObject(PrismObject object, * @param type object type * @param leftOid left-side object OID * @param rightOid right-side object OID + * @param mergeConfigurationName name of the merge configuration to use * @param task * @param result * @return */ - Collection> mergeObjects(Class type, String leftOid, String rightOid, Task task, OperationResult result) throws ObjectNotFoundException, SchemaException, ConfigurationException, ObjectAlreadyExistsException, ExpressionEvaluationException, CommunicationException, PolicyViolationException, SecurityViolationException; + Collection> mergeObjects(Class type, String leftOid, String rightOid, + String mergeConfigurationName, Task task, OperationResult result) + throws ObjectNotFoundException, SchemaException, ConfigurationException, ObjectAlreadyExistsException, ExpressionEvaluationException, CommunicationException, PolicyViolationException, SecurityViolationException; } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelController.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelController.java index faa6ca60a33..c205e5c449f 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelController.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelController.java @@ -2097,8 +2097,9 @@ public AccessCertificationCampaignType createCampaign(String definitionOid, Task //endregion @Override - public Collection> mergeObjects(Class type, String leftOid, String rightOid, Task task, - OperationResult parentResult) throws ObjectNotFoundException, SchemaException, ConfigurationException, ObjectAlreadyExistsException, ExpressionEvaluationException, CommunicationException, PolicyViolationException, SecurityViolationException { + public Collection> mergeObjects(Class type, + String leftOid, String rightOid, String mergeConfigurationName, Task task, OperationResult parentResult) + throws ObjectNotFoundException, SchemaException, ConfigurationException, ObjectAlreadyExistsException, ExpressionEvaluationException, CommunicationException, PolicyViolationException, SecurityViolationException { OperationResult result = parentResult.createSubresult(MERGE_OBJECTS); result.addParam("leftOid", leftOid); @@ -2110,7 +2111,7 @@ public Collection> deltas = - objectMerger.mergeObjects(type, leftOid, rightOid, task, result); + objectMerger.mergeObjects(type, leftOid, rightOid, mergeConfigurationName, task, result); result.computeStatus(); return deltas; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelInteractionServiceImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelInteractionServiceImpl.java index 4734e17af24..d1e924ea9ed 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelInteractionServiceImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelInteractionServiceImpl.java @@ -708,13 +708,13 @@ public ConnectorOperationalStatus getConnectorOperationalStatus(String resourceO @Override public ObjectDelta mergeObjectsPreviewDelta(Class type, String leftOid, - String rightOid, Task task, OperationResult parentResult) + String rightOid, String mergeConfigurationName, Task task, OperationResult parentResult) throws ObjectNotFoundException, SchemaException, ConfigurationException { OperationResult result = parentResult.createMinorSubresult(MERGE_OBJECTS_PREVIEW_DELTA); try { - ObjectDelta objectDelta = objectMerger.computeMergeDelta(type, leftOid, rightOid, task, result); + ObjectDelta objectDelta = objectMerger.computeMergeDelta(type, leftOid, rightOid, mergeConfigurationName, task, result); result.computeStatus(); return objectDelta; @@ -727,13 +727,13 @@ public ObjectDelta mergeObjectsPreviewDelta(Class t @Override public PrismObject mergeObjectsPreviewObject(Class type, String leftOid, - String rightOid, Task task, OperationResult parentResult) + String rightOid, String mergeConfigurationName, Task task, OperationResult parentResult) throws ObjectNotFoundException, SchemaException, ConfigurationException { OperationResult result = parentResult.createMinorSubresult(MERGE_OBJECTS_PREVIEW_OBJECT); try { - ObjectDelta objectDelta = objectMerger.computeMergeDelta(type, leftOid, rightOid, task, result); + ObjectDelta objectDelta = objectMerger.computeMergeDelta(type, leftOid, rightOid, mergeConfigurationName, task, result); final PrismObject objectLeft = objectResolver.getObjectSimple(type, leftOid, null, task, result).asPrismObject(); diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ObjectMerger.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ObjectMerger.java index e65fcf408f8..ad80f036362 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ObjectMerger.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ObjectMerger.java @@ -19,6 +19,7 @@ import java.util.Collection; import java.util.List; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -31,7 +32,6 @@ import com.evolveum.midpoint.prism.PrismContainerValue; import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.prism.PrismObjectDefinition; import com.evolveum.midpoint.prism.PrismValue; import com.evolveum.midpoint.prism.Visitable; import com.evolveum.midpoint.prism.Visitor; @@ -88,11 +88,11 @@ public class ObjectMerger { private ModelController modelController; public Collection> mergeObjects(Class type, - String leftOid, String rightOid, Task task, OperationResult result) + String leftOid, String rightOid, String mergeConfigurationName, Task task, OperationResult result) throws ObjectNotFoundException, SchemaException, ConfigurationException, ObjectAlreadyExistsException, ExpressionEvaluationException, CommunicationException, PolicyViolationException, SecurityViolationException { - ObjectDelta objectDelta = computeMergeDelta(type, leftOid, rightOid, task, result); + ObjectDelta objectDelta = computeMergeDelta(type, leftOid, rightOid, mergeConfigurationName, task, result); if (objectDelta != null && !objectDelta.isEmpty()) { Collection> executedDeltas = @@ -115,14 +115,14 @@ public Collection ObjectDelta computeMergeDelta(Class type, String leftOid, String rightOid, - Task task, OperationResult result) + String mergeConfigurationName, Task task, OperationResult result) throws ObjectNotFoundException, SchemaException, ConfigurationException { final PrismObject objectLeft = objectResolver.getObjectSimple(type, leftOid, null, task, result).asPrismObject(); final PrismObject objectRight = objectResolver.getObjectSimple(type, rightOid, null, task, result).asPrismObject(); PrismObject systemConfiguration = systemObjectCache.getSystemConfiguration(result); - MergeConfigurationType mergeConfiguration = systemConfiguration.asObjectable().getMergeConfiguration(); + MergeConfigurationType mergeConfiguration = selectConfiguration(systemConfiguration, mergeConfigurationName); if (mergeConfiguration == null) { throw new ConfigurationException("No merge configuration defined"); } @@ -294,4 +294,17 @@ private ItemDelta mergeItem(PrismObject systemConfiguration, String mergeConfigurationName) throws ConfigurationException { + if (StringUtils.isBlank(mergeConfigurationName)) { + throw new IllegalArgumentException("Merge configuration name not specified"); + } + for (MergeConfigurationType mergeConfiguration: systemConfiguration.asObjectable().getMergeConfiguration()) { + if (mergeConfigurationName.equals(mergeConfiguration.getName())) { + return mergeConfiguration; + } + } + throw new ConfigurationException("Merge configuration with name '"+mergeConfigurationName+"' was not found"); + } + } diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMerge.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMerge.java index 43e0bc761a2..7828aaf2b4e 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMerge.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMerge.java @@ -29,13 +29,11 @@ import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.util.PrismAsserts; -import com.evolveum.midpoint.prism.util.PrismTestUtil; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.FocusTypeUtil; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.test.util.TestUtil; import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.MetadataType; import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; /** @@ -47,6 +45,8 @@ public class TestMerge extends AbstractInitializedModelIntegrationTest { public static final File TEST_DIR = new File("src/test/resources/merge"); + + public static final String MERGE_CONFIG_DEFAULT_NAME = "default"; @Override public void initSystem(Task initTask, OperationResult initResult) throws Exception { @@ -88,7 +88,8 @@ public void test100MergeJackGuybrushPreviewDelta() throws Exception { // WHEN TestUtil.displayWhen(TEST_NAME); ObjectDelta delta = - modelInteractionService.mergeObjectsPreviewDelta(UserType.class, USER_JACK_OID, USER_GUYBRUSH_OID, task, result); + modelInteractionService.mergeObjectsPreviewDelta(UserType.class, + USER_JACK_OID, USER_GUYBRUSH_OID, MERGE_CONFIG_DEFAULT_NAME, task, result); // THEN TestUtil.displayThen(TEST_NAME); @@ -135,7 +136,8 @@ public void test102MergeJackGuybrushPreviewObject() throws Exception { // WHEN TestUtil.displayWhen(TEST_NAME); PrismObject object = - modelInteractionService.mergeObjectsPreviewObject(UserType.class, USER_JACK_OID, USER_GUYBRUSH_OID, task, result); + modelInteractionService.mergeObjectsPreviewObject(UserType.class, + USER_JACK_OID, USER_GUYBRUSH_OID, MERGE_CONFIG_DEFAULT_NAME, task, result); // THEN TestUtil.displayThen(TEST_NAME); @@ -185,7 +187,8 @@ public void test110MergeGuybrushJackPreviewDelta() throws Exception { // WHEN TestUtil.displayWhen(TEST_NAME); ObjectDelta delta = - modelInteractionService.mergeObjectsPreviewDelta(UserType.class, USER_GUYBRUSH_OID, USER_JACK_OID, task, result); + modelInteractionService.mergeObjectsPreviewDelta(UserType.class, + USER_GUYBRUSH_OID, USER_JACK_OID, MERGE_CONFIG_DEFAULT_NAME, task, result); // THEN TestUtil.displayThen(TEST_NAME); @@ -235,7 +238,8 @@ public void test112MergeGuybrushJackPreviewObject() throws Exception { // WHEN TestUtil.displayWhen(TEST_NAME); PrismObject object = - modelInteractionService.mergeObjectsPreviewObject(UserType.class, USER_GUYBRUSH_OID, USER_JACK_OID, task, result); + modelInteractionService.mergeObjectsPreviewObject(UserType.class, + USER_GUYBRUSH_OID, USER_JACK_OID, MERGE_CONFIG_DEFAULT_NAME, task, result); // THEN TestUtil.displayThen(TEST_NAME); @@ -280,7 +284,8 @@ public void test200MergeJackGuybrush() throws Exception { // WHEN TestUtil.displayWhen(TEST_NAME); - modelService.mergeObjects(UserType.class, USER_JACK_OID, USER_GUYBRUSH_OID, task, result); + modelService.mergeObjects(UserType.class, + USER_JACK_OID, USER_GUYBRUSH_OID, MERGE_CONFIG_DEFAULT_NAME, task, result); // THEN TestUtil.displayThen(TEST_NAME); diff --git a/model/model-intest/src/test/resources/common/system-configuration.xml b/model/model-intest/src/test/resources/common/system-configuration.xml index bf470baba22..979c886a42f 100644 --- a/model/model-intest/src/test/resources/common/system-configuration.xml +++ b/model/model-intest/src/test/resources/common/system-configuration.xml @@ -184,6 +184,7 @@ Jamaica + default @@ -233,4 +234,22 @@ take + + + empty + + + + allRight + + take + + + + + allLeft + + take + + From 51c54399ae40e8c56477984ae1d998bd1b89a129 Mon Sep 17 00:00:00 2001 From: Radovan Semancik Date: Wed, 12 Oct 2016 13:05:51 +0200 Subject: [PATCH 6/6] Shopping cart styles update --- .../assignment/CatalogItemsPanel.html | 2 +- .../assignment/CatalogItemsPanel.java | 2 +- .../src/main/webapp/less/midpoint-theme.less | 19 +++++++++++++++---- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/CatalogItemsPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/CatalogItemsPanel.html index 2c9666562f3..979aa0092b3 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/CatalogItemsPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/CatalogItemsPanel.html @@ -29,7 +29,7 @@ style="font-size: 10px; position: absolute; top: -1px; right: 50%;"> -
+
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/CatalogItemsPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/CatalogItemsPanel.java index b62b3445164..b7fa1794e45 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/CatalogItemsPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/CatalogItemsPanel.java @@ -94,7 +94,7 @@ public class CatalogItemsPanel extends BasePanel implements IPageableItems { private IModel viewModel; private AssignmentViewType currentViewType = AssignmentViewType.ROLE_CATALOG_VIEW; - private long itemsPerRow = 3; + private long itemsPerRow = 4; private static final long DEFAULT_ROWS_COUNT = 5; private PageBase pageBase; private IModel viewTypeClassModel; diff --git a/gui/admin-gui/src/main/webapp/less/midpoint-theme.less b/gui/admin-gui/src/main/webapp/less/midpoint-theme.less index 0027243b94d..317aa70371c 100644 --- a/gui/admin-gui/src/main/webapp/less/midpoint-theme.less +++ b/gui/admin-gui/src/main/webapp/less/midpoint-theme.less @@ -1086,16 +1086,26 @@ dd.stacktrace::before { // Shopping cart +.shopping-cart-item-table { + margin-top: 10px; + margin-left: 0px; + margin-right: 5px; + min-height: 460px; +} + .shopping-cart-item-box { .inner { - min-height: 90px; + min-height: 120px; + cursor: pointer; } .inner-label { font-size: 18px; - padding-top: 15px; - padding-left: 10px; + padding-top: 10px; + padding-left: 12px; + padding-right: 12px; + padding-bottom: 10px; } } @@ -1109,10 +1119,11 @@ dd.stacktrace::before { background: rgba(0, 0, 0, 0.1); .shopping-cart-item-button-details { - + cursor: pointer; } .shopping-cart-item-button-add { + cursor: pointer; float: right; } } \ No newline at end of file