Skip to content

Commit

Permalink
Merge branch 'master' of github.com:Evolveum/midpoint
Browse files Browse the repository at this point in the history
* 'master' of github.com:Evolveum/midpoint:
  report-impl test logging also for PrismTestUtil display methods
  Migrate tags to marks
  simulation ui, breadcrumbs improvements
  • Loading branch information
katkav committed Feb 1, 2023
2 parents 91f9a1e + 9f3f3bb commit 394c555
Show file tree
Hide file tree
Showing 99 changed files with 652 additions and 639 deletions.
38 changes: 25 additions & 13 deletions config/sql/native-new/postgres-new-upgrade.sql
Original file line number Diff line number Diff line change
Expand Up @@ -171,10 +171,20 @@ $aa$);

-- Simulations
call apply_change(12, $aa$
ALTER TYPE ObjectType ADD VALUE IF NOT EXISTS 'SIMULATION_RESULT' AFTER 'SHADOW';
ALTER TYPE ObjectType ADD VALUE IF NOT EXISTS 'TAG' AFTER 'SYSTEM_CONFIGURATION';
ALTER TYPE ReferenceType ADD VALUE IF NOT EXISTS 'PROCESSED_OBJECT_EVENT_TAG' AFTER 'PROJECTION';
ALTER TYPE ContainerType ADD VALUE IF NOT EXISTS 'SIMULATION_RESULT_PROCESSED_OBJECT' AFTER 'OPERATION_EXECUTION';
do $$
begin
-- Temporary code, to migrate from TagType to MarkType
if 'TAG'::name = any(enum_range(null::ObjectType)::name[]) then
ALTER TYPE ObjectType RENAME VALUE 'TAG' TO 'MARK';
ALTER TYPE ReferenceType RENAME VALUE 'PROCESSED_OBJECT_EVENT_TAG' TO 'PROCESSED_OBJECT_EVENT_MARK';
else
ALTER TYPE ObjectType ADD VALUE IF NOT EXISTS 'MARK' AFTER 'SYSTEM_CONFIGURATION';
ALTER TYPE ReferenceType ADD VALUE IF NOT EXISTS 'PROCESSED_OBJECT_EVENT_MARK' AFTER 'PROJECTION';
end if;
ALTER TYPE ObjectType ADD VALUE IF NOT EXISTS 'SIMULATION_RESULT' AFTER 'SHADOW';
ALTER TYPE ContainerType ADD VALUE IF NOT EXISTS 'SIMULATION_RESULT_PROCESSED_OBJECT' AFTER 'OPERATION_EXECUTION';
end
$$;
$aa$, true); -- TODO remove forced before release

call apply_change(13, $aa$
Expand All @@ -183,7 +193,9 @@ DROP TABLE IF EXISTS m_simulation_result CASCADE;
DROP TABLE IF EXISTS m_simulation_result_processed_object_default CASCADE;
DROP TABLE IF EXISTS m_simulation_result_processed_object CASCADE;
DROP TABLE IF EXISTS m_tag CASCADE;
DROP TABLE IF EXISTS m_mark CASCADE;
DROP TABLE IF EXISTS m_processed_object_event_tag;
DROP TABLE IF EXISTS m_processed_object_event_mark;
DROP TYPE IF EXISTS ObjectProcessingStateType;
-- TODO end of the block

Expand Down Expand Up @@ -276,33 +288,33 @@ CREATE TRIGGER m_simulation_result_delete_partition BEFORE DELETE ON m_simulatio
FOR EACH ROW EXECUTE FUNCTION m_simulation_result_delete_partition();


CREATE TABLE m_tag (
CREATE TABLE m_mark (
oid UUID NOT NULL PRIMARY KEY REFERENCES m_object_oid(oid),
objectType ObjectType GENERATED ALWAYS AS ('TAG') STORED
CHECK (objectType = 'TAG')
objectType ObjectType GENERATED ALWAYS AS ('MARK') STORED
CHECK (objectType = 'MARK')
)
INHERITS (m_assignment_holder);

CREATE TRIGGER m_tag_oid_insert_tr BEFORE INSERT ON m_tag
CREATE TRIGGER m_mark_oid_insert_tr BEFORE INSERT ON m_mark
FOR EACH ROW EXECUTE FUNCTION insert_object_oid();
CREATE TRIGGER m_tag_update_tr BEFORE UPDATE ON m_tag
CREATE TRIGGER m_mark_update_tr BEFORE UPDATE ON m_mark
FOR EACH ROW EXECUTE FUNCTION before_update_object();
CREATE TRIGGER m_tag_oid_delete_tr AFTER DELETE ON m_tag
CREATE TRIGGER m_mark_oid_delete_tr AFTER DELETE ON m_mark
FOR EACH ROW EXECUTE FUNCTION delete_object_oid();


CREATE TABLE m_processed_object_event_tag (
CREATE TABLE m_processed_object_event_mark (
ownerOid UUID NOT NULL REFERENCES m_object_oid(oid) ON DELETE CASCADE,
ownerType ObjectType, -- GENERATED ALWAYS AS ('SIMULATION_RESULT') STORED,
processedObjectCid INTEGER NOT NULL,
referenceType ReferenceType GENERATED ALWAYS AS ('PROCESSED_OBJECT_EVENT_TAG') STORED,
referenceType ReferenceType GENERATED ALWAYS AS ('PROCESSED_OBJECT_EVENT_MARK') STORED,
targetOid UUID NOT NULL, -- soft-references m_object
targetType ObjectType NOT NULL,
relationId INTEGER NOT NULL REFERENCES m_uri(id)

) PARTITION BY LIST(ownerOid);

CREATE TABLE m_processed_object_event_tag_default PARTITION OF m_processed_object_event_tag DEFAULT;
CREATE TABLE m_processed_object_event_mark_default PARTITION OF m_processed_object_event_mark DEFAULT;

$aa$, true); -- TODO remove `true` before M2 or before RC1! (Also, the first 3 table drops)

Expand Down
24 changes: 12 additions & 12 deletions config/sql/native-new/postgres-new.sql
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ CREATE TYPE ObjectType AS ENUM (
'SHADOW',
'SIMULATION_RESULT',
'SYSTEM_CONFIGURATION',
'TAG',
'MARK',
'TASK',
'USER',
'VALUE_POLICY');
Expand All @@ -96,7 +96,7 @@ CREATE TYPE ReferenceType AS ENUM (
'DELEGATED',
'INCLUDE',
'PROJECTION',
'PROCESSED_OBJECT_EVENT_TAG',
'PROCESSED_OBJECT_EVENT_MARK',
'OBJECT_CREATE_APPROVER',
'OBJECT_MODIFY_APPROVER',
'OBJECT_PARENT_ORG',
Expand Down Expand Up @@ -1962,35 +1962,35 @@ CREATE TRIGGER m_simulation_result_delete_partition BEFORE DELETE ON m_simulatio



CREATE TABLE m_processed_object_event_tag (
CREATE TABLE m_processed_object_event_mark (
ownerOid UUID NOT NULL REFERENCES m_object_oid(oid) ON DELETE CASCADE,
ownerType ObjectType, -- GENERATED ALWAYS AS ('SIMULATION_RESULT') STORED,
processedObjectCid INTEGER NOT NULL,
referenceType ReferenceType GENERATED ALWAYS AS ('PROCESSED_OBJECT_EVENT_TAG') STORED,
referenceType ReferenceType GENERATED ALWAYS AS ('PROCESSED_OBJECT_EVENT_MARK') STORED,
targetOid UUID NOT NULL, -- soft-references m_object
targetType ObjectType NOT NULL,
relationId INTEGER NOT NULL REFERENCES m_uri(id)

) PARTITION BY LIST(ownerOid);

CREATE TABLE m_processed_object_event_tag_default PARTITION OF m_processed_object_event_tag DEFAULT;
CREATE TABLE m_processed_object_event_mark_default PARTITION OF m_processed_object_event_mark DEFAULT;

-- endregion

-- region Tag
-- region Mark

CREATE TABLE m_tag (
CREATE TABLE m_mark (
oid UUID NOT NULL PRIMARY KEY REFERENCES m_object_oid(oid),
objectType ObjectType GENERATED ALWAYS AS ('TAG') STORED
CHECK (objectType = 'TAG')
objectType ObjectType GENERATED ALWAYS AS ('MARK') STORED
CHECK (objectType = 'MARK')
)
INHERITS (m_assignment_holder);

CREATE TRIGGER m_tag_oid_insert_tr BEFORE INSERT ON m_tag
CREATE TRIGGER m_mark_oid_insert_tr BEFORE INSERT ON m_mark
FOR EACH ROW EXECUTE FUNCTION insert_object_oid();
CREATE TRIGGER m_tag_update_tr BEFORE UPDATE ON m_tag
CREATE TRIGGER m_mark_update_tr BEFORE UPDATE ON m_mark
FOR EACH ROW EXECUTE FUNCTION before_update_object();
CREATE TRIGGER m_tag_oid_delete_tr AFTER DELETE ON m_tag
CREATE TRIGGER m_mark_oid_delete_tr AFTER DELETE ON m_mark
FOR EACH ROW EXECUTE FUNCTION delete_object_oid();


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -636,6 +636,10 @@ public StringResourceModel createStringResource(Enum e, String prefix, String nu
return createStringResource(sb.toString());
}

public String getString(Enum<?> e) {
return createStringResource(e).getString();
}

public String getString(String resourceKey, Object... objects) {
return createStringResource(resourceKey, objects).getString();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ public final class WebComponentUtil {
OBJECT_DETAILS_PAGE_MAP.put(MessageTemplateType.class, PageMessageTemplate.class);

OBJECT_DETAILS_PAGE_MAP.put(SimulationResultType.class, PageSimulationResult.class);
OBJECT_DETAILS_PAGE_MAP.put(TagType.class, PageTag.class);
OBJECT_DETAILS_PAGE_MAP.put(MarkType.class, PageTag.class);
}

// only pages that support 'advanced search' are currently listed here (TODO: generalize)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public enum PageTypes {
OBJECT_TEMPLATE("objectTemplates", GuiStyleConstants.CLASS_OBJECT_TEMPLATE_ICON, PageObjectTemplates.class, PageObjectTemplate.class, ObjectTemplateType.COMPLEX_TYPE),
REPORT("reports", GuiStyleConstants.CLASS_REPORT_ICON, PageReports.class, PageReport.class, ReportType.COMPLEX_TYPE),
SIMULATION_RESULT("simulationResults", GuiStyleConstants.CLASS_SIMULATION_RESULT, PageSimulationResults.class, PageSimulationResult.class, SimulationResultType.COMPLEX_TYPE),
TAG("tags", GuiStyleConstants.CLASS_TAG, PageTags.class, PageTag.class, TagType.COMPLEX_TYPE);
TAG("tags", GuiStyleConstants.CLASS_TAG, PageTags.class, PageTag.class, MarkType.COMPLEX_TYPE);

private String identifier;
private String icon;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public class SearchContext {
private QName assignmentTargetType;
private ObjectCollectionReportEngineConfigurationType reportCollection;

private List<DisplayableValue<String>> availableEventTags;
private List<DisplayableValue<String>> availableEventMarks;

public ResourceObjectDefinition getResourceObjectDefinition() {
return resourceObjectDefinition;
Expand Down Expand Up @@ -69,14 +69,14 @@ public void setDefinitionOverride(PrismContainerDefinition<? extends Containerab
this.definitionOverride = definitionOverride;
}

public List<DisplayableValue<String>> getAvailableEventTags() {
if (availableEventTags == null) {
availableEventTags = new ArrayList<>();
public List<DisplayableValue<String>> getAvailableEventMarks() {
if (availableEventMarks == null) {
availableEventMarks = new ArrayList<>();
}
return availableEventTags;
return availableEventMarks;
}

public void setAvailableEventTags(List<DisplayableValue<String>> availableEventTags) {
this.availableEventTags = availableEventTags;
public void setAvailableEventMarks(List<DisplayableValue<String>> availableEventMarks) {
this.availableEventMarks = availableEventMarks;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ public SearchableItemsDefinitions additionalSearchContext(SearchContext ctx) {
ItemPath.create(SimulationResultProcessedObjectType.F_STATE),
ItemPath.create(SimulationResultProcessedObjectType.F_TYPE),
ItemPath.create(SimulationResultProcessedObjectType.F_OID),
ItemPath.create(SimulationResultProcessedObjectType.F_EVENT_TAG_REF)
ItemPath.create(SimulationResultProcessedObjectType.F_EVENT_MARK_REF)
));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,17 @@ public class AvailableTagItemWrapperFactory extends AbstractSearchItemWrapperFac
@Override
protected AvailableTagSearchItemWrapper createSearchWrapper(SearchItemContext ctx) {
SearchContext additionalSearchContext = ctx.getAdditionalSearchContext();
List<DisplayableValue<String>> availableEventTags = additionalSearchContext != null ?
additionalSearchContext.getAvailableEventTags() : new ArrayList<>();
List<DisplayableValue<String>> availableEventMarks = additionalSearchContext != null ?
additionalSearchContext.getAvailableEventMarks() : new ArrayList<>();

AvailableTagSearchItemWrapper wrapper = new AvailableTagSearchItemWrapper(availableEventTags);
AvailableTagSearchItemWrapper wrapper = new AvailableTagSearchItemWrapper(availableEventMarks);
wrapper.setCanConfigure(false);
wrapper.setVisible(true);
return wrapper;
}

@Override
public boolean match(SearchItemContext ctx) {
return SimulationResultProcessedObjectType.F_EVENT_TAG_REF.equivalent(ctx.getPath());
return SimulationResultProcessedObjectType.F_EVENT_MARK_REF.equivalent(ctx.getPath());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@
import com.evolveum.midpoint.schema.expression.VariablesMap;
import com.evolveum.midpoint.util.DisplayableValue;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SimulationResultProcessedObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TagType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.MarkType;

/**
* Created by Viliam Repan (lazyman).
*/
public class AvailableTagSearchItemWrapper extends ChoicesSearchItemWrapper<String> {

public AvailableTagSearchItemWrapper(List<DisplayableValue<String>> availableValues) {
super(SimulationResultProcessedObjectType.F_EVENT_TAG_REF, availableValues);
super(SimulationResultProcessedObjectType.F_EVENT_MARK_REF, availableValues);
}

@Override
Expand All @@ -34,6 +34,6 @@ public ObjectFilter createFilter(Class type, PageBase pageBase, VariablesMap var
}

return PrismContext.get().queryFor(SimulationResultProcessedObjectType.class)
.item(getPath()).ref(getValue().getValue(), TagType.COMPLEX_TYPE).buildFilter();
.item(getPath()).ref(getValue().getValue(), MarkType.COMPLEX_TYPE).buildFilter();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,11 @@
import java.util.List;
import java.util.stream.Collectors;

import org.apache.commons.lang3.BooleanUtils;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
Expand All @@ -28,21 +30,23 @@
import com.evolveum.midpoint.authentication.api.authorization.AuthorizationAction;
import com.evolveum.midpoint.authentication.api.authorization.PageDescriptor;
import com.evolveum.midpoint.authentication.api.authorization.Url;
import com.evolveum.midpoint.gui.api.component.Badge;
import com.evolveum.midpoint.gui.api.component.wizard.NavigationPanel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.impl.component.box.SmallBoxData;
import com.evolveum.midpoint.gui.impl.page.admin.simulation.widget.MetricWidgetPanel;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.impl.PrismPropertyValueImpl;
import com.evolveum.midpoint.schema.util.ValueDisplayUtil;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.PageAdmin;
import com.evolveum.midpoint.xml.ns._public.common.common_3.DashboardWidgetType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SimulationMetricValuesType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SimulationResultType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

/**
* Created by Viliam Repan (lazyman).
Expand Down Expand Up @@ -120,14 +124,21 @@ public Component createValueComponent(String id) {

@Override
public Component createValueComponent(String id) {
return new Label(id); // todo task status badge. Green if running and endTimestamp is not defined, Gray otherwise
return createTaskStateLabel(id, resultModel, PageSimulationResult.this);
}
});
list.add(new ResultDetail("PageSimulationResult.productionConfiguration", null) {

@Override
public Component createValueComponent(String id) {
Label label = new Label(id);
Label label = new Label(id, () -> {
ConfigurationSpecificationType specification = resultModel.getObject().getConfigurationUsed();
if (specification == null || BooleanUtils.isNotFalse(specification.isProductionConfiguration())) {
return getString("PageSimulationResult.production");
}

return getString("PageSimulationResult.development");
});
label.add(AttributeModifier.replace("class", "badge badge-success"));
return label;
}
Expand Down Expand Up @@ -232,4 +243,39 @@ public Component createValueComponent(String id) {
return label;
}
}

public static Component createTaskStateLabel(String id, IModel<SimulationResultType> model, PageBase page) {
IModel<TaskExecutionStateType> stateModel = () -> {
SimulationResultType result = model.getObject();
if (result == null || result.getRootTaskRef() == null) {
return null;
}

PrismObject<TaskType> task = WebModelServiceUtils.loadObject(result.getRootTaskRef(), page);
return task != null ? task.asObjectable().getExecutionState() : null;
};

Label label = new Label(id, () -> {
if (model.getObject().getEndTimestamp() != null) {
return null;
}

TaskExecutionStateType state = stateModel.getObject();
if (state == null) {
return null;
}

return page.getString(state);
});
label.add(AttributeAppender.replace("class", () -> {
TaskExecutionStateType state = stateModel.getObject();
if (state == TaskExecutionStateType.RUNNABLE || state == TaskExecutionStateType.RUNNING) {
return Badge.State.SUCCESS.getCss();
}

return Badge.State.SECONDARY.getCss();
}));

return label;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,10 @@ public PageSimulationResultObject(PageParameters parameters) {
initLayout();
}

@Override
protected void createBreadcrumb() {
}

private void initModels() {
resultModel = new LoadableDetachableModel<>() {

Expand Down

0 comments on commit 394c555

Please sign in to comment.