diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MainObjectListPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MainObjectListPanel.java index ae11b381f82..92b342a3c4a 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MainObjectListPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MainObjectListPanel.java @@ -298,7 +298,21 @@ protected void createReportPerformed(SearchFilterType filter, List inde objectCollection.setView(resolveSelectedColumn(indexOfColumns, view.toGuiObjectListViewType())); } CollectionRefSpecificationType collection = new CollectionRefSpecificationType(); - collection.setBaseCollectionRef(view.getCollection()); + if (view.getCollection() != null && view.getCollection().getCollectionRef() != null) { + if (!QNameUtil.match(view.getCollection().getCollectionRef().getType(), ArchetypeType.COMPLEX_TYPE)) { + collection.setBaseCollectionRef(view.getCollection()); + } else { + CollectionRefSpecificationType baseCollection = new CollectionRefSpecificationType(); + try { + baseCollection.setFilter(getPageBase().getQueryConverter().createSearchFilterType(view.getFilter())); + collection.setBaseCollectionRef(baseCollection); + } catch (SchemaException e) { + LOGGER.error("Couldn't create filter for archetype"); + getPageBase().error(getString("MainObjectListPanel.message.error.createArchetypeFilter")); + target.add(getPageBase().getFeedbackPanel()); + } + } + } if (filter != null) { collection.setFilter(filter); } else if (view.getCollection() == null) { @@ -393,8 +407,14 @@ public void onClick(AjaxRequestTarget target) { private GuiObjectListViewType resolveSelectedColumn(List indexOfColumns, GuiObjectListViewType view){ List newColumns = new ArrayList<>(); + List oldColumns; + if (view.getColumn().isEmpty()) { + oldColumns = getDefaultView().getColumn(); + } else { + oldColumns = view.getColumn(); + } for (Integer index : indexOfColumns) { - newColumns.add(view.getColumn().get(index-2)); + newColumns.add(oldColumns.get(index-2).clone()); } view.getColumn().clear(); view.getColumn().addAll(newColumns); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/box/InfoBoxPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/box/InfoBoxPanel.java index 57c3f2e56da..5b53e641255 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/box/InfoBoxPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/box/InfoBoxPanel.java @@ -272,6 +272,7 @@ protected WebPage getLinkRef() { if (!isViewOfWidgetNull(model)) { getPageBase().getModelInteractionService().applyView(compiledView, model.getObject().getPresentation().getView()); } + compiledView.setCollection(model.getObject().getData().getCollection()); compiledView.setViewIdentifier(model.getObject().getIdentifier()); getPageBase().getCompiledGuiProfile().getObjectCollectionViews().add(compiledView); } catch (SchemaException | CommunicationException | ConfigurationException | SecurityViolationException | ExpressionEvaluationException diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/MidPointProfilingServletFilter.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/MidPointProfilingServletFilter.java index 07453726c8b..8b684ae5a59 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/MidPointProfilingServletFilter.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/MidPointProfilingServletFilter.java @@ -8,14 +8,7 @@ package com.evolveum.midpoint.web.util; import java.io.IOException; -import java.text.DecimalFormat; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import org.apache.catalina.connector.ClientAbortException; @@ -26,25 +19,26 @@ import com.evolveum.midpoint.util.logging.TraceManager; /** - * //TODO - After upgrading to javax.servlet version API 3.0, add response status code logging - * - * In this filter, all incoming requests are captured and we measure server response times (using System.nanoTime() for now), - * this may be later adjusted using Java SIMON API (but this API is based on System.nanoTime() as well). - * - * Right now, we are logging this request/response information - * Requested URL - * Request method (GET/POST) - * Request session id - * - * Requests for .css or various image files are filtered and not recorded. - * - * @author lazyman - * @author shood + * In this filter, all incoming requests are captured and we measure server response times + * using {@link System#nanoTime()}. + * ight now we are logging this request/response information: + *
    + *
  • Requested URL
  • + *
  • Request method (GET/POST)
  • + *
  • Request session id
  • + *
+ *

+ * Requests for .css or various image files are filtered and not recorded. + *

+ * @author lazyman + * @author shood */ +// TODO - After upgrading to javax.servlet version API 3.0, add response status code logging +// 2020: we are on API>3 now, but what was the original idea? Was it meant for exception logging? +// Also, elapsedTime should be calculated also for exception scenario and perhaps put into different statistics? public class MidPointProfilingServletFilter implements Filter { private static final Trace LOGGER = TraceManager.getTrace(MidPointProfilingServletFilter.class); - private static DecimalFormat df = new DecimalFormat("0.00"); protected FilterConfig config; @@ -53,7 +47,7 @@ public void destroy() { } @Override - public void init(FilterConfig config) throws ServletException { + public void init(FilterConfig config) { this.config = config; } @@ -73,10 +67,10 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha long elapsedTime = System.nanoTime() - startTime; - if(request instanceof HttpServletRequest){ - String uri = ((HttpServletRequest)request).getRequestURI(); + if (request instanceof HttpServletRequest) { + String uri = ((HttpServletRequest) request).getRequestURI(); - if(uri.startsWith("/midpoint/admin")){ + if (uri.startsWith("/midpoint/admin")) { prepareRequestProfilingEvent(request, elapsedTime, uri); } } @@ -87,18 +81,18 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha logException(e); throw e; } - } + } } - private void prepareRequestProfilingEvent(ServletRequest request, long elapsed, String uri){ - String info = ((HttpServletRequest)request).getMethod(); - String sessionId = ((HttpServletRequest)request).getRequestedSessionId(); + private void prepareRequestProfilingEvent(ServletRequest request, long elapsed, String uri) { + String info = ((HttpServletRequest) request).getMethod(); + String sessionId = ((HttpServletRequest) request).getRequestedSessionId(); ProfilingDataLog event = new ProfilingDataLog(info, uri, sessionId, elapsed, System.currentTimeMillis()); ProfilingDataManager.getInstance().prepareRequestProfilingEvent(event); } - private void logException(Throwable t) throws IOException, ServletException { + private void logException(Throwable t) { if (t instanceof ClientAbortException) { if (LOGGER.isDebugEnabled()) { // client abort exceptions are quite OK as they are not an application/server problem diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/DashboardServiceImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/DashboardServiceImpl.java index 0d2e8704e0b..0958f3ca2a3 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/DashboardServiceImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/DashboardServiceImpl.java @@ -399,20 +399,30 @@ public List> searchObjectFromCollection(CollectionRefSpe searchFilter = collection.getFilter(); } else { searchFilter = collectionConfig.getFilter(); - if (collectionConfig.getBaseCollectionRef() != null && collectionConfig.getBaseCollectionRef().getCollectionRef() != null) { - ObjectReferenceType ref = collectionConfig.getBaseCollectionRef().getCollectionRef(); - Class refType = prismContext.getSchemaRegistry().determineClassForType(ref.getType()); - ObjectCollectionType collection = (ObjectCollectionType) modelService - .getObject(refType, ref.getOid(), null, task, result).asObjectable(); - - searchFilterForMerge = collection.getFilter(); - Class typeFromBaseCollection = (Class) prismContext.getSchemaRegistry() - .getCompileTimeClassForObjectType(collection.getType()); + if (collectionConfig.getBaseCollectionRef() != null && + (collectionConfig.getBaseCollectionRef().getCollectionRef() != null || collectionConfig.getBaseCollectionRef().getFilter() != null)) { + Class typeFromBaseCollection = null; + if (collectionConfig.getBaseCollectionRef().getCollectionRef() != null) { + ObjectReferenceType ref = collectionConfig.getBaseCollectionRef().getCollectionRef(); + Class refType = prismContext.getSchemaRegistry().determineClassForType(ref.getType()); + ObjectCollectionType collection = (ObjectCollectionType) modelService + .getObject(refType, ref.getOid(), null, task, result).asObjectable(); + + searchFilterForMerge = collection.getFilter(); + typeFromBaseCollection = (Class) prismContext.getSchemaRegistry() + .getCompileTimeClassForObjectType(collection.getType()); + } else { + searchFilterForMerge = collectionConfig.getBaseCollectionRef().getFilter(); + } if (typeForFilter == null) { + if (typeFromBaseCollection == null) { + LOGGER.error("Type of objects is null"); + throw new IllegalArgumentException("Type of objects is null"); + } type = typeFromBaseCollection; } else { type = prismContext.getSchemaRegistry().determineClassForType(typeForFilter); - if (!typeFromBaseCollection.isAssignableFrom(type)) { + if (typeFromBaseCollection != null && !typeFromBaseCollection.isAssignableFrom(type)) { LOGGER.error("Type of objects from filter don't inherit from type from base collection"); throw new IllegalArgumentException("Type of objects from filter don't inherit from type from base collection"); }