/* * Copyright (c) 2010-2016 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.evolveum.midpoint.web.component.prism.show; import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.model.api.visualizer.Name; import com.evolveum.midpoint.model.api.visualizer.Scene; import com.evolveum.midpoint.model.api.visualizer.SceneDeltaItem; import com.evolveum.midpoint.model.api.visualizer.SceneItem; import com.evolveum.midpoint.prism.PrismObjectDefinition; import com.evolveum.midpoint.prism.delta.ChangeType; import org.apache.wicket.Component; import org.jetbrains.annotations.NotNull; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * @author mederly */ public class SceneDto implements Serializable { public static final java.lang.String F_CHANGE_TYPE = "changeType"; public static final java.lang.String F_OBJECT_TYPE = "objectType"; public static final java.lang.String F_DESCRIPTION = "description"; public static final java.lang.String F_ITEMS = "items"; public static final java.lang.String F_PARTIAL_SCENES = "partialScenes"; @NotNull private final Scene scene; private boolean minimized; private String boxClassOverride; private final List<SceneItemDto> items = new ArrayList<>(); private final List<SceneDto> partialScenes = new ArrayList<>(); public SceneDto(@NotNull Scene scene) { this.scene = scene; for (SceneItem item : scene.getItems()) { if (item != null) { items.add(new SceneItemDto(this, item)); } } for (Scene sub : scene.getPartialScenes()) { if (sub != null) { partialScenes.add(new SceneDto(sub)); } } } public Scene getScene() { return scene; } public boolean isMinimized() { return minimized; } public void setMinimized(boolean minimized) { this.minimized = minimized; } public List<SceneDto> getPartialScenes() { return partialScenes; } public List<SceneItemDto> getItems() { return items; } public String getName(Component component) { if (scene.getName() != null) { if (scene.getName().getDisplayName() != null) { return resolve(scene.getName().getDisplayName(), component, scene.getName().namesAreResourceKeys()); } else { return resolve(scene.getName().getSimpleName(), component, scene.getName().namesAreResourceKeys()); } } else { return resolve("SceneDto.unnamed", component, true); } } private String resolve(String name, Component component, boolean namesAreResourceKeys) { if (namesAreResourceKeys) { return PageBase.createStringResourceStatic(component, name).getString(); } else { return name; } } public String getDescription(Component component) { Name name = scene.getName(); if (name == null) { return ""; } if (scene.getSourceDefinition() != null && !(scene.getSourceDefinition() instanceof PrismObjectDefinition)) { return ""; } if (name.getSimpleName() != null && !name.getSimpleName().equals(getName(component))) { return "(" + name.getSimpleName() + ")"; } return ""; } public ChangeType getChangeType() { return scene.getChangeType(); } public boolean containsDeltaItems() { for (SceneItem item : scene.getItems()) { if (item instanceof SceneDeltaItem) { return true; } } return false; } public boolean isWrapper() { return scene instanceof WrapperScene; } public String getBoxClassOverride() { return boxClassOverride; } public void setBoxClassOverride(String boxClassOverride) { this.boxClassOverride = boxClassOverride; } // minimized is NOT included in equality check - because the SceneDto's are compared in order to determine // whether they should be redrawn (i.e. their content is important, not the presentation) @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; SceneDto sceneDto = (SceneDto) o; if (scene != null ? !scene.equals(sceneDto.scene) : sceneDto.scene != null) return false; if (boxClassOverride != null ? !boxClassOverride.equals(sceneDto.boxClassOverride) : sceneDto.boxClassOverride != null) return false; if (items != null ? !items.equals(sceneDto.items) : sceneDto.items != null) return false; return !(partialScenes != null ? !partialScenes.equals(sceneDto.partialScenes) : sceneDto.partialScenes != null); } @Override public int hashCode() { int result = scene != null ? scene.hashCode() : 0; result = 31 * result + (boxClassOverride != null ? boxClassOverride.hashCode() : 0); result = 31 * result + (items != null ? items.hashCode() : 0); result = 31 * result + (partialScenes != null ? partialScenes.hashCode() : 0); return result; } public void applyFoldingFrom(@NotNull SceneDto source) { minimized = source.minimized; int partialDst = partialScenes.size(); int partialSrc = source.getPartialScenes().size(); if (partialDst != partialSrc) { return; // shouldn't occur } for (int i = 0; i < partialDst; i++) { partialScenes.get(i).applyFoldingFrom(source.getPartialScenes().get(i)); } } }