Skip to content

Commit

Permalink
MID-8328:adding panel for showing resource schema on resource detail …
Browse files Browse the repository at this point in the history
…page
  • Loading branch information
skublik committed Mar 20, 2023
1 parent 2c47d1a commit 3f6d87d
Show file tree
Hide file tree
Showing 5 changed files with 198 additions and 114 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!--
~ Copyright (c) 2010-2013 Evolveum
~
~ This work is dual-licensed under the Apache License 2.0
~ and European Union Public License. See LICENSE file for details.
-->

<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
<div wicket:id="viewPanel" class="nav-tabs-custom"/>
</wicket:panel>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
/*
* Copyright (c) 2023 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/

package com.evolveum.midpoint.gui.impl.page.admin.resource.component;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.model.NonEmptyLoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.impl.page.admin.AbstractObjectMainPanel;
import com.evolveum.midpoint.gui.impl.page.admin.resource.ResourceDetailsModel;
import com.evolveum.midpoint.model.api.util.ResourceUtils;
import com.evolveum.midpoint.prism.PrismContainer;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.schema.SchemaConstantsGenerated;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.CommonException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.application.PanelDisplay;
import com.evolveum.midpoint.web.application.PanelInstance;
import com.evolveum.midpoint.web.application.PanelType;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.TabbedPanel;
import com.evolveum.midpoint.web.component.wizard.WizardStep;
import com.evolveum.midpoint.web.component.wizard.resource.component.SchemaListPanel;
import com.evolveum.midpoint.web.component.wizard.resource.component.XmlEditorPanel;
import com.evolveum.midpoint.web.page.admin.resources.PageResourceWizard;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ContainerPanelConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
import org.apache.wicket.extensions.markup.html.tabs.ITab;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.model.IModel;
import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;

@PanelType(name = "resourceSchema")
@PanelInstance(identifier = "resourceSchema", applicableForType = ResourceType.class,
display = @PanelDisplay(label = "PageResource.tab.resourceSchema", icon = GuiStyleConstants.CLASS_ICON_RESOURCE_SCHEMA, order = 110))
public class ResourceSchemaPanel extends AbstractObjectMainPanel<ResourceType, ResourceDetailsModel> {

private static final String ID_VIEW = "viewPanel";
public ResourceSchemaPanel(String id, ResourceDetailsModel model, ContainerPanelConfigurationType config) {
super(id, model, config);
}

protected void initLayout() {
setOutputMarkupId(true);

SchemaListPanel view = new SchemaListPanel(ID_VIEW, getObjectWrapperModel(), getPageBase());
view.setOutputMarkupId(true);
add(view);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,8 @@ private ITab createSimpleSchemaView() {

@Override
public WebMarkupContainer getPanel(String panelId) {
return new SchemaListPanel(panelId, model, parentPage);
return null;
// return new SchemaListPanel(panelId, model, parentPage);
}
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,126 +8,121 @@

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
<div class="row">

<!-- First column - Object Class list -->
<div class="col-xs-5 col-sm-4 col-md-4 col-lg-3">
<div class="box box-solid box-primary">
<div class="box-header">
<h3 class="box-title"><wicket:message key="SchemaListPanel.objectClasses"/></h3>
</div>
<div class="box-body">
<table class="table table-striped table-condensed">
<thead>
<tr>
<th>
<div class="input-group">
<input type="text" class="form-control form-control-sm" wicket:id="objectClass"
wicket:message="placeholder:SchemaListPanel.objectClass"/>

<span class="input-group-append">
<a class="my-1 btn btn-danger btn-sm" wicket:id="clearSearch"
wicket:message="title:PageBase.button.tooltip.clearSearch">
<i class="fa fa-times"/>
</a>
</span>
</div>
</th>
</tr>
</thead>
<tbody wicket:id="tableBody">
<tr wicket:id="objectClassList">
<td><a wicket:id="classLink"><span wicket:id="label"/></a></td>
</tr>
</tbody>
</table>
<div wicket:id="objectClassNavigator" style="padding-top: 20px" />
<div class="d-flex gap-3 pt-3">
<div class="d-flex flex-column">
<div class="box-header">
<h3>
<wicket:message key="SchemaListPanel.objectClasses"/>
</h3>
</div>
<div class="input-group">
<input type="text" class="form-control" wicket:id="objectClass" wicket:message="placeholder:SchemaListPanel.objectClass"/>
<span class="input-group-append">
<a class="btn btn-danger" wicket:id="clearSearch" wicket:message="title:PageBase.button.tooltip.clearSearch">
<i class="fa fa-times"/>
</a>
</span>
</div>
<div wicket:id="tableBody" class="mt-3">
<div wicket:id="objectClassList">
<div class="p-2">
<a wicket:id="classLink">
<span wicket:id="label"/>
</a>
</div>
</div>
</div>
<div wicket:id="objectClassNavigator" class="mt-3 mx-auto"/>
</div>

<div wicket:id="objectClassInfoContainer">
<!-- Second column - Object Class Details and Attributes -->
<div class="col-xs-7 col-sm-8 col-md-8 col-lg-9" wicket:id="objectClassInfoColumn">
<div class="box box-solid box-primary">
<div class="box-header">
<h3 class="box-title"><wicket:message key="SchemaListPanel.details"/></h3>
</div>
<div class="box-body">
<div class="row" wicket:id="detailsPanel" style="margin-bottom: 0;">
<div class="col-md-6">
<dl class="dl-horizontal">
<dt>
<label><wicket:message key="SchemaListPanel.details.displayName" /></label>
</dt>
<dd>
<span wicket:id="displayName"/>
</dd>
</dl>

<dl class="dl-horizontal">
<dt>
<label><wicket:message key="SchemaListPanel.details.description" /></label>
</dt>
<dd>
<span wicket:id="description"/>
</dd>
</dl>
<div wicket:id="objectClassInfoContainer" class="flex-fill border-left pl-3">
<div wicket:id="objectClassInfoColumn" class="d-flex flex-column">
<h3>
<wicket:message key="SchemaListPanel.details"/>
</h3>
<div wicket:id="detailsPanel" class="d-flex">
<div class="flex-fill">
<div class="d-flex gap-3">
<div>
<label>
<wicket:message key="SchemaListPanel.details.displayName"/>
</label>
</div>
<div>
<span wicket:id="displayName"/>
</div>
</div>

<dl class="dl-horizontal">
<dt>
<label><wicket:message key="SchemaListPanel.details.kind" /></label>
<i wicket:id="kindTooltip" wicket:message="title:SchemaStep.tooltip.kind"/>
</dt>
<dd>
<span wicket:id="kind"/>
</dd>
</dl>
<div class="d-flex gap-3">
<div>
<label>
<wicket:message key="SchemaListPanel.details.description"/>
</label>
</div>
<div>
<span wicket:id="description"/>
</div>
</div>

<dl class="dl-horizontal">
<dt>
<label><wicket:message key="SchemaListPanel.details.intent" /></label>
<i wicket:id="intentTooltip" wicket:message="title:SchemaStep.tooltip.intent"/>
</dt>
<dd>
<span wicket:id="intent"/>
</dd>
</dl>
<div class="d-flex gap-3">
<div>
<label>
<wicket:message key="SchemaListPanel.details.kind"/>
</label>
<i wicket:id="kindTooltip" wicket:message="title:SchemaStep.tooltip.kind"/>
</div>
<div>
<span wicket:id="kind"/>
</div>
</div>

<div class="col-md-6">
<dl class="dl-horizontal">
<dt>
<label><wicket:message key="SchemaListPanel.details.nativeObjectClass" /></label>
<i wicket:id="nativeObjectClassTooltip" wicket:message="title:SchemaStep.tooltip.nativeObjectClass"/>
</dt>
<dd>
<span wicket:id="nativeObjectClass"/>
</dd>
</dl>
<div class="d-flex gap-3">
<div>
<label>
<wicket:message key="SchemaListPanel.details.intent"/>
</label>
<i wicket:id="intentTooltip" wicket:message="title:SchemaStep.tooltip.intent"/>
</div>
<div>
<span wicket:id="intent"/>
</div>
</div>
</div>

<dl class="dl-horizontal">
<dt>
<label><wicket:message key="SchemaListPanel.details.default" /></label>
<i wicket:id="isDefaultTooltip" wicket:message="title:SchemaStep.tooltip.isDefault"/>
</dt>
<dd>
<input wicket:id="isDefault" type="checkbox" />
</dd>
</dl>
<div class="flex-fill">
<div class="d-flex gap-3">
<div>
<label>
<wicket:message key="SchemaListPanel.details.nativeObjectClass"/>
</label>
<i wicket:id="nativeObjectClassTooltip" wicket:message="title:SchemaStep.tooltip.nativeObjectClass"/>
</div>
<div>
<span wicket:id="nativeObjectClass"/>
</div>
</div>

<div class="d-flex gap-3">
<div>
<label>
<wicket:message key="SchemaListPanel.details.default"/>
</label>
<i wicket:id="isDefaultTooltip" wicket:message="title:SchemaStep.tooltip.isDefault"/>
</div>
<div>
<input wicket:id="isDefault" type="checkbox"/>
</div>
</div>

</div>
</div>

<div class="box box-solid box-primary">
<div class="box-header">
<h3 class="box-title"><wicket:message key="SchemaListPanel.attributes"/></h3>
</div>
<div class="box-body">
<div wicket:id="attributeTable"/>
</div>
<div class="d-flex flex-column mt-3">
<h3>
<wicket:message key="SchemaListPanel.attributes"/>
</h3>

<div wicket:id="attributeTable"/>
</div>
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

package com.evolveum.midpoint.web.component.wizard.resource.component;

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.schema.processor.ResourceObjectTypeDefinition;
import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.model.NonEmptyLoadableModel;
Expand Down Expand Up @@ -63,7 +65,7 @@
/**
* @author lazyman
*/
public class SchemaListPanel extends BasePanel<PrismObject<ResourceType>> {
public class SchemaListPanel extends BasePanel<PrismObjectWrapper<ResourceType>> {

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

Expand Down Expand Up @@ -93,7 +95,7 @@ public class SchemaListPanel extends BasePanel<PrismObject<ResourceType>> {
@NotNull private final NonEmptyLoadableModel<ObjectClassDetailsDto> detailsModel;
@NotNull private final NonEmptyLoadableModel<List<AttributeDto>> attributeModel;

public SchemaListPanel(String id, IModel<PrismObject<ResourceType>> model, PageResourceWizard parentPage) {
public SchemaListPanel(String id, IModel<PrismObjectWrapper<ResourceType>> model, PageBase parentPage) {
super(id, model);

allClasses = new NonEmptyLoadableModel<List<ObjectClassDto>>(false) {
Expand All @@ -102,23 +104,23 @@ protected List<ObjectClassDto> load() {
return loadAllClasses();
}
};
parentPage.registerDependentModel(allClasses);
// parentPage.registerDependentModel(allClasses);

attributeModel = new NonEmptyLoadableModel<List<AttributeDto>>(false) {
@Override @NotNull
protected List<AttributeDto> load() {
return loadAttributes();
}
};
parentPage.registerDependentModel(attributeModel);
// parentPage.registerDependentModel(attributeModel);

detailsModel = new NonEmptyLoadableModel<ObjectClassDetailsDto>(true) {
@Override @NotNull
protected ObjectClassDetailsDto load() {
return loadDetails();
}
};
parentPage.registerDependentModel(detailsModel);
// parentPage.registerDependentModel(detailsModel);

initLayout();
}
Expand Down Expand Up @@ -178,7 +180,12 @@ public Object getObject() {
};
tableBody.add(objectClassDataView);

NavigatorPanel objectClassNavigator = new NavigatorPanel(ID_NAVIGATOR, objectClassDataView, true);
NavigatorPanel objectClassNavigator = new NavigatorPanel(ID_NAVIGATOR, objectClassDataView, true) {
@Override
protected String getPaginationCssClass() {
return "";
}
};
objectClassNavigator.setOutputMarkupId(true);
objectClassNavigator.setOutputMarkupPlaceholderTag(true);
add(objectClassNavigator);
Expand Down Expand Up @@ -342,9 +349,9 @@ private List<ObjectClassDto> loadAllClasses() {
}

private ResourceSchema loadResourceSchema() {
PrismObject<ResourceType> resource = getModel().getObject();

try {
PrismObject<ResourceType> resource = getModel().getObject().getObjectApplyDelta();

Element xsdSchema = ResourceTypeUtil.getResourceXsdSchema(resource);
if (xsdSchema == null) {
return null;
Expand Down

0 comments on commit 3f6d87d

Please sign in to comment.