Skip to content

Commit

Permalink
MID-5871 ClassCastException in work item details
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Oct 21, 2019
1 parent ffdf2e5 commit b729ed4
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 35 deletions.
Expand Up @@ -69,6 +69,7 @@
import com.evolveum.midpoint.web.component.data.SelectableBeanObjectDataProvider;
import com.evolveum.midpoint.web.component.data.Table;
import com.evolveum.midpoint.web.component.data.column.ColumnMenuAction;
import com.evolveum.midpoint.web.component.data.column.ColumnUtils;
import com.evolveum.midpoint.web.component.input.DisplayableValueChoiceRenderer;
import com.evolveum.midpoint.web.component.input.DropDownChoicePanel;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
Expand Down Expand Up @@ -2006,6 +2007,9 @@ public static <AHT extends AssignmentHolderType> void initNewObjectWithReference
}

public static String createErrorIcon(OperationResult result) {
if (result == null){
return "";
}
OperationResultStatus status = result.getStatus();
OperationResultStatusPresentationProperties icon = OperationResultStatusPresentationProperties
.parseOperationalResultStatus(status);
Expand Down Expand Up @@ -3182,6 +3186,28 @@ public static String getDisplayTypeTitle(DisplayType displayType){
return displayType.getTooltip().getOrig();
}

public static <O extends ObjectType> DisplayType getDisplayTypeForObject(O obj, OperationResult result, PageBase pageBase){
if (obj instanceof ArchetypeType && ((ArchetypeType)obj).getArchetypePolicy() != null) {
return ((ArchetypeType)obj).getArchetypePolicy().getDisplay();
}
DisplayType displayType = WebComponentUtil.getArchetypePolicyDisplayType(obj, pageBase);
if (displayType != null){
String disabledStyle = "";
if (obj instanceof FocusType) {
disabledStyle = WebComponentUtil.getIconEnabledDisabled(((FocusType)obj).asPrismObject());
if (displayType.getIcon() != null && StringUtils.isNotEmpty(displayType.getIcon().getCssClass()) &&
disabledStyle != null){
displayType.getIcon().setCssClass(displayType.getIcon().getCssClass() + " " + disabledStyle);
displayType.getIcon().setColor("");
}
}
} else {
displayType = WebComponentUtil.createDisplayType(ColumnUtils.getIconColumnValue(obj, result),
"", ColumnUtils.getIconColumnTitle(obj, result));
}
return displayType;
}

public static DisplayType createDisplayType(String iconCssClass){
return createDisplayType(iconCssClass, "", "");
}
Expand Down
Expand Up @@ -30,7 +30,7 @@
/**
* Created by honchar
*/
public class LinkedReferencePanel<AHT extends AssignmentHolderType> extends BasePanel<ObjectReferenceType> {
public class LinkedReferencePanel<O extends ObjectType> extends BasePanel<ObjectReferenceType> {
private static final long serialVersionUID = 1L;

private static final String ID_ICON = "icon";
Expand All @@ -40,7 +40,7 @@ public class LinkedReferencePanel<AHT extends AssignmentHolderType> extends Base
private static final String DOT_CLASS = LinkedReferencePanel.class.getName() + ".";
private static final String OPERATION_LOAD_REFERENCED_OBJECT = DOT_CLASS + "loadReferencedObject";

IModel<AHT> referencedObjectModel = null;
IModel<ObjectType> referencedObjectModel = null;

public LinkedReferencePanel(String id, IModel<ObjectReferenceType> objectReferenceModel){
super(id, objectReferenceModel);
Expand All @@ -54,22 +54,22 @@ protected void onInitialize(){
}

public void initReferencedObjectModel() {
referencedObjectModel = new LoadableModel<AHT>() {
referencedObjectModel = new LoadableModel<ObjectType>() {
@Override
protected AHT load() {
protected ObjectType load() {
if (getModelObject() == null || getModelObject().getType() == null){
return null;
}
if (getModelObject().asReferenceValue() != null && getModelObject().asReferenceValue().getObject() != null
&& getModelObject().asReferenceValue().getObject().asObjectable() instanceof AssignmentHolderType ){
return (AHT)getModelObject().asReferenceValue().getObject().asObjectable();
&& getModelObject().asReferenceValue().getObject().asObjectable() instanceof ObjectType ){
return (ObjectType)getModelObject().asReferenceValue().getObject().asObjectable();
}
if (StringUtils.isNotEmpty(getModelObject().getOid()) && getModelObject().getType() != null) {
PageBase pageBase = LinkedReferencePanel.this.getPageBase();
OperationResult result = new OperationResult(OPERATION_LOAD_REFERENCED_OBJECT);
PrismObject<AHT> assignmentHolder = WebModelServiceUtils.loadObject(getModelObject(), pageBase,
PrismObject<ObjectType> referencedObject = WebModelServiceUtils.loadObject(getModelObject(), pageBase,
pageBase.createSimpleTask(OPERATION_LOAD_REFERENCED_OBJECT), result);
return assignmentHolder != null ? assignmentHolder.asObjectable() : null;
return referencedObject != null ? referencedObject.asObjectable() : null;
}
return null;
}
Expand All @@ -79,7 +79,7 @@ && getModelObject().asReferenceValue().getObject().asObjectable() instanceof Ass
private void initLayout(){
setOutputMarkupId(true);

DisplayType displayType = WebComponentUtil.getArchetypePolicyDisplayType(referencedObjectModel.getObject(), getPageBase());
DisplayType displayType = WebComponentUtil.getDisplayTypeForObject(referencedObjectModel.getObject(), null, getPageBase());
if (displayType == null){
displayType = new DisplayType();
}
Expand All @@ -92,7 +92,7 @@ private void initLayout(){
// imagePanel.add(new VisibleBehaviour(() -> displayType != null && displayType.getIcon() != null && StringUtils.isNotEmpty(displayType.getIcon().getCssClass())));
add(imagePanel);

AjaxLink<AHT> nameLink = new AjaxLink<AHT>(ID_NAME, referencedObjectModel) {
AjaxLink<ObjectType> nameLink = new AjaxLink<ObjectType>(ID_NAME, referencedObjectModel) {
@Override
public void onClick(AjaxRequestTarget ajaxRequestTarget) {
if (referencedObjectModel != null && referencedObjectModel.getObject() != null) {
Expand Down
Expand Up @@ -125,24 +125,11 @@ public static <O extends ObjectType> IColumn<SelectableBean<O>, String> createIc

@Override
protected DisplayType getIconDisplayType(IModel<SelectableBean<O>> rowModel){
if (rowModel.getObject().getValue() instanceof ArchetypeType && ((ArchetypeType)rowModel.getObject().getValue()).getArchetypePolicy() != null) {
return ((ArchetypeType)rowModel.getObject().getValue()).getArchetypePolicy().getDisplay();
if (rowModel == null || rowModel.getObject() == null || rowModel.getObject().getValue() == null) {
return new DisplayType();
}
DisplayType displayType = WebComponentUtil.getArchetypePolicyDisplayType(rowModel.getObject().getValue(), pageBase);
if (displayType != null){
String disabledStyle = "";
if (rowModel.getObject().getValue() instanceof FocusType) {
disabledStyle = WebComponentUtil.getIconEnabledDisabled(((FocusType)rowModel.getObject().getValue()).asPrismObject());
if (displayType.getIcon() != null && StringUtils.isNotEmpty(displayType.getIcon().getCssClass()) &&
disabledStyle != null){
displayType.getIcon().setCssClass(displayType.getIcon().getCssClass() + " " + disabledStyle);
displayType.getIcon().setColor("");
}
}
} else {
displayType = WebComponentUtil.createDisplayType(getIconColumnValue(rowModel), "", getIconColumnTitle(rowModel));
}
return displayType;
return WebComponentUtil.getDisplayTypeForObject(rowModel.getObject().getValue(),
rowModel.getObject().getResult(), pageBase);
}

// @Override
Expand All @@ -153,13 +140,16 @@ protected DisplayType getIconDisplayType(IModel<SelectableBean<O>> rowModel){

}

private static <T extends ObjectType> String getIconColumnValue(IModel<SelectableBean<T>> rowModel) {
public static <T extends ObjectType> String getIconColumnValue(IModel<SelectableBean<T>> rowModel) {
if (rowModel == null || rowModel.getObject() == null || rowModel.getObject().getValue() == null) {
return "";
}

T object = rowModel.getObject().getValue();
return getIconColumnValue(rowModel.getObject().getValue(), rowModel.getObject().getResult());

}

public static <T extends ObjectType> String getIconColumnValue(T object, OperationResult result) {
Class<T> type = (Class<T>) object.getClass();
if (type.equals(ObjectType.class)) {
return WebComponentUtil.createDefaultIcon(object.asPrismObject());
Expand All @@ -173,7 +163,7 @@ private static <T extends ObjectType> String getIconColumnValue(IModel<Selectabl
return WebComponentUtil.createServiceIcon(object.asPrismContainer());
} else if (ShadowType.class.equals(type)) {
if (object == null) {
return WebComponentUtil.createErrorIcon(rowModel.getObject().getResult());
return WebComponentUtil.createErrorIcon(result);
} else {
return WebComponentUtil.createShadowIcon(object.asPrismContainer());
}
Expand Down Expand Up @@ -208,17 +198,22 @@ private static <T extends ObjectType> IModel<String> getIconColumnDataModel(IMod
return Model.of();
}

private static <T extends ObjectType> String getIconColumnTitle(IModel<SelectableBean<T>> rowModel){
public static <T extends ObjectType> String getIconColumnTitle(IModel<SelectableBean<T>> rowModel){
if (rowModel == null || rowModel.getObject() == null){
return null;
}
if (rowModel.getObject().getResult() != null && rowModel.getObject().getResult().isFatalError()){
OperationResult result = rowModel.getObject().getResult();
return getIconColumnTitle(rowModel.getObject().getValue(), rowModel.getObject().getResult());
}

public static <T extends ObjectType> String getIconColumnTitle(T object, OperationResult result){
if (object == null){
return null;
}
if (result != null && result.isFatalError()){
return result.getUserFriendlyMessage() != null ?
result.getUserFriendlyMessage().getFallbackMessage() : result.getMessage();
}
Class<T> type = (Class<T>)rowModel.getObject().getValue().getClass();
T object = rowModel.getObject().getValue();
Class<T> type = (Class<T>)object.getClass();
if (object == null && !ShadowType.class.equals(type)){
return null;
} else if (type.equals(UserType.class)) {
Expand Down

0 comments on commit b729ed4

Please sign in to comment.