Skip to content

Commit

Permalink
Merge remote-tracking branch 'refs/remotes/origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Mar 31, 2020
2 parents e0a8a90 + ac56df8 commit e07596c
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 5 deletions.
Expand Up @@ -20,7 +20,9 @@ <h3><div wicket:id="repositoryQueryLabel"/></h3>
<div id="objectType" wicket:id="objectType"></div>
</div>
<div class="form-group" wicket:id="distinct" style="margin-bottom: 15px; width:100%"/>
<br/> <!-- couldn't put this into form-group, so leaving it standalone -->
<div class="form-group" style="margin-bottom: 10px">
<div class="col-lg-12" wicket:id="viewButtonPanel" ></div>
</div>
<textarea wicket:id="editorMidPoint" style="margin-bottom: 10px"></textarea>
<div class="form-group" style="margin-top: 10px">
<label for="querySample" class="small"><wicket:message key="PageRepositoryQuery.chooseSample"/></label>
Expand Down
Expand Up @@ -37,6 +37,7 @@
import com.evolveum.midpoint.web.component.AceEditor;
import com.evolveum.midpoint.web.component.AjaxSubmitButton;
import com.evolveum.midpoint.web.component.form.CheckFormGroup;
import com.evolveum.midpoint.web.component.input.DataLanguagePanel;
import com.evolveum.midpoint.web.component.input.DropDownChoicePanel;
import com.evolveum.midpoint.web.component.input.QNameChoiceRenderer;
import com.evolveum.midpoint.web.component.search.Search;
Expand Down Expand Up @@ -109,6 +110,7 @@ public class PageRepositoryQuery extends PageAdminConfiguration {
private static final String ID_DISTINCT = "distinct";
private static final String ID_HIBERNATE_PARAMETERS_NOTE = "hibernateParametersNote";
private static final String ID_INCOMPLETE_RESULTS_NOTE = "incompleteResultsNote";
private static final String ID_VIEW_BUTTON_PANEL = "viewButtonPanel";

private static final String SAMPLES_DIR = "query-samples";
private static final List<String> SAMPLES = Arrays.asList(
Expand Down Expand Up @@ -138,8 +140,19 @@ public class PageRepositoryQuery extends PageAdminConfiguration {
private final NonEmptyModel<RepoQueryDto> model = new NonEmptyWrapperModel<>(new Model<>(new RepoQueryDto()));
private final boolean isAdmin;

private String dataLanguage;

enum Action {TRANSLATE_ONLY, EXECUTE_MIDPOINT, EXECUTE_HIBERNATE }

@Override
protected void onInitialize() {
super.onInitialize();
if (dataLanguage == null) {
dataLanguage = determineDataLanguage();
}
initLayout();
}

public PageRepositoryQuery() {
this(null, null);
}
Expand All @@ -156,8 +169,6 @@ public PageRepositoryQuery(QName objectType, String queryText) {
admin = false;
}
isAdmin = admin;

initLayout();
}

private void initLayout() {
Expand Down Expand Up @@ -219,6 +230,25 @@ protected void onUpdate(AjaxRequestTarget target) {
midPointQueryButtonBar.setOutputMarkupId(true);
mainForm.add(midPointQueryButtonBar);

DataLanguagePanel<QueryType> dataLanguagePanel =
new DataLanguagePanel<QueryType>(ID_VIEW_BUTTON_PANEL, dataLanguage, QueryType.class, PageRepositoryQuery.this) {
private static final long serialVersionUID = 1L;

@Override
protected void onLanguageSwitched(AjaxRequestTarget target, int updatedIndex, String updatedLanguage,
String objectString) {
model.getObject().setMidPointQuery(objectString);
dataLanguage = updatedLanguage;
target.add(mainForm);
}
@Override
protected String getObjectStringRepresentation() {
return model.getObject().getMidPointQuery();
}
};
dataLanguagePanel.setOutputMarkupId(true);
mainForm.add(dataLanguagePanel);

AjaxSubmitButton executeMidPoint = new AjaxSubmitButton(ID_EXECUTE_MIDPOINT, createStringResource("PageRepositoryQuery.button.translateAndExecute")) {
@Override
protected void onError(AjaxRequestTarget target) {
Expand Down Expand Up @@ -280,7 +310,20 @@ protected void onUpdate(AjaxRequestTarget target) {
try {
String localTypeName = StringUtils.substringBefore(sampleName, "_");
model.getObject().setObjectType(new QName(SchemaConstants.NS_C, localTypeName));
model.getObject().setMidPointQuery(IOUtils.toString(is, StandardCharsets.UTF_8));
String xml = IOUtils.toString(is, StandardCharsets.UTF_8);
String serialization;
if (PrismContext.LANG_XML.equals(dataLanguage)) {
serialization = xml;
} else {
PrismContext prismContext = getPrismContext();
try {
QueryType parsed = prismContext.parserFor(xml).xml().parseRealValue(QueryType.class);
serialization = prismContext.serializerFor(dataLanguage).serializeRealValue(parsed);
} catch (Throwable t) {
serialization = "Couldn't serialize sample: " + t.getMessage();
}
}
model.getObject().setMidPointQuery(serialization);
model.getObject().setHibernateQuery("");
model.getObject().setHibernateParameters("");
model.getObject().setQueryResultObject(null);
Expand Down Expand Up @@ -506,7 +549,7 @@ private void updateRequestWithMidpointQuery(RepositoryQueryDiagRequest request,
if (clazz == null) {
throw new SchemaException("Couldn't find compile-time class for object type of " + objectType);
}
QueryType queryType = prismContext.parserFor(queryText).xml().parseRealValue(QueryType.class);
QueryType queryType = prismContext.parserFor(queryText).language(dataLanguage).parseRealValue(QueryType.class);
request.setType(clazz);
ObjectQuery objectQuery = prismContext.getQueryConverter().createObjectQuery(clazz, queryType);
ObjectQuery queryWithExprEvaluated = ExpressionUtil.evaluateQueryExpressions(objectQuery, new ExpressionVariables(),
Expand Down

0 comments on commit e07596c

Please sign in to comment.