Skip to content

Commit

Permalink
Add Create Case page
Browse files Browse the repository at this point in the history
  • Loading branch information
bpowers1215 committed Oct 18, 2017
1 parent cbccae9 commit 1d78e24
Show file tree
Hide file tree
Showing 6 changed files with 150 additions and 136 deletions.
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (c) 2010-2015 Evolveum
~ 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
~ 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,
Expand All @@ -18,55 +18,21 @@
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
<body>
<wicket:extend>
<form wicket:id="mainForm" class="clearfix form-horizontal">
<form wicket:id="mainForm" autocomplete="off">

<div class="row">
<div class="col-md-12">
<div class="box box-success">
<div class="box-header with-border">
<h3 class="box-title"><wicket:message key="PageCase.details"/></h3>
</div>
<div class="box-body no-padding">
<table class="table table-striped">
<tr>
<td><wicket:message key="PageCase.name"/></td>
<td><div wicket:id="caseName" /></td>
</tr>
<tr>
<td><wicket:message key="PageCase.description"/></td>
<td><div wicket:id="caseDescription" /></td>
</tr>
<tr>
<td><wicket:message key="PageCase.resource"/></td>
<td><div wicket:id="caseResource" /></td>
</tr>
<tr>
<td><wicket:message key="PageCase.event"/></td>
<td><div wicket:id="caseEvent" /></td>
</tr>
<tr>
<td><wicket:message key="PageCase.outcome"/></td>
<td><div wicket:id="caseOutcome" /></td>
</tr>
<tr>
<td><wicket:message key="PageCase.closeTimestamp"/></td>
<td><div wicket:id="caseCloseTimestamp" /></td>
</tr>
<tr>
<td><wicket:message key="PageCase.state"/></td>
<td><div wicket:id="caseState" /></td>
</tr>
</table>
</div>
</div>
<div wicket:id="case"/>
</div>
</div>

<div class="main-button-bar" style="padding-top: 15px"> <!-- TODO some implicit way of inserting the padding? -->
<a class="btn btn-default" wicket:id="backButton" />
<div class="main-button-bar">
<span class="button-group">
<a class="btn btn-default" wicket:id="backButton" />
</span>
<a class="btn btn-primary" wicket:id="saveButton"/>
</div>

</form>

</wicket:extend>
</body>
</html>
@@ -1,7 +1,6 @@
package com.evolveum.midpoint.web.page.admin.cases;

import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.model.NonEmptyLoadableModel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.prism.PrismObject;
Expand All @@ -20,19 +19,15 @@
import com.evolveum.midpoint.web.component.AjaxSubmitButton;
import com.evolveum.midpoint.web.component.prism.ContainerStatus;
import com.evolveum.midpoint.web.component.prism.ObjectWrapper;
import com.evolveum.midpoint.web.component.prism.ObjectWrapperFactory;
import com.evolveum.midpoint.web.component.prism.PrismObjectPanel;
import com.evolveum.midpoint.web.component.util.ObjectWrapperUtil;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.resource.img.ImgResources;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.request.resource.PackageResourceReference;
import org.apache.wicket.util.string.StringValue;
Expand All @@ -55,88 +50,97 @@ public class PageCase extends PageAdminCases {
private static final String OPERATION_SAVE_CASE = DOT_CLASS + "saveCase";

private static final String ID_MAIN_FORM = "mainForm";
private static final String ID_CASE_NAME = "caseName";
private static final String ID_CASE_DESCRIPTION = "caseDescription";
private static final String ID_CASE_RESOURCE = "caseResource";
private static final String ID_CASE_EVENT = "caseEvent";
private static final String ID_CASE_OUTCOME = "caseOutcome";
private static final String ID_CASE_CLOSE_TIMESTAMP = "caseCloseTimestamp";
private static final String ID_CASE_STATE = "caseState";
private static final String ID_CASE = "case";
private static final String ID_BACK_BUTTON = "backButton";
private static final String ID_SAVE_BUTTON = "saveButton";

//private IModel<ObjectWrapper<CaseType>> caseModel;
private PrismObject<CaseType> caseInstance;
private NonEmptyLoadableModel<CaseType> caseModel;
private static final String ID_PROTECTED_MESSAGE = "protectedMessage";
private LoadableModel<ObjectWrapper<CaseType>> caseModel;

public PageCase() {
initialize();
}

public PageCase(PageParameters parameters) {
caseModel = new NonEmptyLoadableModel<CaseType>(false) {
getPageParameters().overwriteWith(parameters);
initialize();
}
private void initialize(){
caseModel = new LoadableModel<ObjectWrapper<CaseType>>(false) {

@Override
protected CaseType load() {
return loadCase(parameters);
protected ObjectWrapper<CaseType> load() {
return loadCase();
}
};
initLayout();
}

private CaseType loadCase(PageParameters parameters) {

private ObjectWrapper<CaseType> loadCase() {
Task task = createSimpleTask(OPERATION_LOAD_CASE);
OperationResult result = task.getResult();

Collection<SelectorOptions<GetOperationOptions>> options = SelectorOptions.createCollection(
ShadowType.F_RESOURCE, GetOperationOptions.createResolve());
CaseType.F_OBJECT_REF, GetOperationOptions.createResolve());

StringValue oid = parameters != null ? parameters.get(OnePageParameterEncoder.PARAMETER) : null;

LOGGER.trace("loadCase(parameters[oid]={})", oid);


caseInstance = WebModelServiceUtils.loadObject(CaseType.class, oid.toString(), options,
PageCase.this, task, result);
Boolean emptyCase = !isEditingFocus();
PrismObject<CaseType> caseInstance = null;
try {
if (emptyCase) {
LOGGER.trace("Loading case: New case (creating)");
CaseType newCase = new CaseType();
getMidpointApplication().getPrismContext().adopt(newCase);
caseInstance = newCase.asPrismObject();
} else {
String oid = getObjectOidParameter();

caseInstance = WebModelServiceUtils.loadObject(CaseType.class, oid, options,
PageCase.this, task, result);

if (caseInstance == null) {
LOGGER.trace("caseInstance:[oid]={} was null", oid);
getSession().error(getString("pageCase.message.cantEditCase"));
showResult(result);
throw new RestartResponseException(PageCases.class);
}
LOGGER.debug("CASE WORK ITEMS: {}", caseInstance.asObjectable().getWorkItem());
}
} catch (Exception ex) {
result.recordFatalError("Couldn't get case.", ex);
LoggingUtils.logUnexpectedException(LOGGER, "Couldn't load case", ex);
}

if (caseInstance == null) {
LOGGER.trace("caseInstance:[oid]={} was null", oid);
getSession().error(getString("pageCase.message.cantEditCase"));
showResult(result);
throw new RestartResponseException(PageCases.class);
}else{
return caseInstance.asObjectable();
if (isEditingFocus()) {
getSession().error(getString("pageAdminFocus.message.cantEditFocus"));
} else {
getSession().error(getString("pageAdminFocus.message.cantNewFocus"));
}
throw new RestartResponseException(PageCaseWorkItemsAll.class);
}

ObjectWrapper<CaseType> wrapper;
ObjectWrapperFactory owf = new ObjectWrapperFactory(this);
ContainerStatus status = isEditingFocus() ? ContainerStatus.MODIFYING : ContainerStatus.ADDING;
try {
wrapper = owf.createObjectWrapper("PageCase.details", null, caseInstance, status, task);
} catch (Exception ex) {
result.recordFatalError("Couldn't get case.", ex);
LoggingUtils.logUnexpectedException(LOGGER, "Couldn't load case", ex);
wrapper = owf.createObjectWrapper("PageCase.details", null, caseInstance, null, null, status);
}
wrapper.setShowEmpty(emptyCase);

// LOGGER.trace("caseInstance={})", caseInstance);
// ObjectWrapper wrapper = ObjectWrapperUtil.createObjectWrapper(null, null, caseInstance, ContainerStatus.MODIFYING, task, this);
// OperationResultType fetchResult = caseInstance.getPropertyRealValue(ShadowType.F_FETCH_RESULT, OperationResultType.class);
// wrapper.setFetchResult(OperationResult.createOperationResult(fetchResult));
// wrapper.setShowEmpty(false);
// return caseInstance;
return wrapper;
}

private void initLayout() {
LOGGER.trace("initLayout()");
Form mainForm = new Form(ID_MAIN_FORM);
add(mainForm);

//PrismObjectPanel<CaseType> caseForm = new PrismObjectPanel<CaseType>("case", caseModel, new PackageResourceReference(
// ImgResources.class, ImgResources.HDD_PRISM), mainForm, this);
//mainForm.add(caseForm);

PropertyModel caseNameProperty = new PropertyModel<>(caseModel, CaseType.F_NAME.getLocalPart());
mainForm.add(new Label(ID_CASE_NAME, caseNameProperty));
PropertyModel caseDescriptionProperty = new PropertyModel<>(caseModel, CaseType.F_DESCRIPTION.getLocalPart());
mainForm.add(new Label(ID_CASE_DESCRIPTION, caseDescriptionProperty));
PropertyModel caseResourceProperty = new PropertyModel<>(caseModel, CaseType.F_OBJECT_REF.getLocalPart());
PropertyModel caseResourceNameProperty = new PropertyModel<>(caseResourceProperty, ObjectReferenceType.F_TARGET_NAME.getLocalPart());
mainForm.add(new Label(ID_CASE_RESOURCE, caseResourceNameProperty));
PropertyModel caseEventProperty = new PropertyModel<>(caseModel, CaseType.F_EVENT.getLocalPart());
mainForm.add(new Label(ID_CASE_EVENT, caseEventProperty));
PropertyModel caseOutcomeProperty = new PropertyModel<>(caseModel, CaseType.F_OUTCOME.getLocalPart());
mainForm.add(new Label(ID_CASE_OUTCOME, caseOutcomeProperty));
PropertyModel caseCloseTimestampProperty = new PropertyModel<>(caseModel, CaseType.F_CLOSE_TIMESTAMP.getLocalPart());
mainForm.add(new Label(ID_CASE_CLOSE_TIMESTAMP, caseCloseTimestampProperty));
PropertyModel caseStateProperty = new PropertyModel<>(caseModel, CaseType.F_STATE.getLocalPart());
mainForm.add(new Label(ID_CASE_STATE, caseStateProperty));
PrismObjectPanel<CaseType> caseForm = new PrismObjectPanel<CaseType>(ID_CASE, caseModel, new PackageResourceReference(
ImgResources.class, ImgResources.HDD_PRISM), mainForm, this);
mainForm.add(caseForm);

initButtons(mainForm);
}
Expand All @@ -150,36 +154,49 @@ public void onClick(AjaxRequestTarget target) {
}
};
mainForm.add(back);
// AjaxSubmitButton save = new AjaxSubmitButton("save", createStringResource("pageCase.button.save")) {
//
// @Override
// protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
// savePerformed(target);
// }
//
// @Override
// protected void onError(AjaxRequestTarget target, Form<?> form) {
// target.add(getFeedbackPanel());
// }
// };
// save.add(new VisibleEnableBehaviour() {
//
// @Override
// public boolean isVisible() {
// ObjectWrapper wrapper = caseModel.getObject();
// return !wrapper.isProtectedAccount();
// }
// });
// mainForm.add(save);
AjaxSubmitButton save = new AjaxSubmitButton(ID_SAVE_BUTTON, createStringResource("pageCase.button.save")) {

@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
savePerformed(target);
}

@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
target.add(getFeedbackPanel());
}
};
mainForm.add(save);
}

private String getObjectOidParameter() {
LOGGER.debug("PAGE CASE getObjectOidParameter");
PageParameters parameters = getPageParameters();
LOGGER.trace("Page parameters: {}", parameters);
StringValue oidValue = getPageParameters().get(OnePageParameterEncoder.PARAMETER);
LOGGER.trace("OID parameter: {}", oidValue);
if (oidValue == null) {
return null;
}
String oid = oidValue.toString();
if (StringUtils.isBlank(oid)) {
return null;
}
return oid;
}

private boolean isEditingFocus() {
LOGGER.debug("PAGE CASE isEditingFocus");
return getObjectOidParameter() != null;
}

private void savePerformed(AjaxRequestTarget target) {
LOGGER.debug("Saving account changes.");
LOGGER.debug("Saving case changes.");

OperationResult result = new OperationResult(OPERATION_SAVE_CASE);
try {
WebComponentUtil.revive(caseModel, getPrismContext());
ObjectWrapper wrapper = ObjectWrapperUtil.createObjectWrapper(null, null, caseInstance, ContainerStatus.MODIFYING, null, this);
ObjectWrapper wrapper = caseModel.getObject();
ObjectDelta<CaseType> delta = wrapper.getObjectDelta();
if (delta == null) {
return;
Expand All @@ -188,7 +205,7 @@ private void savePerformed(AjaxRequestTarget target) {
getPrismContext().adopt(delta);
}
if (LOGGER.isTraceEnabled()) {
LOGGER.trace("Account delta computed from form:\n{}", new Object[]{delta.debugDump(3)});
LOGGER.trace("Case delta computed from form:\n{}", new Object[]{delta.debugDump(3)});
}

if (delta.isEmpty()) {
Expand Down
Expand Up @@ -265,7 +265,7 @@ public void onClick(AjaxRequestTarget target) {
closeCase.add(new VisibleEnableBehaviour() {
@Override
public boolean isVisible() {
return !caseDtoModel.getObject().getState().equals(SchemaConstants.CASE_STATE_CLOSED);
return caseDtoModel.getObject().getState() == null || !caseDtoModel.getObject().getState().equals(SchemaConstants.CASE_STATE_CLOSED);
}
});
mainForm.add(closeCase);
Expand Down
Expand Up @@ -26,6 +26,11 @@
<form class="form-inline pull-right search-form" wicket:id="searchForm">
</form>
</wicket:fragment>

<div class="main-button-bar" style="padding-top: 15px">
<a class="btn btn-default" wicket:id="backButton" />
<a class="btn btn-success" wicket:id="createCaseButton"/>
</div>
</wicket:extend>
</body>
</html>

0 comments on commit 1d78e24

Please sign in to comment.