Skip to content

Commit

Permalink
Selectable data language in debug pages.
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Oct 13, 2016
1 parent afeaca6 commit e74df51
Show file tree
Hide file tree
Showing 11 changed files with 163 additions and 91 deletions.
Expand Up @@ -33,6 +33,7 @@
import com.evolveum.midpoint.web.page.admin.configuration.*;
import com.evolveum.midpoint.web.page.admin.reports.*;
import com.evolveum.midpoint.web.page.self.*;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
import org.apache.wicket.AttributeModifier;
Expand Down Expand Up @@ -159,10 +160,6 @@
import com.evolveum.midpoint.web.session.UserProfileStorage;
import com.evolveum.midpoint.web.util.validation.MidpointFormValidatorRegistry;
import com.evolveum.midpoint.wf.api.WorkflowManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AdminGuiConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RichHyperlinkType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.WorkItemType;

/**
* @author lazyman
Expand Down Expand Up @@ -870,8 +867,20 @@ public RestartResponseException getRestartResponseException(Class<? extends Page
return new RestartResponseException(defaultBackPageClass);
}

protected <P extends Object> void validateObject(String xmlObject, final Holder<P> objectHolder,
boolean validateSchema, OperationResult result) {
protected <O extends ObjectType> void validateObject(String lexicalRepresentation, final Holder<PrismObject<O>> objectHolder,
String language, boolean validateSchema, OperationResult result) {

if (language == null || PrismContext.LANG_JSON.equals(language) || PrismContext.LANG_YAML.equals(language)) {
PrismObject<O> object;
try {
object = getPrismContext().parserFor(lexicalRepresentation).language(language).parse();
objectHolder.setValue(object);
} catch (RuntimeException | SchemaException e) {
result.recordFatalError("Couldn't parse object: " + e.getMessage(), e);
}
return;
}

EventHandler handler = new EventHandler() {

@Override
Expand All @@ -883,7 +892,7 @@ public EventResult preMarshall(Element objectElement, Node postValidationTree,
@Override
public <T extends Objectable> EventResult postMarshall(PrismObject<T> object, Element objectElement,
OperationResult objectResult) {
objectHolder.setValue((P) object);
objectHolder.setValue((PrismObject<O>) object);
return EventResult.cont();
}

Expand All @@ -894,7 +903,7 @@ public void handleGlobalError(OperationResult currentResult) {
Validator validator = new Validator(getPrismContext(), handler);
validator.setVerbose(true);
validator.setValidateSchema(validateSchema);
validator.validateObject(xmlObject, result);
validator.validateObject(lexicalRepresentation, result);

result.computeStatus();
}
Expand Down
Expand Up @@ -16,16 +16,32 @@

package com.evolveum.midpoint.web.component;

import com.evolveum.midpoint.prism.PrismContext;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.jetbrains.annotations.Nullable;

import java.util.HashMap;
import java.util.Map;

public class AceEditor extends TextArea<String> {

public static final String MODE_XML = "ace/mode/xml";
public static final String MODE_JSON = "ace/mode/json";
public static final String MODE_YAML = "ace/mode/yaml";

public static final Map<String,String> MODES = new HashMap<>();

static {
MODES.put(null, MODE_XML);
MODES.put(PrismContext.LANG_XML, MODE_XML);
MODES.put(PrismContext.LANG_JSON, MODE_JSON);
MODES.put(PrismContext.LANG_YAML, MODE_YAML);
}

private IModel<Boolean> readonly = new Model(false);

Expand Down Expand Up @@ -88,7 +104,11 @@ public void setMode(String mode) {
this.mode = mode;
}

public void setReadonly(boolean readonly) {
public void setModeForDataLanguage(@Nullable String dataLanguage) {
setMode(MODES.get(dataLanguage));
}

public void setReadonly(boolean readonly) {
this.readonly.setObject(readonly);
}

Expand All @@ -102,4 +122,5 @@ public void refreshReadonly(AjaxRequestTarget target) {

target.appendJavaScript(sb.toString());
}

}
Expand Up @@ -27,7 +27,6 @@
import com.evolveum.midpoint.schema.SchemaConstantsGenerated;
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ReportTypeUtil;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.Holder;
Expand All @@ -38,18 +37,12 @@
import com.evolveum.midpoint.web.application.PageDescriptor;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.AjaxSubmitButton;
import com.evolveum.midpoint.web.component.assignment.AssignmentEditorDto;
import com.evolveum.midpoint.web.component.AceEditor;
import com.evolveum.midpoint.web.page.admin.dto.ObjectViewDto;
import com.evolveum.midpoint.web.security.MidPointApplication;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCampaignType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ReportType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.commons.lang.StringUtils;
import org.apache.wicket.Page;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
Expand Down Expand Up @@ -90,6 +83,7 @@ public class PageDebugView extends PageAdminConfiguration {
private final IModel<Boolean> switchToPlainText = new Model<>(false);
private TextArea<String> plainTextarea;
final Form mainForm = new Form("mainForm");
private final String dataLanguage;

public PageDebugView() {
model = new LoadableModel<ObjectViewDto>(false) {
Expand All @@ -99,9 +93,19 @@ protected ObjectViewDto load() {
return loadObject();
}
};
dataLanguage = determineDataLanguage();
initLayout();
}

private String determineDataLanguage() {
AdminGuiConfigurationType config = loadAdminGuiConfiguration();
if (config != null && config.getPreferredDataLanguage() != null) {
return config.getPreferredDataLanguage();
} else {
return PrismContext.LANG_XML;
}
}

@Override
protected IModel<String> createPageTitleModel() {
return new AbstractReadOnlyModel<String>() {
Expand Down Expand Up @@ -159,8 +163,8 @@ private ObjectViewDto loadObject() {
PrismObject<ObjectType> object = getModelService().getObject(type, objectOid.toString(), options, task, result);

PrismContext context = application.getPrismContext();
String xml = context.serializeObjectToString(object, PrismContext.LANG_XML);
dto = new ObjectViewDto(object.getOid(), WebComponentUtil.getName(object), object, xml);
String lex = context.serializerFor(dataLanguage).serialize(object);
dto = new ObjectViewDto(object.getOid(), WebComponentUtil.getName(object), object, lex);

result.recomputeStatus();
} catch (Exception ex) {
Expand All @@ -172,7 +176,7 @@ private ObjectViewDto loadObject() {
throw new RestartResponseException(PageDebugList.class);
}

showResult(result, false);
showResult(result, false);

if (!WebComponentUtil.isSuccessOrHandledErrorOrWarning(result)) {
showResult(result, false);
Expand All @@ -185,8 +189,6 @@ private ObjectViewDto loadObject() {
private void initLayout() {
add(mainForm);

// final IModel<Boolean> editable = new Model<Boolean>(false);

mainForm.add(new AjaxCheckBox("encrypt", encrypt) {

@Override
Expand Down Expand Up @@ -219,7 +221,7 @@ protected void onUpdate(AjaxRequestTarget target) {

@Override
protected void onUpdate(AjaxRequestTarget target) {
if (switchToPlainText.getObject().booleanValue()){
if (switchToPlainText.getObject()){
editor.setVisible(false);
plainTextarea.setVisible(true);
} else {
Expand All @@ -237,6 +239,7 @@ protected void onUpdate(AjaxRequestTarget target) {
mainForm.add(plainTextarea);

editor = new AceEditor("aceEditor", new PropertyModel<String>(model, ObjectViewDto.F_XML));
editor.setModeForDataLanguage(dataLanguage);
mainForm.add(editor);

initButtons(mainForm);
Expand Down Expand Up @@ -296,11 +299,11 @@ public void savePerformed(AjaxRequestTarget target) {
PrismObject<ObjectType> oldObject = dto.getObject();
oldObject.revive(getPrismContext());

Holder<PrismObject<ObjectType>> objectHolder = new Holder<PrismObject<ObjectType>>(null);
Holder<PrismObject<ObjectType>> objectHolder = new Holder<>(null);
if (editor.isVisible()) {
validateObject(editor.getModel().getObject(), objectHolder, validateSchema.getObject(), result);
validateObject(editor.getModel().getObject(), objectHolder, dataLanguage, validateSchema.getObject(), result);
} else {
validateObject(plainTextarea.getModel().getObject(), objectHolder, validateSchema.getObject(), result);
validateObject(plainTextarea.getModel().getObject(), objectHolder, dataLanguage, validateSchema.getObject(), result);
}

if (result.isAcceptable()) {
Expand Down
Expand Up @@ -15,7 +15,6 @@
*/
package com.evolveum.midpoint.web.page.admin.reports;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

Expand Down Expand Up @@ -217,7 +216,7 @@ public void validate(IValidatable<String> validatable) {

OpResult opResult = null;
try {
validateObject(value, reportHolder, true, result);
validateObject(value, reportHolder, PrismContext.LANG_XML, true, result);

if(!result.isAcceptable()){
result.recordFatalError("Could not validate object", result.getCause());
Expand Down Expand Up @@ -262,7 +261,7 @@ public void setObject(String object) {
Holder<PrismObject<ReportType>> reportHolder = new Holder<>(null);

try {
validateObject(object, reportHolder, true, result);
validateObject(object, reportHolder, PrismContext.LANG_XML, true, result);
model.getObject().setObject(reportHolder.getValue());
} catch (Exception e){
LOGGER.error("Could not set object. Validation problem occured." + result.getMessage());
Expand Down
Expand Up @@ -214,7 +214,7 @@ private void savePerformed(AjaxRequestTarget target) {
OperationResult result = task.getResult();
try {
Holder<PrismObject<ResourceType>> objectHolder = new Holder<PrismObject<ResourceType>>(null);
validateObject(dto.getXml(), objectHolder, false, result);
validateObject(dto.getXml(), objectHolder, PrismContext.LANG_XML, false, result);

if (result.isAcceptable()) {
PrismObject<ResourceType> newResource = objectHolder.getValue();
Expand Down
Expand Up @@ -21,6 +21,7 @@
import com.evolveum.midpoint.prism.xnode.XNode;
import com.evolveum.midpoint.util.exception.SchemaException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
Expand All @@ -46,14 +47,14 @@ public PrismParserImpl(@NotNull ParserSource source, String language, @NotNull P
this.helpers = helpers;
}

private PrismParser create(ParserSource source, String language, @NotNull ParsingContext context, LexicalHelpers helpers) {
private PrismParser create(ParserSource source, @Nullable String language, @NotNull ParsingContext context, LexicalHelpers helpers) {
return source.isIO() ?
new PrismParserImplIO(source, language, context, helpers) :
new PrismParserImplNoIO(source, language, context, helpers);
}

@Override
public PrismParser language(String language) {
public PrismParser language(@Nullable String language) {
return create(this.source, language, this.context, this.helpers);
}

Expand Down
Expand Up @@ -20,6 +20,7 @@
import com.evolveum.midpoint.prism.xnode.XNode;
import com.evolveum.midpoint.util.exception.SchemaException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
Expand All @@ -37,7 +38,7 @@ public PrismParserImplNoIO(ParserSource source, String language, ParsingContext
}

@Override
public PrismParserNoIO language(String language) {
public PrismParserNoIO language(@Nullable String language) {
return (PrismParserNoIO) super.language(language);
}

Expand Down
Expand Up @@ -19,6 +19,7 @@
import com.evolveum.midpoint.prism.xnode.XNode;
import com.evolveum.midpoint.util.exception.SchemaException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
Expand All @@ -35,7 +36,7 @@
*/
public interface PrismParserNoIO extends PrismParser {

PrismParserNoIO language(String language);
PrismParserNoIO language(@Nullable String language);
PrismParserNoIO xml();
PrismParserNoIO json();
PrismParserNoIO yaml();
Expand Down
Expand Up @@ -15,23 +15,31 @@
*/
package com.evolveum.midpoint.schema.util;

import java.util.Collection;
import java.util.Iterator;

import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AdminGuiConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectFormType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectFormsType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType;
import org.jetbrains.annotations.NotNull;

import java.util.Iterator;
import java.util.List;

/**
* @author semancik
*
*/
public class AdminGuiConfigTypeUtil {

public static AdminGuiConfigurationType compileAdminGuiConfiguration(Collection<AdminGuiConfigurationType> adminGuiConfigurations,
public static AdminGuiConfigurationType compileAdminGuiConfiguration(@NotNull List<AdminGuiConfigurationType> adminGuiConfigurations,
PrismObject<SystemConfigurationType> systemConfiguration) {

// if there's no admin config at all, return null (to preserve original behavior)
if (adminGuiConfigurations.isEmpty() &&
(systemConfiguration == null || systemConfiguration.asObjectable().getAdminGuiConfiguration() == null)) {
return null;
}

AdminGuiConfigurationType composite = new AdminGuiConfigurationType();
if (systemConfiguration != null) {
applyAdminGuiConfiguration(composite, systemConfiguration.asObjectable().getAdminGuiConfiguration());
Expand All @@ -51,6 +59,9 @@ private static void applyAdminGuiConfiguration(AdminGuiConfigurationType composi
if (adminGuiConfiguration.getDefaultTimezone() != null) {
composite.setDefaultTimezone(adminGuiConfiguration.getDefaultTimezone());
}
if (adminGuiConfiguration.getPreferredDataLanguage() != null) {
composite.setPreferredDataLanguage(adminGuiConfiguration.getPreferredDataLanguage());
}
if (adminGuiConfiguration.getObjectForms() != null) {
if (composite.getObjectForms() == null) {
composite.setObjectForms(adminGuiConfiguration.getObjectForms().clone());
Expand Down

0 comments on commit e74df51

Please sign in to comment.