From 6aa62cd2671bcaa9f093b4c753572ed0bf55ae15 Mon Sep 17 00:00:00 2001 From: Erik Suta Date: Wed, 18 Jun 2014 16:23:14 +0200 Subject: [PATCH] Fixing reports (more logical behavior in error cases) + small search storage objects refactoring --- .../web/page/admin/reports/PageReport.java | 95 ++++++++++++++----- .../reports/component/AceEditorPanel.java | 4 + .../content/PageContentAccounts.java | 6 +- .../admin/users/component/OrgUnitBrowser.java | 8 +- .../midpoint/web/session/OrgUnitStorage.java | 53 ----------- .../web/session/ResourceContentStorage.java | 53 ----------- .../web/session/ResourcesStorage.java | 27 ++++++ .../midpoint/web/session/SessionStorage.java | 16 ---- .../midpoint/web/session/UsersStorage.java | 28 ++++++ 9 files changed, 137 insertions(+), 153 deletions(-) delete mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/OrgUnitStorage.java delete mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/ResourceContentStorage.java diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageReport.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageReport.java index a984cb67920..515181e3b9a 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageReport.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageReport.java @@ -27,14 +27,12 @@ import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.web.application.AuthorizationAction; import com.evolveum.midpoint.web.application.PageDescriptor; -import com.evolveum.midpoint.web.component.AceEditor; import com.evolveum.midpoint.web.component.AjaxSubmitButton; import com.evolveum.midpoint.web.component.TabbedPanel; -import com.evolveum.midpoint.web.component.form.TextAreaFormGroup; -import com.evolveum.midpoint.web.component.form.TextFormGroup; import com.evolveum.midpoint.web.component.util.LoadableModel; import com.evolveum.midpoint.web.component.util.PrismPropertyModel; import com.evolveum.midpoint.web.page.admin.configuration.PageAdminConfiguration; +import com.evolveum.midpoint.web.page.admin.configuration.dto.InputStringValidator; import com.evolveum.midpoint.web.page.admin.reports.component.AceEditorPanel; import com.evolveum.midpoint.web.page.admin.reports.component.ReportConfigurationPanel; import com.evolveum.midpoint.web.page.error.PageError; @@ -42,7 +40,6 @@ import com.evolveum.midpoint.web.util.OnePageParameterEncoder; import com.evolveum.midpoint.web.util.WebMiscUtil; import com.evolveum.midpoint.web.util.WebModelUtils; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ReportType; import org.apache.commons.lang.StringUtils; @@ -85,6 +82,11 @@ public class PageReport extends PageAdminReports { private static final String ID_SAVE_BUTTON = "save"; private static final String ID_CANCEL_BUTTON = "cancel"; + private static final int FULL_XML_TAB_INDEX = 3; + private int previousTabIndex = 0; + private AceEditorPanel fullXmlEditorPanel; + private String fullXmlEditorPanelString; + private LoadableModel> model; public PageReport() { @@ -148,7 +150,9 @@ public WebMarkupContainer getPanel(String panelId) { @Override public WebMarkupContainer getPanel(String panelId) { IModel title = PageReport.this.createStringResource("PageReport.fullXml"); - return new AceEditorPanel(panelId, title, createFullXmlModel()); + fullXmlEditorPanelString = getStringFromObject(); + fullXmlEditorPanel = new AceEditorPanel(panelId, title, createFullXmlModel()); + return fullXmlEditorPanel; } }); @@ -161,7 +165,19 @@ protected WebMarkupContainer newLink(final String linkId, final int index){ @Override public void onSubmit(){ - setSelectedTab(index); + if(previousTabIndex == FULL_XML_TAB_INDEX){ + fullXmlEditorPanelString = fullXmlEditorPanel.getEditor().getInput(); + + if(isReportValid(fullXmlEditorPanel.getEditor().getInput(), true)){ + setSelectedTab(index); + previousTabIndex = index; + } else { + setSelectedTab(previousTabIndex); + } + } else{ + setSelectedTab(index); + previousTabIndex = index; + } } }; } @@ -172,22 +188,56 @@ public void onSubmit(){ initButtons(mainForm); } + private boolean isReportValid(String object, boolean showError){ + OperationResult result = new OperationResult(OPERATION_VALIDATE_REPORT); + + try { + Holder> reportHolder = new Holder>(null); + validateObject(object, reportHolder, true, result); + + if(result.isAcceptable()){ + return true; + } + + } catch (Exception ex){ + if(showError){ + result.recordFatalError("Could not save object.", ex); + showResultInSession(result); + } + } + + return false; + } + + private String getStringFromObject(){ + PrismObject report = model.getObject(); + if (report == null) { + return null; + } + + try { + return getPrismContext().serializeObjectToString(report, PrismContext.LANG_XML); + } catch (SchemaException ex) { + error("Could not create XML object from report."); + throw new RestartResponseException(PageError.class); + } + } + private IModel createFullXmlModel() { return new IModel() { @Override public String getObject() { - PrismObject report = model.getObject(); - if (report == null) { - return null; - } - - try { - return getPrismContext().serializeObjectToString(report, PrismContext.LANG_XML); - } catch (SchemaException ex) { - //todo improve error handling, show message on error page, also stacktrace... - //also add validator, which should not validate xml which can't be parsed - throw new RestartResponseException(PageError.class); + if(fullXmlEditorPanel.getEditor().getInput() != null){ + if(fullXmlEditorPanel.getEditor().getInput().isEmpty()){ + return fullXmlEditorPanelString; + } else if(isReportValid(fullXmlEditorPanel.getEditor().getInput(), false)){ + return fullXmlEditorPanelString; + } else { + return fullXmlEditorPanel.getEditor().getInput(); + } + } else { + return fullXmlEditorPanelString; } } @@ -200,17 +250,14 @@ public void setObject(String object) { OperationResult result = new OperationResult(OPERATION_VALIDATE_REPORT); - try { + if(isReportValid(object, false)){ Holder> reportHolder = new Holder>(null); validateObject(object, reportHolder, true, result); - if(result.isAcceptable()){ - model.setObject(reportHolder.getValue()); - } - } catch (Exception ex){ - result.recordFatalError("Could not save object.", ex); - showResultInSession(result); + model.setObject(reportHolder.getValue()); } + + fullXmlEditorPanelString = object; } @Override diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AceEditorPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AceEditorPanel.java index 809bc02900b..b2d77e32de6 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AceEditorPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AceEditorPanel.java @@ -46,4 +46,8 @@ private void initPanelLayout() { editor.setReadonly(false); add(editor); } + + public AceEditor getEditor(){ + return (AceEditor)get(ID_EDITOR); + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/content/PageContentAccounts.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/content/PageContentAccounts.java index 4e4594a86a1..6054186c055 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/content/PageContentAccounts.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/content/PageContentAccounts.java @@ -56,7 +56,7 @@ import com.evolveum.midpoint.web.page.admin.users.PageUser; import com.evolveum.midpoint.web.page.admin.users.dto.UserListItemDto; import com.evolveum.midpoint.web.security.MidPointApplication; -import com.evolveum.midpoint.web.session.ResourceContentStorage; +import com.evolveum.midpoint.web.session.ResourcesStorage; import com.evolveum.midpoint.web.util.OnePageParameterEncoder; import com.evolveum.midpoint.web.util.WebMiscUtil; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; @@ -122,7 +122,7 @@ public PageContentAccounts() { @Override protected AccountContentSearchDto load() { - ResourceContentStorage storage = getSessionStorage().getResourceContent(); + ResourcesStorage storage = getSessionStorage().getResources(); AccountContentSearchDto dto = storage.getAccountContentSearch(); if(dto == null){ @@ -711,7 +711,7 @@ private void clearSearchPerformed(AjaxRequestTarget target){ AccountContentDataProvider provider = (AccountContentDataProvider)table.getDataProvider(); provider.setQuery(null); - ResourceContentStorage storage = getSessionStorage().getResourceContent(); + ResourcesStorage storage = getSessionStorage().getResources(); storage.setAccountContentSearch(searchModel.getObject()); storage.setAccountContentPaging(null); panel.setCurrentPage(null); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgUnitBrowser.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgUnitBrowser.java index 5b3b6a2455a..9c83322d3f9 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgUnitBrowser.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgUnitBrowser.java @@ -36,7 +36,7 @@ import com.evolveum.midpoint.web.page.PageBase; import com.evolveum.midpoint.web.page.admin.users.dto.OrgTableDto; import com.evolveum.midpoint.web.page.admin.users.dto.OrgUnitSearchDto; -import com.evolveum.midpoint.web.session.OrgUnitStorage; +import com.evolveum.midpoint.web.session.UsersStorage; import com.evolveum.midpoint.web.util.WebModelUtils; import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType; @@ -104,7 +104,7 @@ public OrgUnitBrowser(String id) { @Override protected OrgUnitSearchDto load() { - OrgUnitStorage storage = getPageBase().getSessionStorage().getOrgUnits(); + UsersStorage storage = getPageBase().getSessionStorage().getUsers(); OrgUnitSearchDto dto = storage.getOrgUnitSearch(); if(dto == null){ @@ -345,7 +345,7 @@ private void searchPerformed(AjaxRequestTarget target) { ObjectDataProvider provider = (ObjectDataProvider) table.getDataProvider(); provider.setQuery(query); - OrgUnitStorage storage = getPageBase().getSessionStorage().getOrgUnits(); + UsersStorage storage = getPageBase().getSessionStorage().getUsers(); storage.setOrgUnitSearch(searchModel.getObject()); panel.setCurrentPage(storage.getOrgUnitPaging()); @@ -361,7 +361,7 @@ private void clearSearchPerformed(AjaxRequestTarget target){ ObjectDataProvider provider = (ObjectDataProvider) table.getDataProvider(); provider.setQuery(null); - OrgUnitStorage storage = getPageBase().getSessionStorage().getOrgUnits(); + UsersStorage storage = getPageBase().getSessionStorage().getUsers(); storage.setOrgUnitSearch(searchModel.getObject()); panel.setCurrentPage(storage.getOrgUnitPaging()); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/OrgUnitStorage.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/OrgUnitStorage.java deleted file mode 100644 index 8985ace7095..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/OrgUnitStorage.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.evolveum.midpoint.web.session; - -import com.evolveum.midpoint.prism.query.ObjectPaging; -import com.evolveum.midpoint.web.page.admin.users.dto.OrgUnitSearchDto; - -import java.io.Serializable; - -/** - * @author shood - * */ -public class OrgUnitStorage implements Serializable{ - - /** - * DTO used for search purposes in {@link com.evolveum.midpoint.web.page.admin.users in OrgUnitBrowser} - * */ - private OrgUnitSearchDto orgUnitSearch; - - /** - * Paging DTO used in table on page {@link com.evolveum.midpoint.web.page.admin.users in OrgUnitBrowser} - * */ - private ObjectPaging orgUnitPaging; - - public OrgUnitSearchDto getOrgUnitSearch() { - return orgUnitSearch; - } - - public void setOrgUnitSearch(OrgUnitSearchDto orgUnitSearch) { - this.orgUnitSearch = orgUnitSearch; - } - - public ObjectPaging getOrgUnitPaging() { - return orgUnitPaging; - } - - public void setOrgUnitPaging(ObjectPaging orgUnitPaging) { - this.orgUnitPaging = orgUnitPaging; - } -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/ResourceContentStorage.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/ResourceContentStorage.java deleted file mode 100644 index 5077b64bb1d..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/ResourceContentStorage.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.evolveum.midpoint.web.session; - -import com.evolveum.midpoint.prism.query.ObjectPaging; -import com.evolveum.midpoint.web.page.admin.resources.content.dto.AccountContentSearchDto; - -import java.io.Serializable; - -/** - * @author shood - * */ -public class ResourceContentStorage implements Serializable{ - - /** - * DTO used for search in {@link com.evolveum.midpoint.web.page.admin.resources.content.PageContentAccounts} - * */ - private AccountContentSearchDto accountContentSearch; - - /** - * Paging DTO used in table on page {@link com.evolveum.midpoint.web.page.admin.resources.content.PageContentAccounts} - * */ - private ObjectPaging accountContentPaging; - - public AccountContentSearchDto getAccountContentSearch() { - return accountContentSearch; - } - - public void setAccountContentSearch(AccountContentSearchDto accountContentSearch) { - this.accountContentSearch = accountContentSearch; - } - - public ObjectPaging getAccountContentPaging() { - return accountContentPaging; - } - - public void setAccountContentPaging(ObjectPaging accountContentPaging) { - this.accountContentPaging = accountContentPaging; - } -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/ResourcesStorage.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/ResourcesStorage.java index 1aa40742296..78732be0942 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/ResourcesStorage.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/ResourcesStorage.java @@ -16,6 +16,7 @@ package com.evolveum.midpoint.web.session; import com.evolveum.midpoint.prism.query.ObjectPaging; +import com.evolveum.midpoint.web.page.admin.resources.content.dto.AccountContentSearchDto; import com.evolveum.midpoint.web.page.admin.resources.dto.ResourceSearchDto; import java.io.Serializable; @@ -35,6 +36,16 @@ public class ResourcesStorage implements Serializable{ * */ private ObjectPaging resourcePaging; + /** + * DTO used for search in {@link com.evolveum.midpoint.web.page.admin.resources.content.PageContentAccounts} + * */ + private AccountContentSearchDto accountContentSearch; + + /** + * Paging DTO used in table on page {@link com.evolveum.midpoint.web.page.admin.resources.content.PageContentAccounts} + * */ + private ObjectPaging accountContentPaging; + public ResourceSearchDto getResourceSearch() { return resourceSearch; } @@ -50,4 +61,20 @@ public ObjectPaging getResourcePaging() { public void setResourcePaging(ObjectPaging resourcePaging) { this.resourcePaging = resourcePaging; } + + public AccountContentSearchDto getAccountContentSearch() { + return accountContentSearch; + } + + public void setAccountContentSearch(AccountContentSearchDto accountContentSearch) { + this.accountContentSearch = accountContentSearch; + } + + public ObjectPaging getAccountContentPaging() { + return accountContentPaging; + } + + public void setAccountContentPaging(ObjectPaging accountContentPaging) { + this.accountContentPaging = accountContentPaging; + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/SessionStorage.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/SessionStorage.java index 6e440d05aa7..121311eb5da 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/SessionStorage.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/SessionStorage.java @@ -47,8 +47,6 @@ public class SessionStorage implements Serializable { private ResourcesStorage resources; private RolesStorage roles; private TasksStorage tasks; - private ResourceContentStorage resourceContent; - private OrgUnitStorage orgUnitStorage; public Class getPreviousPage() { return previousPage; @@ -101,24 +99,10 @@ public TasksStorage getTasks() { return tasks; } - public ResourceContentStorage getResourceContent() { - if (resourceContent == null) { - resourceContent = new ResourceContentStorage(); - } - return resourceContent; - } - public ReportsStorage getReports() { if (reports == null) { reports = new ReportsStorage(); } return reports; } - - public OrgUnitStorage getOrgUnits() { - if (orgUnitStorage == null) { - orgUnitStorage = new OrgUnitStorage(); - } - return orgUnitStorage; - } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/UsersStorage.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/UsersStorage.java index ca759990f03..5cb5a9970df 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/UsersStorage.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/UsersStorage.java @@ -17,6 +17,7 @@ package com.evolveum.midpoint.web.session; import com.evolveum.midpoint.prism.query.ObjectPaging; +import com.evolveum.midpoint.web.page.admin.users.dto.OrgUnitSearchDto; import com.evolveum.midpoint.web.page.admin.users.dto.UsersDto; import java.io.Serializable; @@ -30,6 +31,17 @@ public class UsersStorage implements Serializable { * DTO used for search in {@link com.evolveum.midpoint.web.page.admin.users.PageUsers} */ private UsersDto usersSearch; + + /** + * DTO used for search purposes in {@link com.evolveum.midpoint.web.page.admin.users in OrgUnitBrowser} + * */ + private OrgUnitSearchDto orgUnitSearch; + + /** + * Paging DTO used in table on page {@link com.evolveum.midpoint.web.page.admin.users in OrgUnitBrowser} + * */ + private ObjectPaging orgUnitPaging; + /** * Paging DTO used in table on page {@link com.evolveum.midpoint.web.page.admin.users.PageUsers} */ @@ -50,4 +62,20 @@ public UsersDto getUsersSearch() { public void setUsersSearch(UsersDto usersSearch) { this.usersSearch = usersSearch; } + + public OrgUnitSearchDto getOrgUnitSearch() { + return orgUnitSearch; + } + + public void setOrgUnitSearch(OrgUnitSearchDto orgUnitSearch) { + this.orgUnitSearch = orgUnitSearch; + } + + public ObjectPaging getOrgUnitPaging() { + return orgUnitPaging; + } + + public void setOrgUnitPaging(ObjectPaging orgUnitPaging) { + this.orgUnitPaging = orgUnitPaging; + } }