Skip to content

Commit

Permalink
code refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Apr 12, 2018
1 parent f60c3a1 commit a121578
Showing 1 changed file with 61 additions and 70 deletions.
Expand Up @@ -16,6 +16,7 @@

package com.evolveum.midpoint.web.page.admin.configuration;

import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.model.api.ModelExecuteOptions;
Expand Down Expand Up @@ -50,6 +51,7 @@
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.util.string.StringValue;

import javax.xml.namespace.QName;
Expand Down Expand Up @@ -83,7 +85,7 @@ public class PageDebugView extends PageAdminConfiguration {
final Form mainForm = new com.evolveum.midpoint.web.component.form.Form("mainForm");
private String dataLanguage;
private boolean isInitialized = false;
private ObjectViewDto objectViewDto = new ObjectViewDto();
private IModel<ObjectViewDto> objectViewDtoModel;

public PageDebugView() {

Expand All @@ -104,7 +106,7 @@ protected IModel<String> createPageTitleModel() {

@Override
public String getObject() {
if (objectViewDto == null) {
if (objectViewDtoModel == null || objectViewDtoModel.getObject() == null) {
return "";
}
// ObjectViewDto object;
Expand All @@ -118,62 +120,69 @@ public String getObject() {
// if (object == null) {
// return "";
// } else {
return createStringResource("PageDebugView.title", objectViewDto.getName()).getString();
return createStringResource("PageDebugView.title", objectViewDtoModel.getObject().getName()).getString();
// }
}
};
}

private void initObjectViewObject() {
StringValue objectOid = getPageParameters().get(PARAM_OBJECT_ID);
if (objectOid == null || StringUtils.isEmpty(objectOid.toString())) {
getSession().error(getString("pageDebugView.message.oidNotDefined"));
throw new RestartResponseException(PageDebugList.class);
}
objectViewDtoModel = new LoadableModel<ObjectViewDto>(false) {
@Override
protected ObjectViewDto load() {
ObjectViewDto objectViewDto = new ObjectViewDto();
StringValue objectOid = getPageParameters().get(PARAM_OBJECT_ID);
if (objectOid == null || StringUtils.isEmpty(objectOid.toString())) {
getSession().error(getString("pageDebugView.message.oidNotDefined"));
throw new RestartResponseException(PageDebugList.class);
}

Task task = createSimpleTask(OPERATION_LOAD_OBJECT);
OperationResult result = task.getResult(); //todo is this result != null ?
try {
MidPointApplication application = PageDebugView.this.getMidpointApplication();

GetOperationOptions rootOptions = GetOperationOptions.createRaw();

rootOptions.setResolveNames(true);
rootOptions.setTolerateRawData(true);
Collection<SelectorOptions<GetOperationOptions>> options = SelectorOptions.createCollection(rootOptions);
// FIXME: ObjectType.class will not work well here. We need more specific type.
//todo on page debug list create page params, put there oid and class for object type and send that to this page....read it here
Class type = ObjectType.class;
StringValue objectType = getPageParameters().get(PARAM_OBJECT_TYPE);
if (objectType != null && StringUtils.isNotBlank(objectType.toString())) {
type = getPrismContext().getSchemaRegistry().determineCompileTimeClass(new QName(SchemaConstantsGenerated.NS_COMMON, objectType.toString()));
}
Task task = createSimpleTask(OPERATION_LOAD_OBJECT);
OperationResult result = task.getResult(); //todo is this result != null ?
try {
MidPointApplication application = PageDebugView.this.getMidpointApplication();

// TODO make this configurable (or at least do not show campaign cases in production)
WebModelServiceUtils.addIncludeOptionsForExportOrView(options, type);
PrismObject<ObjectType> object = getModelService().getObject(type, objectOid.toString(), options, task, result);
GetOperationOptions rootOptions = GetOperationOptions.createRaw();

PrismContext context = application.getPrismContext();
rootOptions.setResolveNames(true);
rootOptions.setTolerateRawData(true);
Collection<SelectorOptions<GetOperationOptions>> options = SelectorOptions.createCollection(rootOptions);
// FIXME: ObjectType.class will not work well here. We need more specific type.
//todo on page debug list create page params, put there oid and class for object type and send that to this page....read it here
Class type = ObjectType.class;
StringValue objectType = getPageParameters().get(PARAM_OBJECT_TYPE);
if (objectType != null && StringUtils.isNotBlank(objectType.toString())) {
type = getPrismContext().getSchemaRegistry().determineCompileTimeClass(new QName(SchemaConstantsGenerated.NS_COMMON, objectType.toString()));
}

String lex = context.serializerFor(dataLanguage).serialize(object);
objectViewDto = new ObjectViewDto(object.getOid(), WebComponentUtil.getName(object), object, lex);
// TODO make this configurable (or at least do not show campaign cases in production)
WebModelServiceUtils.addIncludeOptionsForExportOrView(options, type);
PrismObject<ObjectType> object = getModelService().getObject(type, objectOid.toString(), options, task, result);

result.recomputeStatus();
} catch (Exception ex) {
result.recordFatalError("Couldn't load object.", ex);
}
PrismContext context = application.getPrismContext();

if (objectViewDto == null) {
showResult(result);
throw new RestartResponseException(PageDebugList.class);
}
String lex = context.serializerFor(dataLanguage).serialize(object);
objectViewDto = new ObjectViewDto(object.getOid(), WebComponentUtil.getName(object), object, lex);

showResult(result, false);

if (!WebComponentUtil.isSuccessOrHandledErrorOrWarning(result)) {
showResult(result, false);
throw new RestartResponseException(PageDebugList.class);
}
result.recomputeStatus();
} catch (Exception ex) {
result.recordFatalError("Couldn't load object.", ex);
}

if (objectViewDto == null) {
showResult(result);
throw new RestartResponseException(PageDebugList.class);
}

showResult(result, false);

if (!WebComponentUtil.isSuccessOrHandledErrorOrWarning(result)) {
showResult(result, false);
throw new RestartResponseException(PageDebugList.class);
}
return objectViewDto;
}
};
}

private void initLayout() {
Expand Down Expand Up @@ -222,7 +231,7 @@ protected void onUpdate(AjaxRequestTarget target) {
}
});

plainTextarea = new TextArea<>(ID_PLAIN_TEXTAREA, getObjectViewXmlModel());
plainTextarea = new TextArea<>(ID_PLAIN_TEXTAREA, new PropertyModel<>(objectViewDtoModel, ObjectViewDto.F_XML));
plainTextarea.setVisible(false);

mainForm.add(plainTextarea);
Expand All @@ -235,7 +244,7 @@ protected void onUpdate(AjaxRequestTarget target) {
}

private void addOrReplaceEditor(){
editor = new AceEditor("aceEditor", getObjectViewXmlModel());
editor = new AceEditor("aceEditor", new PropertyModel<>(objectViewDtoModel, ObjectViewDto.F_XML));
editor.setModeForDataLanguage(dataLanguage);
editor.add(new AjaxFormComponentUpdatingBehavior("blur") {
private static final long serialVersionUID = 1L;
Expand All @@ -255,14 +264,14 @@ private void initViewButton(Form mainForm) {
@Override
protected void onLanguageSwitched(AjaxRequestTarget target, int updatedIndex, String updatedLanguage,
String objectString) {
objectViewDto.setXml(objectString);
objectViewDtoModel.getObject().setXml(objectString);
dataLanguage = updatedLanguage;
addOrReplaceEditor();
target.add(mainForm);
}
@Override
protected String getObjectStringRepresentation() {
return objectViewDto.getXml();
return objectViewDtoModel.getObject().getXml();
}
@Override
protected boolean isValidateSchema() {
Expand Down Expand Up @@ -315,7 +324,7 @@ private boolean isReport(PrismObject object){
}

public void savePerformed(AjaxRequestTarget target) {
if (StringUtils.isEmpty(objectViewDto.getXml())) {
if (StringUtils.isEmpty(objectViewDtoModel.getObject().getXml())) {
error(getString("pageDebugView.message.cantSaveEmpty"));
target.add(getFeedbackPanel());
return;
Expand All @@ -325,7 +334,7 @@ public void savePerformed(AjaxRequestTarget target) {
OperationResult result = task.getResult();
try {

PrismObject<ObjectType> oldObject = objectViewDto.getObject();
PrismObject<ObjectType> oldObject = objectViewDtoModel.getObject().getObject();
oldObject.revive(getPrismContext());

Holder<Objectable> objectHolder = new Holder<>(null);
Expand Down Expand Up @@ -380,25 +389,7 @@ public void savePerformed(AjaxRequestTarget target) {
}

private void validateObject(OperationResult result, Holder<Objectable> objectHolder) {
parseObject(objectViewDto.getXml(), objectHolder, dataLanguage, validateSchema.getObject(), false, Objectable.class, result);
parseObject(objectViewDtoModel.getObject().getXml(), objectHolder, dataLanguage, validateSchema.getObject(), false, Objectable.class, result);
}

private IModel<String> getObjectViewXmlModel(){
return new IModel<String>() {
@Override
public String getObject() {
return objectViewDto != null ? objectViewDto.getXml() : "";
}

@Override
public void setObject(String s) {
objectViewDto.setXml(s);
}

@Override
public void detach() {

}
};
}
}

0 comments on commit a121578

Please sign in to comment.