Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into feature/breadcrumbs
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Dec 27, 2016
2 parents 5b2f574 + 93bcd1c commit ec65476
Show file tree
Hide file tree
Showing 3 changed files with 132 additions and 21 deletions.
Expand Up @@ -18,10 +18,11 @@

import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.AjaxSubmitButton;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.AbstractReadOnlyModel;

Expand Down Expand Up @@ -56,13 +57,17 @@ private void initLayout(){

RepeatingView buttons = new RepeatingView(ID_BUTTON);
buttons.setOutputMarkupId(true);
add(buttons);
buttonsPanel.add(buttons);

for (String propertyKey : propertyKeysList){
AjaxButton button = new AjaxButton(buttons.newChildId(), pageBase.createStringResource(propertyKey)) {
AjaxSubmitButton button = new AjaxSubmitButton(buttons.newChildId(), pageBase.createStringResource(propertyKey)) {
@Override
public void onClick(AjaxRequestTarget ajaxRequestTarget) {
MultiStateHorizontalButton.this.onStateChanged(ajaxRequestTarget);
public void onSubmit(AjaxRequestTarget ajaxRequestTarget, Form form) {
MultiStateHorizontalButton.this.onStateChanged(propertyKeysList.indexOf(propertyKey), ajaxRequestTarget);
}
@Override
public void onError(AjaxRequestTarget ajaxRequestTarget, Form form) {
MultiStateHorizontalButton.this.onStateChanged(propertyKeysList.indexOf(propertyKey), ajaxRequestTarget);
}
};
button.add(getActiveButtonClassAppender(propertyKeysList.indexOf(propertyKey)));
Expand All @@ -85,11 +90,20 @@ public String getObject() {
});
}

protected void onStateChanged(AjaxRequestTarget target){
protected void onStateChanged(int index, AjaxRequestTarget target){
setSelectedIndex(index);
target.add(getButtonsContainer());
}

protected WebMarkupContainer getButtonsContainer(){
return (WebMarkupContainer) get(ID_BUTTONS_CONTAINER);
}

public int getSelectedIndex() {
return selectedIndex;
}

public void setSelectedIndex(int selectedIndex) {
this.selectedIndex = selectedIndex;
}
}
Expand Up @@ -19,7 +19,8 @@
<body>
<wicket:extend>
<form wicket:id="mainForm" class="form-horizontal">
<div class="form-group">
<div class="row form-group">
<div class="col-lg-2" wicket:id="viewButtonPanel" ></div>
<label class="col-lg-2 control-label"><wicket:message key="pageDebugView.options"/></label>

<div class="col-lg-8">
Expand Down
Expand Up @@ -38,25 +38,35 @@
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.AjaxSubmitButton;
import com.evolveum.midpoint.web.component.AceEditor;
import com.evolveum.midpoint.web.component.input.MultiStateHorizontalButton;
import com.evolveum.midpoint.web.component.prism.InputPanel;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnBlurAjaxFormUpdatingBehaviour;
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.*;

import org.apache.commons.lang.StringUtils;
import org.apache.wicket.Component;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.form.TextArea;
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 org.apache.wicket.util.visit.IVisit;
import org.apache.wicket.util.visit.IVisitor;

import javax.xml.namespace.QName;

import java.util.Arrays;
import java.util.Collection;
import java.util.List;

@PageDescriptor(url = "/admin/config/debug", action = {
@AuthorizationAction(actionUri = PageAdminConfiguration.AUTH_CONFIGURATION_ALL,
Expand All @@ -68,13 +78,15 @@ public class PageDebugView extends PageAdminConfiguration {
private static final String DOT_CLASS = PageDebugView.class.getName() + ".";
private static final String OPERATION_LOAD_OBJECT = DOT_CLASS + "loadObject";
private static final String OPERATION_SAVE_OBJECT = DOT_CLASS + "saveObject";
private static final String OPERATION_VALIDATE_OBJECT = DOT_CLASS + "validateObject";
private static final String ID_PLAIN_TEXTAREA = "plain-textarea";
private static final String ID_VIEW_BUTTON_PANEL = "viewButtonPanel";

private static final Trace LOGGER = TraceManager.getTrace(PageDebugView.class);

public static final String PARAM_OBJECT_ID = "objectId";
public static final String PARAM_OBJECT_TYPE = "objectType";
private LoadableModel<ObjectViewDto> model;
private IModel<ObjectViewDto> model;
private AceEditor editor;
private final IModel<Boolean> encrypt = new Model<>(true);
private final IModel<Boolean> saveAsRaw = new Model<>(true);
Expand All @@ -83,14 +95,30 @@ 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;
private String dataLanguage;
private ObjectViewDto objectViewDto;
private boolean isInitialized = false;

public PageDebugView() {
model = new LoadableModel<ObjectViewDto>(false) {
model = new IModel<ObjectViewDto>() {

@Override
protected ObjectViewDto load() {
return loadObject();
public ObjectViewDto getObject() {
if (!isInitialized) {
objectViewDto = loadObject();
isInitialized = true;
}
return objectViewDto;
}

@Override
public void setObject(ObjectViewDto o) {
objectViewDto = o;
}

@Override
public void detach(){

}
};
dataLanguage = determineDataLanguage();
Expand All @@ -100,7 +128,13 @@ protected ObjectViewDto load() {
private String determineDataLanguage() {
AdminGuiConfigurationType config = loadAdminGuiConfiguration();
if (config != null && config.getPreferredDataLanguage() != null) {
return config.getPreferredDataLanguage();
if (PrismContext.LANG_JSON.equals(config.getPreferredDataLanguage())){
return PrismContext.LANG_JSON;
} else if (PrismContext.LANG_YAML.equals(config.getPreferredDataLanguage())){
return PrismContext.LANG_YAML;
} else {
return PrismContext.LANG_XML;
}
} else {
return PrismContext.LANG_XML;
}
Expand All @@ -112,7 +146,7 @@ protected IModel<String> createPageTitleModel() {

@Override
public String getObject() {
if (!model.isLoaded()){
if (model == null || model.getObject() == null){
return "";
}
return createStringResource("PageDebugView.title", model.getObject().getName()).getString();
Expand Down Expand Up @@ -165,6 +199,7 @@ private ObjectViewDto loadObject() {
PrismObject<ObjectType> object = getModelService().getObject(type, objectOid.toString(), options, task, result);

PrismContext context = application.getPrismContext();

String lex = context.serializerFor(dataLanguage).serialize(object);
dto = new ObjectViewDto(object.getOid(), WebComponentUtil.getName(object), object, lex);

Expand Down Expand Up @@ -240,11 +275,72 @@ protected void onUpdate(AjaxRequestTarget target) {

mainForm.add(plainTextarea);

addOrReplaceEditor();

initButtons(mainForm);
initViewButton(mainForm);

}

private void addOrReplaceEditor(){
editor = new AceEditor("aceEditor", new PropertyModel<String>(model, ObjectViewDto.F_XML));
editor.setModeForDataLanguage(dataLanguage);
mainForm.add(editor);
editor.add(new AjaxFormComponentUpdatingBehavior("blur") {

initButtons(mainForm);
@Override
protected void onUpdate(AjaxRequestTarget target) {
}
});
mainForm.addOrReplace(editor);
}

private void initViewButton(Form mainForm) {
List<String> propertyKeysList = Arrays.asList("PageDebugView.xmlViewButton",
"PageDebugView.xmlJsonButton", "PageDebugView.xmlYamlButton");
int selectedIndex = 0;
if (PrismContext.LANG_JSON.equals(dataLanguage)){
selectedIndex = 1;
} else if (PrismContext.LANG_YAML.equals(dataLanguage)){
selectedIndex = 2;
}
MultiStateHorizontalButton viewButtonPanel =
new MultiStateHorizontalButton(ID_VIEW_BUTTON_PANEL, selectedIndex, propertyKeysList,PageDebugView.this){
@Override
protected void onStateChanged(int index, AjaxRequestTarget target){
OperationResult result = new OperationResult(OPERATION_VALIDATE_OBJECT);
Holder<PrismObject<ObjectType>> objectHolder = new Holder<>(null);

try {
validateObject(result, objectHolder);
if (result.isAcceptable()) {
if (index == 1){
dataLanguage = PrismContext.LANG_JSON;
} else if (index == 2){
dataLanguage = PrismContext.LANG_YAML;
} else {
dataLanguage = PrismContext.LANG_XML;
}
PrismObject<ObjectType> updatedObject = objectHolder.getValue();
PrismContext context = getMidpointApplication().getPrismContext();
String objectStr = context.serializerFor(dataLanguage).serialize(updatedObject);
objectViewDto.setXml(objectStr);
setSelectedIndex(index);
addOrReplaceEditor();
target.add(mainForm);
target.add(getFeedbackPanel());
} else {
showResult(result);
target.add(getFeedbackPanel());
}
} catch (Exception ex) {
result.recordFatalError("Couldn't change the language.", ex);
showResult(result);
target.add(getFeedbackPanel());
}
}
};
viewButtonPanel.setOutputMarkupId(true);
mainForm.add(viewButtonPanel);
}

private void initButtons(final Form mainForm) {
Expand Down Expand Up @@ -302,11 +398,7 @@ public void savePerformed(AjaxRequestTarget target) {
oldObject.revive(getPrismContext());

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

if (result.isAcceptable()) {
PrismObject<ObjectType> newObject = objectHolder.getValue();
Expand Down Expand Up @@ -355,4 +447,8 @@ public void savePerformed(AjaxRequestTarget target) {
redirectBack();
}
}

private void validateObject(OperationResult result, Holder<PrismObject<ObjectType>> objectHolder){
validateObject(objectViewDto.getXml(), objectHolder, dataLanguage, validateSchema.getObject(), result);
}
}

0 comments on commit ec65476

Please sign in to comment.