Skip to content

Commit

Permalink
Merge branch 'master' of github.com:Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
katkav committed Mar 23, 2016
2 parents 85af882 + 5b40bad commit 60fa2ac
Show file tree
Hide file tree
Showing 24 changed files with 621 additions and 127 deletions.
Expand Up @@ -27,6 +27,7 @@
import javax.management.ObjectName;

import com.evolveum.midpoint.web.application.DescriptorLoader;
import com.evolveum.midpoint.web.component.breadcrumbs.BreadcrumbPageInstance;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AdminGuiConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RichHyperlinkType;
import org.apache.commons.lang.StringUtils;
Expand Down Expand Up @@ -283,6 +284,18 @@ public String getObject() {
getSessionStorage().pushBreadcrumb(bc);
}

protected void createInstanceBreadcrumb() {
BreadcrumbPageInstance bc = new BreadcrumbPageInstance(new AbstractReadOnlyModel() {

@Override
public String getObject() {
return getPageTitleModel().getObject();
}
}, this);

getSessionStorage().pushBreadcrumb(bc);
}

public PageBase() {
this(null);
}
Expand Down
Expand Up @@ -50,7 +50,13 @@
import com.evolveum.midpoint.web.page.PageDialog;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnBlurAjaxFormUpdatingBehaviour;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnChangeAjaxFormUpdatingBehavior;
import com.evolveum.midpoint.web.page.admin.resources.PageResource;
import com.evolveum.midpoint.web.page.admin.roles.PageRole;
import com.evolveum.midpoint.web.page.admin.server.PageTaskEdit;
import com.evolveum.midpoint.web.page.admin.users.PageOrgUnit;
import com.evolveum.midpoint.web.page.admin.users.PageUser;
import com.evolveum.midpoint.web.security.MidPointApplication;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;
import com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType;
Expand All @@ -70,6 +76,7 @@
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.visit.IVisit;
import org.apache.wicket.util.visit.IVisitor;

Expand Down Expand Up @@ -1008,5 +1015,40 @@ public static <T extends ObjectType> T getObjectFromReference(ObjectReferenceTyp
return (T) object;
}

public static void dispatchToObjectDetailsPage(ObjectReferenceType objectRef, PageBase page) {
if (objectRef == null) {
return; // should not occur
}
QName type = objectRef.getType();
PageParameters parameters = new PageParameters();
parameters.add(OnePageParameterEncoder.PARAMETER, objectRef.getOid());
if (RoleType.COMPLEX_TYPE.equals(type)) {
page.setResponsePage(new PageRole(parameters, page));
} else if (OrgType.COMPLEX_TYPE.equals(type)) {
page.setResponsePage(new PageOrgUnit(parameters, page));
} else if (UserType.COMPLEX_TYPE.equals(type)) {
page.setResponsePage(new PageUser(parameters, page));
} else if (ResourceType.COMPLEX_TYPE.equals(type)) {
page.setResponsePage(new PageResource(parameters, page));
} else if (TaskType.COMPLEX_TYPE.equals(type)) {
page.setResponsePage(new PageTaskEdit(parameters, page));
} else {
// nothing to do
}
}

public static boolean hasDetailsPage(PrismObject<?> object) {
Class<?> clazz = object.getCompileTimeClass();
if (clazz == null) {
return false;
}

return AbstractRoleType.class.isAssignableFrom(clazz) ||
UserType.class.isAssignableFrom(clazz) ||
ResourceType.class.isAssignableFrom(clazz) ||
TaskType.class.isAssignableFrom(clazz);
}



}
Expand Up @@ -64,6 +64,7 @@ public class ObjectWrapper<O extends ObjectType> implements Serializable, Reviva

private boolean showEmpty;
private boolean minimalized;
private boolean sorted;
private boolean selectable;
private boolean selected;

Expand Down Expand Up @@ -198,6 +199,14 @@ public void setMinimalized(boolean minimalized) {
this.minimalized = minimalized;
}

public boolean isSorted() {
return sorted;
}

public void setSorted(boolean sorted) {
this.sorted = sorted;
}

public boolean isShowEmpty() {
return showEmpty;
}
Expand Down
Expand Up @@ -24,6 +24,7 @@
<div class="col-xs-4 container-name" wicket:id="label"/>

<div class="box-tools pull-right">
<button wicket:id="sortProperties" wicket:message="title:PrismObjectPanel.sortProperties" class="btn btn-box-tool" data-toggle="tooltip"><i class="fa fa-sort-alpha-asc"></i></button>
<button wicket:id="showEmptyFields" wicket:message="title:PrismObjectPanel.showEmpty" class="btn btn-box-tool" data-toggle="tooltip"><i class="fa fa-arrows-alt"></i></button>
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
Expand Down
Expand Up @@ -17,13 +17,15 @@
package com.evolveum.midpoint.web.component.prism;

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.PrismContainer;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.objectdetails.FocusDetailsTabPanel;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType;

import org.apache.commons.lang.math.NumberUtils;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
Expand All @@ -38,13 +40,18 @@
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.*;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
* @author lazyman
*/
public class PrismContainerPanel extends Panel {

private static final Trace LOGGER = TraceManager.getTrace(PrismContainerPanel.class);
private static final String ID_SHOW_EMPTY_FIELDS = "showEmptyFields";
private static final String ID_SORT_PROPERTIES = "sortProperties";
private static final String STRIPED_CLASS = "striped";

private boolean showHeader;
Expand Down Expand Up @@ -123,6 +130,62 @@ public void onClick(AjaxRequestTarget target) {
}
};
header.add(showEmptyFieldsButton);

AjaxLink sortProperties = new AjaxLink(ID_SORT_PROPERTIES) {
@Override
public void onClick(AjaxRequestTarget target) {
ContainerWrapper containerWrapper = model.getObject();
ObjectWrapper objectWrapper = containerWrapper.getObject();
objectWrapper.setSorted(!objectWrapper.isSorted());

PropertyModel propertiesModel = new PropertyModel(model, "properties");
List<PropertyOrReferenceWrapper> propertiesList = (List<PropertyOrReferenceWrapper>)propertiesModel.getObject();

if (objectWrapper.isSorted()){
Collections.sort(propertiesList, new Comparator<PropertyOrReferenceWrapper>(){
@Override
public int compare(PropertyOrReferenceWrapper pw1, PropertyOrReferenceWrapper pw2) {
ItemDefinition id1 = pw1.getItemDefinition();
ItemDefinition id2 = pw2.getItemDefinition();
String str1 =(id1 != null ? (id1.getDisplayName() != null ? id1.getDisplayName() :
(id1.getName() != null && id1.getName().getLocalPart() != null ? id1.getName().getLocalPart() : "")) : "");
String str2 =(id2 != null ? (id2.getDisplayName() != null ? id2.getDisplayName() :
(id2.getName() != null && id2.getName().getLocalPart() != null ? id2.getName().getLocalPart() : "")) : "");
return str1.compareToIgnoreCase(str2);
}
});
}
else {
final int[] maxOrderArray = new int[3];
Collections.sort(propertiesList, new Comparator<PropertyOrReferenceWrapper>(){
@Override
public int compare(PropertyOrReferenceWrapper pw1, PropertyOrReferenceWrapper pw2) {
ItemDefinition id1 = pw1.getItemDefinition();
ItemDefinition id2 = pw2.getItemDefinition();

//we need to find out the value of the biggest displayOrder to put
//properties with null display order to the end of the list
int displayOrder1 = (id1 != null && id1.getDisplayOrder() != null) ? id1.getDisplayOrder() : 0;
int displayOrder2 = (id2 != null && id2.getDisplayOrder() != null) ? id2.getDisplayOrder() : 0;
if (maxOrderArray[0] == 0){
maxOrderArray[0] = displayOrder1 > displayOrder2 ? displayOrder1 + 1 : displayOrder2 + 1;
}
maxOrderArray[1] = displayOrder1;
maxOrderArray[2] = displayOrder2;

int maxDisplayOrder = NumberUtils.max(maxOrderArray);
maxOrderArray[0] = maxDisplayOrder + 1;

return Integer.compare(id1 != null && id1.getDisplayOrder() != null ? id1.getDisplayOrder() : maxDisplayOrder,
id2 != null && id2.getDisplayOrder() != null ? id2.getDisplayOrder() : maxDisplayOrder);
}
});
}
addOrReplaceProperties(model, form, true);
target.add(PrismContainerPanel.this);
}
};
header.add(sortProperties);
add(header);

IModel headerLabelModel;
Expand Down Expand Up @@ -158,22 +221,7 @@ public void detach() {
}
header.add(new Label("label", headerLabelModel));

ListView<ItemWrapper> properties = new ListView<ItemWrapper>("properties",
new PropertyModel(model, "properties")) {

@Override
protected void populateItem(ListItem<ItemWrapper> item) {
// if (item.getModel().getObject() instanceof PropertyWrapper){
item.add(new PrismPropertyPanel("property", item.getModel(), form, pageBase));
item.add(AttributeModifier.append("class", createStyleClassModel(item.getModel())));
// } else if (item.getModel().getObject() instanceof ReferenceWrapper){
// item.add(new PrismReferencePanel("property", item.getModel(), form, pageBase));
// item.add(AttributeModifier.append("class", createStyleClassModel(item.getModel())));
// }
}
};
properties.setReuseItems(true);
add(properties);
addOrReplaceProperties(model, form, false);
}

public PageBase getPageBase(){
Expand All @@ -198,4 +246,27 @@ public boolean isShowHeader() {
public void setShowHeader(boolean showHeader) {
this.showHeader = showHeader;
}

private void addOrReplaceProperties(IModel<ContainerWrapper> model, final Form form, boolean isToBeReplaced){
ListView<ItemWrapper> properties = new ListView<ItemWrapper>("properties",
new PropertyModel(model, "properties")) {

@Override
protected void populateItem(ListItem<ItemWrapper> item) {
// if (item.getModel().getObject() instanceof PropertyWrapper){
item.add(new PrismPropertyPanel("property", item.getModel(), form, pageBase));
item.add(AttributeModifier.append("class", createStyleClassModel(item.getModel())));
// } else if (item.getModel().getObject() instanceof ReferenceWrapper){
// item.add(new PrismReferencePanel("property", item.getModel(), form, pageBase));
// item.add(AttributeModifier.append("class", createStyleClassModel(item.getModel())));
// }
}
};
properties.setReuseItems(true);
if (isToBeReplaced) {
replace(properties);
} else {
add(properties);
}
}
}
Expand Up @@ -19,9 +19,15 @@
<body>
<wicket:extend>
<form wicket:id="mainForm" class="form-horizontal">
<div wicket:id="primaryDeltas"/>
<div wicket:id="secondaryDeltas"/>
<p/>
<div class="row">
<div class="col-md-6">
<div wicket:id="primaryDeltas"/>
</div>
<div class="col-md-6">
<div wicket:id="secondaryDeltas"/>
</div>
</div>

<div class="main-button-bar">
<a class="btn btn-default" wicket:id="back" />
</div>
Expand Down
Expand Up @@ -117,6 +117,11 @@ public SceneDto getObject() {
initLayout();
}

@Override
protected void createBreadcrumb() {
createInstanceBreadcrumb();
}

private void initLayout() {
Form mainForm = new Form("mainForm");
mainForm.setMultiPart(true);
Expand Down
Expand Up @@ -17,13 +17,15 @@
package com.evolveum.midpoint.web.component.prism.show;

import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.model.api.visualizer.SceneItemValue;
import com.evolveum.midpoint.prism.PrismReferenceValue;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.web.component.data.column.ImagePanel;
import com.evolveum.midpoint.web.component.data.column.LinkPanel;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.util.ObjectTypeGuiDescriptor;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.AbstractReadOnlyModel;
Expand Down Expand Up @@ -74,8 +76,13 @@ public boolean isVisible() {
final LinkPanel<String> link = new LinkPanel<String>(ID_LINK, new LabelModel()) {
@Override
public void onClick(AjaxRequestTarget target) {
System.out.println("Clicked on " + getModelObject().getSourceValue());
super.onClick(target);
if (!(getModelObject().getSourceValue() instanceof PrismReferenceValue)) {
return;
}
PrismReferenceValue refValue = (PrismReferenceValue) getModelObject().getSourceValue();
ObjectReferenceType ort = new ObjectReferenceType();
ort.setupReferenceValue(refValue);
WebComponentUtil.dispatchToObjectDetailsPage(ort, getPageBase());
}
};
link.add(visibleIfReference);
Expand Down
Expand Up @@ -17,36 +17,33 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
<div class="form-horizontal">
<div class="box" style="width: auto; display: table;">
<div class="box-header with-border" wicket:id="headerPanel">
<h3 class="box-title" style="margin-right: 35px;">
<span wicket:id="changeType"/>
<span wicket:id="objectType"/>
<small>
<span wicket:id="name"/> <span wicket:id="description"/>
<span wicket:id="wrapperDisplayName"/>
</small>
</h3>
<div class="box-tools pull-right" wicket:id="optionButtons" />
</div>
<div class="box" wicket:id="box" style="margin-bottom: 0px;">
<div class="box-header with-border" wicket:id="headerPanel">
<h3 class="box-title" style="margin-right: 35px;">
<span wicket:id="changeType"/>
<span wicket:id="objectType"/>
<small>
<span wicket:id="nameLabel"/><span wicket:id="nameLink"/> <span wicket:id="description"/>
<span wicket:id="wrapperDisplayName"/>
</small>
</h3>
<div class="box-tools pull-right" wicket:id="optionButtons" />
</div>

<div wicket:id="body" class="box-body no-padding">
<table class="table table-striped table-hover table-bordered" wicket:id="itemsTable"
style="margin-bottom: 10px;">
<tr>
<th><wicket:message key="ScenePanel.item"/></th>
<th wicket:id="oldValueLabel"><wicket:message key="ScenePanel.oldValue"/></th>
<th wicket:id="newValueLabel"><wicket:message key="ScenePanel.newValue"/></th>
<th wicket:id="valueLabel"><wicket:message key="ScenePanel.value"/></th>
</tr>
<div wicket:id="items">
<div wicket:id="item"/>
</div>
</table>
<div wicket:id="partialScenes">
<div wicket:id="partialScene"/>
<div wicket:id="body" class="box-body no-padding">
<table class="table table-striped table-hover table-bordered" wicket:id="itemsTable">
<tr>
<th><wicket:message key="ScenePanel.item"/></th>
<th wicket:id="oldValueLabel"><wicket:message key="ScenePanel.oldValue"/></th>
<th wicket:id="newValueLabel"><wicket:message key="ScenePanel.newValue"/></th>
<th wicket:id="valueLabel"><wicket:message key="ScenePanel.value"/></th>
</tr>
<div wicket:id="items">
<div wicket:id="item"/>
</div>
</table>
<div wicket:id="partialScenes" style="padding: 10px;">
<div wicket:id="partialScene"/>
</div>
</div>
</div>
Expand Down

0 comments on commit 60fa2ac

Please sign in to comment.