Skip to content

Commit

Permalink
Merge branch 'access-certification' of https://github.com/Evolveum/mi…
Browse files Browse the repository at this point in the history
…dpoint into access-certification
  • Loading branch information
KaterynaHonchar committed Dec 17, 2015
2 parents 6989056 + ae76534 commit e4f5a44
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 19 deletions.
Expand Up @@ -469,7 +469,7 @@ private MainMenuItem createCertificationItems() {
submenu.add(menu);
createFocusPageViewMenu(submenu, "PageAdmin.menu.top.certification.viewDefinition", PageCertDefinition.class);
menu = new MenuItem(createStringResource("PageAdmin.menu.top.certification.newDefinition"),
PageImportObject.class);
PageCertDefinition.class);
submenu.add(menu);
menu = new MenuItem(createStringResource("PageAdmin.menu.top.certification.campaigns"),
PageCertCampaigns.class);
Expand Down
Expand Up @@ -18,6 +18,7 @@

import com.evolveum.midpoint.model.api.ModelExecuteOptions;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismObjectDefinition;
import com.evolveum.midpoint.prism.delta.DiffUtil;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.schema.GetOperationOptions;
Expand Down Expand Up @@ -75,6 +76,8 @@ public class PageCertDefinition extends PageAdminCertification {

private static final String DOT_CLASS = PageCertDefinition.class.getName() + ".";

private static final String OPERATION_LOAD_DEFINITION = DOT_CLASS + "loadDefinition";

private static final String ID_MAIN_FORM = "mainForm";

private static final String ID_NAME = "name";
Expand Down Expand Up @@ -115,25 +118,30 @@ private void initModels() {
definitionModel = new LoadableModel<CertDefinitionDto>(false) {
@Override
protected CertDefinitionDto load() {
return loadDefinition();
String definitionOid = getDefinitionOid();
if (definitionOid != null) {
return loadDefinition(definitionOid);
} else {
return createDefinition();
}
}
};
}

private CertDefinitionDto loadDefinition() {
Task task = createSimpleTask("dummy");
private CertDefinitionDto loadDefinition(String definitionOid) {
Task task = createSimpleTask(OPERATION_LOAD_DEFINITION);
OperationResult result = task.getResult();
AccessCertificationDefinitionType definition = null;
CertDefinitionDto definitionDto = null;
try {
Collection<SelectorOptions<GetOperationOptions>> options = SelectorOptions.createCollection(GetOperationOptions.createResolveNames());
PrismObject<AccessCertificationDefinitionType> definitionObject =
WebModelUtils.loadObject(AccessCertificationDefinitionType.class, getDefinitionOid(), options,
WebModelUtils.loadObject(AccessCertificationDefinitionType.class, definitionOid, options,
PageCertDefinition.this, task, result);
if (definitionObject != null) {
definition = definitionObject.asObjectable();
}
definitionDto = new CertDefinitionDto(definition, this, task, result);
definitionDto = new CertDefinitionDto(definition, this);
result.recordSuccessIfUnknown();
} catch (Exception ex) {
LoggingUtils.logException(LOGGER, "Couldn't get definition", ex);
Expand All @@ -147,6 +155,17 @@ private CertDefinitionDto loadDefinition() {
return definitionDto;
}

private CertDefinitionDto createDefinition() {
AccessCertificationDefinitionType definition = getPrismContext().createObjectable(AccessCertificationDefinitionType.class);
AccessCertificationStageDefinitionType stage = new AccessCertificationStageDefinitionType(getPrismContext());
stage.setName("First stage");
stage.setNumber(1);
stage.setReviewerSpecification(new AccessCertificationReviewerSpecificationType(getPrismContext()));
definition.getStageDefinition().add(stage);
CertDefinitionDto definitionDto = new CertDefinitionDto(definition, PageCertDefinition.this);
return definitionDto;
}

private String getDefinitionOid() {
StringValue campaignOid = getPageParameters().get(OnePageParameterEncoder.PARAMETER);
return campaignOid != null ? campaignOid.toString() : null;
Expand Down Expand Up @@ -297,11 +316,11 @@ protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
//region Actions
public void savePerformed(AjaxRequestTarget target) {
CertDefinitionDto dto = definitionModel.getObject();
if (StringUtils.isEmpty(dto.getXml())) {
error(getString("CertDefinitionPage.message.cantSaveEmpty"));
target.add(getFeedbackPanel());
return;
}
// if (StringUtils.isEmpty(dto.getXml())) {
// error(getString("CertDefinitionPage.message.cantSaveEmpty"));
// target.add(getFeedbackPanel());
// return;
// }

Task task = createSimpleTask(OPERATION_SAVE_DEFINITION);
OperationResult result = task.getResult();
Expand All @@ -312,11 +331,16 @@ public void savePerformed(AjaxRequestTarget target) {
AccessCertificationDefinitionType newObject = dto.getUpdatedDefinition(getPrismContext());
newObject.asPrismObject().revive(getPrismContext());

ObjectDelta<AccessCertificationDefinitionType> delta = DiffUtil.diff(oldObject, newObject);
delta.normalize();
ObjectDelta<AccessCertificationDefinitionType> delta;
if (oldObject.getOid() != null) {
delta = DiffUtil.diff(oldObject, newObject);
} else {
delta = ObjectDelta.createAddDelta(newObject.asPrismObject());
}
if (LOGGER.isTraceEnabled()) {
LOGGER.trace("Access definition delta:\n{}", delta.debugDump());
}
delta.normalize();
if (delta != null && !delta.isEmpty()) {
getPrismContext().adopt(delta);
ModelExecuteOptions options = new ModelExecuteOptions();
Expand Down
Expand Up @@ -63,7 +63,7 @@ public class CertDefinitionDto implements Serializable {
private String xml;
private ObjectViewDto owner;

public CertDefinitionDto(AccessCertificationDefinitionType definition, PageBase page, Task task, OperationResult result) {
public CertDefinitionDto(AccessCertificationDefinitionType definition, PageBase page) {
this.oldDefinition = definition.clone();
this.definition = definition;
owner = loadOwnerReference(definition.getOwnerRef());
Expand Down
Expand Up @@ -19,7 +19,7 @@ public class StageDefinitionDto implements Serializable {
private int number;
private String name;
private String description;
private int days;
private Integer days;
private String notifyBeforeDeadline;
private boolean notifyOnlyWhenNoDecision;
private AccessCertificationReviewerDto reviewerDto;
Expand Down Expand Up @@ -48,11 +48,11 @@ public void setDescription(String description) {
this.description = description;
}

public int getDays() {
public Integer getDays() {
return days;
}

public void setDays(int days) {
public void setDays(Integer days) {
this.days = days;
}

Expand Down
Expand Up @@ -39,8 +39,10 @@
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.prism.xml.ns._public.types_3.ObjectDeltaType;
import com.evolveum.prism.xml.ns._public.types_3.ObjectType;
import com.evolveum.prism.xml.ns._public.types_3.RawType;

import org.apache.commons.lang.Validate;
import org.springframework.beans.factory.annotation.Autowired;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
Expand Down Expand Up @@ -670,4 +672,8 @@ public <T extends Objectable> PrismObject<T> createObject(Class<T> clazz) {
}
return definition.instantiate();
}

public <T extends Objectable> T createObjectable(Class<T> clazz) {
return createObject(clazz).asObjectable();
}
}
Expand Up @@ -12355,7 +12355,7 @@
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="days" type="xsd:int" minOccurs="1">
<xsd:element name="days" type="xsd:int" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
How many days should the stage last?
Expand Down
Expand Up @@ -300,7 +300,9 @@ protected AccessCertificationStageType createStage(AccessCertificationCampaignTy

AccessCertificationStageDefinitionType stageDef = CertCampaignTypeUtil.findStageDefinition(campaign, stage.getNumber());
XMLGregorianCalendar end = (XMLGregorianCalendar) stage.getStart().clone();
end.add(XmlTypeConverter.createDuration(true, 0, 0, stageDef.getDays(), 0, 0, 0));
if (stageDef.getDays() != null) {
end.add(XmlTypeConverter.createDuration(true, 0, 0, stageDef.getDays(), 0, 0, 0));
}
end.setHour(23);
end.setMinute(59);
end.setSecond(59);
Expand Down

0 comments on commit e4f5a44

Please sign in to comment.