diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/BasePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/BasePanel.java index b14b4039c63..18e7c74b82f 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/BasePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/BasePanel.java @@ -1,162 +1,157 @@ -/* - * Copyright (c) 2010-2017 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.api.component; - -import com.evolveum.midpoint.gui.api.page.PageBase; -import com.evolveum.midpoint.gui.api.util.WebComponentUtil; -import com.evolveum.midpoint.prism.PrismContext; -import com.evolveum.midpoint.schema.SchemaHelper; -import com.evolveum.midpoint.prism.polystring.PolyString; -import com.evolveum.midpoint.web.security.MidPointApplication; -import com.evolveum.midpoint.web.security.MidPointAuthWebSession; -import com.evolveum.midpoint.web.security.WebApplicationConfiguration; -import com.evolveum.prism.xml.ns._public.types_3.PolyStringType; - -import org.apache.commons.lang.StringUtils; -import org.apache.wicket.markup.html.panel.Panel; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.StringResourceModel; -import org.jetbrains.annotations.Contract; - -/** - * Base class for most midPoint GUI panels. It has a constructor and - * utility methods for convenient handling of the model. It also has - * other utility methods often used in reusable components. - *

- * Almost all reusable components should extend this class. - * - * @author lazyman - * @author semancik - */ -public class BasePanel extends Panel { - private static final long serialVersionUID = 1L; - - private IModel model; - - public BasePanel(String id) { - super(id); - } - -// public BasePanel(String id, T object) { -// super(id); -// this.model = Model.of(object); -// } - - public BasePanel(String id, IModel model) { - super(id); - this.model = model == null ? createModel() : model; - } - - public IModel createModel() { - return null; - } - - public IModel getModel() { - return model; - } - - public T getModelObject() { - return model != null ? model.getObject() : null; - } - - public String getString(String resourceKey, Object... objects) { - return createStringResource(resourceKey, objects).getString(); - } - - public String getString(Enum e) { - return createStringResource(e).getString(); - } - - public StringResourceModel createStringResource(String resourceKey, IModel model, Object... objects) { - return new StringResourceModel(resourceKey, this).setModel(model) - .setDefaultValue(resourceKey) - .setParameters(objects); - } - - public StringResourceModel createStringResource(String resourceKey, Object... objects) { - return new StringResourceModel(resourceKey, this).setModel(null) - .setDefaultValue(resourceKey) - .setParameters(objects); - } - - public StringResourceModel createStringResource(PolyString polystringKey, Object... objects) { - String resourceKey = null; - if (polystringKey != null) { - // TODO later: use polystringKey.getKey() - resourceKey = polystringKey.getOrig(); - } - return new StringResourceModel(resourceKey, this).setModel(null) - .setDefaultValue(resourceKey) - .setParameters(objects); - } - - public StringResourceModel createStringResource(PolyStringType polystringKey, Object... objects) { - String resourceKey = null; - if (polystringKey != null) { - // TODO later: use polystringKey.getKey() - resourceKey = polystringKey.getOrig(); - } - return new StringResourceModel(resourceKey, this).setModel(null) - .setDefaultValue(resourceKey) - .setParameters(objects); - } - - public StringResourceModel createStringResource(Enum e) { - return createStringResource(e, null); - } - - public StringResourceModel createStringResource(Enum e, String prefix) { - return createStringResource(e, prefix, null); - } - - public StringResourceModel createStringResource(Enum e, String prefix, String nullKey) { - StringBuilder sb = new StringBuilder(); - if (StringUtils.isNotEmpty(prefix)) { - sb.append(prefix).append('.'); - } - - if (e == null) { - if (StringUtils.isNotEmpty(nullKey)) { - sb.append(nullKey); - } else { - sb = new StringBuilder(); - } - } else { - sb.append(e.getDeclaringClass().getSimpleName()).append('.'); - sb.append(e.name()); - } - - return createStringResource(sb.toString()); - } - - @Contract(pure = true) - public PageBase getPageBase() { - return WebComponentUtil.getPageBase(this); - } - - public PrismContext getPrismContext() { - return getPageBase().getPrismContext(); - } - - public SchemaHelper getSchemaHelper() { - return getPageBase().getSchemaHelper(); - } - - protected String createComponentPath(String... components) { - return StringUtils.join(components, ":"); - } - - public WebApplicationConfiguration getWebApplicationConfiguration() { - MidPointApplication application = MidPointApplication.get(); - return application.getWebApplicationConfiguration(); - } - - @Override - public MidPointAuthWebSession getSession() { - return (MidPointAuthWebSession) super.getSession(); - } -} +/* + * Copyright (c) 2010-2017 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.api.component; + +import com.evolveum.midpoint.gui.api.page.PageBase; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.prism.PrismContext; +import com.evolveum.midpoint.schema.SchemaHelper; +import com.evolveum.midpoint.prism.polystring.PolyString; +import com.evolveum.midpoint.web.security.MidPointApplication; +import com.evolveum.midpoint.web.security.MidPointAuthWebSession; +import com.evolveum.midpoint.web.security.WebApplicationConfiguration; +import com.evolveum.prism.xml.ns._public.types_3.PolyStringType; + +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.StringResourceModel; +import org.jetbrains.annotations.Contract; + +/** + * Base class for most midPoint GUI panels. It has a constructor and + * utility methods for convenient handling of the model. It also has + * other utility methods often used in reusable components. + *

+ * Almost all reusable components should extend this class. + * + * @author lazyman + * @author semancik + */ +public class BasePanel extends Panel { + private static final long serialVersionUID = 1L; + + private IModel model; + + public BasePanel(String id) { + super(id); + } + + public BasePanel(String id, IModel model) { + super(id); + this.model = model == null ? createModel() : model; + } + + public IModel createModel() { + return null; + } + + public IModel getModel() { + return model; + } + + public T getModelObject() { + return model != null ? model.getObject() : null; + } + + public String getString(String resourceKey, Object... objects) { + return createStringResource(resourceKey, objects).getString(); + } + + public String getString(Enum e) { + return createStringResource(e).getString(); + } + + public StringResourceModel createStringResource(String resourceKey, IModel model, Object... objects) { + return new StringResourceModel(resourceKey, this).setModel(model) + .setDefaultValue(resourceKey) + .setParameters(objects); + } + + public StringResourceModel createStringResource(String resourceKey, Object... objects) { + return new StringResourceModel(resourceKey, this).setModel(null) + .setDefaultValue(resourceKey) + .setParameters(objects); + } + + public StringResourceModel createStringResource(PolyString polystringKey, Object... objects) { + String resourceKey = null; + if (polystringKey != null) { + // TODO later: use polystringKey.getKey() + resourceKey = polystringKey.getOrig(); + } + return new StringResourceModel(resourceKey, this).setModel(null) + .setDefaultValue(resourceKey) + .setParameters(objects); + } + + public StringResourceModel createStringResource(PolyStringType polystringKey, Object... objects) { + String resourceKey = null; + if (polystringKey != null) { + // TODO later: use polystringKey.getKey() + resourceKey = polystringKey.getOrig(); + } + return new StringResourceModel(resourceKey, this).setModel(null) + .setDefaultValue(resourceKey) + .setParameters(objects); + } + + public StringResourceModel createStringResource(Enum e) { + return createStringResource(e, null); + } + + public StringResourceModel createStringResource(Enum e, String prefix) { + return createStringResource(e, prefix, null); + } + + public StringResourceModel createStringResource(Enum e, String prefix, String nullKey) { + StringBuilder sb = new StringBuilder(); + if (StringUtils.isNotEmpty(prefix)) { + sb.append(prefix).append('.'); + } + + if (e == null) { + if (StringUtils.isNotEmpty(nullKey)) { + sb.append(nullKey); + } else { + sb = new StringBuilder(); + } + } else { + sb.append(e.getDeclaringClass().getSimpleName()).append('.'); + sb.append(e.name()); + } + + return createStringResource(sb.toString()); + } + + @Contract(pure = true) + public PageBase getPageBase() { + return WebComponentUtil.getPageBase(this); + } + + public PrismContext getPrismContext() { + return getPageBase().getPrismContext(); + } + + public SchemaHelper getSchemaHelper() { + return getPageBase().getSchemaHelper(); + } + + protected String createComponentPath(String... components) { + return StringUtils.join(components, ":"); + } + + public WebApplicationConfiguration getWebApplicationConfiguration() { + MidPointApplication application = MidPointApplication.get(); + return application.getWebApplicationConfiguration(); + } + + @Override + public MidPointAuthWebSession getSession() { + return (MidPointAuthWebSession) super.getSession(); + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/ProtectedStringTypeWrapperImpl.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/ProtectedStringTypeWrapperImpl.java index 7804bee7328..86b59493eb3 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/ProtectedStringTypeWrapperImpl.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/ProtectedStringTypeWrapperImpl.java @@ -15,6 +15,7 @@ import com.evolveum.midpoint.prism.delta.ItemDelta; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.web.component.prism.ValueStatus; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType; import com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType; /** @@ -33,6 +34,10 @@ public , PrismProper if (valueWrapper != null && valueWrapper.getRealValue() == null && valueWrapper.getOldValue().getRealValue() != null){ valueWrapper.setStatus(ValueStatus.DELETED); } + if (getParent() != null && getParent().getParent() != null && getParent().getParent().getTypeClass().isAssignableFrom(ShadowType.class) + && valueWrapper.getStatus().equals(ValueStatus.ADDED)) { + valueWrapper.setStatus(ValueStatus.MODIFIED); + } return super.getDelta(); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/AbstractSummaryPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/AbstractSummaryPanel.java index 9af395d814d..78af3b58b21 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/AbstractSummaryPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/AbstractSummaryPanel.java @@ -1,392 +1,421 @@ -/* - * Copyright (c) 2010-2017 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.web.component; - -import com.evolveum.midpoint.gui.api.component.BasePanel; -import com.evolveum.midpoint.gui.api.util.WebComponentUtil; -import com.evolveum.midpoint.gui.impl.model.FlexibleLabelModel; -import com.evolveum.midpoint.prism.Containerable; -import com.evolveum.midpoint.prism.PrismContainer; -import com.evolveum.midpoint.prism.path.ItemName; -import com.evolveum.midpoint.repo.common.expression.ExpressionVariables; -import com.evolveum.midpoint.web.component.util.SummaryTag; -import com.evolveum.midpoint.web.component.util.VisibleBehaviour; -import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; -import com.evolveum.midpoint.xml.ns._public.common.common_3.*; - -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang.StringUtils; -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.WebMarkupContainer; -import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.markup.html.image.NonCachingImage; -import org.apache.wicket.markup.repeater.RepeatingView; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.Model; -import org.apache.wicket.request.resource.AbstractResource; - -import javax.xml.namespace.QName; -import java.util.ArrayList; -import java.util.List; - -/** - * @author semancik - * @author mederly - */ -public abstract class AbstractSummaryPanel extends BasePanel { - private static final long serialVersionUID = 1L; - - protected static final String ID_BOX = "summaryBox"; - protected static final String ID_ICON_BOX = "summaryIconBox"; - protected static final String ID_TAG_BOX = "summaryTagBox"; - protected static final String ID_SUMMARY_TAG = "summaryTag"; - protected static final String ID_ICON = "summaryIcon"; - protected static final String ID_DISPLAY_NAME = "summaryDisplayName"; - protected static final String ID_IDENTIFIER = "summaryIdentifier"; - protected static final String ID_IDENTIFIER_PANEL = "summaryIdentifierPanel"; - protected static final String ID_NAVIGATE_TO_OBJECT_BUTTON = "navigateToObject"; - protected static final String ID_TITLE = "summaryTitle"; - protected static final String ID_TITLE2 = "summaryTitle2"; - protected static final String ID_TITLE3 = "summaryTitle3"; - - protected static final String ID_PHOTO = "summaryPhoto"; // perhaps useful only for focal objects but it was simpler to include it here - protected static final String ID_ORGANIZATION = "summaryOrganization"; // similar (requires ObjectWrapper to get parent organizations so hard to use in ObjectSummaryPanel) - - protected static final String BOX_CSS_CLASS = "col-xs-12 info-box"; - protected static final String ICON_BOX_CSS_CLASS = "info-box-icon"; - protected static final String ARCHETYPE_ICON_FONT_SIZE = "font-size: 45px !important;"; - - protected SummaryPanelSpecificationType configuration; - - protected WebMarkupContainer box; - protected RepeatingView tagBox; - protected WebMarkupContainer iconBox; - - public AbstractSummaryPanel(String id, IModel model, SummaryPanelSpecificationType configuration) { - super(id, model); - this.configuration = configuration; - setOutputMarkupId(true); - } - - @Override - protected void onInitialize() { - super.onInitialize(); - - box = new WebMarkupContainer(ID_BOX); - add(box); - - String archetypePolicyAdditionalCssClass = getArchetypePolicyAdditionalCssClass(); - box.add(new AttributeModifier("class", BOX_CSS_CLASS + " " + getBoxAdditionalCssClass())); - if (StringUtils.isNotEmpty(archetypePolicyAdditionalCssClass)){ - box.add(AttributeModifier.append("style", "border-color: " + archetypePolicyAdditionalCssClass + ";")); - } - - if (getDisplayNameModel() != null) { - box.add(new Label(ID_DISPLAY_NAME, getDisplayNameModel())); - } else if (getDisplayNamePropertyName() != null) { - box.add(new Label(ID_DISPLAY_NAME, createLabelModel(getDisplayNamePropertyName(), SummaryPanelSpecificationType.F_DISPLAY_NAME))); - } else { - box.add(new Label(ID_DISPLAY_NAME, " ")); - } - - WebMarkupContainer identifierPanel = new WebMarkupContainer(ID_IDENTIFIER_PANEL); - identifierPanel.add(new Label(ID_IDENTIFIER, createLabelModel(getIdentifierPropertyName(), SummaryPanelSpecificationType.F_IDENTIFIER))); - identifierPanel.add(new VisibleEnableBehaviour() { - private static final long serialVersionUID = 1L; - - @Override - public boolean isVisible() { - return isIdentifierVisible(); - } - }); - box.add(identifierPanel); - - AjaxButton navigateToObject = new AjaxButton(ID_NAVIGATE_TO_OBJECT_BUTTON) { - @Override - public void onClick(AjaxRequestTarget ajaxRequestTarget) { - ObjectReferenceType ort = getReferencedObjectToNavigate(); - WebComponentUtil.dispatchToObjectDetailsPage(ort, AbstractSummaryPanel.this, false); - } - }; - navigateToObject.add(AttributeAppender.append("title", getReferenceObjectTitleModel())); - navigateToObject.add(new VisibleBehaviour(() -> { - ObjectReferenceType ort = getReferencedObjectToNavigate(); - Class refType = !isReferencedObjectNull() ? - WebComponentUtil.qnameToClass(AbstractSummaryPanel.this.getPageBase().getPrismContext(), ort.getType()) : null; - return ort != null && refType != null && - WebComponentUtil.getObjectDetailsPage(refType) != null; - - })); - navigateToObject.setOutputMarkupId(true); - box.add(navigateToObject); - - if (getTitleModel() != null) { - box.add(new Label(ID_TITLE, getTitleModel())); - } else if (getTitlePropertyName() != null) { - box.add(new Label(ID_TITLE, createLabelModel(getTitlePropertyName(), SummaryPanelSpecificationType.F_TITLE_1))); - } else { - box.add(new Label(ID_TITLE, " ")); - } - - if (getTitle2Model() != null) { - box.add(new Label(ID_TITLE2, getTitle2Model())); - } else if (getTitle2PropertyName() != null) { - box.add(new Label(ID_TITLE, createLabelModel(getTitle2PropertyName(), SummaryPanelSpecificationType.F_TITLE_2))); - } else { - Label label = new Label(ID_TITLE2, " "); - label.setVisible(false); - box.add(label); - } - - if (getTitle3Model() != null) { - box.add(new Label(ID_TITLE3, getTitle3Model())); - } else if (getTitle3PropertyName() != null) { - box.add(new Label(ID_TITLE, createLabelModel(getTitle3PropertyName(), SummaryPanelSpecificationType.F_TITLE_3))); - } else { - Label label = new Label(ID_TITLE3, " "); - label.setVisible(false); - box.add(label); - } - - final IModel parentOrgModel = getParentOrgModel(); - Label parentOrgLabel = new Label(ID_ORGANIZATION, parentOrgModel); - parentOrgLabel.add(new VisibleEnableBehaviour() { - private static final long serialVersionUID = 1L; - @Override - public boolean isVisible() { - return parentOrgModel.getObject() != null; - } - }); - box.add(parentOrgLabel); - - iconBox = new WebMarkupContainer(ID_ICON_BOX); - box.add(iconBox); - - String iconAdditionalCssClass = getIconBoxAdditionalCssClass(); - if (StringUtils.isNotEmpty(iconAdditionalCssClass)) { - iconBox.add(new AttributeModifier("class", ICON_BOX_CSS_CLASS + " " + iconAdditionalCssClass)); - } - if (StringUtils.isNotEmpty(archetypePolicyAdditionalCssClass)){ - iconBox.add(AttributeModifier.append("style", "background-color: " + archetypePolicyAdditionalCssClass + ";")); - } - - Label icon = new Label(ID_ICON, ""); - - String archetypeIconCssClass = getArchetypeIconCssClass(); - if (StringUtils.isNotEmpty(archetypeIconCssClass)){ - icon.add(AttributeModifier.append("class", archetypeIconCssClass)); - icon.add(AttributeModifier.append("style", ARCHETYPE_ICON_FONT_SIZE)); - } else { - icon.add(AttributeModifier.append("class", getIconCssClass())); - } - icon.add(new VisibleEnableBehaviour() { - @Override - public boolean isVisible(){ - return getPhotoModel().getObject() == null; - } - }); - iconBox.add(icon); - NonCachingImage img = new NonCachingImage(ID_PHOTO, getPhotoModel()); - img.add(new VisibleEnableBehaviour(){ - private static final long serialVersionUID = 1L; - @Override - public boolean isVisible() { - return getPhotoModel().getObject() != null; - } - }); - iconBox.add(img); - - tagBox = new RepeatingView(ID_TAG_BOX); - List> summaryTags = getSummaryTagComponentList(); - - if (getArchetypeSummaryTag() != null){ - summaryTags.add(getArchetypeSummaryTag()); - } - summaryTags.forEach(summaryTag -> { - WebMarkupContainer summaryTagPanel = new WebMarkupContainer(tagBox.newChildId()); - summaryTagPanel.setOutputMarkupId(true); - - summaryTagPanel.add(summaryTag); - tagBox.add(summaryTagPanel); - }); - if (getTagBoxCssClass() != null) { - tagBox.add(new AttributeModifier("class", getTagBoxCssClass())); - } - tagBox.add(new VisibleBehaviour(() -> CollectionUtils.isNotEmpty(summaryTags))); - box.add(tagBox); - } - - private FlexibleLabelModel createLabelModel(QName modelPropertyName, QName configurationPropertyName) { - return createFlexibleLabelModel(modelPropertyName, getLabelConfiguration(configurationPropertyName)); - } - - private FlexibleLabelModel createFlexibleLabelModel(QName modelPropertyName, GuiFlexibleLabelType configuration) { - return new FlexibleLabelModel(getModel(), ItemName.fromQName(modelPropertyName), getPageBase(), configuration) { - private static final long serialVersionUID = 1L; - @Override - protected void addAdditionalExpressionVariables(ExpressionVariables variables) { - super.addAdditionalExpressionVariables(variables); - AbstractSummaryPanel.this.addAdditionalExpressionVariables(variables); - } - }; - } - - protected List> getSummaryTagComponentList(){ - return new ArrayList<>(); - } - - protected ObjectReferenceType getReferencedObjectToNavigate(){ - return null; - } - - private boolean isReferencedObjectNull(){ - return getReferencedObjectToNavigate() == null || StringUtils.isEmpty(getReferencedObjectToNavigate().getOid()) || - getReferencedObjectToNavigate().getType() == null; - } - - protected IModel getReferenceObjectTitleModel(){ - return null; - } - - private SummaryTag getArchetypeSummaryTag(){ - String archetypeIconCssClass = getArchetypeIconCssClass(); - String archetypeIconColor = getArchetypePolicyAdditionalCssClass(); - String archetypeLabel = getArchetypeLabel(); - if (StringUtils.isNotEmpty(archetypeLabel)){ - SummaryTag archetypeSummaryTag = new SummaryTag(ID_SUMMARY_TAG, getModel()) { - private static final long serialVersionUID = 1L; - - @Override - protected void initialize(C object) { - setIconCssClass(archetypeIconCssClass); - setLabel(createStringResource(archetypeLabel).getString()); - setColor(archetypeIconColor); - } - }; - return archetypeSummaryTag; - } - return null; - } - - protected void addAdditionalExpressionVariables(ExpressionVariables variables) { - - } - - private GuiFlexibleLabelType getLabelConfiguration(QName configurationPropertyName) { - if (configuration == null) { - return null; - } - @SuppressWarnings("unchecked") - PrismContainer subContainer = configuration.asPrismContainerValue().findContainer(configurationPropertyName); - if (subContainer == null) { - return null; - } - return subContainer.getRealValue(); - } - - protected String getTagBoxCssClass() { - return null; - } - - public Component getTag(String id) { - return tagBox.get(id); - } - - private String getArchetypePolicyAdditionalCssClass(){ - if (getModelObject() instanceof AssignmentHolderType){ - DisplayType displayType = WebComponentUtil.getArchetypePolicyDisplayType((AssignmentHolderType) getModelObject(), getPageBase()); - return WebComponentUtil.getIconColor(displayType); - } - return ""; - } - - private String getArchetypeLabel(){ - if (getModelObject() instanceof AssignmentHolderType){ - DisplayType displayType = WebComponentUtil.getArchetypePolicyDisplayType((AssignmentHolderType) getModelObject(), getPageBase()); - return displayType == null || displayType.getLabel() == null ? "" : displayType.getLabel().getOrig(); - } - return ""; - } - - private String getArchetypeIconCssClass(){ - if (getModelObject() instanceof AssignmentHolderType){ - DisplayType displayType = WebComponentUtil.getArchetypePolicyDisplayType((AssignmentHolderType) getModelObject(), getPageBase()); - return WebComponentUtil.getIconCssClass(displayType); - } - return ""; - } - - protected abstract String getIconCssClass(); - - protected abstract String getIconBoxAdditionalCssClass(); - - protected abstract String getBoxAdditionalCssClass(); - - protected QName getIdentifierPropertyName() { - return FocusType.F_NAME; - } - - protected QName getDisplayNamePropertyName() { - return ObjectType.F_NAME; - } - - protected IModel getDisplayNameModel() { - return null; - } - - protected QName getTitlePropertyName() { - return null; - } - - protected IModel getTitleModel() { - return null; - } - - protected QName getTitle2PropertyName() { - return null; - } - - protected IModel getTitle2Model() { - return null; - } - - protected QName getTitle3PropertyName() { - return null; - } - - protected IModel getTitle3Model() { - return null; - } - - protected boolean isIdentifierVisible() { - return true; - } - - protected IModel getParentOrgModel() { - GuiFlexibleLabelType config = getLabelConfiguration(SummaryPanelSpecificationType.F_ORGANIZATION); - if (config != null) { - return createFlexibleLabelModel(ObjectType.F_PARENT_ORG_REF, config); - } else { - return getDefaltParentOrgModel(); - } - } - - protected IModel getDefaltParentOrgModel() { - return new Model<>(null); - } - - protected IModel getPhotoModel() { - return new Model<>(null); - } - - protected WebMarkupContainer getSummaryBoxPanel(){ - return (WebMarkupContainer) get(ID_BOX); - } -} +/* + * Copyright (c) 2010-2017 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.web.component; + +import com.evolveum.midpoint.gui.api.component.BasePanel; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.gui.impl.model.FlexibleLabelModel; +import com.evolveum.midpoint.prism.Containerable; +import com.evolveum.midpoint.prism.PrismContainer; +import com.evolveum.midpoint.prism.path.ItemName; +import com.evolveum.midpoint.repo.common.expression.ExpressionVariables; +import com.evolveum.midpoint.web.component.util.SummaryTag; +import com.evolveum.midpoint.web.component.util.VisibleBehaviour; +import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; +import com.evolveum.midpoint.xml.ns._public.common.common_3.*; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; +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.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.image.NonCachingImage; +import org.apache.wicket.markup.repeater.RepeatingView; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.request.resource.AbstractResource; + +import javax.xml.namespace.QName; +import java.util.ArrayList; +import java.util.List; + +/** + * @author semancik + * @author mederly + */ +public abstract class AbstractSummaryPanel extends BasePanel { + private static final long serialVersionUID = 1L; + + protected static final String ID_BOX = "summaryBox"; + protected static final String ID_ICON_BOX = "summaryIconBox"; + protected static final String ID_TAG_BOX = "summaryTagBox"; + protected static final String ID_SUMMARY_TAG = "summaryTag"; + protected static final String ID_ICON = "summaryIcon"; + protected static final String ID_DISPLAY_NAME = "summaryDisplayName"; + protected static final String ID_IDENTIFIER = "summaryIdentifier"; + protected static final String ID_IDENTIFIER_PANEL = "summaryIdentifierPanel"; + protected static final String ID_NAVIGATE_TO_OBJECT_BUTTON = "navigateToObject"; + protected static final String ID_TITLE = "summaryTitle"; + protected static final String ID_TITLE2 = "summaryTitle2"; + protected static final String ID_TITLE3 = "summaryTitle3"; + + protected static final String ID_PHOTO = "summaryPhoto"; // perhaps useful only for focal objects but it was simpler to include it here + protected static final String ID_ORGANIZATION = "summaryOrganization"; // similar (requires ObjectWrapper to get parent organizations so hard to use in ObjectSummaryPanel) + + protected static final String BOX_CSS_CLASS = "col-xs-12 info-box"; + protected static final String ICON_BOX_CSS_CLASS = "info-box-icon"; + protected static final String ARCHETYPE_ICON_FONT_SIZE = "font-size: 45px !important;"; + + protected SummaryPanelSpecificationType configuration; + + protected WebMarkupContainer box; + protected RepeatingView tagBox; + protected WebMarkupContainer iconBox; + + public AbstractSummaryPanel(String id, IModel model, SummaryPanelSpecificationType configuration) { + super(id, model); + this.configuration = configuration; + setOutputMarkupId(true); + } + + @Override + protected void onInitialize() { + super.onInitialize(); + + box = new WebMarkupContainer(ID_BOX); + add(box); + + IModel archetypePolicyAdditionalCssClassModel = () -> { + String archetypePolicyAdditionalCssClass = getArchetypePolicyAdditionalCssClass(); + if (archetypePolicyAdditionalCssClass == null) { + return ""; + } + return "border-color: " + archetypePolicyAdditionalCssClass + ";"; + }; + + box.add(new AttributeModifier("class", BOX_CSS_CLASS + " " + getBoxAdditionalCssClass())); + box.add(AttributeModifier.append("style", archetypePolicyAdditionalCssClassModel)); + + if (getDisplayNameModel() != null) { + box.add(new Label(ID_DISPLAY_NAME, getDisplayNameModel())); + } else if (getDisplayNamePropertyName() != null) { + box.add(new Label(ID_DISPLAY_NAME, createLabelModel(getDisplayNamePropertyName(), SummaryPanelSpecificationType.F_DISPLAY_NAME))); + } else { + box.add(new Label(ID_DISPLAY_NAME, " ")); + } + + WebMarkupContainer identifierPanel = new WebMarkupContainer(ID_IDENTIFIER_PANEL); + identifierPanel.add(new Label(ID_IDENTIFIER, createLabelModel(getIdentifierPropertyName(), SummaryPanelSpecificationType.F_IDENTIFIER))); + identifierPanel.add(new VisibleEnableBehaviour() { + private static final long serialVersionUID = 1L; + + @Override + public boolean isVisible() { + return isIdentifierVisible(); + } + }); + box.add(identifierPanel); + + AjaxButton navigateToObject = new AjaxButton(ID_NAVIGATE_TO_OBJECT_BUTTON) { + @Override + public void onClick(AjaxRequestTarget ajaxRequestTarget) { + ObjectReferenceType ort = getReferencedObjectToNavigate(); + WebComponentUtil.dispatchToObjectDetailsPage(ort, AbstractSummaryPanel.this, false); + } + }; + navigateToObject.add(AttributeAppender.append("title", getReferenceObjectTitleModel())); + navigateToObject.add(new VisibleBehaviour(() -> { + ObjectReferenceType ort = getReferencedObjectToNavigate(); + Class refType = !isReferencedObjectNull() ? + WebComponentUtil.qnameToClass(AbstractSummaryPanel.this.getPageBase().getPrismContext(), ort.getType()) : null; + return ort != null && refType != null && + WebComponentUtil.getObjectDetailsPage(refType) != null; + + })); + navigateToObject.setOutputMarkupId(true); + box.add(navigateToObject); + + if (getTitleModel() != null) { + box.add(new Label(ID_TITLE, getTitleModel())); + } else if (getTitlePropertyName() != null) { + box.add(new Label(ID_TITLE, createLabelModel(getTitlePropertyName(), SummaryPanelSpecificationType.F_TITLE_1))); + } else { + box.add(new Label(ID_TITLE, " ")); + } + + if (getTitle2Model() != null) { + box.add(new Label(ID_TITLE2, getTitle2Model())); + } else if (getTitle2PropertyName() != null) { + box.add(new Label(ID_TITLE, createLabelModel(getTitle2PropertyName(), SummaryPanelSpecificationType.F_TITLE_2))); + } else { + Label label = new Label(ID_TITLE2, " "); + label.setVisible(false); + box.add(label); + } + + if (getTitle3Model() != null) { + box.add(new Label(ID_TITLE3, getTitle3Model())); + } else if (getTitle3PropertyName() != null) { + box.add(new Label(ID_TITLE, createLabelModel(getTitle3PropertyName(), SummaryPanelSpecificationType.F_TITLE_3))); + } else { + Label label = new Label(ID_TITLE3, " "); + label.setVisible(false); + box.add(label); + } + + final IModel parentOrgModel = getParentOrgModel(); + Label parentOrgLabel = new Label(ID_ORGANIZATION, parentOrgModel); + parentOrgLabel.add(new VisibleEnableBehaviour() { + private static final long serialVersionUID = 1L; + @Override + public boolean isVisible() { + return parentOrgModel.getObject() != null; + } + }); + box.add(parentOrgLabel); + + iconBox = new WebMarkupContainer(ID_ICON_BOX); + box.add(iconBox); + + String iconAdditionalCssClass = getIconBoxAdditionalCssClass(); + if (StringUtils.isNotEmpty(iconAdditionalCssClass)) { + iconBox.add(new AttributeModifier("class", ICON_BOX_CSS_CLASS + " " + iconAdditionalCssClass)); + } + + iconBox.add(AttributeModifier.append("style", createArchetypeBackgroundModel())); + + Label icon = new Label(ID_ICON, ""); + + String archetypeIconCssClass = getArchetypeIconCssClass(); + if (StringUtils.isNotEmpty(archetypeIconCssClass)){ + icon.add(AttributeModifier.append("class", archetypeIconCssClass)); + icon.add(AttributeModifier.append("style", ARCHETYPE_ICON_FONT_SIZE)); + } else { + icon.add(AttributeModifier.append("class", getIconCssClass())); + } + icon.add(new VisibleEnableBehaviour() { + @Override + public boolean isVisible(){ + return getPhotoModel().getObject() == null; + } + }); + iconBox.add(icon); + NonCachingImage img = new NonCachingImage(ID_PHOTO, getPhotoModel()); + img.add(new VisibleEnableBehaviour(){ + private static final long serialVersionUID = 1L; + @Override + public boolean isVisible() { + return getPhotoModel().getObject() != null; + } + }); + iconBox.add(img); + + tagBox = new RepeatingView(ID_TAG_BOX); + List> summaryTags = getSummaryTagComponentList(); + + if (getArchetypeSummaryTag() != null){ + summaryTags.add(getArchetypeSummaryTag()); + } + summaryTags.forEach(summaryTag -> { + WebMarkupContainer summaryTagPanel = new WebMarkupContainer(tagBox.newChildId()); + summaryTagPanel.setOutputMarkupId(true); + + summaryTagPanel.add(summaryTag); + tagBox.add(summaryTagPanel); + }); + if (getTagBoxCssClass() != null) { + tagBox.add(new AttributeModifier("class", getTagBoxCssClass())); + } + tagBox.add(new VisibleBehaviour(() -> CollectionUtils.isNotEmpty(summaryTags))); + box.add(tagBox); + } + + private IModel createArchetypeBackgroundModel() { + return () -> { + + String archetypePolicyAdditionalCssClass = getArchetypePolicyAdditionalCssClass(); + if (archetypePolicyAdditionalCssClass == null) { + return ""; + } + return "background-color: " + archetypePolicyAdditionalCssClass + ";"; + }; + } + private FlexibleLabelModel createLabelModel(QName modelPropertyName, QName configurationPropertyName) { + return createFlexibleLabelModel(modelPropertyName, getLabelConfiguration(configurationPropertyName)); + } + + private FlexibleLabelModel createFlexibleLabelModel(QName modelPropertyName, GuiFlexibleLabelType configuration) { + return new FlexibleLabelModel(getModel(), ItemName.fromQName(modelPropertyName), getPageBase(), configuration) { + private static final long serialVersionUID = 1L; + @Override + protected void addAdditionalExpressionVariables(ExpressionVariables variables) { + super.addAdditionalExpressionVariables(variables); + AbstractSummaryPanel.this.addAdditionalExpressionVariables(variables); + } + }; + } + + protected List> getSummaryTagComponentList(){ + return new ArrayList<>(); + } + + protected ObjectReferenceType getReferencedObjectToNavigate(){ + return null; + } + + private boolean isReferencedObjectNull(){ + return getReferencedObjectToNavigate() == null || StringUtils.isEmpty(getReferencedObjectToNavigate().getOid()) || + getReferencedObjectToNavigate().getType() == null; + } + + protected IModel getReferenceObjectTitleModel(){ + return null; + } + + private SummaryTag getArchetypeSummaryTag(){ + String archetypeIconCssClass = getArchetypeIconCssClass(); + String archetypeIconColor = getArchetypePolicyAdditionalCssClass(); + String archetypeLabel = getArchetypeLabel(); + if (StringUtils.isNotEmpty(archetypeLabel)){ + SummaryTag archetypeSummaryTag = new SummaryTag(ID_SUMMARY_TAG, getModel()) { + private static final long serialVersionUID = 1L; + + @Override + protected void initialize(C object) { + setIconCssClass(archetypeIconCssClass); + setLabel(createStringResource(archetypeLabel).getString()); + setColor(archetypeIconColor); + } + + @Override + public String getIconCssClass() { + return getArchetypeIconCssClass(); + } + + @Override + public String getColor() { + return getArchetypePolicyAdditionalCssClass(); + } + + @Override + public String getLabel() { + return getArchetypeLabel(); + } + }; + return archetypeSummaryTag; + } + return null; + } + + protected void addAdditionalExpressionVariables(ExpressionVariables variables) { + + } + + private GuiFlexibleLabelType getLabelConfiguration(QName configurationPropertyName) { + if (configuration == null) { + return null; + } + @SuppressWarnings("unchecked") + PrismContainer subContainer = configuration.asPrismContainerValue().findContainer(configurationPropertyName); + if (subContainer == null) { + return null; + } + return subContainer.getRealValue(); + } + + protected String getTagBoxCssClass() { + return null; + } + + public Component getTag(String id) { + return tagBox.get(id); + } + + private String getArchetypePolicyAdditionalCssClass(){ + if (getModelObject() instanceof AssignmentHolderType){ + DisplayType displayType = WebComponentUtil.getArchetypePolicyDisplayType((AssignmentHolderType) getModelObject(), getPageBase()); + return WebComponentUtil.getIconColor(displayType); + } + return ""; + } + + private String getArchetypeLabel(){ + if (getModelObject() instanceof AssignmentHolderType){ + DisplayType displayType = WebComponentUtil.getArchetypePolicyDisplayType((AssignmentHolderType) getModelObject(), getPageBase()); + return displayType == null || displayType.getLabel() == null ? "" : displayType.getLabel().getOrig(); + } + return ""; + } + + private String getArchetypeIconCssClass(){ + if (getModelObject() instanceof AssignmentHolderType){ + DisplayType displayType = WebComponentUtil.getArchetypePolicyDisplayType((AssignmentHolderType) getModelObject(), getPageBase()); + return WebComponentUtil.getIconCssClass(displayType); + } + return ""; + } + + protected abstract String getIconCssClass(); + + protected abstract String getIconBoxAdditionalCssClass(); + + protected abstract String getBoxAdditionalCssClass(); + + protected QName getIdentifierPropertyName() { + return FocusType.F_NAME; + } + + protected QName getDisplayNamePropertyName() { + return ObjectType.F_NAME; + } + + protected IModel getDisplayNameModel() { + return null; + } + + protected QName getTitlePropertyName() { + return null; + } + + protected IModel getTitleModel() { + return null; + } + + protected QName getTitle2PropertyName() { + return null; + } + + protected IModel getTitle2Model() { + return null; + } + + protected QName getTitle3PropertyName() { + return null; + } + + protected IModel getTitle3Model() { + return null; + } + + protected boolean isIdentifierVisible() { + return true; + } + + protected IModel getParentOrgModel() { + GuiFlexibleLabelType config = getLabelConfiguration(SummaryPanelSpecificationType.F_ORGANIZATION); + if (config != null) { + return createFlexibleLabelModel(ObjectType.F_PARENT_ORG_REF, config); + } else { + return getDefaltParentOrgModel(); + } + } + + protected IModel getDefaltParentOrgModel() { + return new Model<>(null); + } + + protected IModel getPhotoModel() { + return new Model<>(null); + } + + protected WebMarkupContainer getSummaryBoxPanel(){ + return (WebMarkupContainer) get(ID_BOX); + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/FocusSummaryPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/FocusSummaryPanel.java index 34899d17a2c..177f797bb91 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/FocusSummaryPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/FocusSummaryPanel.java @@ -1,190 +1,190 @@ -/* - * Copyright (c) 2015-2019 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.web.component; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.wicket.MarkupContainer; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.Model; -import org.apache.wicket.request.resource.AbstractResource; -import org.apache.wicket.request.resource.ByteArrayResource; - -import com.evolveum.midpoint.gui.api.GuiStyleConstants; -import com.evolveum.midpoint.gui.api.model.ReadOnlyModel; -import com.evolveum.midpoint.gui.api.prism.PrismObjectWrapper; -import com.evolveum.midpoint.gui.api.util.ModelServiceLocator; -import com.evolveum.midpoint.gui.api.util.WebComponentUtil; -import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.repo.common.expression.ExpressionVariables; -import com.evolveum.midpoint.schema.constants.ExpressionConstants; -import com.evolveum.midpoint.schema.constants.RelationTypes; -import com.evolveum.midpoint.schema.util.FocusTypeUtil; -import com.evolveum.midpoint.web.component.util.SummaryTag; -import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; -import com.evolveum.midpoint.web.page.admin.roles.component.RoleSummaryPanel; -import com.evolveum.midpoint.web.page.admin.users.component.OrgSummaryPanel; -import com.evolveum.midpoint.web.page.admin.users.component.ServiceSummaryPanel; -import com.evolveum.midpoint.web.page.admin.users.component.UserSummaryPanel; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationStatusType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ServiceType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; - -/** - * @author semancik - * - */ -public abstract class FocusSummaryPanel extends ObjectSummaryPanel { - private static final long serialVersionUID = 1L; - - private static final String DOT_CLASS = FocusSummaryPanel.class.getName() + "."; - private static final String OPERATION_LOAD_PARENT_ORGS = DOT_CLASS + "activationTag"; - - - public FocusSummaryPanel(String id, Class type, final IModel model, ModelServiceLocator serviceLocator) { - super(id, type, model, serviceLocator); - } - - @Override - protected List> getSummaryTagComponentList(){ - List> summaryTagList = new ArrayList<>(); - - SummaryTag tagActivation = new SummaryTag(ID_SUMMARY_TAG, getModel()) { - private static final long serialVersionUID = 1L; - - @Override - protected void initialize(O object) { - ActivationType activation = null; -// O object = object.asObjectable(); - if (object instanceof FocusType) { - activation = ((FocusType)object).getActivation(); - } - if (activation == null) { - setIconCssClass(GuiStyleConstants.CLASS_ICON_ACTIVATION_ACTIVE); - setLabel(getString("ActivationStatusType.ENABLED")); - - } else if (activation.getEffectiveStatus() == ActivationStatusType.DISABLED) { - setIconCssClass(GuiStyleConstants.CLASS_ICON_ACTIVATION_INACTIVE); - setLabel(getString("ActivationStatusType.DISABLED")); - setCssClass(GuiStyleConstants.CLASS_ICON_STYLE_DISABLED); - - } else if (activation.getEffectiveStatus() == ActivationStatusType.ARCHIVED) { - setIconCssClass(GuiStyleConstants.CLASS_ICON_ACTIVATION_INACTIVE); - setLabel(getString("ActivationStatusType.ARCHIVED")); - setCssClass(GuiStyleConstants.CLASS_ICON_STYLE_ARCHIVED); - - } else { - setIconCssClass(GuiStyleConstants.CLASS_ICON_ACTIVATION_ACTIVE); - setLabel(getString("ActivationStatusType.ENABLED")); - } - } - }; - tagActivation.add(new VisibleEnableBehaviour() { - private static final long serialVersionUID = 1L; - - @Override - public boolean isVisible() { - return isActivationVisible(); - } - }); - summaryTagList.add(tagActivation); - return summaryTagList; - } - - @Override - protected IModel getDefaltParentOrgModel() { - return new ReadOnlyModel(() -> { - O focusObject = FocusSummaryPanel.this.getModel().getObject(); - List parentOrgs = focusObject != null ? WebComponentUtil.loadReferencedObjectList(focusObject.getParentOrgRef(), - OPERATION_LOAD_PARENT_ORGS, FocusSummaryPanel.this.getPageBase()) : null; - if (parentOrgs == null || parentOrgs.isEmpty()) { - return ""; - } - // Kinda hack now .. "functional" orgType always has preference - // this whole thing should be driven by an expression later on - for (OrgType orgType : parentOrgs) { - if (FocusTypeUtil.determineSubTypes(orgType).contains("functional")) { - return WebComponentUtil.getDisplayNameOrName(orgType.asPrismObject()); - } - } - //search for manager org at first - for (ObjectReferenceType orgRef : focusObject.getParentOrgRef()) { - if (orgRef.getRelation() != null && RelationTypes.MANAGER.equals(orgRef.getRelation())) { - for (OrgType orgType : parentOrgs){ - if (orgType.getOid().equals(orgRef.getOid())){ - return WebComponentUtil.getDisplayNameOrName(orgType.asPrismObject()); - } - } - } - } - // Just use the first one as a fallback - return WebComponentUtil.getDisplayNameOrName(parentOrgs.iterator().next().asPrismObject()); - }); - } - - @Override - protected void addAdditionalExpressionVariables(ExpressionVariables variables) { - List parentOrgs = new ArrayList<>(); - for (ObjectReferenceType parentOrgRef : getModelObject().getParentOrgRef()) { - if (parentOrgRef != null && parentOrgRef.asReferenceValue().getObject() != null) { - parentOrgs.add((OrgType) parentOrgRef.asReferenceValue().getObject().asObjectable()); - } - } - variables.putList(ExpressionConstants.VAR_ORGS, parentOrgs); - } - - @Override - protected IModel getPhotoModel() { - return new IModel() { - private static final long serialVersionUID = 1L; - - @Override - public AbstractResource getObject() { - byte[] jpegPhoto = null; - O object = getModel().getObject(); - if (object == null){ - return null; - } - if (object instanceof FocusType) { - jpegPhoto = ((FocusType) object).getJpegPhoto(); - } - if (jpegPhoto == null) { - return null; - } else { - return new ByteArrayResource("image/jpeg", jpegPhoto); - } - } - }; - } - - protected boolean isActivationVisible() { - return true; - } - - public static void addSummaryPanel(MarkupContainer parentComponent, PrismObject focus, PrismObjectWrapper focusWrapper, String id, ModelServiceLocator serviceLocator) { - if (focus.getCompileTimeClass().equals(UserType.class)) { - parentComponent.add(new UserSummaryPanel(id, - Model.of((UserType)focus.asObjectable()), serviceLocator)); - } else if (focus.getCompileTimeClass().equals(RoleType.class)) { - parentComponent.add(new RoleSummaryPanel(id, - Model.of((RoleType)focus.asObjectable()), serviceLocator)); - } else if (focus.getCompileTimeClass().equals(OrgType.class)) { - parentComponent.add(new OrgSummaryPanel(id, - Model.of((OrgType)focus.asObjectable()), serviceLocator)); - } else if (focus.getCompileTimeClass().equals(ServiceType.class)) { - parentComponent.add(new ServiceSummaryPanel(id, - Model.of((ServiceType)focus.asObjectable()), serviceLocator)); - } - } -} +/* + * Copyright (c) 2015-2019 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.web.component; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.wicket.MarkupContainer; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.request.resource.AbstractResource; +import org.apache.wicket.request.resource.ByteArrayResource; + +import com.evolveum.midpoint.gui.api.GuiStyleConstants; +import com.evolveum.midpoint.gui.api.model.ReadOnlyModel; +import com.evolveum.midpoint.gui.api.prism.PrismObjectWrapper; +import com.evolveum.midpoint.gui.api.util.ModelServiceLocator; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.repo.common.expression.ExpressionVariables; +import com.evolveum.midpoint.schema.constants.ExpressionConstants; +import com.evolveum.midpoint.schema.constants.RelationTypes; +import com.evolveum.midpoint.schema.util.FocusTypeUtil; +import com.evolveum.midpoint.web.component.util.SummaryTag; +import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; +import com.evolveum.midpoint.web.page.admin.roles.component.RoleSummaryPanel; +import com.evolveum.midpoint.web.page.admin.users.component.OrgSummaryPanel; +import com.evolveum.midpoint.web.page.admin.users.component.ServiceSummaryPanel; +import com.evolveum.midpoint.web.page.admin.users.component.UserSummaryPanel; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationStatusType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ServiceType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; + +/** + * @author semancik + * + */ +public abstract class FocusSummaryPanel extends ObjectSummaryPanel { + private static final long serialVersionUID = 1L; + + private static final String DOT_CLASS = FocusSummaryPanel.class.getName() + "."; + private static final String OPERATION_LOAD_PARENT_ORGS = DOT_CLASS + "activationTag"; + + + public FocusSummaryPanel(String id, Class type, final IModel model, ModelServiceLocator serviceLocator) { + super(id, type, model, serviceLocator); + } + + @Override + protected List> getSummaryTagComponentList(){ + List> summaryTagList = new ArrayList<>(); + + SummaryTag tagActivation = new SummaryTag(ID_SUMMARY_TAG, getModel()) { + private static final long serialVersionUID = 1L; + + @Override + protected void initialize(O object) { + ActivationType activation = null; +// O object = object.asObjectable(); + if (object instanceof FocusType) { + activation = ((FocusType)object).getActivation(); + } + if (activation == null) { + setIconCssClass(GuiStyleConstants.CLASS_ICON_ACTIVATION_ACTIVE); + setLabel(getString("ActivationStatusType.ENABLED")); + + } else if (activation.getEffectiveStatus() == ActivationStatusType.DISABLED) { + setIconCssClass(GuiStyleConstants.CLASS_ICON_ACTIVATION_INACTIVE); + setLabel(getString("ActivationStatusType.DISABLED")); + setCssClass(GuiStyleConstants.CLASS_ICON_STYLE_DISABLED); + + } else if (activation.getEffectiveStatus() == ActivationStatusType.ARCHIVED) { + setIconCssClass(GuiStyleConstants.CLASS_ICON_ACTIVATION_INACTIVE); + setLabel(getString("ActivationStatusType.ARCHIVED")); + setCssClass(GuiStyleConstants.CLASS_ICON_STYLE_ARCHIVED); + + } else { + setIconCssClass(GuiStyleConstants.CLASS_ICON_ACTIVATION_ACTIVE); + setLabel(getString("ActivationStatusType.ENABLED")); + } + } + }; + tagActivation.add(new VisibleEnableBehaviour() { + private static final long serialVersionUID = 1L; + + @Override + public boolean isVisible() { + return isActivationVisible(); + } + }); + summaryTagList.add(tagActivation); + return summaryTagList; + } + + @Override + protected IModel getDefaltParentOrgModel() { + return new ReadOnlyModel<>(() -> { + O focusObject = FocusSummaryPanel.this.getModel().getObject(); + List parentOrgs = focusObject != null ? WebComponentUtil.loadReferencedObjectList(focusObject.getParentOrgRef(), + OPERATION_LOAD_PARENT_ORGS, FocusSummaryPanel.this.getPageBase()) : null; + if (parentOrgs == null || parentOrgs.isEmpty()) { + return ""; + } + // Kinda hack now .. "functional" orgType always has preference + // this whole thing should be driven by an expression later on + for (OrgType orgType : parentOrgs) { + if (FocusTypeUtil.determineSubTypes(orgType).contains("functional")) { + return WebComponentUtil.getDisplayNameOrName(orgType.asPrismObject()); + } + } + //search for manager org at first + for (ObjectReferenceType orgRef : focusObject.getParentOrgRef()) { + if (orgRef.getRelation() != null && RelationTypes.MANAGER.equals(orgRef.getRelation())) { + for (OrgType orgType : parentOrgs){ + if (orgType.getOid().equals(orgRef.getOid())){ + return WebComponentUtil.getDisplayNameOrName(orgType.asPrismObject()); + } + } + } + } + // Just use the first one as a fallback + return WebComponentUtil.getDisplayNameOrName(parentOrgs.iterator().next().asPrismObject()); + }); + } + + @Override + protected void addAdditionalExpressionVariables(ExpressionVariables variables) { + List parentOrgs = new ArrayList<>(); + for (ObjectReferenceType parentOrgRef : getModelObject().getParentOrgRef()) { + if (parentOrgRef != null && parentOrgRef.asReferenceValue().getObject() != null) { + parentOrgs.add((OrgType) parentOrgRef.asReferenceValue().getObject().asObjectable()); + } + } + variables.putList(ExpressionConstants.VAR_ORGS, parentOrgs); + } + + @Override + protected IModel getPhotoModel() { + return new IModel() { + private static final long serialVersionUID = 1L; + + @Override + public AbstractResource getObject() { + byte[] jpegPhoto = null; + O object = getModel().getObject(); + if (object == null){ + return null; + } + if (object instanceof FocusType) { + jpegPhoto = ((FocusType) object).getJpegPhoto(); + } + if (jpegPhoto == null) { + return null; + } else { + return new ByteArrayResource("image/jpeg", jpegPhoto); + } + } + }; + } + + protected boolean isActivationVisible() { + return true; + } + + public static void addSummaryPanel(MarkupContainer parentComponent, PrismObject focus, PrismObjectWrapper focusWrapper, String id, ModelServiceLocator serviceLocator) { + if (focus.getCompileTimeClass().equals(UserType.class)) { + parentComponent.add(new UserSummaryPanel(id, + Model.of((UserType)focus.asObjectable()), serviceLocator)); + } else if (focus.getCompileTimeClass().equals(RoleType.class)) { + parentComponent.add(new RoleSummaryPanel(id, + Model.of((RoleType)focus.asObjectable()), serviceLocator)); + } else if (focus.getCompileTimeClass().equals(OrgType.class)) { + parentComponent.add(new OrgSummaryPanel(id, + Model.of((OrgType)focus.asObjectable()), serviceLocator)); + } else if (focus.getCompileTimeClass().equals(ServiceType.class)) { + parentComponent.add(new ServiceSummaryPanel(id, + Model.of((ServiceType)focus.asObjectable()), serviceLocator)); + } + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/input/QueryTextAreaPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/input/QueryTextAreaPanel.java index e811f464d87..ff8b36f4fef 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/input/QueryTextAreaPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/input/QueryTextAreaPanel.java @@ -62,6 +62,10 @@ public String getObject() { @Override public void setObject(String object) { + if (object == null) { + model.setObject(null); + return; + } try { model.setObject(((PageBase)getPage()).getPrismContext() .parserFor(object).xml().parseRealValue(QueryType.class)); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/AssignmentHolderTypeAssignmentsTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/AssignmentHolderTypeAssignmentsTabPanel.java index 3d0abcc8a31..d01338b0483 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/AssignmentHolderTypeAssignmentsTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/AssignmentHolderTypeAssignmentsTabPanel.java @@ -6,6 +6,9 @@ */ package com.evolveum.midpoint.web.component.objectdetails; +import com.evolveum.midpoint.web.page.admin.server.RefreshableTabPanel; + +import org.apache.wicket.Component; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.model.Model; @@ -17,10 +20,13 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentHolderType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; +import java.util.Collection; +import java.util.Collections; + /** * @author semancik */ -public class AssignmentHolderTypeAssignmentsTabPanel extends AbstractObjectTabPanel { +public class AssignmentHolderTypeAssignmentsTabPanel extends AbstractObjectTabPanel implements RefreshableTabPanel { private static final long serialVersionUID = 1L; private static final String ID_ASSIGNMENTS = "assignmentsContainer"; @@ -62,4 +68,8 @@ protected boolean isReadonly(){ return false; } + @Override + public Collection getComponentsToUpdate() { + return Collections.singleton(this); + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/AssignmentHolderTypeDetailsTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/AssignmentHolderTypeDetailsTabPanel.java index 7754500543f..047079facbb 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/AssignmentHolderTypeDetailsTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/AssignmentHolderTypeDetailsTabPanel.java @@ -6,28 +6,29 @@ */ package com.evolveum.midpoint.web.component.objectdetails; +import java.util.Collection; +import java.util.Collections; + +import org.apache.wicket.Component; +import org.apache.wicket.markup.html.panel.Panel; + import com.evolveum.midpoint.gui.api.model.LoadableModel; import com.evolveum.midpoint.gui.api.prism.PrismObjectWrapper; -import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; import com.evolveum.midpoint.gui.impl.prism.ItemPanelSettingsBuilder; import com.evolveum.midpoint.prism.path.ItemPath; -import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.web.component.form.Form; import com.evolveum.midpoint.web.component.prism.ItemVisibility; import com.evolveum.midpoint.web.model.PrismContainerWrapperModel; +import com.evolveum.midpoint.web.page.admin.server.RefreshableTabPanel; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; -import org.apache.wicket.markup.html.panel.Panel; - -import java.util.ArrayList; -import java.util.List; /** * @author semancik */ -public class AssignmentHolderTypeDetailsTabPanel extends AbstractObjectTabPanel { +public class AssignmentHolderTypeDetailsTabPanel extends AbstractObjectTabPanel implements RefreshableTabPanel { private static final long serialVersionUID = 1L; private static final String ID_MAIN_PANEL = "main"; @@ -36,7 +37,7 @@ public class AssignmentHolderTypeDetailsTabPanel> mainForm, LoadableModel> focusWrapperModel) { super(id, mainForm, focusWrapperModel); @@ -69,4 +70,9 @@ private void initLayout() { } } + @Override + public Collection getComponentsToUpdate() { + getObjectWrapperModel().reset(); + return Collections.singleton(this); + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminObjectDetails.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminObjectDetails.java index d0f28488763..35ae48728f2 100755 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminObjectDetails.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminObjectDetails.java @@ -14,7 +14,6 @@ import com.evolveum.midpoint.gui.api.component.tabs.PanelTab; import com.evolveum.midpoint.gui.api.prism.PrismContainerWrapper; import com.evolveum.midpoint.gui.api.util.WebPrismUtil; -import com.evolveum.midpoint.model.api.AssignmentCandidatesSpecification; import com.evolveum.midpoint.model.api.context.ModelContext; import com.evolveum.midpoint.prism.PrismContainerValue; import com.evolveum.midpoint.prism.query.ObjectFilter; @@ -29,10 +28,12 @@ import com.evolveum.midpoint.web.component.util.VisibleBehaviour; import com.evolveum.midpoint.web.page.admin.configuration.PageSystemConfiguration; import com.evolveum.midpoint.web.page.admin.server.OperationalButtonsPanel; +import com.evolveum.midpoint.web.page.admin.server.RefreshableTabPanel; import com.evolveum.midpoint.web.security.util.SecurityUtils; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.apache.commons.lang.StringUtils; +import org.apache.wicket.Component; import org.apache.wicket.Page; import org.apache.wicket.RestartResponseException; import org.apache.wicket.Session; @@ -40,7 +41,6 @@ import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior; import org.apache.wicket.behavior.AttributeAppender; -import org.apache.wicket.behavior.Behavior; import org.apache.wicket.extensions.markup.html.tabs.ITab; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.repeater.RepeatingView; @@ -246,7 +246,6 @@ public void initialize(final PrismObject objectToEdit, boolean isNewObject) { public void initialize(final PrismObject objectToEdit, boolean isNewObject, boolean isReadonly) { initializeModel(objectToEdit, isNewObject, isReadonly); -// initLayout(); } protected void initializeModel(final PrismObject objectToEdit, boolean isNewObject, boolean isReadonly) { @@ -315,17 +314,32 @@ protected void initLayout() { add(progressPanel); } - protected abstract ObjectSummaryPanel createSummaryPanel(); + protected abstract ObjectSummaryPanel createSummaryPanel(IModel summaryModel); protected void initLayoutSummaryPanel() { - ObjectSummaryPanel summaryPanel = createSummaryPanel(); + ObjectSummaryPanel summaryPanel = createSummaryPanel(loadModelForSummaryPanel()); summaryPanel.setOutputMarkupId(true); setSummaryPanelVisibility(summaryPanel); add(summaryPanel); } + private IModel loadModelForSummaryPanel() { + return new LoadableModel(true) { + + @Override + protected O load() { + PrismObjectWrapper wrapper = getObjectWrapper(); + if (wrapper == null) { + return null; + } + + return wrapper.getObject().asObjectable(); + } + }; + } + protected void setSummaryPanelVisibility(ObjectSummaryPanel summaryPanel){ summaryPanel.add(new VisibleEnableBehaviour() { private static final long serialVersionUID = 1L; @@ -374,7 +388,18 @@ public boolean isRefreshEnabled() { } public void refresh(AjaxRequestTarget target) { + getObjectModel().reset(); + target.add(getSummaryPanel()); + target.add(getOperationalButtonsPanel()); + target.add(getFeedbackPanel()); + for (Component component : getMainPanel().getTabbedPanel()) { + if (component instanceof RefreshableTabPanel) { + for (Component c : ((RefreshableTabPanel) component).getComponentsToUpdate()) { + target.add(c); + } + } + } } public int getRefreshInterval() { @@ -440,6 +465,7 @@ protected void addPerformed(AjaxRequestTarget target, List newAssignmentsList) { LOGGER.error("Cannot find assignment wrapper: {}", e.getMessage()); } target.add(PageAdminObjectDetails.this.getFeedbackPanel()); + refresh(target); } @Override diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/archetype/PageArchetype.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/archetype/PageArchetype.java index bf1ba0ac656..f20e5d3a575 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/archetype/PageArchetype.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/archetype/PageArchetype.java @@ -18,7 +18,6 @@ import com.evolveum.midpoint.gui.api.ComponentConstants; import com.evolveum.midpoint.gui.api.component.tabs.PanelTab; -import com.evolveum.midpoint.gui.impl.factory.ItemRealValueModel; import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.ContainerOfSystemConfigurationPanel; import com.evolveum.midpoint.gui.impl.prism.PrismObjectValueWrapper; import com.evolveum.midpoint.prism.PrismObject; @@ -83,9 +82,8 @@ protected ArchetypeType createNewObject() { } @Override - protected ObjectSummaryPanel createSummaryPanel() { - IModel> valueModel = new PropertyModel<>(getObjectModel(), "value"); - return new ArchetypeSummaryPanel(ID_SUMMARY_PANEL, new ItemRealValueModel<>(valueModel), this); + protected ObjectSummaryPanel createSummaryPanel(IModel summaryModel) { + return new ArchetypeSummaryPanel(ID_SUMMARY_PANEL, summaryModel, this); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/PageCase.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/PageCase.java index 27c782a6cfd..82ec17ef05d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/PageCase.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/PageCase.java @@ -1,245 +1,243 @@ -/* - * Copyright (c) 2010-2019 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.web.page.admin.cases; - -import java.util.List; - -import com.evolveum.midpoint.gui.api.component.tabs.PanelTab; -import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; -import com.evolveum.midpoint.prism.query.ObjectQuery; -import com.evolveum.midpoint.prism.query.QueryFactory; -import com.evolveum.midpoint.schema.util.CaseTypeUtil; -import com.evolveum.midpoint.xml.ns._public.common.common_3.*; -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.apache.wicket.model.Model; -import org.apache.wicket.request.mapper.parameter.PageParameters; - -import com.evolveum.midpoint.gui.api.ComponentConstants; -import com.evolveum.midpoint.gui.api.component.tabs.CountablePanelTab; -import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.schema.result.OperationResult; -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.application.AuthorizationAction; -import com.evolveum.midpoint.web.application.PageDescriptor; -import com.evolveum.midpoint.web.component.ObjectSummaryPanel; -import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectMainPanel; -import com.evolveum.midpoint.web.component.objectdetails.AssignmentHolderTypeMainPanel; -import com.evolveum.midpoint.web.page.admin.PageAdminObjectDetails; -import com.evolveum.midpoint.web.util.OnePageParameterEncoder; - -@PageDescriptor(url = "/admin/case", encoder = OnePageParameterEncoder.class, action = { - @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_CASES_ALL_URL, - label = "PageAdminCases.auth.casesAll.label", - description = "PageAdminCases.auth.casesAll.description"), - @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_CASE_URL, - label = "PageCase.auth.case.label", - description = "PageCase.auth.case.description")}) -public class PageCase extends PageAdminObjectDetails { - private static final long serialVersionUID = 1L; - - private static final Trace LOGGER = TraceManager.getTrace(PageCase.class); - private static final String DOT_CLASS = PageCase.class.getName() + "."; - private static final String OPERATION_LOAD_CASE = DOT_CLASS + "loadCase"; - - private static final String ID_SUMMARY_PANEL = "summaryPanel"; - - public PageCase() { - this(null, true); - } - - public PageCase(PrismObject unitToEdit, boolean isNewObject) { - initialize(unitToEdit, isNewObject, true); - } - - public PageCase(PageParameters parameters) { - getPageParameters().overwriteWith(parameters); - initialize(null, true, true); - } - - - @Override - protected AbstractObjectMainPanel createMainPanel(String id) { - return new AssignmentHolderTypeMainPanel(id, getObjectModel(), this) { - - private static final long serialVersionUID = 1L; - - @Override - protected List createTabs(final PageAdminObjectDetails parentPage) { - List tabs = super.createTabs(parentPage); - - if (matchCaseType(SystemObjectsType.ARCHETYPE_APPROVAL_CASE) - && CaseTypeUtil.approvalSchemaExists(getObject() != null ? getObject().asObjectable() : null)) { - tabs.add(0, - new PanelTab(parentPage.createStringResource("PageCase.approvalTab"), - getTabVisibility(ComponentConstants.UI_CASE_TAB_APPROVAL_URL, true, parentPage)) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer createPanel(String panelId) { - return new ApprovalCaseTabPanel(panelId, getMainForm(), getObjectModel(), parentPage); - } - }); - } else if (matchCaseType(SystemObjectsType.ARCHETYPE_OPERATION_REQUEST)) { - tabs.add(0, - new PanelTab(parentPage.createStringResource("PageCase.operationRequestTab"), - getTabVisibility(ComponentConstants.UI_CASE_TAB_APPROVAL_URL, true, parentPage)) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer createPanel(String panelId) { - return new OperationRequestCaseTabPanel(panelId, getMainForm(), getObjectModel(), parentPage); - } - - }); - } else if (matchCaseType(SystemObjectsType.ARCHETYPE_MANUAL_CASE)) { - //todo manual case tab - } - if (!matchCaseType(SystemObjectsType.ARCHETYPE_OPERATION_REQUEST)) { - - tabs.add( - new CountablePanelTab(parentPage.createStringResource("PageCase.workitemsTab"), - getTabVisibility(ComponentConstants.UI_CASE_TAB_WORKITEMS_URL, false, parentPage)) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer createPanel(String panelId) { - return new CaseWorkitemsTabPanel(panelId, getMainForm(), getObjectModel(), parentPage); - } - - @Override - public String getCount() { - return Integer.toString(countWorkItems()); - } - }); - } - if (matchCaseType(SystemObjectsType.ARCHETYPE_OPERATION_REQUEST)){ - tabs.add( - new CountablePanelTab(parentPage.createStringResource("PageCase.childCasesTab"), - getTabVisibility(ComponentConstants.UI_CASE_TAB_CHILD_CASES_URL, false, parentPage)) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer createPanel(String panelId) { - return new ChildCasesTabPanel(panelId, getMainForm(), getObjectModel()); - } - - @Override - public String getCount() { - return Integer.toString(countChildrenCases()); - } - }); - } - - // commented now as it doesn't display informative data -// tabs.add( -// new CountablePanelTab(parentPage.createStringResource("PageCase.events"), -// getTabVisibility(ComponentConstants.UI_CASE_TAB_EVENTS_URL, false, parentPage)) { -// -// private static final long serialVersionUID = 1L; -// -// @Override -// public WebMarkupContainer createPanel(String panelId) { -// return new CaseEventsTabPanel(panelId, getMainForm(), getObjectModel(), parentPage); -// } -// -// @Override -// public String getCount() { -// return Integer.toString(countEvents()); -// } -// }); - return tabs; - } - - @Override - protected boolean getOptionsPanelVisibility() { - return false; - } - - @Override - protected boolean isReadonly(){ - return true; - } - }; - } - - @Override - protected IModel createPageTitleModel() { - return createStringResource("PageCase.title"); - } - - @Override - protected ObjectSummaryPanel createSummaryPanel() { - return new CaseSummaryPanel(ID_SUMMARY_PANEL, CaseType.class, Model.of(getObjectModel().getObject().getObject().asObjectable()), this); - } - - @Override - public void finishProcessing(AjaxRequestTarget target, OperationResult result, boolean returningFromAsync) { - - } - - @Override - public void continueEditing(AjaxRequestTarget target) { - - } - - @Override - public Class getCompileTimeClass() { - return CaseType.class; - } - - @Override - protected CaseType createNewObject(){ - return new CaseType(); - } - - @Override - protected Class getRestartResponsePage() { - return PageCases.class; - } - - private boolean matchCaseType(SystemObjectsType archetypeType){ - CaseType caseObject = getObjectWrapper().getObject().asObjectable(); - if (caseObject == null || caseObject.getAssignment() == null){ - return false; - } - for (AssignmentType assignment : caseObject.getAssignment()){ - ObjectReferenceType targetRef = assignment.getTargetRef(); - if (targetRef != null && archetypeType.value().equals(targetRef.getOid())){ - return true; - } - } - return false; - } - - private int countWorkItems(){ - List workItemsList = getObjectModel().getObject().getObject().asObjectable().getWorkItem(); - return workItemsList == null ? 0 : workItemsList.size(); - } - - private int countChildrenCases(){ - CaseType currentCase = getObjectModel().getObject().getObject().asObjectable(); - ObjectQuery childrenCasesQuery = getPrismContext().queryFor(CaseType.class) - .item(CaseType.F_PARENT_REF).ref(currentCase.getOid()) - .build(); - return WebModelServiceUtils.countObjects(CaseType.class, childrenCasesQuery, PageCase.this); - } - - private int countEvents(){ - List eventsList = getObjectModel().getObject().getObject().asObjectable().getEvent(); - return eventsList == null ? 0 : eventsList.size(); - } -} +/* + * Copyright (c) 2010-2019 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.web.page.admin.cases; + +import java.util.List; + +import com.evolveum.midpoint.gui.api.component.tabs.PanelTab; +import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; +import com.evolveum.midpoint.prism.query.ObjectQuery; +import com.evolveum.midpoint.schema.util.CaseTypeUtil; +import com.evolveum.midpoint.xml.ns._public.common.common_3.*; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.extensions.markup.html.tabs.ITab; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +import com.evolveum.midpoint.gui.api.ComponentConstants; +import com.evolveum.midpoint.gui.api.component.tabs.CountablePanelTab; +import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.schema.result.OperationResult; +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.application.AuthorizationAction; +import com.evolveum.midpoint.web.application.PageDescriptor; +import com.evolveum.midpoint.web.component.ObjectSummaryPanel; +import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectMainPanel; +import com.evolveum.midpoint.web.component.objectdetails.AssignmentHolderTypeMainPanel; +import com.evolveum.midpoint.web.page.admin.PageAdminObjectDetails; +import com.evolveum.midpoint.web.util.OnePageParameterEncoder; + +@PageDescriptor(url = "/admin/case", encoder = OnePageParameterEncoder.class, action = { + @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_CASES_ALL_URL, + label = "PageAdminCases.auth.casesAll.label", + description = "PageAdminCases.auth.casesAll.description"), + @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_CASE_URL, + label = "PageCase.auth.case.label", + description = "PageCase.auth.case.description")}) +public class PageCase extends PageAdminObjectDetails { + private static final long serialVersionUID = 1L; + + private static final Trace LOGGER = TraceManager.getTrace(PageCase.class); + private static final String DOT_CLASS = PageCase.class.getName() + "."; + private static final String OPERATION_LOAD_CASE = DOT_CLASS + "loadCase"; + + private static final String ID_SUMMARY_PANEL = "summaryPanel"; + + public PageCase() { + this(null, true); + } + + public PageCase(PrismObject unitToEdit, boolean isNewObject) { + initialize(unitToEdit, isNewObject, true); + } + + public PageCase(PageParameters parameters) { + getPageParameters().overwriteWith(parameters); + initialize(null, true, true); + } + + + @Override + protected AbstractObjectMainPanel createMainPanel(String id) { + return new AssignmentHolderTypeMainPanel(id, getObjectModel(), this) { + + private static final long serialVersionUID = 1L; + + @Override + protected List createTabs(final PageAdminObjectDetails parentPage) { + List tabs = super.createTabs(parentPage); + + if (matchCaseType(SystemObjectsType.ARCHETYPE_APPROVAL_CASE) + && CaseTypeUtil.approvalSchemaExists(getObject() != null ? getObject().asObjectable() : null)) { + tabs.add(0, + new PanelTab(parentPage.createStringResource("PageCase.approvalTab"), + getTabVisibility(ComponentConstants.UI_CASE_TAB_APPROVAL_URL, true, parentPage)) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer createPanel(String panelId) { + return new ApprovalCaseTabPanel(panelId, getMainForm(), getObjectModel(), parentPage); + } + }); + } else if (matchCaseType(SystemObjectsType.ARCHETYPE_OPERATION_REQUEST)) { + tabs.add(0, + new PanelTab(parentPage.createStringResource("PageCase.operationRequestTab"), + getTabVisibility(ComponentConstants.UI_CASE_TAB_APPROVAL_URL, true, parentPage)) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer createPanel(String panelId) { + return new OperationRequestCaseTabPanel(panelId, getMainForm(), getObjectModel(), parentPage); + } + + }); + } else if (matchCaseType(SystemObjectsType.ARCHETYPE_MANUAL_CASE)) { + //todo manual case tab + } + if (!matchCaseType(SystemObjectsType.ARCHETYPE_OPERATION_REQUEST)) { + + tabs.add( + new CountablePanelTab(parentPage.createStringResource("PageCase.workitemsTab"), + getTabVisibility(ComponentConstants.UI_CASE_TAB_WORKITEMS_URL, false, parentPage)) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer createPanel(String panelId) { + return new CaseWorkitemsTabPanel(panelId, getMainForm(), getObjectModel(), parentPage); + } + + @Override + public String getCount() { + return Integer.toString(countWorkItems()); + } + }); + } + if (matchCaseType(SystemObjectsType.ARCHETYPE_OPERATION_REQUEST)){ + tabs.add( + new CountablePanelTab(parentPage.createStringResource("PageCase.childCasesTab"), + getTabVisibility(ComponentConstants.UI_CASE_TAB_CHILD_CASES_URL, false, parentPage)) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer createPanel(String panelId) { + return new ChildCasesTabPanel(panelId, getMainForm(), getObjectModel()); + } + + @Override + public String getCount() { + return Integer.toString(countChildrenCases()); + } + }); + } + + // commented now as it doesn't display informative data +// tabs.add( +// new CountablePanelTab(parentPage.createStringResource("PageCase.events"), +// getTabVisibility(ComponentConstants.UI_CASE_TAB_EVENTS_URL, false, parentPage)) { +// +// private static final long serialVersionUID = 1L; +// +// @Override +// public WebMarkupContainer createPanel(String panelId) { +// return new CaseEventsTabPanel(panelId, getMainForm(), getObjectModel(), parentPage); +// } +// +// @Override +// public String getCount() { +// return Integer.toString(countEvents()); +// } +// }); + return tabs; + } + + @Override + protected boolean getOptionsPanelVisibility() { + return false; + } + + @Override + protected boolean isReadonly(){ + return true; + } + }; + } + + @Override + protected IModel createPageTitleModel() { + return createStringResource("PageCase.title"); + } + + @Override + protected ObjectSummaryPanel createSummaryPanel(IModel summaryModel) { + return new CaseSummaryPanel(ID_SUMMARY_PANEL, CaseType.class, summaryModel, this); + } + + @Override + public void finishProcessing(AjaxRequestTarget target, OperationResult result, boolean returningFromAsync) { + + } + + @Override + public void continueEditing(AjaxRequestTarget target) { + + } + + @Override + public Class getCompileTimeClass() { + return CaseType.class; + } + + @Override + protected CaseType createNewObject(){ + return new CaseType(); + } + + @Override + protected Class getRestartResponsePage() { + return PageCases.class; + } + + private boolean matchCaseType(SystemObjectsType archetypeType){ + CaseType caseObject = getObjectWrapper().getObject().asObjectable(); + if (caseObject == null || caseObject.getAssignment() == null){ + return false; + } + for (AssignmentType assignment : caseObject.getAssignment()){ + ObjectReferenceType targetRef = assignment.getTargetRef(); + if (targetRef != null && archetypeType.value().equals(targetRef.getOid())){ + return true; + } + } + return false; + } + + private int countWorkItems(){ + List workItemsList = getObjectModel().getObject().getObject().asObjectable().getWorkItem(); + return workItemsList == null ? 0 : workItemsList.size(); + } + + private int countChildrenCases(){ + CaseType currentCase = getObjectModel().getObject().getObject().asObjectable(); + ObjectQuery childrenCasesQuery = getPrismContext().queryFor(CaseType.class) + .item(CaseType.F_PARENT_REF).ref(currentCase.getOid()) + .build(); + return WebModelServiceUtils.countObjects(CaseType.class, childrenCasesQuery, PageCase.this); + } + + private int countEvents(){ + List eventsList = getObjectModel().getObject().getObject().asObjectable().getEvent(); + return eventsList == null ? 0 : eventsList.size(); + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageSystemConfiguration.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageSystemConfiguration.java index 2e52f10d175..fcdf9bc2a01 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageSystemConfiguration.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageSystemConfiguration.java @@ -1,429 +1,427 @@ -/* - * Copyright (c) 2018 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.web.page.admin.configuration; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.TimeUnit; - -import javax.xml.namespace.QName; - -import com.evolveum.midpoint.web.application.Url; -import com.evolveum.midpoint.web.page.admin.PageAdminObjectDetails; -import com.evolveum.midpoint.xml.ns._public.common.common_3.*; - -import org.apache.wicket.Page; -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.apache.wicket.model.Model; -import org.apache.wicket.request.mapper.parameter.PageParameters; - -import com.evolveum.midpoint.gui.api.prism.PrismObjectWrapper; -import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; -import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.GlobalPolicyRuleTabPanel; -import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.LoggingConfigurationTabPanel; -import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.NotificationConfigTabPanel; -import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.ObjectPolicyConfigurationTabPanel; -import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.ProfilingConfigurationTabPanel; -import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.ContainerOfSystemConfigurationPanel; -import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.SystemConfigPanel; -import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.SystemConfigurationSummaryPanel; -import com.evolveum.midpoint.gui.impl.prism.PrismContainerPanel; -import com.evolveum.midpoint.prism.Containerable; -import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.prism.path.ItemName; -import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.schema.result.OperationResultStatus; -import com.evolveum.midpoint.security.api.AuthorizationConstants; -import com.evolveum.midpoint.task.api.Task; -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.AuthorizationAction; -import com.evolveum.midpoint.web.application.PageDescriptor; -import com.evolveum.midpoint.web.component.ObjectSummaryPanel; -import com.evolveum.midpoint.web.component.TabbedPanel; -import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectMainPanel; -import com.evolveum.midpoint.web.component.progress.ProgressPanel; -import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; -import com.evolveum.midpoint.web.model.ContainerWrapperFromObjectWrapperModel; -import com.evolveum.midpoint.web.model.PrismContainerWrapperModel; - -/** - * @author lazyman - * @author skublik - */ -@PageDescriptor( - urls = { - @Url(mountUrl = "/admin/config/system", matchUrlForSecurity = "/admin/config/system"), - }, - action = { - @AuthorizationAction(actionUri = PageAdminConfiguration.AUTH_CONFIGURATION_ALL, - label = PageAdminConfiguration.AUTH_CONFIGURATION_ALL_LABEL, - description = PageAdminConfiguration.AUTH_CONFIGURATION_ALL_DESCRIPTION), - @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_CONFIGURATION_SYSTEM_CONFIG_URL, - label = "PageSystemConfiguration.auth.configSystemConfiguration.label", - description = "PageSystemConfiguration.auth.configSystemConfiguration.description") - }) -public class PageSystemConfiguration extends PageAdminObjectDetails { - - private static final long serialVersionUID = 1L; - - public static final String SELECTED_TAB_INDEX = "tab"; - public static final String SELECTED_SERVER_INDEX = "mailServerIndex"; - public static final String SERVER_LIST_SIZE = "mailServerListSize"; - - private static final String DOT_CLASS = PageSystemConfiguration.class.getName() + "."; - private static final String OPERATION_LOAD_SYSTEM_CONFIG = DOT_CLASS + "load"; - - public static final int CONFIGURATION_TAB_BASIC = 0; - public static final int CONFIGURATION_TAB_OBJECT_POLICY = 1; - public static final int CONFIGURATION_TAB_GLOBAL_POLICY_RULE = 2; - public static final int CONFIGURATION_TAB_GLOBAL_ACCOUNT_SYNCHRONIZATION = 3; - public static final int CONFIGURATION_TAB_CLEANUP_POLICY = 4; - public static final int CONFIGURATION_TAB_NOTIFICATION = 5; - public static final int CONFIGURATION_TAB_LOGGING = 6; - public static final int CONFIGURATION_TAB_PROFILING = 7; - public static final int CONFIGURATION_TAB_ADMIN_GUI = 8; - public static final int CONFIGURATION_TAB_WORKFLOW = 9; - public static final int CONFIGURATION_TAB_ROLE_MANAGEMENT = 10; - public static final int CONFIGURATION_TAB_INTERNALS = 11; - public static final int CONFIGURATION_TAB_DEPLOYMENT_INFORMATION = 12; - public static final int CONFIGURATION_TAB_ACCESS_CERTIFICATION = 13; - public static final int CONFIGURATION_TAB_INFRASTRUCTURE = 14; - public static final int CONFIGURATION_TAB_FULL_TEXT_SEARCH = 15; - - private static final Trace LOGGER = TraceManager.getTrace(PageSystemConfiguration.class); - - private static final String ID_SUMM_PANEL = "summaryPanel"; - - public static final String ROOT_APPENDER_INHERITANCE_CHOICE = "(Inherit root)"; - - public PageSystemConfiguration() { - initialize(null); - } - - public PageSystemConfiguration(PageParameters parameters) { - getPageParameters().overwriteWith(parameters); - initialize(null); - } - - public PageSystemConfiguration(final PrismObject configToEdit) { - initialize(configToEdit); - } - - public PageSystemConfiguration(final PrismObject configToEdit, boolean isNewObject) { - initialize(configToEdit, isNewObject); - } - - @Override - protected void initializeModel(final PrismObject configToEdit, boolean isNewObject, boolean isReadonly) { - Task task = createSimpleTask(OPERATION_LOAD_SYSTEM_CONFIG); - OperationResult result = new OperationResult(OPERATION_LOAD_SYSTEM_CONFIG); - super.initializeModel(WebModelServiceUtils.loadSystemConfigurationAsPrismObject(this, task, result), false, isReadonly); - } - - private List getTabs(){ - List tabs = new ArrayList<>(); - tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.system.title")) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer getPanel(String panelId) { - return new SystemConfigPanel(panelId, getObjectModel()); - } - }); - - tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.objectPolicy.title")) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer getPanel(String panelId) { - PrismContainerWrapperModel model = createModel(getObjectModel(), SystemConfigurationType.F_DEFAULT_OBJECT_POLICY_CONFIGURATION); - return new ObjectPolicyConfigurationTabPanel<>(panelId, model); - } - }); - - tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.globalPolicyRule.title")) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer getPanel(String panelId) { - PrismContainerWrapperModel model = createModel(getObjectModel(), - SystemConfigurationType.F_GLOBAL_POLICY_RULE); - return new GlobalPolicyRuleTabPanel<>(panelId, model); - } - }); - - tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.globalAccountSynchronization.title")) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer getPanel(String panelId) { - return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_GLOBAL_ACCOUNT_SYNCHRONIZATION_SETTINGS, ProjectionPolicyType.COMPLEX_TYPE); - } - }); - - tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.cleanupPolicy.title")) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer getPanel(String panelId) { - return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_CLEANUP_POLICY, CleanupPoliciesType.COMPLEX_TYPE); - } - }); - - tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.notifications.title")) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer getPanel(String panelId) { - PrismContainerWrapperModel model = createModel(getObjectModel(), - SystemConfigurationType.F_NOTIFICATION_CONFIGURATION); - return new NotificationConfigTabPanel(panelId, model); - } - }); - - tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.logging.title")) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer getPanel(String panelId) { - PrismContainerWrapperModel model = createModel(getObjectModel(), SystemConfigurationType.F_LOGGING); - return new LoggingConfigurationTabPanel<>(panelId, model); - } - }); - - tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.profiling.title")) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer getPanel(String panelId) { - PrismContainerWrapperModel profilingModel = createModel(getObjectModel(), SystemConfigurationType.F_PROFILING_CONFIGURATION); - PrismContainerWrapperModel loggingModel = createModel(getObjectModel(), - SystemConfigurationType.F_LOGGING); - return new ProfilingConfigurationTabPanel(panelId, profilingModel, loggingModel); - } - }); - - tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.adminGui.title")) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer getPanel(String panelId) { - return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_ADMIN_GUI_CONFIGURATION, AdminGuiConfigurationType.COMPLEX_TYPE); - } - }); - - tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.workflow.title")) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer getPanel(String panelId) { - return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_WORKFLOW_CONFIGURATION, WfConfigurationType.COMPLEX_TYPE); - } - }); - - tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.roleManagement.title")) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer getPanel(String panelId) { - return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_ROLE_MANAGEMENT, RoleManagementConfigurationType.COMPLEX_TYPE); - } - }); - - tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.internals.title")) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer getPanel(String panelId) { - return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_INTERNALS, InternalsConfigurationType.COMPLEX_TYPE); - } - }); - - tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.deploymentInformation.title")) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer getPanel(String panelId) { - return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_DEPLOYMENT_INFORMATION, DeploymentInformationType.COMPLEX_TYPE); - } - }); - - tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.accessCertification.title")) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer getPanel(String panelId) { - return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_ACCESS_CERTIFICATION, AccessCertificationConfigurationType.COMPLEX_TYPE); - } - }); - - tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.infrastructure.title")) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer getPanel(String panelId) { - return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_INFRASTRUCTURE, InfrastructureConfigurationType.COMPLEX_TYPE); - } - }); - - tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.fullTextSearch.title")) { - - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer getPanel(String panelId) { - return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_FULL_TEXT_SEARCH, FullTextSearchConfigurationType.COMPLEX_TYPE); - } - }); - - - return tabs; - } - - private ContainerOfSystemConfigurationPanel createContainerPanel(String panelId, IModel> objectModel, ItemName propertyName, QName propertyType) { - return new ContainerOfSystemConfigurationPanel(panelId, createModel(objectModel, propertyName), propertyType); - } - - private PrismContainerWrapperModel createModel(IModel> model, ItemName itemName) { - return PrismContainerWrapperModel.fromContainerWrapper(model, itemName); - } - - @Override - public void finishProcessing(AjaxRequestTarget target, OperationResult result, boolean returningFromAsync) { - if (!isKeepDisplayingResults()) { - showResult(result); - redirectBack(); - } - } - - @Override - public Class getCompileTimeClass() { - return SystemConfigurationType.class; - } - - @Override - protected SystemConfigurationType createNewObject() { - return null; - } - - @Override - protected ObjectSummaryPanel createSummaryPanel() { - return new SystemConfigurationSummaryPanel(ID_SUMM_PANEL, SystemConfigurationType.class, Model.of(getObjectModel().getObject().getObject().asObjectable()), this); - } - - @Override - protected AbstractObjectMainPanel createMainPanel(String id) { - return new AbstractObjectMainPanel(id, getObjectModel(), this) { - - private static final long serialVersionUID = 1L; - - @Override - protected List createTabs(PageAdminObjectDetails parentPage) { - return getTabs(); - } - - @Override - protected boolean getOptionsPanelVisibility() { - return false; - } - - @Override - protected boolean isPreviewButtonVisible() { - return false; - } - - @Override - protected void initLayoutTabs(PageAdminObjectDetails parentPage) { - List tabs = createTabs(parentPage); - TabbedPanel tabPanel = new TabbedPanel(ID_TAB_PANEL, tabs) { - - private static final long serialVersionUID = 1L; - - @Override - protected void onTabChange(int index) { - PageParameters params = getPageParameters(); - params.set(SELECTED_TAB_INDEX, index); - - parentPage.updateBreadcrumbParameters(SELECTED_TAB_INDEX, index); - } - }; - getMainForm().add(tabPanel); - } - }; - } - - @Override - protected Class getRestartResponsePage() { - return getMidpointApplication().getHomePage(); - } - - @Override - public void continueEditing(AjaxRequestTarget target) { - - } - - @Override - protected void setSummaryPanelVisibility(ObjectSummaryPanel summaryPanel) { - summaryPanel.add(new VisibleEnableBehaviour() { - private static final long serialVersionUID = 1L; - - @Override - public boolean isVisible() { - return true; - } - }); - } - - @Override - public void saveOrPreviewPerformed(AjaxRequestTarget target, OperationResult result, boolean previewOnly) { - - ProgressPanel progressPanel = getProgressPanel(); - progressPanel.hide(); - Task task = createSimpleTask(OPERATION_SEND_TO_SUBMIT); - super.saveOrPreviewPerformed(target, result, previewOnly, task); - - try { - TimeUnit.SECONDS.sleep(1); - while(task.isClosed()) {TimeUnit.SECONDS.sleep(1);} - } catch ( InterruptedException ex) { - result.recomputeStatus(); - result.recordFatalError(getString("PageSystemConfiguration.message.saveOrPreviewPerformed.fatalError"), ex); - - LoggingUtils.logUnexpectedException(LOGGER, "Couldn't use sleep", ex); - } - result.recomputeStatus(); - target.add(getFeedbackPanel()); - - if(result.getStatus().equals(OperationResultStatus.SUCCESS)) { - showResult(result); - redirectBack(); - } - } - -} +/* + * Copyright (c) 2018 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.web.page.admin.configuration; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import javax.xml.namespace.QName; + +import com.evolveum.midpoint.web.application.Url; +import com.evolveum.midpoint.web.page.admin.PageAdminObjectDetails; +import com.evolveum.midpoint.xml.ns._public.common.common_3.*; + +import org.apache.wicket.Page; +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.apache.wicket.model.Model; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +import com.evolveum.midpoint.gui.api.prism.PrismObjectWrapper; +import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; +import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.GlobalPolicyRuleTabPanel; +import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.LoggingConfigurationTabPanel; +import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.NotificationConfigTabPanel; +import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.ObjectPolicyConfigurationTabPanel; +import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.ProfilingConfigurationTabPanel; +import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.ContainerOfSystemConfigurationPanel; +import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.SystemConfigPanel; +import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.SystemConfigurationSummaryPanel; +import com.evolveum.midpoint.prism.Containerable; +import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.prism.path.ItemName; +import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.schema.result.OperationResultStatus; +import com.evolveum.midpoint.security.api.AuthorizationConstants; +import com.evolveum.midpoint.task.api.Task; +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.AuthorizationAction; +import com.evolveum.midpoint.web.application.PageDescriptor; +import com.evolveum.midpoint.web.component.ObjectSummaryPanel; +import com.evolveum.midpoint.web.component.TabbedPanel; +import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectMainPanel; +import com.evolveum.midpoint.web.component.progress.ProgressPanel; +import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; +import com.evolveum.midpoint.web.model.PrismContainerWrapperModel; + +/** + * @author lazyman + * @author skublik + */ +@PageDescriptor( + urls = { + @Url(mountUrl = "/admin/config/system", matchUrlForSecurity = "/admin/config/system"), + }, + action = { + @AuthorizationAction(actionUri = PageAdminConfiguration.AUTH_CONFIGURATION_ALL, + label = PageAdminConfiguration.AUTH_CONFIGURATION_ALL_LABEL, + description = PageAdminConfiguration.AUTH_CONFIGURATION_ALL_DESCRIPTION), + @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_CONFIGURATION_SYSTEM_CONFIG_URL, + label = "PageSystemConfiguration.auth.configSystemConfiguration.label", + description = "PageSystemConfiguration.auth.configSystemConfiguration.description") + }) +public class PageSystemConfiguration extends PageAdminObjectDetails { + + private static final long serialVersionUID = 1L; + + public static final String SELECTED_TAB_INDEX = "tab"; + public static final String SELECTED_SERVER_INDEX = "mailServerIndex"; + public static final String SERVER_LIST_SIZE = "mailServerListSize"; + + private static final String DOT_CLASS = PageSystemConfiguration.class.getName() + "."; + private static final String OPERATION_LOAD_SYSTEM_CONFIG = DOT_CLASS + "load"; + + public static final int CONFIGURATION_TAB_BASIC = 0; + public static final int CONFIGURATION_TAB_OBJECT_POLICY = 1; + public static final int CONFIGURATION_TAB_GLOBAL_POLICY_RULE = 2; + public static final int CONFIGURATION_TAB_GLOBAL_ACCOUNT_SYNCHRONIZATION = 3; + public static final int CONFIGURATION_TAB_CLEANUP_POLICY = 4; + public static final int CONFIGURATION_TAB_NOTIFICATION = 5; + public static final int CONFIGURATION_TAB_LOGGING = 6; + public static final int CONFIGURATION_TAB_PROFILING = 7; + public static final int CONFIGURATION_TAB_ADMIN_GUI = 8; + public static final int CONFIGURATION_TAB_WORKFLOW = 9; + public static final int CONFIGURATION_TAB_ROLE_MANAGEMENT = 10; + public static final int CONFIGURATION_TAB_INTERNALS = 11; + public static final int CONFIGURATION_TAB_DEPLOYMENT_INFORMATION = 12; + public static final int CONFIGURATION_TAB_ACCESS_CERTIFICATION = 13; + public static final int CONFIGURATION_TAB_INFRASTRUCTURE = 14; + public static final int CONFIGURATION_TAB_FULL_TEXT_SEARCH = 15; + + private static final Trace LOGGER = TraceManager.getTrace(PageSystemConfiguration.class); + + private static final String ID_SUMM_PANEL = "summaryPanel"; + + public static final String ROOT_APPENDER_INHERITANCE_CHOICE = "(Inherit root)"; + + public PageSystemConfiguration() { + initialize(null); + } + + public PageSystemConfiguration(PageParameters parameters) { + getPageParameters().overwriteWith(parameters); + initialize(null); + } + + public PageSystemConfiguration(final PrismObject configToEdit) { + initialize(configToEdit); + } + + public PageSystemConfiguration(final PrismObject configToEdit, boolean isNewObject) { + initialize(configToEdit, isNewObject); + } + + @Override + protected void initializeModel(final PrismObject configToEdit, boolean isNewObject, boolean isReadonly) { + Task task = createSimpleTask(OPERATION_LOAD_SYSTEM_CONFIG); + OperationResult result = new OperationResult(OPERATION_LOAD_SYSTEM_CONFIG); + super.initializeModel(WebModelServiceUtils.loadSystemConfigurationAsPrismObject(this, task, result), false, isReadonly); + } + + private List getTabs(){ + List tabs = new ArrayList<>(); + tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.system.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + return new SystemConfigPanel(panelId, getObjectModel()); + } + }); + + tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.objectPolicy.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + PrismContainerWrapperModel model = createModel(getObjectModel(), SystemConfigurationType.F_DEFAULT_OBJECT_POLICY_CONFIGURATION); + return new ObjectPolicyConfigurationTabPanel<>(panelId, model); + } + }); + + tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.globalPolicyRule.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + PrismContainerWrapperModel model = createModel(getObjectModel(), + SystemConfigurationType.F_GLOBAL_POLICY_RULE); + return new GlobalPolicyRuleTabPanel<>(panelId, model); + } + }); + + tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.globalAccountSynchronization.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_GLOBAL_ACCOUNT_SYNCHRONIZATION_SETTINGS, ProjectionPolicyType.COMPLEX_TYPE); + } + }); + + tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.cleanupPolicy.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_CLEANUP_POLICY, CleanupPoliciesType.COMPLEX_TYPE); + } + }); + + tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.notifications.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + PrismContainerWrapperModel model = createModel(getObjectModel(), + SystemConfigurationType.F_NOTIFICATION_CONFIGURATION); + return new NotificationConfigTabPanel(panelId, model); + } + }); + + tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.logging.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + PrismContainerWrapperModel model = createModel(getObjectModel(), SystemConfigurationType.F_LOGGING); + return new LoggingConfigurationTabPanel<>(panelId, model); + } + }); + + tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.profiling.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + PrismContainerWrapperModel profilingModel = createModel(getObjectModel(), SystemConfigurationType.F_PROFILING_CONFIGURATION); + PrismContainerWrapperModel loggingModel = createModel(getObjectModel(), + SystemConfigurationType.F_LOGGING); + return new ProfilingConfigurationTabPanel(panelId, profilingModel, loggingModel); + } + }); + + tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.adminGui.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_ADMIN_GUI_CONFIGURATION, AdminGuiConfigurationType.COMPLEX_TYPE); + } + }); + + tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.workflow.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_WORKFLOW_CONFIGURATION, WfConfigurationType.COMPLEX_TYPE); + } + }); + + tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.roleManagement.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_ROLE_MANAGEMENT, RoleManagementConfigurationType.COMPLEX_TYPE); + } + }); + + tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.internals.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_INTERNALS, InternalsConfigurationType.COMPLEX_TYPE); + } + }); + + tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.deploymentInformation.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_DEPLOYMENT_INFORMATION, DeploymentInformationType.COMPLEX_TYPE); + } + }); + + tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.accessCertification.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_ACCESS_CERTIFICATION, AccessCertificationConfigurationType.COMPLEX_TYPE); + } + }); + + tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.infrastructure.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_INFRASTRUCTURE, InfrastructureConfigurationType.COMPLEX_TYPE); + } + }); + + tabs.add(new AbstractTab(createStringResource("pageSystemConfiguration.fullTextSearch.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + return createContainerPanel(panelId, getObjectModel(), SystemConfigurationType.F_FULL_TEXT_SEARCH, FullTextSearchConfigurationType.COMPLEX_TYPE); + } + }); + + + return tabs; + } + + private ContainerOfSystemConfigurationPanel createContainerPanel(String panelId, IModel> objectModel, ItemName propertyName, QName propertyType) { + return new ContainerOfSystemConfigurationPanel(panelId, createModel(objectModel, propertyName), propertyType); + } + + private PrismContainerWrapperModel createModel(IModel> model, ItemName itemName) { + return PrismContainerWrapperModel.fromContainerWrapper(model, itemName); + } + + @Override + public void finishProcessing(AjaxRequestTarget target, OperationResult result, boolean returningFromAsync) { + if (!isKeepDisplayingResults()) { + showResult(result); + redirectBack(); + } + } + + @Override + public Class getCompileTimeClass() { + return SystemConfigurationType.class; + } + + @Override + protected SystemConfigurationType createNewObject() { + return null; + } + + @Override + protected ObjectSummaryPanel createSummaryPanel(IModel summaryModel) { + return new SystemConfigurationSummaryPanel(ID_SUMM_PANEL, SystemConfigurationType.class, summaryModel, this); + } + + @Override + protected AbstractObjectMainPanel createMainPanel(String id) { + return new AbstractObjectMainPanel(id, getObjectModel(), this) { + + private static final long serialVersionUID = 1L; + + @Override + protected List createTabs(PageAdminObjectDetails parentPage) { + return getTabs(); + } + + @Override + protected boolean getOptionsPanelVisibility() { + return false; + } + + @Override + protected boolean isPreviewButtonVisible() { + return false; + } + + @Override + protected void initLayoutTabs(PageAdminObjectDetails parentPage) { + List tabs = createTabs(parentPage); + TabbedPanel tabPanel = new TabbedPanel(ID_TAB_PANEL, tabs) { + + private static final long serialVersionUID = 1L; + + @Override + protected void onTabChange(int index) { + PageParameters params = getPageParameters(); + params.set(SELECTED_TAB_INDEX, index); + + parentPage.updateBreadcrumbParameters(SELECTED_TAB_INDEX, index); + } + }; + getMainForm().add(tabPanel); + } + }; + } + + @Override + protected Class getRestartResponsePage() { + return getMidpointApplication().getHomePage(); + } + + @Override + public void continueEditing(AjaxRequestTarget target) { + + } + + @Override + protected void setSummaryPanelVisibility(ObjectSummaryPanel summaryPanel) { + summaryPanel.add(new VisibleEnableBehaviour() { + private static final long serialVersionUID = 1L; + + @Override + public boolean isVisible() { + return true; + } + }); + } + + @Override + public void saveOrPreviewPerformed(AjaxRequestTarget target, OperationResult result, boolean previewOnly) { + + ProgressPanel progressPanel = getProgressPanel(); + progressPanel.hide(); + Task task = createSimpleTask(OPERATION_SEND_TO_SUBMIT); + super.saveOrPreviewPerformed(target, result, previewOnly, task); + + try { + TimeUnit.SECONDS.sleep(1); + while(task.isClosed()) {TimeUnit.SECONDS.sleep(1);} + } catch ( InterruptedException ex) { + result.recomputeStatus(); + result.recordFatalError(getString("PageSystemConfiguration.message.saveOrPreviewPerformed.fatalError"), ex); + + LoggingUtils.logUnexpectedException(LOGGER, "Couldn't use sleep", ex); + } + result.recomputeStatus(); + target.add(getFeedbackPanel()); + + if(result.getStatus().equals(OperationResultStatus.SUCCESS)) { + showResult(result); + redirectBack(); + } + } + +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/PageRole.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/PageRole.java index 2dc6b9d9ee1..207ce7c00dd 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/PageRole.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/PageRole.java @@ -1,111 +1,110 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.roles; - -import com.evolveum.midpoint.prism.PrismObject; -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.application.AuthorizationAction; -import com.evolveum.midpoint.web.application.PageDescriptor; -import com.evolveum.midpoint.web.component.FocusSummaryPanel; -import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectMainPanel; -import com.evolveum.midpoint.web.component.objectdetails.AbstractRoleMainPanel; -import com.evolveum.midpoint.web.component.progress.ProgressReportingAwarePage; -import com.evolveum.midpoint.web.page.admin.PageAdminAbstractRole; -import com.evolveum.midpoint.web.page.admin.roles.component.RoleSummaryPanel; -import com.evolveum.midpoint.web.util.OnePageParameterEncoder; -import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; - -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.model.Model; -import org.apache.wicket.request.mapper.parameter.PageParameters; - -/** - * @author shood - * @author semancik - */ -@PageDescriptor(url = "/admin/role", encoder = OnePageParameterEncoder.class, action = { - @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_ROLES_ALL_URL, label = "PageAdminRoles.auth.roleAll.label", description = "PageAdminRoles.auth.roleAll.description"), - @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_ROLE_URL, label = "PageRole.auth.role.label", description = "PageRole.auth.role.description") }) -public class PageRole extends PageAdminAbstractRole implements ProgressReportingAwarePage { - private static final long serialVersionUID = 1L; - - public static final String AUTH_ROLE_ALL = AuthorizationConstants.AUTZ_UI_ROLES_ALL_URL; - public static final String AUTH_ROLE_ALL_LABEL = "PageAdminRoles.auth.roleAll.label"; - public static final String AUTH_ROLE_ALL_DESCRIPTION = "PageAdminRoles.auth.roleAll.description"; - - private static final Trace LOGGER = TraceManager.getTrace(PageRole.class); - - public PageRole() { - super(); - } - - public PageRole(PageParameters parameters) { - super(parameters); - } - - public PageRole(final PrismObject role) { - super(role); - } - - public PageRole(final PrismObject userToEdit, boolean isNewObject) { - super(userToEdit, isNewObject); - } - - public PageRole(final PrismObject abstractRole, boolean isNewObject, boolean isReadonly) { - super(abstractRole, isNewObject, isReadonly); - } - - @Override - protected RoleType createNewObject() { - return new RoleType(); - } - - @Override - public Class getCompileTimeClass() { - return RoleType.class; - } - - @Override - protected Class getRestartResponsePage() { - return PageRoles.class; - } - - @Override - protected FocusSummaryPanel createSummaryPanel() { - return new RoleSummaryPanel(ID_SUMMARY_PANEL, Model.of(getObjectModel().getObject().getObject().asObjectable()), this); - } - - @Override - protected AbstractObjectMainPanel createMainPanel(String id) { - return new AbstractRoleMainPanel(id, getObjectModel(), getProjectionModel(), this) { - private static final long serialVersionUID = 1L; - - @Override - protected boolean isFocusHistoryPage(){ - return PageRole.this.isFocusHistoryPage(); - } - - @Override - protected void viewObjectHistoricalDataPerformed(AjaxRequestTarget target, PrismObject object, String date){ - PageRole.this.navigateToNext(new PageRoleHistory(object, date)); - } - - @Override - protected boolean getOptionsPanelVisibility() { - if (isSelfProfile()){ - return false; - } else { - return super.getOptionsPanelVisibility(); - } - } - }; - } -} +/* + * Copyright (c) 2010-2017 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.web.page.admin.roles; + +import com.evolveum.midpoint.prism.PrismObject; +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.application.AuthorizationAction; +import com.evolveum.midpoint.web.application.PageDescriptor; +import com.evolveum.midpoint.web.component.FocusSummaryPanel; +import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectMainPanel; +import com.evolveum.midpoint.web.component.objectdetails.AbstractRoleMainPanel; +import com.evolveum.midpoint.web.component.progress.ProgressReportingAwarePage; +import com.evolveum.midpoint.web.page.admin.PageAdminAbstractRole; +import com.evolveum.midpoint.web.page.admin.roles.component.RoleSummaryPanel; +import com.evolveum.midpoint.web.util.OnePageParameterEncoder; +import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +/** + * @author shood + * @author semancik + */ +@PageDescriptor(url = "/admin/role", encoder = OnePageParameterEncoder.class, action = { + @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_ROLES_ALL_URL, label = "PageAdminRoles.auth.roleAll.label", description = "PageAdminRoles.auth.roleAll.description"), + @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_ROLE_URL, label = "PageRole.auth.role.label", description = "PageRole.auth.role.description") }) +public class PageRole extends PageAdminAbstractRole implements ProgressReportingAwarePage { + private static final long serialVersionUID = 1L; + + public static final String AUTH_ROLE_ALL = AuthorizationConstants.AUTZ_UI_ROLES_ALL_URL; + public static final String AUTH_ROLE_ALL_LABEL = "PageAdminRoles.auth.roleAll.label"; + public static final String AUTH_ROLE_ALL_DESCRIPTION = "PageAdminRoles.auth.roleAll.description"; + + private static final Trace LOGGER = TraceManager.getTrace(PageRole.class); + + public PageRole() { + super(); + } + + public PageRole(PageParameters parameters) { + super(parameters); + } + + public PageRole(final PrismObject role) { + super(role); + } + + public PageRole(final PrismObject userToEdit, boolean isNewObject) { + super(userToEdit, isNewObject); + } + + public PageRole(final PrismObject abstractRole, boolean isNewObject, boolean isReadonly) { + super(abstractRole, isNewObject, isReadonly); + } + + @Override + protected RoleType createNewObject() { + return new RoleType(); + } + + @Override + public Class getCompileTimeClass() { + return RoleType.class; + } + + @Override + protected Class getRestartResponsePage() { + return PageRoles.class; + } + + @Override + protected FocusSummaryPanel createSummaryPanel(IModel summaryModel) { + return new RoleSummaryPanel(ID_SUMMARY_PANEL, summaryModel, this); + } + + @Override + protected AbstractObjectMainPanel createMainPanel(String id) { + return new AbstractRoleMainPanel(id, getObjectModel(), getProjectionModel(), this) { + private static final long serialVersionUID = 1L; + + @Override + protected boolean isFocusHistoryPage(){ + return PageRole.this.isFocusHistoryPage(); + } + + @Override + protected void viewObjectHistoricalDataPerformed(AjaxRequestTarget target, PrismObject object, String date){ + PageRole.this.navigateToNext(new PageRoleHistory(object, date)); + } + + @Override + protected boolean getOptionsPanelVisibility() { + if (isSelfProfile()){ + return false; + } else { + return super.getOptionsPanelVisibility(); + } + } + }; + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/LivesyncTokenEditorPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/LivesyncTokenEditorPanel.java index e85fac6d28d..1804747f2e2 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/LivesyncTokenEditorPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/LivesyncTokenEditorPanel.java @@ -7,7 +7,6 @@ package com.evolveum.midpoint.web.page.admin.server; import com.evolveum.midpoint.prism.delta.ObjectDelta; -import com.evolveum.midpoint.prism.delta.PropertyDelta; import com.evolveum.midpoint.prism.delta.builder.S_ValuesEntry; import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnChangeAjaxFormUpdatingBehavior; @@ -17,9 +16,7 @@ import org.apache.wicket.model.StringResourceModel; import com.evolveum.midpoint.gui.api.component.BasePanel; -import com.evolveum.midpoint.gui.api.model.LoadableModel; import com.evolveum.midpoint.gui.api.prism.PrismObjectWrapper; -import com.evolveum.midpoint.gui.impl.prism.PrismPropertyWrapper; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismProperty; import com.evolveum.midpoint.prism.path.ItemPath; @@ -41,7 +38,7 @@ public class LivesyncTokenEditorPanel extends BasePanel> model) { super(id, model); @@ -60,7 +57,7 @@ private void initLayout() { public T getObject() { PrismObjectWrapper taskWrapper = getModelObject(); PrismObject task = taskWrapper.getObject(); - PrismProperty token = task.findProperty(tokenPath); + PrismProperty token = task.findProperty(PATH_TOKEN); if (token == null) { return null; @@ -73,14 +70,14 @@ public T getObject() { public void setObject(T object) { PrismObjectWrapper taskWrapper = getModelObject(); PrismObject task = taskWrapper.getObject(); - PrismProperty token = task.findProperty(tokenPath); + PrismProperty token = task.findProperty(PATH_TOKEN); if (token == null) { try { - token = task.findOrCreateProperty(tokenPath); + token = task.findOrCreateProperty(PATH_TOKEN); } catch (SchemaException e) { LoggingUtils.logUnexpectedException(LOGGER, "Cannot create token property", e); - getSession().error("Cannot create token property: " + e.getMessage()); + getSession().error(getString("LivesyncTokenEditorPanel.create.token.failed", e.getMessage())); return; } } @@ -93,14 +90,14 @@ public void setObject(T object) { tokenPanel.getBaseFormComponent().add(new EmptyOnChangeAjaxFormUpdatingBehavior()); add(tokenPanel); - AjaxButton okButton = new AjaxButton(ID_OK, createStringResource("button.ok")) { + AjaxButton okButton = new AjaxButton(ID_OK, createStringResource("Button.ok")) { @Override public void onClick(AjaxRequestTarget ajaxRequestTarget) { getPageBase().hideMainPopup(ajaxRequestTarget); ObjectDelta tokenDelta = getTokenDelta(ajaxRequestTarget); if (tokenDelta == null) { - getSession().warn("Nothing to save. Token was not changed"); + getSession().warn(getString("LivesyncTokenEditorPanel.token.delta.empty")); return; } saveTokenPerformed(tokenDelta, ajaxRequestTarget); @@ -108,7 +105,7 @@ public void onClick(AjaxRequestTarget ajaxRequestTarget) { }; add(okButton); - AjaxButton cancelButton = new AjaxButton(ID_CANCEL, createStringResource("button.cancel")) { + AjaxButton cancelButton = new AjaxButton(ID_CANCEL, createStringResource("Button.cancel")) { @Override public void onClick(AjaxRequestTarget ajaxRequestTarget) { @@ -119,19 +116,23 @@ public void onClick(AjaxRequestTarget ajaxRequestTarget) { } private ObjectDelta getTokenDelta(AjaxRequestTarget target) { - TextPanel tokenPanel = (TextPanel)get(ID_TOKEN); + TextPanel tokenPanel = (TextPanel) get(ID_TOKEN); T newTokenValue = tokenPanel.getBaseFormComponent().getModelObject(); try { - PrismProperty tokenProperty = getModelObject().getObject().findProperty(tokenPath); + PrismProperty tokenProperty = getModelObject().getObject().findProperty(PATH_TOKEN); - S_ValuesEntry valuesEntry = getPrismContext().deltaFor(TaskType.class).item(tokenPath, tokenProperty.getDefinition()); + if (tokenProperty == null) { + tokenProperty = getModelObject().getObject().findOrCreateProperty(PATH_TOKEN); + } + + S_ValuesEntry valuesEntry = getPrismContext().deltaFor(TaskType.class).item(PATH_TOKEN, tokenProperty.getDefinition()); if (newTokenValue == null) { return valuesEntry.replace().asObjectDelta(getModelObject().getOid()); } return valuesEntry.replace(newTokenValue).asObjectDelta(getModelObject().getOid()); } catch (SchemaException e) { LoggingUtils.logUnexpectedException(LOGGER, "Cannot modify token", e); - getSession().error("Cannot modify token: " + e.getMessage()); + getSession().error(getString("LivesyncTokenEditorPanel.modify.token.failed", e.getMessage())); target.add(getPageBase().getFeedbackPanel()); return null; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTask.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTask.java index 4220cdafaef..0fb784eef3e 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTask.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTask.java @@ -4,14 +4,6 @@ import java.util.Collection; import java.util.Collections; -import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; -import com.evolveum.midpoint.report.api.ReportConstants; -import com.evolveum.midpoint.web.component.AjaxDownloadBehaviorFromStream; -import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; - -import com.evolveum.midpoint.web.page.admin.reports.PageCreatedReports; - -import org.apache.wicket.Component; import org.apache.wicket.Page; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.behavior.AttributeAppender; @@ -22,14 +14,15 @@ import org.apache.wicket.request.mapper.parameter.PageParameters; import com.evolveum.midpoint.gui.api.GuiStyleConstants; -import com.evolveum.midpoint.gui.api.model.LoadableModel; import com.evolveum.midpoint.gui.api.prism.PrismObjectWrapper; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; import com.evolveum.midpoint.gui.impl.prism.PrismPropertyWrapper; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismProperty; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.path.ItemPath; +import com.evolveum.midpoint.report.api.ReportConstants; import com.evolveum.midpoint.schema.GetOperationOptions; import com.evolveum.midpoint.schema.SelectorOptions; import com.evolveum.midpoint.schema.result.OperationResult; @@ -44,12 +37,15 @@ import com.evolveum.midpoint.web.application.PageDescriptor; import com.evolveum.midpoint.web.application.Url; import com.evolveum.midpoint.web.component.AjaxButton; +import com.evolveum.midpoint.web.component.AjaxDownloadBehaviorFromStream; import com.evolveum.midpoint.web.component.AjaxIconButton; import com.evolveum.midpoint.web.component.ObjectSummaryPanel; import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectMainPanel; import com.evolveum.midpoint.web.component.refresh.Refreshable; import com.evolveum.midpoint.web.component.util.VisibleBehaviour; +import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.web.page.admin.PageAdminObjectDetails; +import com.evolveum.midpoint.web.page.admin.reports.PageCreatedReports; import com.evolveum.midpoint.web.util.OnePageParameterEncoder; import com.evolveum.midpoint.web.util.TaskOperationUtils; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; @@ -107,8 +103,8 @@ protected TaskType createNewObject() { } @Override - protected ObjectSummaryPanel createSummaryPanel() { - return new TaskSummaryPanel(ID_SUMMARY_PANEL, createSummaryPanelModel(), this, this); + protected ObjectSummaryPanel createSummaryPanel(IModel summaryModel) { + return new TaskSummaryPanel(ID_SUMMARY_PANEL, summaryModel, this, this); } @Override @@ -125,12 +121,6 @@ protected Collection> buildGetOptions() { .build(); } - private void afterOperation(AjaxRequestTarget target, OperationResult result) { - showResult(result); - getObjectModel().reset(); - refresh(target); - } - protected void initOperationalButtons(RepeatingView repeatingView) { super.initOperationalButtons(repeatingView); @@ -230,7 +220,7 @@ protected void saveTokenPerformed(ObjectDelta tokenDelta, AjaxRequestT manageLivesyncToken.add(new VisibleEnableBehaviour() { @Override public boolean isVisible() { - return WebComponentUtil.isLiveSync(getTask()) && isNotRunning(); + return WebComponentUtil.isLiveSync(getTask()) && isNotRunning() && getTask().asPrismObject().findProperty(LivesyncTokenEditorPanel.PATH_TOKEN) != null; } @Override @@ -410,10 +400,15 @@ private void saveTaskChanges(AjaxRequestTarget target, ObjectDelta tas LoggingUtils.logUnexpectedException(LOGGER, "Cannot save tasks changes", e); result.recordFatalError("Cannot save tasks changes, " + e.getMessage(), e); } -// showResult(result); afterOperation(target, result); } + private void afterOperation(AjaxRequestTarget target, OperationResult result) { + showResult(result); + getObjectModel().reset(); + refresh(target); + } + public void saveAndRunPerformed(AjaxRequestTarget target) { PrismObjectWrapper taskWrapper = getObjectWrapper(); try { @@ -470,21 +465,6 @@ private String createResumePauseButtonLabel() { return "fa fa-play"; } - private IModel createSummaryPanelModel() { - return isEditingFocus() ? - - new LoadableModel(true) { - @Override - protected TaskType load() { - PrismObjectWrapper taskWrapper = getObjectWrapper(); - if (taskWrapper == null) { - return null; - } - return taskWrapper.getObject().asObjectable(); - } - } : Model.of(); - } - @Override protected AbstractObjectMainPanel createMainPanel(String id) { return new TaskMainPanel(id, getObjectModel(), this); @@ -509,25 +489,6 @@ public int getRefreshInterval() { return REFRESH_INTERVAL; } - public void refresh(AjaxRequestTarget target) { - - getObjectModel().reset(); - target.add(getSummaryPanel()); - target.add(getOperationalButtonsPanel()); - target.add(getFeedbackPanel()); -// target.add(getMainPanel()); - - for (Component component : getMainPanel().getTabbedPanel()) { - if (component instanceof RefreshableTabPanel) { - - for (Component c : ((RefreshableTabPanel) component).getComponentsToUpdate()) { - target.add(c); - } - } - } - - } - private boolean isNotRunning(){ return !WebComponentUtil.isRunningTask(getTask()); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskMainPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskMainPanel.java index 36961d08fb2..419a26d1f1e 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskMainPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskMainPanel.java @@ -112,7 +112,7 @@ public WebMarkupContainer createPanel(String panelId) { }); ObjectTabVisibleBehavior workManagementTabVisibility = new ObjectTabVisibleBehavior - (Model.of(getObjectWrapper().getObject()), ComponentConstants.UI_CASE_TAB_WORKITEMS_URL, parentPage){ + (Model.of(getObjectWrapper().getObject()), ComponentConstants.UI_TASK_TAB_WORK_MANAGEMENT_URL, parentPage){ private static final long serialVersionUID = 1L; @@ -292,7 +292,7 @@ public WebMarkupContainer createPanel(String panelId) { } protected void initLayoutSaveAndRunButton() { - AjaxSubmitButton saveButton = new AjaxSubmitButton(ID_SAVE_AND_RUN, getDetailsPage().createStringResource("pageAdminFocus.button.saveAndRun")) { + AjaxSubmitButton saveButton = new AjaxSubmitButton(ID_SAVE_AND_RUN, getDetailsPage().createStringResource("TaskMainPanel.button.saveAndRun")) { private static final long serialVersionUID = 1L; @Override diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskOperationStatisticsPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskOperationStatisticsPanel.java index 46aedf2685c..bf91ec4a328 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskOperationStatisticsPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskOperationStatisticsPanel.java @@ -1,39 +1,35 @@ package com.evolveum.midpoint.web.page.admin.server; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import javax.xml.datatype.XMLGregorianCalendar; +import javax.xml.namespace.QName; + +import org.apache.wicket.Component; +import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; +import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn; +import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; +import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.repeater.Item; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.PropertyModel; + import com.evolveum.midpoint.gui.api.component.BasePanel; import com.evolveum.midpoint.gui.api.model.LoadableModel; import com.evolveum.midpoint.gui.api.prism.PrismObjectWrapper; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; -import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.prism.PrismReference; -import com.evolveum.midpoint.prism.PrismReferenceValue; import com.evolveum.midpoint.schema.constants.ObjectTypes; -import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.TaskTypeUtil; -import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.task.api.TaskCategory; import com.evolveum.midpoint.web.component.data.BoxedTablePanel; import com.evolveum.midpoint.web.component.data.column.EnumPropertyColumn; import com.evolveum.midpoint.web.component.util.ListDataProvider; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; -import org.apache.wicket.Component; -import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; -import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn; -import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; -import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; -import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.markup.repeater.Item; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.PropertyModel; - -import javax.xml.datatype.XMLGregorianCalendar; -import javax.xml.namespace.QName; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; public class TaskOperationStatisticsPanel extends BasePanel> implements RefreshableTabPanel { @@ -42,9 +38,6 @@ public class TaskOperationStatisticsPanel extends BasePanel WALL_CLOCK_AVG_CATEGORIES = Arrays.asList( TaskCategory.BULK_ACTIONS, TaskCategory.IMPORTING_ACCOUNTS, TaskCategory.RECOMPUTATION, TaskCategory.RECONCILIATION, TaskCategory.UTIL // this is a megahack: only utility tasks that count objects are DeleteTask and ShadowIntegrityCheck @@ -65,101 +58,11 @@ private LoadableModel createOperationStatsModel() { @Override protected OperationStatsType load() { PrismObject task = getModelObject().getObject(); - return TaskTypeUtil.getAggregatedOperationStats(task.asObjectable(), getPrismContext()); -// IterativeTaskInformationType iterativeTaskInformation = new IterativeTaskInformationType(); -// SynchronizationInformationType synchronizationInformation = new SynchronizationInformationType(); -// ActionsExecutedInformationType actionsExecutedInformation = new ActionsExecutedInformationType(); -// -// if (TaskTypeUtil.isPartitionedMaster(task.asObjectable())) { -//// List subTasks = resolveSubTasks(); -// Stream subTasks = TaskTypeUtil.getAllTasksStream(task.asObjectable()); -// subTasks.forEach(subTask -> { -// OperationStatsType operationStatsType = subTask.getOperationStats(); -// if (operationStatsType != null) { -// IterativeTaskInformation.addTo(iterativeTaskInformation, operationStatsType.getIterativeTaskInformation(), true); -// SynchronizationInformation.addTo(synchronizationInformation, operationStatsType.getSynchronizationInformation()); -// ActionsExecutedInformation.addTo(actionsExecutedInformation, operationStatsType.getActionsExecutedInformation()); -// } -// }); -//// for (TaskType taskDto : subTasks) { -//// OperationStatsType operationStats = taskDto.getOperationStats(); -//// if (operationStats != null) { -//// IterativeTaskInformation.addTo(iterativeTaskInformation, operationStats.getIterativeTaskInformation(), true); -//// SynchronizationInformation.addTo(synchronizationInformation, operationStats.getSynchronizationInformation()); -//// ActionsExecutedInformation.addTo(actionsExecutedInformation, operationStats.getActionsExecutedInformation()); -//// } -//// } -// -// return new OperationStatsType(getPrismContext()) -// .iterativeTaskInformation(iterativeTaskInformation) -// .synchronizationInformation(synchronizationInformation) -// .actionsExecutedInformation(actionsExecutedInformation); -// -// } -// -// return task.asObjectable().getOperationStats(); - } }; } - private List resolveSubTasks() { - List loadedSubtasks =new ArrayList<>(); - PrismObject taskType = getModelObject().getObject(); - if (taskType == null) { - return loadedSubtasks; //TODO throw exception? - } - - Task task = getPageBase().createSimpleTask(OPERATION_LOAD_SUBTASKS); - OperationResult result = task.getResult(); - resolveSubTasks(taskType.asObjectable(), true, loadedSubtasks, task, result); - return loadedSubtasks; - } - - private void resolveSubTasks(TaskType subTask, boolean alreadyLoaded, List allTasks, Task task, OperationResult result) { - List subTasks = new ArrayList<>(); - - PrismObject subTaskWithLoadedSubtasks; - if (alreadyLoaded) { - subTaskWithLoadedSubtasks = subTask.asPrismObject(); - } else { - subTaskWithLoadedSubtasks = WebModelServiceUtils.loadObject(TaskType.class, subTask.getOid(), - getSchemaHelper().getOperationOptionsBuilder().item(TaskType.F_SUBTASK_REF).retrieve().build(), getPageBase(), task, result); - } - - if (subTaskWithLoadedSubtasks == null) { - return; - } - - PrismReference subRefs = subTaskWithLoadedSubtasks.findReference(TaskType.F_SUBTASK_REF); - if (subRefs == null) { - return; - } - for (PrismReferenceValue refVal : subRefs.getValues()) { - addSubTasks(refVal, subTasks); - } - - allTasks.addAll(subTasks); - - for (TaskType subLoaded : subTasks) { - resolveSubTasks(subLoaded, false, allTasks, task, result); - } - - } - - private void addSubTasks(PrismReferenceValue subTaskRef, List loadedSubtasks) { - if (subTaskRef == null) { - return; - } - PrismObject subTask = subTaskRef.getObject(); - if (subTask == null) { - return; - } - - loadedSubtasks.add(subTask.asObjectable()); - } - @Override protected void onInitialize() { super.onInitialize(); @@ -350,6 +253,7 @@ protected boolean hideFooterIfSinglePage() { @Override public Collection getComponentsToUpdate() { + statisticsModel.reset(); List components = new ArrayList<>(); components.add(get(ID_ACTION_ENTRY)); components.add(get(ID_PROCESSING_INFO)); @@ -373,15 +277,7 @@ public SynchronizationInformationDto(String actionName, int countBefore, int cou this.countBefore = countBefore; this.countAfter = countAfter; } - } - @Override - protected void onDetach() { - super.onDetach(); - statisticsModel.reset(); - IModel> taskModel = getModel(); - if (taskModel instanceof LoadableModel) { - ((LoadableModel>) taskModel).reset(); - } } + } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/dto/TaskAddResourcesDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/dto/TaskAddResourcesDto.java deleted file mode 100644 index 19867adfa63..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/dto/TaskAddResourcesDto.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2010-2013 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.web.page.admin.server.dto; - -import com.evolveum.midpoint.schema.constants.ObjectTypes; -import com.evolveum.midpoint.schema.util.ObjectTypeUtil; -import com.evolveum.midpoint.web.component.util.Choiceable; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; -import com.evolveum.prism.xml.ns._public.types_3.PolyStringType; - -import java.io.Serializable; - -/** - * TODO replace with ObjectReferenceType - * - * @author mserbak - */ -public class TaskAddResourcesDto implements Serializable, Choiceable, Cloneable { - private String name; - private String oid; - - public TaskAddResourcesDto(String oid, String name) { - this.oid = oid; - this.name = name; - } - - @Override - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getOid() { - return oid; - } - - public void setOid(String oid) { - this.oid = oid; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof TaskAddResourcesDto)) return false; - - TaskAddResourcesDto that = (TaskAddResourcesDto) o; - - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (oid != null ? !oid.equals(that.oid) : that.oid != null) return false; - - return true; - } - - @Override - public int hashCode() { - int result = name != null ? name.hashCode() : 0; - result = 31 * result + (oid != null ? oid.hashCode() : 0); - return result; - } - - public ObjectReferenceType asObjectReferenceType() { - return ObjectTypeUtil.createObjectRef(oid, PolyStringType.fromOrig(name), ObjectTypes.RESOURCE); - } - - public TaskAddResourcesDto clone() { - return new TaskAddResourcesDto(oid, name); - } -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/dto/TaskChangesDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/dto/TaskChangesDto.java deleted file mode 100644 index 610f16fe04d..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/dto/TaskChangesDto.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.dto; - -import com.evolveum.midpoint.web.component.prism.show.SceneDto; -import org.jetbrains.annotations.NotNull; - -import java.io.Serializable; - -/** - * @author mederly - */ -public class TaskChangesDto implements Serializable { - - public static final String F_PRIMARY_DELTAS = "primaryDeltas"; - - @NotNull - private SceneDto primarySceneDto; - - public TaskChangesDto(@NotNull SceneDto primarySceneDto) { - this.primarySceneDto = primarySceneDto; - } - - public SceneDto getPrimaryDeltas() { - return primarySceneDto; - } - - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - - TaskChangesDto that = (TaskChangesDto) o; - - return primarySceneDto.equals(that.primarySceneDto); - - } - - @Override - public int hashCode() { - return primarySceneDto.hashCode(); - } - - public void applyFoldingFrom(@NotNull TaskChangesDto source) { - primarySceneDto.applyFoldingFrom(source.getPrimaryDeltas()); - } -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/dto/TaskDtoProviderOptions.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/dto/TaskDtoProviderOptions.java deleted file mode 100644 index 77bcde57ebd..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/dto/TaskDtoProviderOptions.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (c) 2010-2013 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.web.page.admin.server.dto; - -import java.io.Serializable; - -/** - * @author mederly - */ -public class TaskDtoProviderOptions implements Serializable { - - // default values must be 'most informative' - - /** - * Whether to ask for things requiring cluster communication (e.g. on which node is the task really executing) - */ - private boolean useClusterInformation = true; - private boolean resolveObjectRef = true; - private boolean resolveOwnerRef = true; // currently unused - private boolean getNextRunStartTime = true; - private boolean retrieveModelContext = true; - private boolean retrieveWorkflowContext = true; - private boolean getTaskParent = true; - private boolean retrieveSiblings = true; - private boolean retrieveOperationResult = true; - private boolean createHandlerDto = true; - private boolean resolveNames = true; - - public static TaskDtoProviderOptions minimalOptions() { - TaskDtoProviderOptions options = new TaskDtoProviderOptions(); - options.setUseClusterInformation(false); - options.setResolveObjectRef(false); - options.setResolveOwnerRef(false); - options.setGetNextRunStartTime(false); - options.setRetrieveModelContext(false); - options.setRetrieveWorkflowContext(false); - options.setGetTaskParent(false); - options.setRetrieveSiblings(false); - options.setRetrieveOperationResult(false); - options.setCreateHandlerDto(false); - return options; - } - - public static TaskDtoProviderOptions fullOptions() { - return new TaskDtoProviderOptions(); - } - - public boolean isUseClusterInformation() { - return useClusterInformation; - } - - public void setUseClusterInformation(boolean useClusterInformation) { - this.useClusterInformation = useClusterInformation; - } - - public boolean isResolveObjectRef() { - return resolveObjectRef; - } - - public void setResolveObjectRef(boolean resolveObjectRef) { - this.resolveObjectRef = resolveObjectRef; - } - - public boolean isResolveOwnerRef() { - return resolveOwnerRef; - } - - public void setResolveOwnerRef(boolean resolveOwnerRef) { - this.resolveOwnerRef = resolveOwnerRef; - } - - public boolean isGetNextRunStartTime() { - return getNextRunStartTime; - } - - public void setGetNextRunStartTime(boolean getNextRunStartTime) { - this.getNextRunStartTime = getNextRunStartTime; - } - - public boolean isRetrieveModelContext() { - return retrieveModelContext; - } - - public void setRetrieveModelContext(boolean retrieveModelContext) { - this.retrieveModelContext = retrieveModelContext; - } - - public boolean isRetrieveWorkflowContext() { - return retrieveWorkflowContext; - } - - public void setRetrieveWorkflowContext(boolean retrieveWorkflowContext) { - this.retrieveWorkflowContext = retrieveWorkflowContext; - } - - public boolean isGetTaskParent() { - return getTaskParent; - } - - public void setGetTaskParent(boolean getTaskParent) { - this.getTaskParent = getTaskParent; - } - - public boolean isRetrieveSiblings() { - return retrieveSiblings; - } - - public void setRetrieveSiblings(boolean retrieveSiblings) { - this.retrieveSiblings = retrieveSiblings; - } - - public boolean isRetrieveOperationResult() { - return retrieveOperationResult; - } - - public void setRetrieveOperationResult(boolean retrieveOperationResult) { - this.retrieveOperationResult = retrieveOperationResult; - } - - public boolean isCreateHandlerDto() { - return createHandlerDto; - } - - public void setCreateHandlerDto(boolean createHandlerDto) { - this.createHandlerDto = createHandlerDto; - } - - public boolean isResolveNames() { - return resolveNames; - } -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/DefaultHandlerPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/DefaultHandlerPanel.html deleted file mode 100644 index b5660ba286f..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/DefaultHandlerPanel.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - -

-
-
- - - - - - -
-
-
-
- - - - diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/DefaultHandlerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/DefaultHandlerPanel.java deleted file mode 100644 index 3610e5cda22..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/DefaultHandlerPanel.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers; - -import com.evolveum.midpoint.gui.api.component.BasePanel; -import com.evolveum.midpoint.gui.api.page.PageBase; -import com.evolveum.midpoint.gui.api.util.WebComponentUtil; -import com.evolveum.midpoint.web.component.data.column.LinkPanel; -import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; -import com.evolveum.midpoint.web.page.admin.server.handlers.dto.HandlerDto; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.PropertyModel; - -/** - * @author mederly - */ -public class DefaultHandlerPanel extends BasePanel { - private static final long serialVersionUID = 1L; - - private static final String ID_OBJECT_REF_CONTAINER = "objectRefContainer"; - private static final String ID_OBJECT_REF = "objectRef"; - - public DefaultHandlerPanel(String id, IModel model, PageBase parentPage) { - super(id, model); - initLayout(parentPage); - setOutputMarkupId(true); - } - - private void initLayout(final PageBase parentPage) { - WebMarkupContainer objectRefContainer = new WebMarkupContainer(ID_OBJECT_REF_CONTAINER); -// objectRefContainer.add(new VisibleEnableBehaviour() { -// @Override -// public boolean isVisible() { -// return getModelObject().getTaskDto().getObjectRef() != null; -// } -// }); - - final LinkPanel objectRef = new LinkPanel(ID_OBJECT_REF, new PropertyModel<>(getModel(), HandlerDto.F_OBJECT_REF_NAME)) { - @Override - public void onClick(AjaxRequestTarget target) { -// ObjectReferenceType ref = getModelObject().getObjectRef(); -// if (ref != null) { -// WebComponentUtil.dispatchToObjectDetailsPage(ref, parentPage, false); -// } - } -// @Override -// public boolean isEnabled() { -// return WebComponentUtil.hasDetailsPage(getModelObject().getObjectRef()); -// } - }; - objectRefContainer.add(objectRef); - add(objectRefContainer); - } - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/DeleteHandlerPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/DeleteHandlerPanel.html deleted file mode 100644 index 0d6cd5798df..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/DeleteHandlerPanel.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/DeleteHandlerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/DeleteHandlerPanel.java deleted file mode 100644 index 45f31d60958..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/DeleteHandlerPanel.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers; - -import com.evolveum.midpoint.web.page.admin.server.handlers.dto.DeleteHandlerDto; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.form.CheckBox; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.PropertyModel; - -/** - * @author mederly - */ -public class DeleteHandlerPanel extends QueryBasedHandlerPanel { - - private static final long serialVersionUID = 1L; - - private static final String ID_RAW_CONTAINER = "rawContainer"; - private static final String ID_RAW = "raw"; - - public DeleteHandlerPanel(String id, IModel handlerDtoModel) { - super(id, handlerDtoModel); - initLayout(); - } - - private void initLayout() { - WebMarkupContainer rawContainer = new WebMarkupContainer(ID_RAW_CONTAINER); - CheckBox raw = new CheckBox(ID_RAW, new PropertyModel<>(getModelObject(), DeleteHandlerDto.F_RAW)); - raw.setEnabled(false); - rawContainer.add(raw); - add(rawContainer); - } - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ExecuteChangesHandlerPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ExecuteChangesHandlerPanel.html deleted file mode 100644 index 921a96e7fd7..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ExecuteChangesHandlerPanel.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ExecuteChangesHandlerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ExecuteChangesHandlerPanel.java deleted file mode 100644 index 98f21e7a9b3..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ExecuteChangesHandlerPanel.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers; - -import com.evolveum.midpoint.web.page.admin.server.handlers.dto.ExecuteChangesHandlerDto; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.form.TextArea; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.PropertyModel; - -/** - * @author mederly - */ -public class ExecuteChangesHandlerPanel extends QueryBasedHandlerPanel { - private static final long serialVersionUID = 1L; - - private static final String ID_CHANGE_CONTAINER = "changeContainer"; - private static final String ID_CHANGE = "change"; - private static final String ID_OPTIONS_CONTAINER = "optionsContainer"; - private static final String ID_OPTIONS = "options"; - - public ExecuteChangesHandlerPanel(String id, IModel model) { - super(id, model); - initLayout(); - setOutputMarkupId(true); - } - - private void initLayout() { - WebMarkupContainer changeContainer = new WebMarkupContainer(ID_CHANGE_CONTAINER); - TextArea change = new TextArea<>(ID_CHANGE, new PropertyModel<>(getModel(), ExecuteChangesHandlerDto.F_OBJECT_DELTA_XML)); - change.setEnabled(false); - changeContainer.add(change); - add(changeContainer); - - WebMarkupContainer optionsContainer = new WebMarkupContainer(ID_OPTIONS_CONTAINER); - TextArea options = new TextArea<>(ID_OPTIONS, new PropertyModel<>(getModel(), ExecuteChangesHandlerDto.F_OPTIONS)); - options.setEnabled(false); - optionsContainer.add(options); - add(optionsContainer); - } - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/GenericHandlerPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/GenericHandlerPanel.html deleted file mode 100644 index 3f9e1259306..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/GenericHandlerPanel.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -
-
-
-
-
- - - - diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/GenericHandlerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/GenericHandlerPanel.java deleted file mode 100644 index 25e9b64f5e5..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/GenericHandlerPanel.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers; - -import com.evolveum.midpoint.gui.api.page.PageBase; - -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.PropertyModel; - -import com.evolveum.midpoint.gui.api.component.BasePanel; -import com.evolveum.midpoint.gui.impl.prism.PrismContainerPanel; -import com.evolveum.midpoint.web.page.admin.server.handlers.dto.GenericHandlerDto; - -/** - * @author mederly - */ -public class GenericHandlerPanel extends BasePanel { - private static final long serialVersionUID = 1L; - - public static final String ID_CONTAINER = "container"; - - public GenericHandlerPanel(String id, IModel model, PageBase parentPage) { - super(id, model); - initLayout(); - setOutputMarkupId(true); - } - - //TODO refactor to use registry - private void initLayout() { - PrismContainerPanel containerPanel = new PrismContainerPanel( - ID_CONTAINER, new PropertyModel<>(getModel(), GenericHandlerDto.F_CONTAINER), null); - add(containerPanel); - - } - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/HandlerDtoFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/HandlerDtoFactory.java deleted file mode 100644 index c75f8815788..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/HandlerDtoFactory.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers; - -import com.evolveum.midpoint.gui.api.page.PageBase; -import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.task.api.Task; -import com.evolveum.midpoint.web.page.admin.server.handlers.dto.*; - -/** - * @author mederly - */ -public class HandlerDtoFactory { - public static HandlerDtoFactory instance() { - return new HandlerDtoFactory(); // TODO - } - - public HandlerDto createDtoForTask(PageBase pageBase, Task opTask, OperationResult thisOpResult) { - return new LiveSyncHandlerDto(); -// if (taskDto.isLiveSync()) { -// return new LiveSyncHandlerDto(pageBase, opTask, thisOpResult); -// } else if (taskDto.isImportAccounts()) { -// return new ResourceRelatedHandlerDto(taskDto, pageBase, opTask, thisOpResult); -// } else if (taskDto.isReconciliation()) { -// return new ResourceRelatedHandlerDto(taskDto, pageBase, opTask, thisOpResult); -// } else if (taskDto.isTriggerScanner() || taskDto.isFocusValidityScanner()) { -// return new ScannerHandlerDto(taskDto); -// } else if (taskDto.isBulkAction()) { -// return new ScriptExecutionHandlerDto(taskDto); -// } else if (taskDto.isDelete()) { -// return new DeleteHandlerDto(taskDto); -// } else if (taskDto.isRecomputation()) { -// return new RecomputeHandlerDto(taskDto); -// } else if (taskDto.isExecuteChanges()) { -// return new ExecuteChangesHandlerDto(taskDto); -// } else if (taskDto.isShadowIntegrityCheck()) { -// return new GenericHandlerDto(taskDto, Arrays.asList( -// extensionItem(MODEL_EXTENSION_OBJECT_QUERY, QueryType.class), -// extensionItem(MODEL_EXTENSION_DIAGNOSE, String.class), -// extensionItem(MODEL_EXTENSION_FIX, String.class), -// extensionItem(MODEL_EXTENSION_DRY_RUN, Boolean.class), -// extensionItem(MODEL_EXTENSION_DUPLICATE_SHADOWS_RESOLVER, String.class), -// extensionItem(MODEL_EXTENSION_CHECK_DUPLICATES_ON_PRIMARY_IDENTIFIERS_ONLY, Boolean.class)), pageBase); -// } else if (taskDto.isCleanup()) { -// return new GenericHandlerDto(taskDto, Collections.singletonList( -// extensionItem(MODEL_EXTENSION_CLEANUP_POLICIES, CleanupPoliciesType.class)), pageBase); -// } else if (taskDto.isNoOp()) { -// return new GenericHandlerDto(taskDto, Arrays.asList( -// extensionItem(SchemaConstants.NOOP_STEPS_QNAME, Integer.class), -// extensionItem(SchemaConstants.NOOP_DELAY_QNAME, Integer.class)), pageBase); -// } else if (taskDto.isReportCreate()) { -// return new ReportCreateHandlerDto(taskDto); -// } else if (taskDto.isJdbcPing()) { -// return new GenericHandlerDto(Arrays.asList( -// extensionItem(SchemaConstants.JDBC_PING_TESTS_QNAME, Integer.class), -// extensionItem(SchemaConstants.JDBC_PING_INTERVAL_QNAME, Integer.class), -// extensionItem(SchemaConstants.JDBC_PING_TEST_QUERY_QNAME, String.class), -// extensionItem(SchemaConstants.JDBC_PING_JDBC_URL_QNAME, String.class), -// extensionItem(SchemaConstants.JDBC_PING_JDBC_USERNAME_QNAME, String.class), -// //item(SchemaConstants.JDBC_PING_JDBC_PASSWORD_QNAME, String.class), -// extensionItem(SchemaConstants.JDBC_PING_LOG_ON_INFO_LEVEL_QNAME, Boolean.class) -// ), pageBase); -// } else { -// return new HandlerDto(taskDto); -// } - } -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/HandlerPanelFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/HandlerPanelFactory.java deleted file mode 100644 index e50393257ea..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/HandlerPanelFactory.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers; - -import com.evolveum.midpoint.gui.api.page.PageBase; -import com.evolveum.midpoint.util.exception.SystemException; -import com.evolveum.midpoint.util.logging.Trace; -import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.web.page.admin.server.handlers.dto.*; -import org.apache.wicket.markup.html.panel.Panel; -import org.apache.wicket.model.IModel; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.LinkedHashMap; -import java.util.Map; - -/** - * @author mederly - */ -public class HandlerPanelFactory { - - private static final Trace LOGGER = TraceManager.getTrace(HandlerPanelFactory.class); - - public static Map, Class> panelsForHandlers; - - static { - panelsForHandlers = new LinkedHashMap<>(); // order is important! - panelsForHandlers.put(LiveSyncHandlerDto.class, LiveSyncHandlerPanel.class); - panelsForHandlers.put(ResourceRelatedHandlerDto.class, ResourceRelatedHandlerPanel.class); - panelsForHandlers.put(ScannerHandlerDto.class, ScannerHandlerPanel.class); - panelsForHandlers.put(ScriptExecutionHandlerDto.class, ScriptExecutionHandlerPanel.class); - panelsForHandlers.put(DeleteHandlerDto.class, DeleteHandlerPanel.class); - panelsForHandlers.put(RecomputeHandlerDto.class, QueryBasedHandlerPanel.class); - panelsForHandlers.put(ExecuteChangesHandlerDto.class, ExecuteChangesHandlerPanel.class); - panelsForHandlers.put(GenericHandlerDto.class, GenericHandlerPanel.class); - panelsForHandlers.put(ReportCreateHandlerDto.class, ReportCreateHandlerPanel.class); - panelsForHandlers.put(HandlerDto.class, DefaultHandlerPanel.class); - - } - public static HandlerPanelFactory instance() { - return new HandlerPanelFactory(); // TODO - } - - public Panel createPanelForTask(String id, IModel handlerDtoModel, PageBase parentPage) { - HandlerDto handlerDto = handlerDtoModel.getObject(); - for (Map.Entry, Class> entry : panelsForHandlers.entrySet()) { - //System.out.println("Checking " + entry.getKey()); - if (entry.getKey().isAssignableFrom(handlerDto.getClass())) { - LOGGER.trace("Using {} for {}", entry.getValue(), entry.getKey()); - return instantiate(entry.getValue(), id, handlerDtoModel, parentPage); - } - } - throw new IllegalStateException("No panel for " + handlerDto.getClass()); - } - - private Panel instantiate(Class clazz, String id, IModel handlerDtoModel, PageBase parentPage) { - try { - try { - Constructor constructor = clazz.getConstructor(String.class, IModel.class, PageBase.class); - return (Panel) constructor.newInstance(id, handlerDtoModel, parentPage); - } catch (NoSuchMethodException e) { - try { - Constructor constructor = clazz.getConstructor(String.class, IModel.class); - return (Panel) constructor.newInstance(id, handlerDtoModel); - } catch (NoSuchMethodException e1) { - throw new SystemException("Couldn't instantiate " + clazz + ": " + e1.getMessage(), e1); - } - } - } catch (InstantiationException|IllegalAccessException|InvocationTargetException|RuntimeException e) { - throw new SystemException("Couldn't instantiate " + clazz + ": " + e.getMessage(), e); - } - } -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/LiveSyncHandlerPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/LiveSyncHandlerPanel.html deleted file mode 100644 index 30e865acf08..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/LiveSyncHandlerPanel.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - -
- - - - - - - - - - diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/LiveSyncHandlerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/LiveSyncHandlerPanel.java deleted file mode 100644 index cc7f3bf6c93..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/LiveSyncHandlerPanel.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers; - -import com.evolveum.midpoint.gui.api.page.PageBase; -import com.evolveum.midpoint.web.component.data.column.LinkIconPanel; -import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; -import com.evolveum.midpoint.web.page.admin.server.handlers.dto.LiveSyncHandlerDto; -import com.evolveum.midpoint.web.page.admin.server.handlers.dto.ResourceRelatedHandlerDto; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.markup.html.form.CheckBox; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.Model; -import org.apache.wicket.model.PropertyModel; - -/** - * @author mederly - */ -public class LiveSyncHandlerPanel extends ResourceRelatedHandlerPanel { - - private static final long serialVersionUID = 1L; - - private static final String ID_TOKEN_CONTAINER = "tokenContainer"; - private static final String ID_TOKEN = "token"; - private static final String ID_DELETE_TOKEN = "deleteToken"; - - private static final String ID_TOKEN_RETRY_CONTAINER = "retryUnhandledErrContainer"; - private static final String ID_TOKEN_RETRY_CHECKBOX_CONTAINER = "retryUnhandledErrCheckboxContainer"; - private static final String ID_TOKEN_RETRY_CHECKBOX = "retryUnhandledErrCheckbox"; - - public LiveSyncHandlerPanel(String id, IModel handlerDtoModel, PageBase parentPage) { - super(id, handlerDtoModel, parentPage); - initLayout(parentPage); - } - - private void initLayout(final PageBase parentPage) { - WebMarkupContainer tokenContainer = new WebMarkupContainer(ID_TOKEN_CONTAINER); - tokenContainer.add(new VisibleEnableBehaviour() { - @Override - public boolean isVisible() { - return true; //TODO - } - }); - tokenContainer.add(new Label(ID_TOKEN, new PropertyModel<>(getModel(), LiveSyncHandlerDto.F_TOKEN))); - - LinkIconPanel deleteTokenPanel = new LinkIconPanel(ID_DELETE_TOKEN, new Model("fa fa-fw fa-trash-o fa-lg text-danger"), createStringResource("LiveSyncHandlerPanel.deleteToken")) { - @Override - protected void onClickPerformed(AjaxRequestTarget target) { -// parentPage.getController().deleteSyncTokenPerformed(target); - } - }; -// deleteTokenPanel.add(new VisibleEnableBehaviour() { -// @Override -// public boolean isVisible() { -// return !parentPage.isEdit() && getModelObject().hasToken(); // TODO ... and security -// } -// }); - deleteTokenPanel.setRenderBodyOnly(true); - tokenContainer.add(deleteTokenPanel); - add(tokenContainer); - - WebMarkupContainer retryContainer = new WebMarkupContainer(ID_TOKEN_RETRY_CONTAINER); - add(retryContainer); - WebMarkupContainer retryCheckboxContainer = new WebMarkupContainer(ID_TOKEN_RETRY_CHECKBOX_CONTAINER); - retryContainer.add(retryCheckboxContainer); - CheckBox retryCheckbox = new CheckBox(ID_TOKEN_RETRY_CHECKBOX, new PropertyModel<>(getModel(), ResourceRelatedHandlerDto.F_TOKEN_RETRY_UNHANDLED_ERR)); - retryCheckbox.add(enabledIfEdit); - retryCheckboxContainer.add(retryCheckbox); - } - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/QueryBasedHandlerPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/QueryBasedHandlerPanel.html deleted file mode 100644 index 3a28b16fddd..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/QueryBasedHandlerPanel.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - -
-
-
- - - - - - - - - - -
-
-
-
-
- - - diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/QueryBasedHandlerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/QueryBasedHandlerPanel.java deleted file mode 100644 index b1b721396c2..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/QueryBasedHandlerPanel.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers; - -import com.evolveum.midpoint.gui.api.component.BasePanel; -import com.evolveum.midpoint.web.page.admin.server.handlers.dto.QueryBasedHandlerDto; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.markup.html.form.TextArea; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.PropertyModel; - -/** - * @author mederly - */ -public class QueryBasedHandlerPanel extends BasePanel { - private static final long serialVersionUID = 1L; - - private static final String ID_OBJECT_TYPE_CONTAINER = "objectTypeContainer"; - private static final String ID_OBJECT_TYPE = "objectType"; - private static final String ID_OBJECT_QUERY_CONTAINER = "objectQueryContainer"; - private static final String ID_OBJECT_QUERY = "objectQuery"; - - public QueryBasedHandlerPanel(String id, IModel model) { - super(id, model); - initLayout(); - setOutputMarkupId(true); - } - - private void initLayout() { - WebMarkupContainer objectTypeContainer = new WebMarkupContainer(ID_OBJECT_TYPE_CONTAINER); - Label objectType = new Label(ID_OBJECT_TYPE, new IModel() { - @Override - public String getObject() { -// final String key = getModelObject().getObjectTypeKey(); -// return key != null ? getString(key) : null; - return null; - } - }); - objectTypeContainer.add(objectType); - add(objectTypeContainer); - - WebMarkupContainer objectQueryContainer = new WebMarkupContainer(ID_OBJECT_QUERY_CONTAINER); - TextArea objectQuery = new TextArea<>(ID_OBJECT_QUERY, new PropertyModel<>(getModel(), QueryBasedHandlerDto.F_OBJECT_QUERY)); - objectQuery.setEnabled(false); - objectQueryContainer.add(objectQuery); - add(objectQueryContainer); - } - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ReportCreateHandlerPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ReportCreateHandlerPanel.html deleted file mode 100644 index 4509145b2a3..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ReportCreateHandlerPanel.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ReportCreateHandlerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ReportCreateHandlerPanel.java deleted file mode 100644 index 96ea5e3d4de..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ReportCreateHandlerPanel.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers; - -import com.evolveum.midpoint.gui.api.page.PageBase; -import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; -import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.task.api.Task; -import com.evolveum.midpoint.web.component.AjaxButton; -import com.evolveum.midpoint.web.component.AjaxDownloadBehaviorFromStream; -import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; -import com.evolveum.midpoint.web.page.admin.reports.PageCreatedReports; -import com.evolveum.midpoint.web.page.admin.server.handlers.dto.ReportCreateHandlerDto; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ReportOutputType; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.form.TextArea; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.PropertyModel; - -import java.io.InputStream; - -/** - * @author mederly - */ -public class ReportCreateHandlerPanel extends DefaultHandlerPanel { - - private static final long serialVersionUID = 1L; - - private static final String ID_DOWNLOAD_CONTAINER = "downloadContainer"; - private static final String ID_DOWNLOAD = "download"; - private static final String ID_REPORT_PARAMETERS_CONTAINER = "reportParametersContainer"; - private static final String ID_REPORT_PARAMETERS = "reportParameters"; - - private static final String OPERATION_LOAD_REPORT_OUTPUT = ReportCreateHandlerPanel.class.getName() +"." + "loadReportOutput"; - - public ReportCreateHandlerPanel(String id, IModel model, PageBase parentPage) { - super(id, model, parentPage); - initLayout(parentPage); - } - - private void initLayout(final PageBase parentPage) { - - final AjaxDownloadBehaviorFromStream ajaxDownloadBehavior = new AjaxDownloadBehaviorFromStream() { - private static final long serialVersionUID = 1L; - - @Override - protected InputStream initStream() { - ReportOutputType reportObject = getReportOutput(parentPage); - if (reportObject != null) { - return PageCreatedReports.createReport(reportObject, this, parentPage); - } else { - return null; - } - } - - - @Override - public String getFileName() { - ReportOutputType reportObject = getReportOutput(parentPage); - return PageCreatedReports.getReportFileName(reportObject); - } - }; -// parentPage.getForm().add(ajaxDownloadBehavior); - - WebMarkupContainer reportParametersContainer = new WebMarkupContainer(ID_REPORT_PARAMETERS_CONTAINER); - TextArea reportParameters = new TextArea<>(ID_REPORT_PARAMETERS, new PropertyModel<>(getModel(), ReportCreateHandlerDto.F_REPORT_PARAMS)); - reportParameters.setEnabled(false); - reportParametersContainer.add(reportParameters); - add(reportParametersContainer); - - WebMarkupContainer downloadContainer = new WebMarkupContainer(ID_DOWNLOAD_CONTAINER); - AjaxButton download = new AjaxButton(ID_DOWNLOAD) { - - private static final long serialVersionUID = 1L; - - @Override - public void onClick(AjaxRequestTarget target) { - ajaxDownloadBehavior.initiate(target); - } - }; - downloadContainer.add(download); -// downloadContainer.add(new VisibleEnableBehaviour() { -// -// private static final long serialVersionUID = 1L; -// -// @Override -// public boolean isVisible() { -// ReportOutputType reportObject = getReportOutput(parentPage); -// return getModelObject().getReportOutputOid() != null && reportObject != null; -// } -// }); - add(downloadContainer); - } - - private ReportOutputType getReportOutput(PageBase parentPage) { - String outputOid = null;//getModelObject().getReportOutputOid(); - - if (outputOid == null) { - return null; - } - Task task = parentPage.createSimpleTask(OPERATION_LOAD_REPORT_OUTPUT); - PrismObject reportOutput = WebModelServiceUtils.loadObject(ReportOutputType.class, outputOid, parentPage, task, task.getResult()); - - if (reportOutput == null) { - return null; - } - return reportOutput.asObjectable(); - } - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ResourceRelatedHandlerPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ResourceRelatedHandlerPanel.html deleted file mode 100644 index d5c3ccf7e61..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ResourceRelatedHandlerPanel.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - -
-
-
- - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
-
-
- - diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ResourceRelatedHandlerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ResourceRelatedHandlerPanel.java deleted file mode 100644 index b17b035ddc6..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ResourceRelatedHandlerPanel.java +++ /dev/null @@ -1,272 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers; - -import com.evolveum.midpoint.common.refinery.RefinedResourceSchemaImpl; -import com.evolveum.midpoint.gui.api.component.BasePanel; -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.prism.Definition; -import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.schema.GetOperationOptions; -import com.evolveum.midpoint.schema.processor.ResourceSchema; -import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.task.api.Task; -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.component.input.ChoiceableChoiceRenderer; -import com.evolveum.midpoint.web.component.input.DropDownChoicePanel; -import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; -import com.evolveum.midpoint.web.page.admin.server.dto.TaskAddResourcesDto; -import com.evolveum.midpoint.web.page.admin.server.handlers.dto.ResourceRelatedHandlerDto; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowKindType; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; -import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteSettings; -import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.form.CheckBox; -import org.apache.wicket.markup.html.form.EnumChoiceRenderer; -import org.apache.wicket.markup.html.form.TextField; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.PropertyModel; -import org.apache.wicket.util.string.Strings; - -import javax.xml.namespace.QName; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - -/** - * @author semancik - * @author lazyman - * @author mserbak - * @author mederly - */ -public class ResourceRelatedHandlerPanel extends BasePanel { - private static final long serialVersionUID = 1L; - - private static final String DOT_CLASS = ResourceRelatedHandlerPanel.class.getName() + "."; - private static final String OPERATION_LOAD_RESOURCES = DOT_CLASS + "createResourceList"; - private static final String OPERATION_LOAD_RESOURCE = DOT_CLASS + "loadResource"; - - private static final Trace LOGGER = TraceManager.getTrace(ResourceRelatedHandlerPanel.class); - - private static final String ID_RESOURCE_REF_CONTAINER = "resourceRefContainer"; - private static final String ID_RESOURCE_REF = "resourceRef"; - private static final String ID_KIND_CONTAINER = "kindContainer"; - private static final String ID_KIND = "kind"; - private static final String ID_INTENT_CONTAINER = "intentContainer"; - private static final String ID_INTENT = "intent"; - private static final String ID_OBJECT_CLASS_CONTAINER = "objectClassContainer"; - private static final String ID_OBJECT_CLASS = "objectClass"; - private static final String ID_OPTIONS_CONTAINER = "optionsContainer"; - private static final String ID_DRY_RUN_CONTAINER = "dryRunContainer"; - private static final String ID_DRY_RUN = "dryRun"; - - private PageBase parentPage; - protected VisibleEnableBehaviour enabledIfEdit; - - public ResourceRelatedHandlerPanel(String id, IModel handlerDtoModel, PageBase parentPage) { - super(id, handlerDtoModel); - this.parentPage = parentPage; - initLayout(); - } - - private void initLayout() { - -// final VisibleEnableBehaviour visibleIfEdit = new VisibleEnableBehaviour() { -// @Override -// public boolean isVisible() { -// return parentPage.isEdit(); -// } -// }; -// final VisibleEnableBehaviour visibleIfView = new VisibleEnableBehaviour() { -// @Override -// public boolean isVisible() { -// return !parentPage.isEdit(); -// } -// }; -// enabledIfEdit = new VisibleEnableBehaviour() { -// -// @Override -// public boolean isEnabled() { -// return parentPage.isEdit(); -// } -// }; -// final VisibleEnableBehaviour visibleForResourceCoordinates = new VisibleEnableBehaviour() { -// @Override -// public boolean isVisible() { -// return getTaskDto().configuresResourceCoordinates(); -// } -// }; - - final WebMarkupContainer resourceRefContainer = new WebMarkupContainer(ID_RESOURCE_REF_CONTAINER); -// resourceRefContainer.add(visibleForResourceCoordinates); - resourceRefContainer.setOutputMarkupId(true); - add(resourceRefContainer); - - final DropDownChoicePanel resourceRef = new DropDownChoicePanel<>(ID_RESOURCE_REF, - new PropertyModel<>(getModel(), ResourceRelatedHandlerDto.F_RESOURCE_REFERENCE), - new IModel>() { - @Override - public List getObject() { - return createResourceList(); - } - }, new ChoiceableChoiceRenderer<>()); - resourceRef.setOutputMarkupId(true); - resourceRef.getBaseFormComponent().add(enabledIfEdit); - resourceRef.getBaseFormComponent().add(new AjaxFormComponentUpdatingBehavior("change") { - - @Override - protected void onUpdate(AjaxRequestTarget target) { - Task task = parentPage.createSimpleTask(OPERATION_LOAD_RESOURCE); - OperationResult result = task.getResult(); - List objectClassList = new ArrayList<>(); - - TaskAddResourcesDto resourcesDto = getModelObject().getResourceRef(); - - if(resourcesDto != null){ - PrismObject resource = WebModelServiceUtils.loadObject(ResourceType.class, - resourcesDto.getOid(), parentPage, task, result); - - try { - ResourceSchema schema = RefinedResourceSchemaImpl.getResourceSchema(resource, parentPage.getPrismContext()); - schema.getObjectClassDefinitions(); - - for(Definition def: schema.getDefinitions()){ - objectClassList.add(def.getTypeName()); - } - - getModelObject().setObjectClassList(objectClassList); - } catch (Exception e){ - LoggingUtils.logUnexpectedException(LOGGER, "Couldn't load object class list from resource.", e); - error("Couldn't load object class list from resource."); - } - - } - target.add(resourceRefContainer); - } - }); - resourceRefContainer.add(resourceRef); - - WebMarkupContainer kindContainer = new WebMarkupContainer(ID_KIND_CONTAINER); -// kindContainer.add(visibleForResourceCoordinates); - add(kindContainer); - - final DropDownChoicePanel kind = new DropDownChoicePanel<>(ID_KIND, - new PropertyModel<>(getModel(), ResourceRelatedHandlerDto.F_KIND), - WebComponentUtil.createReadonlyModelFromEnum(ShadowKindType.class), new EnumChoiceRenderer<>()); - kind.setOutputMarkupId(true); - kind.getBaseFormComponent().setNullValid(true); - kindContainer.add(kind); - - WebMarkupContainer intentContainer = new WebMarkupContainer(ID_INTENT_CONTAINER); -// intentContainer.add(visibleForResourceCoordinates); - add(intentContainer); - - final TextField intent = new TextField<>(ID_INTENT, new PropertyModel(getModel(), ResourceRelatedHandlerDto.F_INTENT)); - intentContainer.add(intent); - intent.setOutputMarkupId(true); - intent.add(enabledIfEdit); - - WebMarkupContainer objectClassContainer = new WebMarkupContainer(ID_OBJECT_CLASS_CONTAINER); -// objectClassContainer.add(visibleForResourceCoordinates); - add(objectClassContainer); - - AutoCompleteSettings autoCompleteSettings = new AutoCompleteSettings(); - autoCompleteSettings.setShowListOnEmptyInput(true); - final AutoCompleteTextField objectClass = new AutoCompleteTextField(ID_OBJECT_CLASS, - new PropertyModel<>(getModel(), ResourceRelatedHandlerDto.F_OBJECT_CLASS), autoCompleteSettings) { - - @Override - protected Iterator getChoices(String input) { - - return prepareObjectClassChoiceList(input); - } - }; - objectClass.add(enabledIfEdit); - objectClassContainer.add(objectClass); - - WebMarkupContainer optionsContainer = new WebMarkupContainer(ID_OPTIONS_CONTAINER); -// optionsContainer.add(new VisibleEnableBehaviour() { -// @Override -// public boolean isVisible() { -// return getTaskDto().configuresDryRun(); -// } -// }); - add(optionsContainer); - - WebMarkupContainer dryRunContainer = new WebMarkupContainer(ID_DRY_RUN_CONTAINER); -// dryRunContainer.add(new VisibleEnableBehaviour() { -// @Override -// public boolean isVisible() { -// return getTaskDto().configuresDryRun(); -// } -// }); - optionsContainer.add(dryRunContainer); - CheckBox dryRun = new CheckBox(ID_DRY_RUN, new PropertyModel<>(getModel(), ResourceRelatedHandlerDto.F_DRY_RUN)); - dryRun.add(enabledIfEdit); - dryRunContainer.add(dryRun); - } - - - - private List createResourceList() { - OperationResult result = new OperationResult(OPERATION_LOAD_RESOURCES); - Task task = parentPage.createSimpleTask(OPERATION_LOAD_RESOURCES); - List> resources = null; - List resourceList = new ArrayList<>(); - - try { - resources = parentPage.getModelService().searchObjects(ResourceType.class, null, - GetOperationOptions.createNoFetchCollection(), task, result); - result.recomputeStatus(); - } catch (Exception ex) { - result.recordFatalError(getString("ResourceRelatedHandlerPanel.message.createResourceList.fatalError"), ex); - LoggingUtils.logUnexpectedException(LOGGER, "Couldn't get resource list", ex); - } - - if (resources != null) { - ResourceType item = null; - for (PrismObject resource : resources) { - item = resource.asObjectable(); - resourceList.add(new TaskAddResourcesDto(item.getOid(), WebComponentUtil.getOrigStringFromPoly(item.getName()))); - } - } - return resourceList; - } - - private Iterator prepareObjectClassChoiceList(String input){ - List choices = new ArrayList<>(); - - if(getModelObject().getResourceRef() == null){ - return choices.iterator(); - } - - if(Strings.isEmpty(input)){ - for(QName q: getModelObject().getObjectClassList()){ - choices.add(q.getLocalPart()); - Collections.sort(choices); - } - } else { - for(QName q: getModelObject().getObjectClassList()){ - if(q.getLocalPart().startsWith(input)){ - choices.add(q.getLocalPart()); - } - Collections.sort(choices); - } - } - - return choices.iterator(); - } - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ScannerHandlerPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ScannerHandlerPanel.html deleted file mode 100644 index 9a9b55fb40d..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ScannerHandlerPanel.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - -
-
-
- - - - - -
-
-
-
-
- - - diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ScannerHandlerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ScannerHandlerPanel.java deleted file mode 100644 index 06c3c789492..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ScannerHandlerPanel.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers; - -import com.evolveum.midpoint.gui.api.component.BasePanel; -import com.evolveum.midpoint.web.page.admin.server.handlers.dto.ScannerHandlerDto; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.PropertyModel; - -/** - * @author mederly - */ -public class ScannerHandlerPanel extends BasePanel { - private static final long serialVersionUID = 1L; - - private static final String ID_LAST_SCAN_TIMESTAMP_CONTAINER = "lastScanTimestampContainer"; - private static final String ID_LAST_SCAN_TIMESTAMP = "lastScanTimestamp"; - - public ScannerHandlerPanel(String id, IModel model) { - super(id, model); - initLayout(); - setOutputMarkupId(true); - } - - private void initLayout() { - WebMarkupContainer lastScanTimestampContainer = new WebMarkupContainer(ID_LAST_SCAN_TIMESTAMP_CONTAINER); -// lastScanTimestampContainer.add(new VisibleEnableBehaviour() { -// @Override -// public boolean isVisible() { -// return getModelObject().getTaskDto().getObjectRefOid() != null; -// } -// }); - lastScanTimestampContainer.add(new Label(ID_LAST_SCAN_TIMESTAMP, new PropertyModel<>(getModel(), ScannerHandlerDto.F_LAST_SCAN_TIMESTAMP))); - add(lastScanTimestampContainer); - } - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ScriptExecutionHandlerPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ScriptExecutionHandlerPanel.html deleted file mode 100644 index af3f7a94e47..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ScriptExecutionHandlerPanel.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - -
-
-
- - - - - -
-
-
-
-
- - - diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ScriptExecutionHandlerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ScriptExecutionHandlerPanel.java deleted file mode 100644 index 0dca9cc0559..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/ScriptExecutionHandlerPanel.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers; - -import com.evolveum.midpoint.gui.api.component.BasePanel; -import com.evolveum.midpoint.web.page.admin.server.handlers.dto.ScriptExecutionHandlerDto; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.form.TextArea; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.PropertyModel; - -/** - * @author mederly - */ -public class ScriptExecutionHandlerPanel extends BasePanel { - private static final long serialVersionUID = 1L; - - private static final String ID_SCRIPT_CONTAINER = "scriptContainer"; - private static final String ID_SCRIPT = "script"; - - public ScriptExecutionHandlerPanel(String id, IModel model) { - super(id, model); - initLayout(); - setOutputMarkupId(true); - } - - private void initLayout() { - WebMarkupContainer scriptContainer = new WebMarkupContainer(ID_SCRIPT_CONTAINER); - TextArea script = new TextArea<>(ID_SCRIPT, new PropertyModel<>(getModel(), ScriptExecutionHandlerDto.F_SCRIPT)); - script.setEnabled(false); - scriptContainer.add(script); - add(scriptContainer); - } - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/DeleteHandlerDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/DeleteHandlerDto.java deleted file mode 100644 index f6d40ae71ef..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/DeleteHandlerDto.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers.dto; - -/** - * TODO use composition instead of inheritance - * - * @author mederly - */ -public class DeleteHandlerDto extends QueryBasedHandlerDto { - - public static final String F_RAW = "raw"; - - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/ExecuteChangesHandlerDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/ExecuteChangesHandlerDto.java deleted file mode 100644 index dd11add6bf3..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/ExecuteChangesHandlerDto.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers.dto; - -/** - * @author mederly - */ -public class ExecuteChangesHandlerDto extends QueryBasedHandlerDto { - - public static final String F_OBJECT_DELTA_XML = "objectDeltaXml"; - public static final String F_OPTIONS = "options"; - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/GenericHandlerDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/GenericHandlerDto.java deleted file mode 100644 index 1a7194c0bbb..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/GenericHandlerDto.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers.dto; - -import java.io.Serializable; -import java.util.List; - -import javax.xml.namespace.QName; - -import org.jetbrains.annotations.NotNull; - -import com.evolveum.midpoint.gui.api.page.PageBase; -import com.evolveum.midpoint.gui.api.prism.ItemStatus; -import com.evolveum.midpoint.gui.api.prism.PrismContainerWrapper; -import com.evolveum.midpoint.gui.impl.factory.ItemWrapperFactory; -import com.evolveum.midpoint.gui.impl.factory.PrismContainerWrapperFactory; -import com.evolveum.midpoint.gui.impl.factory.WrapperContext; -import com.evolveum.midpoint.prism.ComplexTypeDefinition; -import com.evolveum.midpoint.prism.Item; -import com.evolveum.midpoint.prism.ItemDefinition; -import com.evolveum.midpoint.prism.MutableItemDefinition; -import com.evolveum.midpoint.prism.MutablePrismContainerDefinition; -import com.evolveum.midpoint.prism.PrismContainer; -import com.evolveum.midpoint.prism.PrismContext; -import com.evolveum.midpoint.prism.util.CloneUtil; -import com.evolveum.midpoint.task.api.Task; -import com.evolveum.midpoint.util.exception.SchemaException; -import com.evolveum.midpoint.util.exception.SystemException; -import com.evolveum.midpoint.util.logging.Trace; -import com.evolveum.midpoint.util.logging.TraceManager; - -/** - * @author mederly - */ -public class GenericHandlerDto extends HandlerDto { - - private static final Trace LOGGER = TraceManager.getTrace(GenericHandlerDto.class); - - public static final String F_CONTAINER = "container"; - - public static class ExtensionItem implements Serializable { - @NotNull private final QName name; - @NotNull private final Class type; - - public ExtensionItem(@NotNull QName name, @NotNull Class type) { - this.name = name; - this.type = type; - } - - @NotNull - public QName getName() { - return name; - } - - @NotNull - public Class getType() { - return type; - } - } - - public static ExtensionItem extensionItem(QName name, Class type) { - return new ExtensionItem(name, type); - } - - private PrismContainerWrapper containerWrapper = null; - - public GenericHandlerDto(@NotNull List extensionItems, PageBase pageBase) { - PrismContext prismContext = pageBase.getPrismContext(); - - PrismContainer container = prismContext.itemFactory().createContainer(new QName("test")); - ComplexTypeDefinition ctd = prismContext.definitionFactory().createComplexTypeDefinition(new QName("Test")); - int displayOrder = 1; - for (ExtensionItem extensionItem : extensionItems) { - Item item = null;//taskDto.getExtensionItem(extensionItem.name); - MutableItemDefinition clonedDefinition = null; - if (item != null) { - try { - Item clonedItem = item.clone(); - //noinspection unchecked - container.add(clonedItem); - if (clonedItem.getDefinition() != null) { - clonedDefinition = clonedItem.getDefinition().clone().toMutable(); - //noinspection unchecked - ((Item) clonedItem).setDefinition(clonedDefinition); - } - } catch (SchemaException e) { - throw new SystemException(e); - } - } - if (clonedDefinition == null) { - ItemDefinition definition = prismContext.getSchemaRegistry().findItemDefinitionByElementName(extensionItem.name); - if (definition != null) { - clonedDefinition = CloneUtil.clone(definition).toMutable(); - } - } - if (clonedDefinition == null) { - LOGGER.warn("Extension item without definition: {} of {}", extensionItem.name, extensionItem.type); - } else { - clonedDefinition.setCanAdd(false); - clonedDefinition.setCanModify(false); - clonedDefinition.setDisplayOrder(displayOrder); - ctd.toMutable().add(clonedDefinition); - } - displayOrder++; - } - MutablePrismContainerDefinition containerDefinition = prismContext.definitionFactory().createContainerDefinition(new QName("Handler data"), ctd); - //noinspection unchecked - container.setDefinition(containerDefinition); - Task task = pageBase.createSimpleTask("Adding new container wrapper"); - ItemWrapperFactory factory = pageBase.findWrapperFactory(containerDefinition); - if (factory instanceof PrismContainerWrapperFactory) { - - PrismContainerWrapperFactory containerF = (PrismContainerWrapperFactory) factory; - - WrapperContext ctx = new WrapperContext(task, task.getResult()); - try { - containerWrapper = (PrismContainerWrapper) containerF.createWrapper(container, ItemStatus.NOT_CHANGED, ctx); - } catch (SchemaException e) { - LOGGER.error("Error creating wrapper for {}", container); - } - } - } - - public PrismContainerWrapper getContainer() { - return containerWrapper; - } -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/HandlerDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/HandlerDto.java deleted file mode 100644 index 43766b5d51c..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/HandlerDto.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers.dto; - -import java.io.Serializable; - -/** - * @author mederly - */ -public class HandlerDto implements Serializable { - public static final String F_OBJECT_REF_NAME = "objectRefName"; - public static final String F_OBJECT_REF = "objectRef"; - - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/HandlerDtoEditableState.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/HandlerDtoEditableState.java deleted file mode 100644 index ec8a254f28d..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/HandlerDtoEditableState.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers.dto; - -import java.io.Serializable; - -/** - * @author mederly - */ -public interface HandlerDtoEditableState extends Serializable, Cloneable { -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/LiveSyncHandlerDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/LiveSyncHandlerDto.java deleted file mode 100644 index 6abc9a69a0b..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/LiveSyncHandlerDto.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers.dto; - -/** - * @author mederly - */ -public class LiveSyncHandlerDto extends ResourceRelatedHandlerDto { - - public static final String F_TOKEN = "token"; - - private String token; - - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/QueryBasedHandlerDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/QueryBasedHandlerDto.java deleted file mode 100644 index 219d0030aa2..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/QueryBasedHandlerDto.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers.dto; - -/** - * TODO use composition instead of inheritance - * - * @author mederly - */ -public class QueryBasedHandlerDto extends HandlerDto { - - public static final String F_OBJECT_TYPE_KEY = "objectTypeKey"; - public static final String F_OBJECT_QUERY = "objectQuery"; - - - - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/RecomputeHandlerDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/RecomputeHandlerDto.java deleted file mode 100644 index 17110f9426a..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/RecomputeHandlerDto.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers.dto; - -/** - * @author mederly - */ -public class RecomputeHandlerDto extends QueryBasedHandlerDto { - - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/ReportCreateHandlerDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/ReportCreateHandlerDto.java deleted file mode 100644 index 732f6cdd731..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/ReportCreateHandlerDto.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers.dto; - -/** - * @author mederly - */ -public class ReportCreateHandlerDto extends HandlerDto { - - public static final String F_REPORT_PARAMS = "reportParams"; - public static final String F_REPORT_OUTPUT_OID = "reportOutputOid"; - - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/ResourceRelatedHandlerDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/ResourceRelatedHandlerDto.java deleted file mode 100644 index 4d8be7e6434..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/ResourceRelatedHandlerDto.java +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright (c) 2010-2019 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.web.page.admin.server.handlers.dto; - -import com.evolveum.midpoint.common.refinery.RefinedResourceSchemaImpl; -import com.evolveum.midpoint.gui.api.page.PageBase; -import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; -import com.evolveum.midpoint.prism.*; -import com.evolveum.midpoint.prism.delta.ItemDelta; -import com.evolveum.midpoint.prism.path.ItemPath; -import com.evolveum.midpoint.prism.util.CloneUtil; -import com.evolveum.midpoint.schema.constants.SchemaConstants; -import com.evolveum.midpoint.schema.processor.ResourceSchema; -import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.task.api.Task; -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.page.admin.server.dto.TaskAddResourcesDto; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowKindType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType; - -import javax.xml.namespace.QName; -import java.util.ArrayList; -import java.util.List; - -/** - * @author mederly - */ -public class ResourceRelatedHandlerDto extends HandlerDto implements HandlerDtoEditableState { - - public static final String F_DRY_RUN = "dryRun"; - public static final String F_KIND = "kind"; - public static final String F_INTENT = "intent"; - public static final String F_OBJECT_CLASS = "objectClass"; - public static final String F_RESOURCE_REFERENCE = "resourceRef"; - public static final String F_TOKEN_RETRY_UNHANDLED_ERR = "retryUnhandledErr"; - - private static final String CLASS_DOT = ResourceRelatedHandlerDto.class.getName() + "."; - private static final String OPERATION_LOAD_RESOURCE = CLASS_DOT + "loadResource"; - - private static final Trace LOGGER = TraceManager.getTrace(ResourceRelatedHandlerDto.class); - - private boolean dryRun; - private ShadowKindType kind; - private String intent; - private String objectClass; - private List objectClassList; - private TaskAddResourcesDto resourceRef; - private boolean retryUnhandledErr; - - - private void fillFromExtension(TaskType taskType) { - PrismObject task = taskType.asPrismObject(); - if (task.getExtension() == null) { - dryRun = false; - return; - } - - PrismProperty item = task.getExtension().findProperty(SchemaConstants.MODEL_EXTENSION_DRY_RUN); - if (item == null || item.getRealValue() == null) { - dryRun = false; - } else { - dryRun = item.getRealValue(); - } - - PrismProperty kindItem = task.getExtension().findProperty(SchemaConstants.MODEL_EXTENSION_KIND); - if(kindItem != null && kindItem.getRealValue() != null){ - kind = kindItem.getRealValue(); - } - - PrismProperty intentItem = task.getExtension().findProperty(SchemaConstants.MODEL_EXTENSION_INTENT); - if(intentItem != null && intentItem.getRealValue() != null){ - intent = intentItem.getRealValue(); - } - - PrismProperty objectClassItem = task.getExtension().findProperty(SchemaConstants.MODEL_EXTENSION_OBJECTCLASS); - if(objectClassItem != null && objectClassItem.getRealValue() != null){ - objectClass = objectClassItem.getRealValue().getLocalPart(); - } - - PrismProperty retrySyncItem = task.getExtension().findProperty(SchemaConstants.MODEL_EXTENSION_RETRY_LIVE_SYNC_ERRORS); - if (retrySyncItem == null || retrySyncItem.getRealValue() == null) { - retryUnhandledErr = true; - } else { - retryUnhandledErr = retrySyncItem.getRealValue(); - } - } - - public boolean isDryRun() { - return dryRun; - } - - public void setDryRun(boolean dryRun) { - this.dryRun = dryRun; - } - - public boolean isRetryUnhandledErr() { - return retryUnhandledErr; - } - - public void setRetryUnhandledErr(boolean retryUnhandledErr) { - this.retryUnhandledErr = retryUnhandledErr; - } - - public String getIntent() { - return intent; - } - - public void setIntent(String intent) { - this.intent = intent; - } - - public ShadowKindType getKind() { - return kind; - } - - public void setKind(ShadowKindType kind) { - this.kind = kind; - } - - public String getObjectClass() { - return objectClass; - } - - public void setObjectClass(String objectClass) { - this.objectClass = objectClass; - } - - public List getObjectClassList() { - if (objectClassList == null) { - objectClassList = new ArrayList<>(); - } - return objectClassList; - } - - public void setObjectClassList(List objectClassList) { - this.objectClassList = objectClassList; - } - - private void fillInResourceReference(TaskType task, PageBase pageBase, Task opTask, OperationResult result) { - ObjectReferenceType ref = task.getObjectRef(); -// if (ref != null && ResourceType.COMPLEX_TYPE.equals(ref.getType())){ -// resourceRef = new TaskAddResourcesDto(ref.getOid(), taskDto.getTaskObjectName(task, pageBase, opTask, result)); -// } - updateObjectClassList(pageBase); - } - - private void updateObjectClassList(PageBase pageBase){ - Task task = pageBase.createSimpleTask(OPERATION_LOAD_RESOURCE); - OperationResult result = task.getResult(); - List objectClassList = new ArrayList<>(); - - if(resourceRef != null){ - PrismObject resource = WebModelServiceUtils.loadObject(ResourceType.class, resourceRef.getOid(), - pageBase, task, result); - - try { - ResourceSchema schema = RefinedResourceSchemaImpl.getResourceSchema(resource, pageBase.getPrismContext()); - schema.getObjectClassDefinitions(); - - for(Definition def: schema.getDefinitions()){ - objectClassList.add(def.getTypeName()); - } - - setObjectClassList(objectClassList); - } catch (Exception e){ - LoggingUtils.logUnexpectedException(LOGGER, "Couldn't load object class list from resource.", e); - } - } - } - - public TaskAddResourcesDto getResourceRef() { - return resourceRef; - } - - public void setResource(TaskAddResourcesDto resource) { - this.resourceRef = resource; -// taskDto.setObjectRef(resource != null ? resource.asObjectReferenceType() : null); - } - - - - private void addExtensionDelta(List> rv, QName itemName, Object realValue, PrismContext prismContext) - throws SchemaException { - PrismPropertyDefinition def = prismContext.getSchemaRegistry().findPropertyDefinitionByElementName(itemName); - rv.add(prismContext.deltaFor(TaskType.class) - .item(ItemPath.create(TaskType.F_EXTENSION, itemName), def).replace(realValue).asItemDelta()); - } - - - // TODO implement seriously - public ResourceRelatedHandlerDto clone() { - ResourceRelatedHandlerDto clone = new ResourceRelatedHandlerDto(); - clone.dryRun = dryRun; - clone.retryUnhandledErr = retryUnhandledErr; - clone.kind = kind; - clone.intent = intent; - clone.objectClass = objectClass; - clone.objectClassList = CloneUtil.clone(objectClassList); - clone.resourceRef = CloneUtil.clone(resourceRef); - return clone; - } -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/ScannerHandlerDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/ScannerHandlerDto.java deleted file mode 100644 index 30f8036196c..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/ScannerHandlerDto.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers.dto; - -/** - * @author mederly - */ -public class ScannerHandlerDto extends HandlerDto { - - public static final String F_LAST_SCAN_TIMESTAMP = "lastScanTimestamp"; - - - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/ScriptExecutionHandlerDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/ScriptExecutionHandlerDto.java deleted file mode 100644 index fdec72a1a71..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/dto/ScriptExecutionHandlerDto.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.server.handlers.dto; - -/** - * @author mederly - */ -public class ScriptExecutionHandlerDto extends HandlerDto { - - public static final String F_SCRIPT = "script"; - - - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/services/PageService.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/services/PageService.java index 3cd20623b1d..22e763b9506 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/services/PageService.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/services/PageService.java @@ -1,115 +1,106 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.services; - -import java.util.List; - -import javax.xml.namespace.QName; - -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.model.Model; -import org.apache.wicket.request.mapper.parameter.PageParameters; - -import com.evolveum.midpoint.gui.api.util.WebComponentUtil; -import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.security.api.AuthorizationConstants; -import com.evolveum.midpoint.web.application.AuthorizationAction; -import com.evolveum.midpoint.web.application.PageDescriptor; -import com.evolveum.midpoint.web.component.FocusSummaryPanel; -import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectMainPanel; -import com.evolveum.midpoint.web.component.objectdetails.AbstractRoleMainPanel; -import com.evolveum.midpoint.web.component.progress.ProgressReportingAwarePage; -import com.evolveum.midpoint.web.page.admin.PageAdminAbstractRole; -import com.evolveum.midpoint.web.page.admin.roles.AbstractRoleMemberPanel; -import com.evolveum.midpoint.web.page.admin.users.component.ServiceSummaryPanel; -import com.evolveum.midpoint.web.security.GuiAuthorizationConstants; -import com.evolveum.midpoint.web.session.UserProfileStorage.TableId; -import com.evolveum.midpoint.web.util.OnePageParameterEncoder; -import com.evolveum.midpoint.xml.ns._public.common.common_3.AreaCategoryType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ServiceType; - -@PageDescriptor(url = "/admin/service", encoder = OnePageParameterEncoder.class, action = { - @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_SERVICES_ALL_URL, - label = "PageAdminServices.auth.servicesAll.label", - description = "PageAdminServices.auth.servicesAll.description"), - @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_SERVICE_URL, - label = "PageService.auth.role.label", - description = "PageService.auth.role.description") }) -public class PageService extends PageAdminAbstractRole implements ProgressReportingAwarePage{ - - private static final long serialVersionUID = 1L; - - public PageService() { - super(); - } - - public PageService(PageParameters parameters) { - super(parameters); - } - - public PageService(final PrismObject role) { - super(role); - } - - public PageService(final PrismObject userToEdit, boolean isNewObject) { - super(userToEdit, isNewObject); - } - - public PageService(final PrismObject abstractRole, boolean isNewObject, boolean isReadonly) { - super(abstractRole, isNewObject, isReadonly); - } - - @Override - protected ServiceType createNewObject() { - return new ServiceType(); - } - - @Override - public Class getCompileTimeClass() { - return ServiceType.class; - } - - @Override - protected Class getRestartResponsePage() { - return PageServices.class; - } - - @Override - protected FocusSummaryPanel createSummaryPanel() { - return new ServiceSummaryPanel(ID_SUMMARY_PANEL, Model.of(getObjectModel().getObject().getObject().asObjectable()), this); - } - - @Override - protected AbstractObjectMainPanel createMainPanel(String id) { - return new AbstractRoleMainPanel(id, getObjectModel(), - getProjectionModel(), this) { - private static final long serialVersionUID = 1L; - - @Override - protected void viewObjectHistoricalDataPerformed(AjaxRequestTarget target, PrismObject object, String date){ - PageService.this.navigateToNext(new PageServiceHistory(object, date)); - } - - @Override - protected boolean isFocusHistoryPage(){ - return PageService.this.isFocusHistoryPage(); - } - - @Override - protected boolean getOptionsPanelVisibility() { - if (isSelfProfile()){ - return false; - } else { - return super.getOptionsPanelVisibility(); - } - } - - }; - } - -} +/* + * Copyright (c) 2010-2017 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.web.page.admin.services; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.security.api.AuthorizationConstants; +import com.evolveum.midpoint.web.application.AuthorizationAction; +import com.evolveum.midpoint.web.application.PageDescriptor; +import com.evolveum.midpoint.web.component.FocusSummaryPanel; +import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectMainPanel; +import com.evolveum.midpoint.web.component.objectdetails.AbstractRoleMainPanel; +import com.evolveum.midpoint.web.component.progress.ProgressReportingAwarePage; +import com.evolveum.midpoint.web.page.admin.PageAdminAbstractRole; +import com.evolveum.midpoint.web.page.admin.users.component.ServiceSummaryPanel; +import com.evolveum.midpoint.web.util.OnePageParameterEncoder; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ServiceType; + +@PageDescriptor(url = "/admin/service", encoder = OnePageParameterEncoder.class, action = { + @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_SERVICES_ALL_URL, + label = "PageAdminServices.auth.servicesAll.label", + description = "PageAdminServices.auth.servicesAll.description"), + @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_SERVICE_URL, + label = "PageService.auth.role.label", + description = "PageService.auth.role.description") }) +public class PageService extends PageAdminAbstractRole implements ProgressReportingAwarePage{ + + private static final long serialVersionUID = 1L; + + public PageService() { + super(); + } + + public PageService(PageParameters parameters) { + super(parameters); + } + + public PageService(final PrismObject role) { + super(role); + } + + public PageService(final PrismObject userToEdit, boolean isNewObject) { + super(userToEdit, isNewObject); + } + + public PageService(final PrismObject abstractRole, boolean isNewObject, boolean isReadonly) { + super(abstractRole, isNewObject, isReadonly); + } + + @Override + protected ServiceType createNewObject() { + return new ServiceType(); + } + + @Override + public Class getCompileTimeClass() { + return ServiceType.class; + } + + @Override + protected Class getRestartResponsePage() { + return PageServices.class; + } + + @Override + protected FocusSummaryPanel createSummaryPanel(IModel summaryModel) { + return new ServiceSummaryPanel(ID_SUMMARY_PANEL, summaryModel, this); + } + + @Override + protected AbstractObjectMainPanel createMainPanel(String id) { + return new AbstractRoleMainPanel(id, getObjectModel(), + getProjectionModel(), this) { + private static final long serialVersionUID = 1L; + + @Override + protected void viewObjectHistoricalDataPerformed(AjaxRequestTarget target, PrismObject object, String date){ + PageService.this.navigateToNext(new PageServiceHistory(object, date)); + } + + @Override + protected boolean isFocusHistoryPage(){ + return PageService.this.isFocusHistoryPage(); + } + + @Override + protected boolean getOptionsPanelVisibility() { + if (isSelfProfile()){ + return false; + } else { + return super.getOptionsPanelVisibility(); + } + } + + }; + } + +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageMergeObjects.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageMergeObjects.java index cb5ec872b8c..eb456ae79b8 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageMergeObjects.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageMergeObjects.java @@ -1,240 +1,240 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.users; - -import com.evolveum.midpoint.gui.api.component.tabs.PanelTab; -import com.evolveum.midpoint.gui.api.model.CountableLoadableModel; -import com.evolveum.midpoint.gui.api.model.LoadableModel; -import com.evolveum.midpoint.gui.api.prism.ShadowWrapper; -import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.security.api.AuthorizationConstants; -import com.evolveum.midpoint.task.api.Task; -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.AuthorizationAction; -import com.evolveum.midpoint.web.application.PageDescriptor; -import com.evolveum.midpoint.web.component.FocusSummaryPanel; -import com.evolveum.midpoint.web.component.ObjectSummaryPanel; -import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectMainPanel; -import com.evolveum.midpoint.web.component.objectdetails.FocusMainPanel; -import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; -import com.evolveum.midpoint.web.page.admin.PageAdminFocus; -import com.evolveum.midpoint.web.page.admin.PageAdminObjectDetails; -import com.evolveum.midpoint.web.page.admin.users.component.MergeObjectsPanel; -import com.evolveum.midpoint.web.page.admin.users.component.UserSummaryPanel; -import com.evolveum.midpoint.web.page.admin.users.dto.FocusSubwrapperDto; -import com.evolveum.midpoint.web.util.OnePageParameterEncoder; -import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.extensions.markup.html.tabs.ITab; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.model.IModel; -import org.apache.wicket.request.mapper.parameter.PageParameters; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by honchar. - */ -@PageDescriptor(url = "/admin/mergeObjects", encoder = OnePageParameterEncoder.class, action = { - @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_USERS_ALL_URL, - label = "PageAdminUsers.auth.usersAll.label", - description = "PageAdminUsers.auth.usersAll.description"), - @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_USER_URL, - label = "PageUser.auth.user.label", - description = "PageUser.auth.user.description"), - @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_MERGE_OBJECTS_URL, - label = "PageMergeObjects.auth.mergeObjects.label", - description = "PageMergeObjects.auth.mergeObjects.description") }) -public class PageMergeObjects extends PageAdminFocus { - private static final long serialVersionUID = 1L; - - private static final String DOT_CLASS = PageMergeObjects.class.getName() + "."; - private static final String OPERATION_DELETE_USER = DOT_CLASS + "deleteUser"; - private static final String OPERATION_MERGE_OBJECTS = DOT_CLASS + "mergeObjects"; - private static final Trace LOGGER = TraceManager.getTrace(PageMergeObjects.class); - private F mergeObject; - private IModel mergeObjectModel; - private F mergeWithObject; - private IModel mergeWithObjectModel; - private Class type; - private MergeObjectsPanel mergeObjectsPanel; - - public PageMergeObjects(){ - } - - public PageMergeObjects(F mergeObject, F mergeWithObject, Class type){ - this.mergeObject = mergeObject; - this.mergeWithObject = mergeWithObject; - this.type = type; - - initModels(); - - PageParameters parameters = new PageParameters(); - parameters.add(OnePageParameterEncoder.PARAMETER, mergeObject.getOid()); - getPageParameters().overwriteWith(parameters); - initialize(this.mergeObject.asPrismObject()); - } - - private void initModels(){ - mergeObjectModel = new IModel() { - @Override - public F getObject() { - return mergeObject; - } - - @Override - public void setObject(F f) { - mergeObject = f; - } - - @Override - public void detach() { - - } - }; - mergeWithObjectModel = new IModel() { - @Override - public F getObject() { - return mergeWithObject; - } - - @Override - public void setObject(F f) { - mergeWithObject = f; - } - - @Override - public void detach() { - - } - }; - } - - @Override - protected AbstractObjectMainPanel createMainPanel(String id){ - - //empty assignments model - CountableLoadableModel assignemtns = new CountableLoadableModel() { - private static final long serialVersionUID = 1L; - - @Override - protected List load() { - return new ArrayList<>(); - } - }; - - //empty policy rules model - CountableLoadableModel policyRules = new CountableLoadableModel() { - private static final long serialVersionUID = 1L; - - @Override - protected List load() { - return new ArrayList<>(); - } - }; - - //empty projections model - LoadableModel> shadows = new LoadableModel>() { - private static final long serialVersionUID = 1L; - @Override - protected List load() { - return new ArrayList<>(); - } - }; - - return new FocusMainPanel(id, getObjectModel(), shadows, this) { - - private static final long serialVersionUID = 1L; - - @Override - protected List createTabs(final PageAdminObjectDetails parentPage) { - List tabs = new ArrayList<>(); - tabs.add( - new PanelTab(parentPage.createStringResource("PageMergeObjects.tabTitle"), new VisibleEnableBehaviour()){ - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer createPanel(String panelId) { - mergeObjectsPanel = new MergeObjectsPanel(panelId, mergeObjectModel, mergeWithObjectModel, type, PageMergeObjects.this); - return mergeObjectsPanel; - } - }); - return tabs; - } - - @Override - protected boolean isPreviewButtonVisible(){ - return false; - } - - @Override - protected boolean getOptionsPanelVisibility() { - return false; - } - }; - } - - @Override - protected FocusSummaryPanel createSummaryPanel(){ - UserSummaryPanel summaryPanel = new UserSummaryPanel(ID_SUMMARY_PANEL, getObjectModel(), this); - setSummaryPanelVisibility(summaryPanel); - return summaryPanel; - } - - @Override - protected void setSummaryPanelVisibility(ObjectSummaryPanel summaryPanel){ - summaryPanel.setVisible(false); - } - - @Override - protected Class getRestartResponsePage() { - return PageUsers.class; - } - - protected UserType createNewObject(){ - return new UserType(); - } - - @Override - public Class getCompileTimeClass() { - return type; - } - - @Override - protected IModel createPageTitleModel() { - return createStringResource("PageMergeObjects.title"); - } - - @Override - public boolean isOidParameterExists() { - return true; - } - - @Override - public void saveOrPreviewPerformed(AjaxRequestTarget target, OperationResult result, boolean previewOnly) { - try { - Task task = createSimpleTask(OPERATION_MERGE_OBJECTS); - getModelService().mergeObjects(type, mergeObject.getOid(), mergeWithObject.getOid(), - mergeObjectsPanel.getMergeConfigurationName(), task, result); - result.computeStatusIfUnknown(); - showResult(result); - redirectBack(); - - } catch (Exception ex){ - result.recomputeStatus(); - result.recordFatalError(getString("PageMergeObjects.message.saveOrPreviewPerformed.fatalError"), ex); - LoggingUtils.logUnexpectedException(LOGGER, "Couldn't merge objects", ex); - showResult(result); - } - } -} +/* + * Copyright (c) 2010-2017 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.web.page.admin.users; + +import com.evolveum.midpoint.gui.api.component.tabs.PanelTab; +import com.evolveum.midpoint.gui.api.model.CountableLoadableModel; +import com.evolveum.midpoint.gui.api.model.LoadableModel; +import com.evolveum.midpoint.gui.api.prism.ShadowWrapper; +import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.security.api.AuthorizationConstants; +import com.evolveum.midpoint.task.api.Task; +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.AuthorizationAction; +import com.evolveum.midpoint.web.application.PageDescriptor; +import com.evolveum.midpoint.web.component.FocusSummaryPanel; +import com.evolveum.midpoint.web.component.ObjectSummaryPanel; +import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectMainPanel; +import com.evolveum.midpoint.web.component.objectdetails.FocusMainPanel; +import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; +import com.evolveum.midpoint.web.page.admin.PageAdminFocus; +import com.evolveum.midpoint.web.page.admin.PageAdminObjectDetails; +import com.evolveum.midpoint.web.page.admin.users.component.MergeObjectsPanel; +import com.evolveum.midpoint.web.page.admin.users.component.UserSummaryPanel; +import com.evolveum.midpoint.web.util.OnePageParameterEncoder; +import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.extensions.markup.html.tabs.ITab; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.model.IModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by honchar. + */ +@PageDescriptor(url = "/admin/mergeObjects", encoder = OnePageParameterEncoder.class, action = { + @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_USERS_ALL_URL, + label = "PageAdminUsers.auth.usersAll.label", + description = "PageAdminUsers.auth.usersAll.description"), + @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_USER_URL, + label = "PageUser.auth.user.label", + description = "PageUser.auth.user.description"), + @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_MERGE_OBJECTS_URL, + label = "PageMergeObjects.auth.mergeObjects.label", + description = "PageMergeObjects.auth.mergeObjects.description") }) +public class PageMergeObjects extends PageAdminFocus { + private static final long serialVersionUID = 1L; + + private static final String DOT_CLASS = PageMergeObjects.class.getName() + "."; + private static final String OPERATION_DELETE_USER = DOT_CLASS + "deleteUser"; + private static final String OPERATION_MERGE_OBJECTS = DOT_CLASS + "mergeObjects"; + private static final Trace LOGGER = TraceManager.getTrace(PageMergeObjects.class); + private F mergeObject; + private IModel mergeObjectModel; + private F mergeWithObject; + private IModel mergeWithObjectModel; + private Class type; + private MergeObjectsPanel mergeObjectsPanel; + + public PageMergeObjects(){ + } + + public PageMergeObjects(F mergeObject, F mergeWithObject, Class type){ + this.mergeObject = mergeObject; + this.mergeWithObject = mergeWithObject; + this.type = type; + + initModels(); + + PageParameters parameters = new PageParameters(); + parameters.add(OnePageParameterEncoder.PARAMETER, mergeObject.getOid()); + getPageParameters().overwriteWith(parameters); + initialize(this.mergeObject.asPrismObject()); + } + + private void initModels(){ + mergeObjectModel = new IModel() { + @Override + public F getObject() { + return mergeObject; + } + + @Override + public void setObject(F f) { + mergeObject = f; + } + + @Override + public void detach() { + + } + }; + mergeWithObjectModel = new IModel() { + @Override + public F getObject() { + return mergeWithObject; + } + + @Override + public void setObject(F f) { + mergeWithObject = f; + } + + @Override + public void detach() { + + } + }; + } + + @Override + protected AbstractObjectMainPanel createMainPanel(String id){ + + //empty assignments model + CountableLoadableModel assignemtns = new CountableLoadableModel() { + private static final long serialVersionUID = 1L; + + @Override + protected List load() { + return new ArrayList<>(); + } + }; + + //empty policy rules model + CountableLoadableModel policyRules = new CountableLoadableModel() { + private static final long serialVersionUID = 1L; + + @Override + protected List load() { + return new ArrayList<>(); + } + }; + + //empty projections model + LoadableModel> shadows = new LoadableModel>() { + private static final long serialVersionUID = 1L; + @Override + protected List load() { + return new ArrayList<>(); + } + }; + + return new FocusMainPanel(id, getObjectModel(), shadows, this) { + + private static final long serialVersionUID = 1L; + + @Override + protected List createTabs(final PageAdminObjectDetails parentPage) { + List tabs = new ArrayList<>(); + tabs.add( + new PanelTab(parentPage.createStringResource("PageMergeObjects.tabTitle"), new VisibleEnableBehaviour()){ + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer createPanel(String panelId) { + mergeObjectsPanel = new MergeObjectsPanel(panelId, mergeObjectModel, mergeWithObjectModel, type, PageMergeObjects.this); + return mergeObjectsPanel; + } + }); + return tabs; + } + + @Override + protected boolean isPreviewButtonVisible(){ + return false; + } + + @Override + protected boolean getOptionsPanelVisibility() { + return false; + } + }; + } + + + //TODO did it work before? + @Override + protected ObjectSummaryPanel createSummaryPanel(IModel summaryModel) { + UserSummaryPanel summaryPanel = new UserSummaryPanel(ID_SUMMARY_PANEL, getObjectModel(), this); + return summaryPanel; + } + + @Override + protected void setSummaryPanelVisibility(ObjectSummaryPanel summaryPanel){ + summaryPanel.setVisible(false); + } + + @Override + protected Class getRestartResponsePage() { + return PageUsers.class; + } + + protected UserType createNewObject(){ + return new UserType(); + } + + @Override + public Class getCompileTimeClass() { + return type; + } + + @Override + protected IModel createPageTitleModel() { + return createStringResource("PageMergeObjects.title"); + } + + @Override + public boolean isOidParameterExists() { + return true; + } + + @Override + public void saveOrPreviewPerformed(AjaxRequestTarget target, OperationResult result, boolean previewOnly) { + try { + Task task = createSimpleTask(OPERATION_MERGE_OBJECTS); + getModelService().mergeObjects(type, mergeObject.getOid(), mergeWithObject.getOid(), + mergeObjectsPanel.getMergeConfigurationName(), task, result); + result.computeStatusIfUnknown(); + showResult(result); + redirectBack(); + + } catch (Exception ex){ + result.recomputeStatus(); + result.recordFatalError(getString("PageMergeObjects.message.saveOrPreviewPerformed.fatalError"), ex); + LoggingUtils.logUnexpectedException(LOGGER, "Couldn't merge objects", ex); + showResult(result); + } + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageOrgUnit.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageOrgUnit.java index 279f424423e..6b1a9da34cd 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageOrgUnit.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageOrgUnit.java @@ -1,160 +1,154 @@ -/* - * Copyright (c) 2010-2017 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.web.page.admin.users; - -import java.util.List; -import java.util.Map; - -import javax.xml.namespace.QName; - -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.model.Model; -import org.apache.wicket.request.mapper.parameter.PageParameters; - -import com.evolveum.midpoint.gui.api.util.WebComponentUtil; -import com.evolveum.midpoint.prism.PrismObject; -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.application.AuthorizationAction; -import com.evolveum.midpoint.web.application.PageDescriptor; -import com.evolveum.midpoint.web.component.FocusSummaryPanel; -import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectMainPanel; -import com.evolveum.midpoint.web.component.objectdetails.AbstractRoleMainPanel; -import com.evolveum.midpoint.web.component.progress.ProgressReportingAwarePage; -import com.evolveum.midpoint.web.page.admin.PageAdminAbstractRole; -import com.evolveum.midpoint.web.page.admin.roles.AbstractRoleMemberPanel; -import com.evolveum.midpoint.web.page.admin.roles.AvailableRelationDto; -import com.evolveum.midpoint.web.page.admin.users.component.OrgMemberPanel; -import com.evolveum.midpoint.web.page.admin.users.component.OrgSummaryPanel; -import com.evolveum.midpoint.web.security.GuiAuthorizationConstants; -import com.evolveum.midpoint.web.session.UserProfileStorage.TableId; -import com.evolveum.midpoint.web.util.OnePageParameterEncoder; -import com.evolveum.midpoint.xml.ns._public.common.common_3.AreaCategoryType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ServiceType; - -/** - * @author lazyman - */ -@PageDescriptor(url = "/admin/org/unit", encoder = OnePageParameterEncoder.class, action = { - @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_ORG_ALL_URL, - label = "PageAdminUsers.auth.orgAll.label", - description = "PageAdminUsers.auth.orgAll.description"), - @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_ORG_UNIT_URL, - label = "PageOrgUnit.auth.orgUnit.label", - description = "PageOrgUnit.auth.orgUnit.description") }) -public class PageOrgUnit extends PageAdminAbstractRole implements ProgressReportingAwarePage { - - private static final Trace LOGGER = TraceManager.getTrace(PageOrgUnit.class); - - public PageOrgUnit() { - super(); - } - - public PageOrgUnit(PageParameters parameters) { - super(parameters); - } - - public PageOrgUnit(final PrismObject role) { - super(role); - } - - public PageOrgUnit(final PrismObject userToEdit, boolean isNewObject) { - super(userToEdit, isNewObject); - } - - public PageOrgUnit(final PrismObject abstractRole, boolean isNewObject, boolean isReadonly) { - super(abstractRole, isNewObject, isReadonly); - } - - @Override - protected OrgType createNewObject() { - return new OrgType(); - } - - @Override - public Class getCompileTimeClass() { - return OrgType.class; - } - - @Override - protected Class getRestartResponsePage() { - return PageOrgTree.class; - } - - @Override - protected FocusSummaryPanel createSummaryPanel() { - return new OrgSummaryPanel(ID_SUMMARY_PANEL, Model.of(getObjectModel().getObject().getObject().asObjectable()), this); - } - - @Override - protected AbstractObjectMainPanel createMainPanel(String id) { - return new AbstractRoleMainPanel(id, getObjectModel(), - getProjectionModel(), this) { - - private static final long serialVersionUID = 1L; - - @Override - protected boolean isFocusHistoryPage(){ - return PageOrgUnit.this.isFocusHistoryPage(); - } - - @Override - protected void viewObjectHistoricalDataPerformed(AjaxRequestTarget target, PrismObject object, String date){ - PageOrgUnit.this.navigateToNext(new PageOrgUnitHistory(object, date)); - } - - @Override - public OrgMemberPanel createMemberPanel(String panelId) { - - return new OrgMemberPanel(panelId, new Model<>(getObject().asObjectable())) { - - private static final long serialVersionUID = 1L; - - @Override - protected AvailableRelationDto getSupportedRelations() { - return getSupportedMembersTabRelations(); - } - - }; - } - - @Override - public OrgMemberPanel createGovernancePanel(String panelId) { - - return new OrgMemberPanel(panelId, new Model<>(getObject().asObjectable())) { - - private static final long serialVersionUID = 1L; - - @Override - protected AvailableRelationDto getSupportedRelations() { - return getSupportedGovernanceTabRelations(); - } - - @Override - protected Map getAuthorizations(QName complexType) { - return getGovernanceTabAuthorizations(); - } - - }; - } - - @Override - protected boolean getOptionsPanelVisibility() { - if (isSelfProfile()){ - return false; - } else { - return super.getOptionsPanelVisibility(); - } - } - - - }; - } - -} +/* + * Copyright (c) 2010-2017 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.web.page.admin.users; + +import java.util.Map; + +import javax.xml.namespace.QName; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +import com.evolveum.midpoint.prism.PrismObject; +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.application.AuthorizationAction; +import com.evolveum.midpoint.web.application.PageDescriptor; +import com.evolveum.midpoint.web.component.FocusSummaryPanel; +import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectMainPanel; +import com.evolveum.midpoint.web.component.objectdetails.AbstractRoleMainPanel; +import com.evolveum.midpoint.web.component.progress.ProgressReportingAwarePage; +import com.evolveum.midpoint.web.page.admin.PageAdminAbstractRole; +import com.evolveum.midpoint.web.page.admin.roles.AvailableRelationDto; +import com.evolveum.midpoint.web.page.admin.users.component.OrgMemberPanel; +import com.evolveum.midpoint.web.page.admin.users.component.OrgSummaryPanel; +import com.evolveum.midpoint.web.util.OnePageParameterEncoder; +import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType; + +/** + * @author lazyman + */ +@PageDescriptor(url = "/admin/org/unit", encoder = OnePageParameterEncoder.class, action = { + @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_ORG_ALL_URL, + label = "PageAdminUsers.auth.orgAll.label", + description = "PageAdminUsers.auth.orgAll.description"), + @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_ORG_UNIT_URL, + label = "PageOrgUnit.auth.orgUnit.label", + description = "PageOrgUnit.auth.orgUnit.description") }) +public class PageOrgUnit extends PageAdminAbstractRole implements ProgressReportingAwarePage { + + private static final Trace LOGGER = TraceManager.getTrace(PageOrgUnit.class); + + public PageOrgUnit() { + super(); + } + + public PageOrgUnit(PageParameters parameters) { + super(parameters); + } + + public PageOrgUnit(final PrismObject role) { + super(role); + } + + public PageOrgUnit(final PrismObject userToEdit, boolean isNewObject) { + super(userToEdit, isNewObject); + } + + public PageOrgUnit(final PrismObject abstractRole, boolean isNewObject, boolean isReadonly) { + super(abstractRole, isNewObject, isReadonly); + } + + @Override + protected OrgType createNewObject() { + return new OrgType(); + } + + @Override + public Class getCompileTimeClass() { + return OrgType.class; + } + + @Override + protected Class getRestartResponsePage() { + return PageOrgTree.class; + } + + @Override + protected FocusSummaryPanel createSummaryPanel(IModel summaryModel) { + return new OrgSummaryPanel(ID_SUMMARY_PANEL, summaryModel, this); + } + + @Override + protected AbstractObjectMainPanel createMainPanel(String id) { + return new AbstractRoleMainPanel(id, getObjectModel(), + getProjectionModel(), this) { + + private static final long serialVersionUID = 1L; + + @Override + protected boolean isFocusHistoryPage(){ + return PageOrgUnit.this.isFocusHistoryPage(); + } + + @Override + protected void viewObjectHistoricalDataPerformed(AjaxRequestTarget target, PrismObject object, String date){ + PageOrgUnit.this.navigateToNext(new PageOrgUnitHistory(object, date)); + } + + @Override + public OrgMemberPanel createMemberPanel(String panelId) { + + return new OrgMemberPanel(panelId, new Model<>(getObject().asObjectable())) { + + private static final long serialVersionUID = 1L; + + @Override + protected AvailableRelationDto getSupportedRelations() { + return getSupportedMembersTabRelations(); + } + + }; + } + + @Override + public OrgMemberPanel createGovernancePanel(String panelId) { + + return new OrgMemberPanel(panelId, new Model<>(getObject().asObjectable())) { + + private static final long serialVersionUID = 1L; + + @Override + protected AvailableRelationDto getSupportedRelations() { + return getSupportedGovernanceTabRelations(); + } + + @Override + protected Map getAuthorizations(QName complexType) { + return getGovernanceTabAuthorizations(); + } + + }; + } + + @Override + protected boolean getOptionsPanelVisibility() { + if (isSelfProfile()){ + return false; + } else { + return super.getOptionsPanelVisibility(); + } + } + + + }; + } + +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUser.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUser.java index 7b28f50546f..09c99264324 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUser.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUser.java @@ -132,9 +132,8 @@ protected List load() { } @Override - protected FocusSummaryPanel createSummaryPanel() { - return new UserSummaryPanel(ID_SUMMARY_PANEL, isEditingFocus() ? - Model.of(getObjectModel().getObject().getObject().asObjectable()) : Model.of(), this); + protected FocusSummaryPanel createSummaryPanel(IModel summaryModel) { + return new UserSummaryPanel(ID_SUMMARY_PANEL, summaryModel, this); } protected void cancelPerformed() { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/login/PageAbstractFlow.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/login/PageAbstractFlow.java index 91d9a3dbed8..34855270145 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/login/PageAbstractFlow.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/login/PageAbstractFlow.java @@ -7,6 +7,8 @@ package com.evolveum.midpoint.web.page.login; +import com.evolveum.midpoint.common.configuration.api.MidpointConfiguration; + import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.panel.Fragment; @@ -140,7 +142,7 @@ private void doRegistration(AjaxRequestTarget target) { } private boolean validateCaptcha(AjaxRequestTarget target) { - String value = System.getProperty("midpoint.schrodinger"); + String value = System.getProperty(MidpointConfiguration.MIDPOINT_SCHRODINGER_PROPERTY); boolean isSchrodingerTesting = Boolean.parseBoolean(value); if (isSchrodingerTesting) { LOGGER.trace("Skipping CAPTCHA Validation, because system variable (midpoint.schrodinget) for schrodinger testing is TRUE"); diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/sync/ChangeProcessor.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/sync/ChangeProcessor.java index c2bb7a8d492..7145fbc7547 100644 --- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/sync/ChangeProcessor.java +++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/sync/ChangeProcessor.java @@ -94,6 +94,7 @@ public void execute(ProcessChangeRequest request, Task workerTask, Task coordina ProvisioningContext ctx = determineProvisioningContext(globalCtx, change, result); if (ctx == null) { request.setSuccess(true); + request.onSuccess(); return; } @@ -145,6 +146,7 @@ public void execute(ProcessChangeRequest request, Task workerTask, Task coordina LOGGER.debug("Skipping processing change. Can't find appropriate shadow (e.g. the object was " + "deleted on the resource meantime)."); request.setSuccess(true); + request.onSuccess(); // Are we OK with the result being automatically computed here? (i.e. most probably SUCCESS?) return; } diff --git a/testing/schrodingertest/pom.xml b/testing/schrodingertest/pom.xml index a7829281c29..1833e7ed842 100644 --- a/testing/schrodingertest/pom.xml +++ b/testing/schrodingertest/pom.xml @@ -43,7 +43,7 @@ com.evolveum.midpoint.tools schrodinger - 4.1-SNAPSHOT + ${project.version} org.seleniumhq.selenium @@ -89,29 +89,69 @@ com.evolveum.midpoint.tools test-ng - 4.1-SNAPSHOT + ${project.version} + test + + + com.evolveum.midpoint.gui + admin-gui + ${project.version} + classes + test + + + com.google.guava + guava + + + org.apache.commons + commons-exec + + + org.bouncycastle + bcpkix-jdk15on + + + org.hibernate + hibernate-core + + + + + org.springframework.boot + spring-boot-test + test + + + org.springframework + spring-test + test + + + com.evolveum.midpoint.repo + repo-test-util + ${project.version} + test + + + junit + junit test - - - - - io.netty - netty-all - - - ch.qos.logback - * - - - - - com.google.guava - guava - - - + + com.evolveum.midpoint.repo + repo-sql-impl + ${project.version} + test + + + + + + + + @@ -125,144 +165,22 @@ maven-failsafe-plugin - ${skipSchrodingerTests} + ${skipSchrodingerTests} - - - - integration-test - verify - - - - maven-antrun-plugin - ${antrun.version} + maven-dependency-plugin - pre-integration-test - - ${skipSchrodingerTests} - - - - - - - - - - - - - - - - - - - - - + analyze - run + analyze-only - - - - Attempt to execute the Shut-down-process - post-integration-test - ${skipSchrodingerTests} - - - - - - - - - - - - - - - - - - - - - - - + + org.hibernate:hibernate-core + - - run - - - - Shut-down-process and attempt to execute clean up - post-integration-test - - ${skipSchrodingerTests} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - run - diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/TestBase.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/AbstractSchrodingerTest.java similarity index 88% rename from testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/TestBase.java rename to testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/AbstractSchrodingerTest.java index 8a81e129941..0b337c74c83 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/TestBase.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/AbstractSchrodingerTest.java @@ -7,18 +7,25 @@ package com.evolveum.midpoint.testing.schrodinger; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; +import java.io.*; import java.lang.reflect.Method; import java.util.Properties; import com.codeborne.selenide.Selenide; + import com.codeborne.selenide.testng.BrowserPerClass; + +import com.evolveum.midpoint.test.AbstractIntegrationTest; + +import com.evolveum.midpoint.web.boot.MidPointSpringApplication; + import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.TestPropertySource; import org.testng.Assert; import org.testng.annotations.*; @@ -33,11 +40,17 @@ import com.evolveum.midpoint.schrodinger.page.resource.ListResourcesPage; import com.evolveum.midpoint.schrodinger.page.resource.ViewResourcePage; +import static com.codeborne.selenide.Selenide.open; + /** * Created by Viliam Repan (lazyman). */ +@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) +@ActiveProfiles("default") +@SpringBootTest(classes = MidPointSpringApplication.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) +@TestPropertySource(properties = {"server.port=8180", "midpoint.schrodinger=true"}) @Listeners({ BrowserPerClass.class }) -public abstract class TestBase { +public abstract class AbstractSchrodingerTest extends AbstractIntegrationTest { public static final String PROPERTY_NAME_MIDPOINT_HOME = "-Dmidpoint.home"; public static final String PROPERTY_NAME_USER_HOME = "user.home"; @@ -47,7 +60,7 @@ public abstract class TestBase { private static final String SCHRODINGER_PROPERTIES = "./src/test/resources/configuration/schrodinger.properties"; - private static final Logger LOG = LoggerFactory.getLogger(TestBase.class); + private static final Logger LOG = LoggerFactory.getLogger(AbstractSchrodingerTest.class); protected static File csvTargetDir; @@ -79,9 +92,8 @@ public void beforeClass() throws IOException { if (midPoint == null) { Properties props = new Properties(); - try (InputStream is = new FileInputStream(new File(SCHRODINGER_PROPERTIES))) { - props.load(is); - } + InputStream is = new FileInputStream(new File(SCHRODINGER_PROPERTIES)); + props.load(is); configuration = buildEnvironmentConfiguration(props); midPoint = new MidPoint(configuration); @@ -92,7 +104,7 @@ public void beforeClass() throws IOException { FormLoginPage login = midPoint.formLogin(); - basicPage = login.loginWithReloadLoginPage(username, password); + basicPage = login.loginIfUserIsNotLog(username, password); } private EnvironmentConfiguration buildEnvironmentConfiguration(Properties props) { @@ -147,7 +159,7 @@ protected void importObject(File source, Boolean overrideExistingObject) { importPage .getObjectsFromFile() .chooseFile(source) - .clickImport() + .clickImportFileButton() .feedback() .isSuccess()); } diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/BasicTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/BasicTest.java deleted file mode 100644 index 1f437dfa5b4..00000000000 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/BasicTest.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2010-2018 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.testing.schrodinger; - -import org.testng.annotations.Test; - -import static com.codeborne.selenide.Selenide.screenshot; - -/** - * Created by Viliam Repan (lazyman). - */ -public class BasicTest extends TestBase { - - @Test - public void login() { - - } - - @Test - public void logout() { - basicPage.loggedUser().logout(); - - screenshot("logout"); - } -} diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/ImportTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/ImportTest.java index 9409b307b38..edc15689c8a 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/ImportTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/ImportTest.java @@ -7,39 +7,36 @@ package com.evolveum.midpoint.testing.schrodinger; +import com.evolveum.midpoint.schrodinger.page.configuration.ImportObjectPage; + +import org.apache.commons.io.FileUtils; +import org.testng.Assert; import org.testng.annotations.Test; -import static com.codeborne.selenide.Selenide.screenshot; +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; /** * Created by Viliam Repan (lazyman). */ -public class ImportTest extends TestBase { - - @Test - public void tryCheckboxes() { - - } +public class ImportTest extends AbstractSchrodingerTest { @Test - public void importXml() { -// File user = new File("./src/test/resources/user.xml"); -// String xml = FileUtils.readFileToString(user, StandardCharsets.UTF_8); -// -// ImportObjectPage importObject = basic.importObject(); -// importObject -//// .checkKeepOid() -//// .checkOverwriteExistingObject() -// .getObjectsFromEmbeddedEditor() -// .setEditorText(xml); -// -//// importObject.clickImport(); - - screenshot("asdf"); - } - - @Test - public void importFile() { - + public void importXml() throws IOException { + File user = new File("./src/test/resources/user.xml"); + String xml = FileUtils.readFileToString(user, StandardCharsets.UTF_8); + + ImportObjectPage importObject = basicPage.importObject(); + importObject + .checkKeepOid() + .checkOverwriteExistingObject() + .getObjectsFromEmbeddedEditor() + .setEditorXmlText(xml); + + Assert.assertTrue( + importObject.clickImportXmlButton() + .feedback() + .isSuccess()); } } diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/UserTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/UserTest.java index 9492cbe6b0c..02cbcda42ef 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/UserTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/UserTest.java @@ -7,6 +7,8 @@ package com.evolveum.midpoint.testing.schrodinger; +import com.evolveum.midpoint.schrodinger.component.AssignmentHolderBasicTab; +import com.evolveum.midpoint.schrodinger.component.common.PrismForm; import com.evolveum.midpoint.schrodinger.page.login.FormLoginPage; import com.evolveum.midpoint.schrodinger.page.user.ListUsersPage; import com.evolveum.midpoint.schrodinger.page.user.UserPage; @@ -15,18 +17,17 @@ import org.testng.annotations.Test; import static com.codeborne.selenide.Selenide.$; -import static com.codeborne.selenide.Selenide.screenshot; /** * Created by Viliam Repan (lazyman). */ -public class UserTest extends TestBase { +public class UserTest extends AbstractSchrodingerTest { private static final String LOCALIZATION_TEST_USER_NAME_ORIG = "localizationTestUserName"; private static final String LOCALIZATION_TEST_USER_NAME_DE = "localizationTestUserNameDe"; private static final String LOCALIZATION_VALUE = "de"; - @Test(enabled = false) + @Test public void createUser() { //@formatter:off @@ -40,6 +41,21 @@ public void createUser() { .and() .clickSave(); + ListUsersPage usersPage = basicPage.listUsers(); + PrismForm> userForm = usersPage + .table() + .search() + .byName() + .inputValue("jdoe222323") + .updateSearch() + .and() + .clickByName("jdoe222323") + .selectTabBasic() + .form(); + Assert.assertTrue(userForm.compareInputAttributeValue("name", "jdoe222323")); + Assert.assertTrue(userForm.compareInputAttributeValue("givenName", "john")); + Assert.assertTrue(userForm.compareInputAttributeValue("familyName", "doe")); + // user.selectTabProjections().and() // .selectTabPersonas().and() // .selectTabAssignments().and() @@ -48,11 +64,6 @@ public void createUser() { // .selectTabDelegatedToMe().and() //@formatter:on - screenshot("create"); - - ListUsersPage users = user.listUsers(); - - // todo validation } @Test //covers MID-5845 diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/UsersTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/UsersTest.java index 180b9307c50..556844fe4dc 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/UsersTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/UsersTest.java @@ -7,8 +7,12 @@ package com.evolveum.midpoint.testing.schrodinger; +import com.codeborne.selenide.Selenide; + import com.evolveum.midpoint.schrodinger.component.common.Paging; import com.evolveum.midpoint.schrodinger.page.user.ListUsersPage; +import com.evolveum.midpoint.schrodinger.page.user.UserPage; + import org.testng.annotations.Test; import static com.codeborne.selenide.Selenide.screenshot; @@ -16,7 +20,7 @@ /** * Created by Viliam Repan (lazyman). */ -public class UsersTest extends TestBase { +public class UsersTest extends AbstractSchrodingerTest { @Test public void testUserTablePaging() { @@ -24,6 +28,11 @@ public void testUserTablePaging() { screenshot("listUsers"); + for (int i = 0; i < 21; i++) { + addUser("john" + i); + Selenide.sleep(3000); + } + Paging paging = users .table() .paging(); @@ -41,4 +50,14 @@ public void testUserTablePaging() { .actualPageMinusTwo() .actualPageMinusOne(); } + + private void addUser(String name) { + UserPage user = basicPage.newUser(); + user.selectTabBasic() + .form() + .addAttributeValue("name", name) + .and() + .and() + .clickSave(); + } } diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/BasicProvisioningTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/BasicProvisioningTest.java index b28d9788e8b..31a9a6c151f 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/BasicProvisioningTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/BasicProvisioningTest.java @@ -18,7 +18,7 @@ import com.evolveum.midpoint.schrodinger.page.user.ListUsersPage; import com.evolveum.midpoint.schrodinger.page.user.UserPage; import com.evolveum.midpoint.schrodinger.util.Schrodinger; -import com.evolveum.midpoint.testing.schrodinger.TestBase; +import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest; import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; @@ -26,7 +26,7 @@ * Created by honchar * covers LAB 4-1 */ -public class BasicProvisioningTest extends TestBase { +public class BasicProvisioningTest extends AbstractSchrodingerTest { private static final String USER_NAME_ATTRIBUTE = "Name"; private static final String USER_GIVEN_NAME_ATTRIBUTE = "Given name"; @@ -113,8 +113,7 @@ public void test002addProjectionToUserKirk() { .and() .clickByName(USER_NAME) .selectTabProjections() - .clickHeaderActionDropDown() - .addProjection() + .clickAddProjection() .table() .selectCheckboxByName(ImportResourceTest.RESOURCE_NAME) .and() diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/ImportResourceTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/ImportResourceTest.java index 0091f3b3af1..448a875431d 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/ImportResourceTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/ImportResourceTest.java @@ -15,18 +15,16 @@ import com.evolveum.midpoint.schrodinger.page.resource.ResourceWizardPage; import com.evolveum.midpoint.schrodinger.page.resource.ViewResourcePage; import com.evolveum.midpoint.schrodinger.util.Schrodinger; -import com.evolveum.midpoint.testing.schrodinger.scenarios.AccountTests; -import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; + import org.openqa.selenium.By; import org.testng.Assert; import org.testng.annotations.Test; -import com.evolveum.midpoint.testing.schrodinger.TestBase; +import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest; import java.io.File; import java.util.Arrays; import java.util.List; -import static com.codeborne.selenide.Selectors.byText; import static com.codeborne.selenide.Selenide.$; @@ -34,7 +32,7 @@ * Created by honchar * covers LAB 3-1: Viewing Resources */ -public class ImportResourceTest extends TestBase { +public class ImportResourceTest extends AbstractSchrodingerTest { private static final File CSV_RESOURCE = new File("./src/test/resources/labs/resources/localhost-csvfile-1-document-access.xml"); public static final String RESOURCE_NAME = "CSV-1 (Document Access)"; @@ -56,7 +54,7 @@ public void test001ImportCsvResource() { .getObjectsFromFile() .chooseFile(CSV_RESOURCE) .checkOverwriteExistingObject() - .clickImport() + .clickImportFileButton() .feedback() .isSuccess() ); diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/AboutPageTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/AboutPageTest.java index 5a5797ba233..04cbe99c495 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/AboutPageTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/AboutPageTest.java @@ -7,7 +7,7 @@ package com.evolveum.midpoint.testing.schrodinger.page; import com.evolveum.midpoint.schrodinger.page.configuration.AboutPage; -import com.evolveum.midpoint.testing.schrodinger.TestBase; +import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest; import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -15,7 +15,7 @@ /** * Created by matus on 3/16/2018. */ -public class AboutPageTest extends TestBase { +public class AboutPageTest extends AbstractSchrodingerTest { private static final String VERSION_EXPECTED = "4.1-SNAPSHOT"; // Static value, should be changed each version change. private static final String HIBERNATE_DIALECT_EXPECTED = "org.hibernate.dialect.H2Dialect"; @@ -107,7 +107,7 @@ public void checkReindexRepositoryObjectsDisplayName() { @Test public void checkJVMPropertiesMidpointHome(){ Assert.assertFalse( - aboutPage.getJVMproperty(TestBase.PROPERTY_NAME_MIDPOINT_HOME).isEmpty()); + aboutPage.getJVMproperty(AbstractSchrodingerTest.PROPERTY_NAME_MIDPOINT_HOME).isEmpty()); } @Test @@ -118,6 +118,6 @@ public void checkJVMPropertiesXmx(){ @Test public void checkSystemProperty(){ Assert.assertFalse( - aboutPage.getSystemProperty(TestBase.PROPERTY_NAME_USER_HOME).isEmpty()); + aboutPage.getSystemProperty(AbstractSchrodingerTest.PROPERTY_NAME_USER_HOME).isEmpty()); } } diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/AbstractLoginPageTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/AbstractLoginPageTest.java index 333bcb8bd02..47ed162f490 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/AbstractLoginPageTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/AbstractLoginPageTest.java @@ -7,13 +7,10 @@ package com.evolveum.midpoint.testing.schrodinger.page; import com.evolveum.midpoint.schrodinger.component.common.FeedbackBox; -import com.evolveum.midpoint.schrodinger.component.common.PrismForm; -import com.evolveum.midpoint.schrodinger.component.configuration.InfrastructureTab; -import com.evolveum.midpoint.schrodinger.component.configuration.NotificationsTab; import com.evolveum.midpoint.schrodinger.component.report.AuditRecordTable; import com.evolveum.midpoint.schrodinger.page.login.FormLoginPage; import com.evolveum.midpoint.schrodinger.page.report.AuditLogViewerPage; -import com.evolveum.midpoint.testing.schrodinger.TestBase; +import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest; import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -27,7 +24,7 @@ * @author skublik */ -public class AbstractLoginPageTest extends TestBase { +public class AbstractLoginPageTest extends AbstractSchrodingerTest { private static final File ENABLED_USER = new File("src/test/resources/configuration/objects/users/enabled-user.xml"); private static final File DISABLED_USER = new File("src/test/resources/configuration/objects/users/disabled-user.xml"); @@ -35,7 +32,7 @@ public class AbstractLoginPageTest extends TestBase { @BeforeClass @Override - public void beforeClass() throws IOException { + public void beforeClass() throws IOException{ super.beforeClass(); importObject(ENABLED_USER, true); importObject(DISABLED_USER, true); diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/BulkActionsTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/BulkActionsTest.java index bd427f04a86..e73d4008206 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/BulkActionsTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/BulkActionsTest.java @@ -8,7 +8,7 @@ import com.codeborne.selenide.Condition; import com.evolveum.midpoint.schrodinger.page.configuration.BulkActionsPage; -import com.evolveum.midpoint.testing.schrodinger.TestBase; +import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest; import org.openqa.selenium.By; import org.testng.Assert; import org.testng.annotations.Test; @@ -18,7 +18,7 @@ /** * Created by Kate Honchar */ -public class BulkActionsTest extends TestBase { +public class BulkActionsTest extends AbstractSchrodingerTest { private static final String PARSING_ERROR_MESSAGE = "Couldn't parse bulk action object"; diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/InternalsConfigurationPageTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/InternalsConfigurationPageTest.java index 77af0f02a89..6ee77d28847 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/InternalsConfigurationPageTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/InternalsConfigurationPageTest.java @@ -8,7 +8,7 @@ import com.evolveum.midpoint.schrodinger.component.configuration.ClockTab; import com.evolveum.midpoint.schrodinger.page.configuration.InternalsConfigurationPage; -import com.evolveum.midpoint.testing.schrodinger.TestBase; +import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeMethod; @@ -17,7 +17,7 @@ /** * @author Hiroyuki Wada */ -public class InternalsConfigurationPageTest extends TestBase { +public class InternalsConfigurationPageTest extends AbstractSchrodingerTest { private InternalsConfigurationPage configPage; diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/LoginPageTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/LoginPageTest.java index e2e3917b0a5..6369cb0bbf8 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/LoginPageTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/LoginPageTest.java @@ -8,17 +8,11 @@ package com.evolveum.midpoint.testing.schrodinger.page; import com.codeborne.selenide.Condition; -import com.evolveum.midpoint.schrodinger.component.common.FeedbackBox; + import com.evolveum.midpoint.schrodinger.page.login.FormLoginPage; import com.evolveum.midpoint.schrodinger.page.login.SamlSelectPage; import org.openqa.selenium.By; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; -import com.evolveum.midpoint.testing.schrodinger.TestBase; - -import java.io.File; -import java.io.IOException; import static com.codeborne.selenide.Selenide.*; diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/LoginPageWithAuthenticationConfigTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/LoginPageWithAuthenticationConfigTest.java index f373e73343c..6b568a3fcdb 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/LoginPageWithAuthenticationConfigTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/LoginPageWithAuthenticationConfigTest.java @@ -50,7 +50,7 @@ public class LoginPageWithAuthenticationConfigTest extends AbstractLoginPageTest @BeforeClass @Override - public void beforeClass() throws IOException { + public void beforeClass() throws IOException{ super.beforeClass(); importObject(MAIL_NONCE_VALUE_POLICY, true); importObject(FLEXIBLE_AUTHENTICATION_MAIL_NONCE_RESET_PASS_SECURITY_POLICY, true); @@ -63,7 +63,11 @@ public void beforeClass() throws IOException { infrastructureForm.showEmptyAttributes("Infrastructure"); infrastructureForm.addAttributeValue("publicHttpUrlPattern", getConfiguration().getBaseUrl()); File notificationFile = NOTIFICATION_FILE; - notificationFile.createNewFile(); + try { + notificationFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } NotificationsTab notificationTab = systemPage.notificationsTab(); notificationTab.setRedirectToFile(notificationFile.getAbsolutePath()); systemPage.save(); diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/QueryPlaygroundPageTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/QueryPlaygroundPageTest.java index 9b5cfd4072a..6b6aff000c4 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/QueryPlaygroundPageTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/QueryPlaygroundPageTest.java @@ -9,14 +9,14 @@ import com.evolveum.midpoint.schrodinger.page.configuration.QueryPlaygroundPage; import com.evolveum.midpoint.schrodinger.page.user.ListUsersPage; import com.evolveum.midpoint.schrodinger.page.user.UserPage; -import com.evolveum.midpoint.testing.schrodinger.TestBase; +import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest; import org.testng.Assert; import org.testng.annotations.Test; /** * Created by Kate Honchar. */ -public class QueryPlaygroundPageTest extends TestBase{ +public class QueryPlaygroundPageTest extends AbstractSchrodingerTest { @Test //covers MID-5346 public void test001useInObjectListOptionTest() { diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/AccountTests.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/AccountTests.java index 155683cee9a..c477d9b2e3f 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/AccountTests.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/AccountTests.java @@ -14,7 +14,7 @@ import org.apache.commons.io.FileUtils; import org.testng.Assert; import org.testng.annotations.Test; -import com.evolveum.midpoint.testing.schrodinger.TestBase; +import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest; import java.io.File; import java.io.IOException; @@ -22,7 +22,7 @@ /** * Created by matus on 3/22/2018. */ -public class AccountTests extends TestBase { +public class AccountTests extends AbstractSchrodingerTest { private static File csvTargetFile; @@ -66,6 +66,7 @@ public void createMidpointUser() throws IOException { .addAttributeValue("name", TEST_USER_MIKE_NAME) .addAttributeValue(UserType.F_GIVEN_NAME, "Michelangelo") .addAttributeValue(UserType.F_FAMILY_NAME, "di Lodovico Buonarroti Simoni") + .addProtectedAttributeValue("value","5ecr3tPassword") .and() .and() .checkKeepDisplayingResults() @@ -84,7 +85,7 @@ public void importCsvResource(){ .getObjectsFromFile() .chooseFile(CSV_RESOURCE_MEDIUM) .checkOverwriteExistingObject() - .clickImport() + .clickImportFileButton() .feedback() .isSuccess() ); @@ -123,8 +124,7 @@ public void addAccount() { .and() .clickByName(TEST_USER_MIKE_NAME) .selectTabProjections() - .clickHeaderActionDropDown() - .addProjection() + .clickAddProjection() .table() .selectCheckboxByName(CSV_RESOURCE_NAME) .and() @@ -150,7 +150,7 @@ public void modifyAccountAttribute(){ .clickByName(TEST_USER_MIKE_NAME) .selectTabProjections() .table() - .clickByName(CSV_RESOURCE_NAME) + .clickByName(TEST_USER_MIKE_NAME) .changeAttributeValue("lastname",TEST_USER_MIKE_LAST_NAME_OLD,TEST_USER_MIKE_LAST_NAME_NEW) .and() .and() @@ -174,9 +174,9 @@ public void modifyAccountPassword(){ .clickByName(TEST_USER_MIKE_NAME) .selectTabProjections() .table() - .clickByName(CSV_RESOURCE_NAME) + .clickByName(TEST_USER_MIKE_NAME) .showEmptyAttributes("Password") - .addProtectedAttributeValue("Value","5ecr3t") + .addProtectedAttributeValue("value","5ecr3t") .and() .and() .and() @@ -199,8 +199,8 @@ public void disableAccount(){ .clickByName(TEST_USER_MIKE_NAME) .selectTabProjections() .table() - .clickByName(CSV_RESOURCE_NAME) - .selectOption("Administrative status","Disabled") + .clickByName(TEST_USER_MIKE_NAME) + .selectOption("administrativeStatus","Disabled") .and() .and() .and() @@ -223,8 +223,8 @@ public void enableAccount(){ .clickByName(TEST_USER_MIKE_NAME) .selectTabProjections() .table() - .clickByName(CSV_RESOURCE_NAME) - .selectOption("Administrative status","Enabled") + .clickByName(TEST_USER_MIKE_NAME) + .selectOption("administrativeStatus","Enabled") .and() .and() .and() @@ -247,7 +247,7 @@ public void deleteAccount(){ .clickByName(TEST_USER_MIKE_NAME) .selectTabProjections() .table() - .selectCheckboxByName(CSV_RESOURCE_NAME) + .selectCheckboxByName(TEST_USER_MIKE_NAME) .and() .clickHeaderActionDropDown() .delete() diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/AdvancedAccountTests.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/AdvancedAccountTests.java index 625608686e5..d8008410858 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/AdvancedAccountTests.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/AdvancedAccountTests.java @@ -7,7 +7,7 @@ package com.evolveum.midpoint.testing.schrodinger.scenarios; import com.evolveum.midpoint.schrodinger.page.user.ListUsersPage; -import com.evolveum.midpoint.testing.schrodinger.TestBase; +import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest; import org.apache.commons.io.FileUtils; import org.testng.annotations.Test; @@ -15,7 +15,7 @@ import java.io.IOException; -public class AdvancedAccountTests extends TestBase { +public class AdvancedAccountTests extends AbstractSchrodingerTest { // TODO in progress private static File csvTargetFile; @@ -49,8 +49,7 @@ public void iterateForUniqueAttribute(){ .and() .clickByName(ScenariosCommons.TEST_USER_RAPHAEL_NAME) .selectTabProjections() - .clickHeaderActionDropDown() - .addProjection() + .clickAddProjection() .table() .search() .byName() @@ -77,7 +76,7 @@ public void iterateForUniqueAttribute(){ .clickByName(ScenariosCommons.TEST_USER_RAPHAEL_NAME) .selectTabProjections() .table() - .clickByName(ScenariosCommons.RESOURCE_CSV_GROUPS_AUTHORITATIVE_NAME); + .clickByName(ScenariosCommons.TEST_USER_RAPHAEL_NAME); } diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/AssignmentArchetypeTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/AssignmentArchetypeTest.java index e2a8d08533a..81fd09ab41b 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/AssignmentArchetypeTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/AssignmentArchetypeTest.java @@ -6,7 +6,7 @@ */ package com.evolveum.midpoint.testing.schrodinger.scenarios; -import com.evolveum.midpoint.testing.schrodinger.TestBase; +import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest; import org.testng.annotations.Test; import java.io.File; @@ -14,7 +14,7 @@ /** * Created by honchar */ -public class AssignmentArchetypeTest extends TestBase { +public class AssignmentArchetypeTest extends AbstractSchrodingerTest { private static final File ARCHETYPE_BUSINESS_ROLE_FILE = new File("src/test/resources/configuration/objects/archetypes/archetype-business-role.xml"); private static final String RELATIONS_CONTAINER_HEADER_KEY = "Relations"; diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/CaseTests.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/CaseTests.java index 90d0f0cb6eb..81a57c82323 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/CaseTests.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/CaseTests.java @@ -21,12 +21,12 @@ import com.evolveum.midpoint.schrodinger.page.user.ListUsersPage; import com.evolveum.midpoint.schrodinger.page.user.UserPage; import com.evolveum.midpoint.schrodinger.util.ConstantsUtil; -import com.evolveum.midpoint.testing.schrodinger.TestBase; +import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest; /** * Created by honchar. */ -public class CaseTests extends TestBase { +public class CaseTests extends AbstractSchrodingerTest { public static final File ROLE_WITH_ADMIN_APPROVER_XML = new File("./src/test/resources/role-with-admin-approver.xml"); public static final String CASE_CREATION_TEST_USER_NAME = "caseCreationTestUser"; diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/ObjectListArchetypeTests.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/ObjectListArchetypeTests.java index b382b71bf16..07fb16cf172 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/ObjectListArchetypeTests.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/ObjectListArchetypeTests.java @@ -7,6 +7,7 @@ package com.evolveum.midpoint.testing.schrodinger.scenarios; import com.codeborne.selenide.Condition; +import com.codeborne.selenide.Selenide; import com.codeborne.selenide.SelenideElement; import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.common.PrismForm; @@ -14,7 +15,7 @@ import com.evolveum.midpoint.schrodinger.component.modal.ObjectBrowserModal; import com.evolveum.midpoint.schrodinger.page.user.ListUsersPage; import com.evolveum.midpoint.schrodinger.util.Schrodinger; -import com.evolveum.midpoint.testing.schrodinger.TestBase; +import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest; import org.openqa.selenium.By; import org.testng.Assert; import org.testng.annotations.Test; @@ -26,7 +27,7 @@ /** * Created by honchar */ -public class ObjectListArchetypeTests extends TestBase { +public class ObjectListArchetypeTests extends AbstractSchrodingerTest { private static final File EMPLOYEE_ARCHETYPE_FILE = new File("src/test/resources/configuration/objects/archetypes/archetype-employee.xml"); private static final String ARCHETYPE_OBJECT_NAME = "Employee"; @@ -159,6 +160,7 @@ public void createNewEmployeeUser(){ @Test(priority = 4, dependsOnMethods ={"actualizeArchetypeConfiguration"}) public void checkNewObjectButtonWithDropdown(){ ListUsersPage userListPage = basicPage.listUsers(); + Selenide.sleep(2000); Assert.assertTrue(userListPage .table() .getToolbarButton("fa fa-plus") diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/OrgMembersTests.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/OrgMembersTests.java index 9a5ceda73c0..a76d85501cb 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/OrgMembersTests.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/OrgMembersTests.java @@ -7,12 +7,15 @@ package com.evolveum.midpoint.testing.schrodinger.scenarios; import com.codeborne.selenide.Condition; + +import com.codeborne.selenide.Selenide; + import com.evolveum.midpoint.schrodinger.component.AssignmentHolderBasicTab; import com.evolveum.midpoint.schrodinger.page.org.NewOrgPage; import com.evolveum.midpoint.schrodinger.page.org.OrgTreePage; import com.evolveum.midpoint.schrodinger.page.user.UserPage; import com.evolveum.midpoint.schrodinger.util.Schrodinger; -import com.evolveum.midpoint.testing.schrodinger.TestBase; +import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest; import org.openqa.selenium.By; import org.testng.Assert; import org.testng.annotations.Test; @@ -22,7 +25,7 @@ /** * Created by honchar. */ -public class OrgMembersTests extends TestBase { +public class OrgMembersTests extends AbstractSchrodingerTest { private static final String ORG_NAME = "TestOrgWithMembers"; private static final String USER_NAME = "OrgMembersWithDefaultRelation"; @@ -33,15 +36,15 @@ public void createOrgWithinMenuItem(){ AssignmentHolderBasicTab basicTab = newOrgPage .selectTabBasic() .form() - .addAttributeValue("Name", ORG_NAME) + .addAttributeValue("name", ORG_NAME) .and(); basicTab .and() .clickSave(); - - $(Schrodinger.byElementAttributeValue("a", "class", "tab-label")).find(By.linkText(ORG_NAME)).shouldBe(Condition.visible); + Selenide.sleep(2000); + $(Schrodinger.byDataId("tabs-container")).find(By.linkText(ORG_NAME)).shouldBe(Condition.visible); } @Test diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/OrganizationStructureTests.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/OrganizationStructureTests.java index 572dd8c0dd5..2b5fd1f6175 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/OrganizationStructureTests.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/OrganizationStructureTests.java @@ -11,7 +11,7 @@ import com.evolveum.midpoint.schrodinger.page.user.ListUsersPage; import com.evolveum.midpoint.schrodinger.page.user.UserPage; import com.evolveum.midpoint.schrodinger.util.ConstantsUtil; -import com.evolveum.midpoint.testing.schrodinger.TestBase; +import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest; import org.apache.commons.io.FileUtils; import org.testng.Assert; import org.testng.annotations.Test; @@ -22,7 +22,7 @@ /** * Created by matus on 5/11/2018. */ -public class OrganizationStructureTests extends TestBase { +public class OrganizationStructureTests extends AbstractSchrodingerTest { private static File csvTargetFile; @@ -61,7 +61,7 @@ public void importOrgStructure() throws IOException { .getObjectsFromFile() .chooseFile(ORG_MONKEY_ISLAND_SOURCE_FILE) .checkOverwriteExistingObject() - .clickImport() + .clickImportFileButton() .feedback() .isSuccess() ); @@ -111,7 +111,7 @@ public void unassignOrgUnit(){ .clickByName(TEST_USER_GUYBRUSH_NAME) .selectTabAssignments() .table() - .unassignByName(NAME_ORG_UNIT_UNASSIGN) + .removeByName(NAME_ORG_UNIT_UNASSIGN) .and() .and(); userPage.checkKeepDisplayingResults() diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/PolyStringTests.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/PolyStringTests.java index 9c54b39cd9c..2736450f555 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/PolyStringTests.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/PolyStringTests.java @@ -11,13 +11,13 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; import org.testng.Assert; import org.testng.annotations.Test; -import com.evolveum.midpoint.testing.schrodinger.TestBase; +import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest; import java.io.File; /** * Created by matus on 5/21/2018. */ -public class PolyStringTests extends TestBase { +public class PolyStringTests extends AbstractSchrodingerTest { private static final String TEST_USER_JOZKO_NAME = "džordž"; private static final String TEST_USER_JOZKO_NAME_NO_DIAC = "dzordz"; diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/PostAuthenticationTests.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/PostAuthenticationTests.java index 28197674c31..7fbf4fc3877 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/PostAuthenticationTests.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/PostAuthenticationTests.java @@ -17,9 +17,9 @@ import com.evolveum.midpoint.schrodinger.page.user.ListUsersPage; import com.evolveum.midpoint.schrodinger.page.user.UserPage; -import com.evolveum.midpoint.testing.schrodinger.TestBase; +import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest; -public class PostAuthenticationTests extends TestBase { +public class PostAuthenticationTests extends AbstractSchrodingerTest { private static final File SYSTEM_CONFIGURATION_POST_AUTH_ACTIVE_FILE = new File("./src/test/resources/configuration/objects/systemconfig/system-configuration-post-auth-active.xml"); private static final File SYSTEM_CONFIGURATION_POST_AUTH_NON_ACTIVE_FILE = new File("./src/test/resources/configuration/objects/systemconfig/system-configuration-post-auth-non-active.xml"); diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/SynchronizationTests.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/SynchronizationTests.java index f26d54d1bd3..09a008100a9 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/SynchronizationTests.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/SynchronizationTests.java @@ -8,16 +8,17 @@ import com.codeborne.selenide.Selenide; import com.evolveum.midpoint.schrodinger.MidPoint; -import com.evolveum.midpoint.schrodinger.component.user.UserProjectionsTab; +import com.evolveum.midpoint.schrodinger.component.ProjectionsTab; import com.evolveum.midpoint.schrodinger.page.resource.ListResourcesPage; import com.evolveum.midpoint.schrodinger.page.task.ListTasksPage; +import com.evolveum.midpoint.schrodinger.page.task.TaskPage; import com.evolveum.midpoint.schrodinger.page.user.ListUsersPage; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.Assert; import org.testng.annotations.Test; -import com.evolveum.midpoint.testing.schrodinger.TestBase; +import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest; import java.io.File; import java.io.IOException; @@ -25,7 +26,7 @@ /** * Created by matus on 5/21/2018. */ -public class SynchronizationTests extends TestBase { +public class SynchronizationTests extends AbstractSchrodingerTest { private static File csvTargetFile; @@ -62,18 +63,24 @@ public void setUpResourceAndSynchronizationTask() throws IOException { refreshResourceSchema(ScenariosCommons.RESOURCE_CSV_GROUPS_AUTHORITATIVE_NAME); ListResourcesPage listResourcesPage = basicPage.listResources(); - listResourcesPage + Selenide.sleep(2000); + ((TaskPage)listResourcesPage .table() .clickByName(ScenariosCommons.RESOURCE_CSV_GROUPS_AUTHORITATIVE_NAME) .clickAccountsTab() .liveSyncTask() .clickCreateNew() - .basicTable() - .addAttributeValue("Task name","LiveSyncTest") - .and() - .schedulingTable() - .clickCheckBox("Recurring task") - .addAttributeValue("Schedule interval (seconds)","5") + .selectTabBasic() + .form() + .addAttributeValue("name","LiveSyncTest") + .selectOption("recurrence","Recurring") + .selectOption("executionStatus", "Runnable") + .and() + .and()) + .selectScheduleTab() + .form() + .addAttributeValue("interval", "5") + .and() .and() .clickSave() .feedback() @@ -149,7 +156,7 @@ public void newResourceAccountCreatedLinked() throws IOException { .clickByName(ScenariosCommons.TEST_USER_DON_NAME) .selectTabProjections() .table() - .selectHeaderCheckBox() + .selectCheckboxByName(ScenariosCommons.TEST_USER_DON_NAME) .and() .clickHeaderActionDropDown() .delete() @@ -168,7 +175,7 @@ public void newResourceAccountCreatedLinked() throws IOException { LOG.info("File length after data copying, {}", csvTargetFile.length()); ListUsersPage usersListPage = basicPage.listUsers(); - UserProjectionsTab projectionsTab = usersListPage + ProjectionsTab projectionsTab = usersListPage .table() .search() .byName() @@ -313,8 +320,14 @@ public void resourceAccountCreatedWhenResourceUnreachable() throws IOException { ListTasksPage tasksPage = basicPage.listTasks(); tasksPage .table() + .search() + .byName() + .inputValue("LiveSyncTest") + .updateSearch() + .and() .clickByName("LiveSyncTest") - .clickResume(); + .clickResume() + .resumeStopRefreshing(); Selenide.sleep(MidPoint.TIMEOUT_LONG_1_M); @@ -334,7 +347,6 @@ public void resourceAccountCreatedWhenResourceUnreachable() throws IOException { @Test (priority = 8, dependsOnMethods = {RESOURCE_ACCOUNT_CREATED_WHEN_UNREACHABLE}) public void resourceAccountCreatedWhenResourceUnreachableToBeLinked() throws IOException { - ListUsersPage listUsersPage= basicPage.listUsers(); Assert.assertTrue( listUsersPage @@ -372,8 +384,14 @@ public void resourceAccountCreatedWhenResourceUnreachableToBeLinked() throws IOE ListTasksPage tasksPage = basicPage.listTasks(); tasksPage .table() - .clickByName("LiveSyncTest") - .clickResume(); + .search() + .byName() + .inputValue("LiveSyncTest") + .updateSearch() + .and() + .clickByName("LiveSyncTest") + .clickResume() + .resumeStopRefreshing(); Selenide.sleep(MidPoint.TIMEOUT_LONG_1_M); @@ -389,7 +407,7 @@ public void resourceAccountCreatedWhenResourceUnreachableToBeLinked() throws IOE .clickByName(ScenariosCommons.TEST_USER_RAPHAEL_NAME) .selectTabProjections() .table() - .currentTableContains(ScenariosCommons.RESOURCE_CSV_GROUPS_AUTHORITATIVE_NAME) + .currentTableContains(ScenariosCommons.TEST_USER_RAPHAEL_NAME) ); } } diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/UserPhotoTests.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/UserPhotoTests.java index 3a210a5ee98..2e658a0a081 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/UserPhotoTests.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/UserPhotoTests.java @@ -8,7 +8,7 @@ import com.evolveum.midpoint.schrodinger.page.user.ListUsersPage; import com.evolveum.midpoint.schrodinger.page.user.UserPage; -import com.evolveum.midpoint.testing.schrodinger.TestBase; +import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest; import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; import org.testng.Assert; import org.testng.annotations.Test; @@ -18,7 +18,7 @@ /** * Created by matus on 5/11/2018. */ -public class UserPhotoTests extends TestBase { +public class UserPhotoTests extends AbstractSchrodingerTest { private static final String TEST_USER_LEO_NAME= "leonardo"; private static final File PHOTO_SOURCE_FILE_LARGE = new File("./src/test/resources/images/leonardo_large_nc.jpg"); diff --git a/testing/schrodingertest/src/test/resources/logback-test.xml b/testing/schrodingertest/src/test/resources/logback-test.xml index 3fd46df450d..cc42ba36982 100644 --- a/testing/schrodingertest/src/test/resources/logback-test.xml +++ b/testing/schrodingertest/src/test/resources/logback-test.xml @@ -38,5 +38,7 @@ + + diff --git a/testing/schrodingertest/src/test/resources/resource-csv-groups-authoritative.xml b/testing/schrodingertest/src/test/resources/resource-csv-groups-authoritative.xml index f7142afbae5..641b306c160 100644 --- a/testing/schrodingertest/src/test/resources/resource-csv-groups-authoritative.xml +++ b/testing/schrodingertest/src/test/resources/resource-csv-groups-authoritative.xml @@ -221,4 +221,7 @@ + + PT0H + diff --git a/testing/schrodingertest/testng-integration.xml b/testing/schrodingertest/testng-integration.xml index 8924df0dda8..b7e6583a4c8 100644 --- a/testing/schrodingertest/testng-integration.xml +++ b/testing/schrodingertest/testng-integration.xml @@ -22,6 +22,11 @@ + + + + + @@ -52,6 +57,11 @@ + + + + + @@ -72,4 +82,19 @@ + + + + + + + + + + + + + + + diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/AssignmentsTab.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/AssignmentsTab.java index 8189a861f5d..2603979e222 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/AssignmentsTab.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/AssignmentsTab.java @@ -53,8 +53,7 @@ public AbstractTableWithPrismView> selectCheckboxByName(String return this; } - @Override - public AbstractTableWithPrismView> unassignByName(String name) { + public AbstractTableWithPrismView> removeByName(String name) { $(Schrodinger.byAncestorPrecedingSiblingDescendantOrSelfElementEnclosedValue("button", "title", "Unassign", null, null, name)) .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/ProjectionsTab.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/ProjectionsTab.java new file mode 100644 index 00000000000..1c95f229942 --- /dev/null +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/ProjectionsTab.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2010-2018 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.schrodinger.component; + +import com.codeborne.selenide.Condition; +import com.codeborne.selenide.SelenideElement; +import com.evolveum.midpoint.schrodinger.MidPoint; +import com.evolveum.midpoint.schrodinger.component.common.PrismFormWithActionButtons; +import com.evolveum.midpoint.schrodinger.component.common.table.AbstractTableWithPrismView; +import com.evolveum.midpoint.schrodinger.component.modal.FocusSetProjectionModal; +import com.evolveum.midpoint.schrodinger.component.user.ProjectionsDropDown; +import com.evolveum.midpoint.schrodinger.page.AssignmentHolderDetailsPage; +import com.evolveum.midpoint.schrodinger.page.user.UserPage; +import com.evolveum.midpoint.schrodinger.util.Schrodinger; +import org.openqa.selenium.By; + +import static com.codeborne.selenide.Selenide.$; + +/** + * Created by Viliam Repan (lazyman). + */ +public class ProjectionsTab

extends Component { + public ProjectionsTab(UserPage parent, SelenideElement parentElement) { + super(parent, parentElement); + } + + public ProjectionsDropDown> clickHeaderActionDropDown() { + + $(By.tagName("thead")) + .$(Schrodinger.byDataId("inlineMenuPanel")) + .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S) + .click(); + + SelenideElement dropDownMenu = $(Schrodinger.byElementAttributeValue("ul", "class", "dropdown-menu pull-right")); + + return new ProjectionsDropDown>(this, dropDownMenu); + } + + + public AbstractTableWithPrismView> table() { + + SelenideElement tableBox = $(Schrodinger.byDataId("div", "itemsTable")); + + return new AbstractTableWithPrismView>(this, tableBox) { + @Override + public PrismFormWithActionButtons>> clickByName(String name) { + + $(Schrodinger.byElementValue("span", "data-s-id", "label", name)) + .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + + SelenideElement prismElement = $(Schrodinger.byDataId("div", "itemDetails")) + .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); + + return new PrismFormWithActionButtons<>(this, prismElement); + } + + @Override + public AbstractTableWithPrismView> selectCheckboxByName(String name) { + + $(Schrodinger.byFollowingSiblingEnclosedValue("td", "class", "check", "data-s-id", "3", name)) + .$(By.tagName("input")) + .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + + return this; + } + + @Override + public AbstractTableWithPrismView> removeByName(String name) { + selectCheckboxByName(name); + clickHeaderActionDropDown().delete(); + return this; + } + }; + } + +// public AbstractTable table() { +// +// SelenideElement tableBox = $(By.cssSelector(".box.projection")); +// +// return new AbstractTable(this, tableBox) { +// @Override +// public PrismForm> clickByName(String name) { +// +// $(Schrodinger.byElementValue("span", "data-s-id", "name", name)) +// .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); +// +// SelenideElement prismElement = $(By.cssSelector(".container-fluid.prism-object")) +// .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); +// +// return new PrismForm<>(this, prismElement); +// } +// +// @Override +// public AbstractTable selectCheckboxByName(String name) { +// +// $(Schrodinger.byAncestorFollowingSiblingDescendantOrSelfElementEnclosedValue("input", "type", "checkbox", "data-s-id", "3", name)) +// .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); +// +// return this; +// } +// }; +// } + + public FocusSetProjectionModal> clickAddProjection() { + $(Schrodinger.byElementAttributeValue("i", "class", "fa fa-plus ")) + .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + + SelenideElement actualModal = $(Schrodinger.byElementAttributeValue("div", "aria-labelledby", "Choose object")); + + return new FocusSetProjectionModal>(this, actualModal); + } + + public boolean projectionExists(String assignmentName){ + SelenideElement assignmentSummaryDisplayName = table() + .clickByName(assignmentName) + .getParentElement() + .$(Schrodinger.byDataId("displayName")); + return assignmentName.equals(assignmentSummaryDisplayName.getText()); + } +} diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/assignmentholder/AssignmentHolderObjectListPage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/assignmentholder/AssignmentHolderObjectListPage.java index a2a62e78a32..f11ad3a6e44 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/assignmentholder/AssignmentHolderObjectListPage.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/assignmentholder/AssignmentHolderObjectListPage.java @@ -8,16 +8,19 @@ import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; + import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.page.BasicPage; + import org.apache.commons.lang3.StringUtils; import org.openqa.selenium.By; import static com.codeborne.selenide.Selenide.$; /** - * Created by honchar + * @author skublik */ + public abstract class AssignmentHolderObjectListPage extends BasicPage { public abstract T table(); diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/assignmentholder/AssignmentHolderObjectListTable.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/assignmentholder/AssignmentHolderObjectListTable.java index b0d53cbac46..eb9df71d397 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/assignmentholder/AssignmentHolderObjectListTable.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/assignmentholder/AssignmentHolderObjectListTable.java @@ -8,6 +8,7 @@ import com.codeborne.selenide.Condition; import com.codeborne.selenide.ElementsCollection; +import com.codeborne.selenide.Selenide; import com.codeborne.selenide.SelenideElement; import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.common.Search; @@ -40,7 +41,7 @@ public PD clickByName(String name) { getParentElement().$(Schrodinger.byElementValue("span", "data-s-id", "label", name)) .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - +// Selenide.sleep(2000); return getObjectDetailsPage(); } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/FeedbackBox.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/FeedbackBox.java index bad91890ba6..28f40e7b710 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/FeedbackBox.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/FeedbackBox.java @@ -11,7 +11,7 @@ import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.Component; import com.evolveum.midpoint.schrodinger.component.task.TaskBasicTab; -import com.evolveum.midpoint.schrodinger.page.task.EditTaskPage; +import com.evolveum.midpoint.schrodinger.page.task.TaskPage; import com.evolveum.midpoint.schrodinger.util.Schrodinger; import org.openqa.selenium.By; @@ -93,7 +93,7 @@ public TaskBasicTab clickShowTask() { $(Schrodinger.byDataId("backgroundTask")).click(); SelenideElement taskBasicTab = $(Schrodinger.byDataResourceKey("pageTaskEdit.basic")); - return new TaskBasicTab(new EditTaskPage(), taskBasicTab); + return new TaskBasicTab(new TaskPage(), taskBasicTab); } public Boolean isFeedbackBoxPresent() { diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/PrismForm.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/PrismForm.java index 075e46e7193..72a4d333361 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/PrismForm.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/PrismForm.java @@ -50,6 +50,12 @@ public PrismForm addAttributeValue(String name, String value) { public PrismForm addProtectedAttributeValue(String protectedAttributeName, String value) { SelenideElement property = findProperty(protectedAttributeName); + + boolean existValue = $(Schrodinger.byDataId("changePasswordLink")).exists(); + if (existValue) { + $(Schrodinger.byDataId("changePasswordLink")).click(); + } + ElementsCollection values = property.$$(By.xpath(".//input[contains(@class,\"form-control\")]")); for (SelenideElement valueElemen : values) { valueElemen.setValue(value).waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S); diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/table/AbstractTableWithPrismView.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/table/AbstractTableWithPrismView.java index b3038d9a620..c1b8666a64f 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/table/AbstractTableWithPrismView.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/table/AbstractTableWithPrismView.java @@ -21,5 +21,5 @@ public AbstractTableWithPrismView(T parent, SelenideElement parentElement) { public abstract AbstractTableWithPrismView selectCheckboxByName(String name); - public abstract AbstractTableWithPrismView unassignByName(String name); + public abstract AbstractTableWithPrismView removeByName(String name); } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/FocusSetProjectionModal.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/FocusSetProjectionModal.java index 4d539035937..8a8e03fa41b 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/FocusSetProjectionModal.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/FocusSetProjectionModal.java @@ -36,5 +36,4 @@ public T clickAdd() { return this.getParent(); } - } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceTaskQuickAccessDropDown.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceTaskQuickAccessDropDown.java index 3d82ad1fa61..1970739aff4 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceTaskQuickAccessDropDown.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceTaskQuickAccessDropDown.java @@ -9,7 +9,7 @@ import com.codeborne.selenide.ElementsCollection; import com.codeborne.selenide.SelenideElement; import com.evolveum.midpoint.schrodinger.component.common.DropDown; -import com.evolveum.midpoint.schrodinger.page.task.NewTaskPage; +import com.evolveum.midpoint.schrodinger.page.task.TaskPage; import com.evolveum.midpoint.schrodinger.util.Schrodinger; import static com.codeborne.selenide.Selenide.$; @@ -30,7 +30,7 @@ public T clickShowExisting() { return this.getParent(); } - public NewTaskPage clickCreateNew() { + public TaskPage clickCreateNew() { ElementsCollection elements = $$(Schrodinger.byElementValue("a", "data-s-id", "menuItemLink", "Create new")); for (SelenideElement element : elements) { @@ -41,7 +41,7 @@ public NewTaskPage clickCreateNew() { } } - return new NewTaskPage(); + return new TaskPage(); } } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/task/TaskBasicTab.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/task/TaskBasicTab.java index 842514f7c12..d42db2f2826 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/task/TaskBasicTab.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/task/TaskBasicTab.java @@ -7,19 +7,21 @@ package com.evolveum.midpoint.schrodinger.component.task; import com.codeborne.selenide.SelenideElement; -import com.evolveum.midpoint.schrodinger.component.Component; -import com.evolveum.midpoint.schrodinger.page.task.EditTaskPage; -import com.evolveum.midpoint.schrodinger.util.Schrodinger; + +import com.evolveum.midpoint.schrodinger.component.AssignmentHolderBasicTab; +import com.evolveum.midpoint.schrodinger.page.task.TaskPage; + +import org.openqa.selenium.By; /** - * Created by matus on 3/21/2018. + * @author lskublik */ -public class TaskBasicTab extends Component { - public TaskBasicTab(EditTaskPage parent, SelenideElement parentElement) { +public class TaskBasicTab extends AssignmentHolderBasicTab { + public TaskBasicTab(TaskPage parent, SelenideElement parentElement) { super(parent, parentElement); } public String utility() { - return getParentElement().$(Schrodinger.byDataId("category")).getText(); + return form().findProperty("category").$(By.tagName("input")).getValue(); } } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/task/TasksPageTable.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/task/TasksPageTable.java index 49d7d7a9098..a2828b62e7e 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/task/TasksPageTable.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/task/TasksPageTable.java @@ -11,25 +11,25 @@ import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.assignmentholder.AssignmentHolderObjectListTable; import com.evolveum.midpoint.schrodinger.component.common.table.TableWithPageRedirect; -import com.evolveum.midpoint.schrodinger.page.task.EditTaskPage; import com.evolveum.midpoint.schrodinger.page.task.ListTasksPage; +import com.evolveum.midpoint.schrodinger.page.task.TaskPage; import com.evolveum.midpoint.schrodinger.util.Schrodinger; /** * Created by matus on 6/25/2018. */ -public class TasksPageTable extends AssignmentHolderObjectListTable { +public class TasksPageTable extends AssignmentHolderObjectListTable { public TasksPageTable(ListTasksPage parent, SelenideElement parentElement) { super(parent, parentElement); } @Override - public EditTaskPage clickByName(String name) { + public TaskPage clickByName(String name) { getParentElement().$(Schrodinger.byElementValue("span", "data-s-id", "label", name)) .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - return new EditTaskPage(); + return new TaskPage(); } @Override @@ -40,8 +40,8 @@ public TableWithPageRedirect selectCheckboxByName(String name) { } @Override - public EditTaskPage getObjectDetailsPage(){ - return new EditTaskPage(); + public TaskPage getObjectDetailsPage(){ + return new TaskPage(); } } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/UserProjectionsDropDown.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/ProjectionsDropDown.java similarity index 72% rename from tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/UserProjectionsDropDown.java rename to tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/ProjectionsDropDown.java index e1710b40e0e..9ec371c0f59 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/UserProjectionsDropDown.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/ProjectionsDropDown.java @@ -9,9 +9,10 @@ import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; import com.evolveum.midpoint.schrodinger.MidPoint; -import com.evolveum.midpoint.schrodinger.component.modal.FocusSetProjectionModal; +import com.evolveum.midpoint.schrodinger.component.ProjectionsTab; import com.evolveum.midpoint.schrodinger.component.common.DropDown; import com.evolveum.midpoint.schrodinger.component.modal.ConfirmationModal; +import com.evolveum.midpoint.schrodinger.page.AssignmentHolderDetailsPage; import com.evolveum.midpoint.schrodinger.util.Schrodinger; import static com.codeborne.selenide.Selenide.$; @@ -19,9 +20,9 @@ /** * Created by matus on 5/2/2018. */ -public class UserProjectionsDropDown extends DropDown { +public class ProjectionsDropDown extends DropDown { - public UserProjectionsDropDown(T parent, SelenideElement parentElement) { + public ProjectionsDropDown(T parent, SelenideElement parentElement) { super(parent, parentElement); } @@ -53,16 +54,16 @@ public T unlock() { return this.getParent(); } - public FocusSetProjectionModal addProjection() { - $(Schrodinger.byElementValue("a", "data-s-id", "menuItemLink", "\n" + - " Add projection")).waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - - SelenideElement actualModal = $(Schrodinger.byElementAttributeValue("div", "aria-labelledby", "Choose object")); - - return new FocusSetProjectionModal<>(this.getParent(), actualModal); - } +// public FocusSetProjectionModal addProjection() { +// $(Schrodinger.byElementValue("a", "data-s-id", "menuItemLink", "\n" + +// " Add projection")).waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); +// +// SelenideElement actualModal = $(Schrodinger.byElementAttributeValue("div", "aria-labelledby", "Choose object")); +// +// return new FocusSetProjectionModal<>(this.getParent(), actualModal); +// } - public ConfirmationModal> delete() { + public ConfirmationModal> delete() { $(Schrodinger.byElementValue("a", "data-s-id", "menuItemLink", "\n" + " Delete")).waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/UserProjectionsTab.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/UserProjectionsTab.java deleted file mode 100644 index 96d8d939444..00000000000 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/UserProjectionsTab.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2010-2018 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.schrodinger.component.user; - -import com.codeborne.selenide.Condition; -import com.codeborne.selenide.SelenideElement; -import com.evolveum.midpoint.schrodinger.MidPoint; -import com.evolveum.midpoint.schrodinger.component.Component; -import com.evolveum.midpoint.schrodinger.component.common.PrismForm; -import com.evolveum.midpoint.schrodinger.component.common.table.AbstractTable; -import com.evolveum.midpoint.schrodinger.page.user.UserPage; -import com.evolveum.midpoint.schrodinger.util.Schrodinger; -import org.openqa.selenium.By; - -import static com.codeborne.selenide.Selenide.$; - -/** - * Created by Viliam Repan (lazyman). - */ -public class UserProjectionsTab extends Component { - public UserProjectionsTab(UserPage parent, SelenideElement parentElement) { - super(parent, parentElement); - } - - public UserProjectionsDropDown clickHeaderActionDropDown() { - - $(By.tagName("thead")) - .$(Schrodinger.byDataId("inlineMenuPanel")) - .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S) - .click(); - - SelenideElement dropDownMenu = $(Schrodinger.byElementAttributeValue("ul", "class", "dropdown-menu pull-right")); - - return new UserProjectionsDropDown<>(this, dropDownMenu); - } - - public AbstractTable table() { - - SelenideElement tableBox = $(By.cssSelector(".box.projection")); - - return new AbstractTable(this, tableBox) { - @Override - public PrismForm> clickByName(String name) { - - $(Schrodinger.byElementValue("span", "data-s-id", "name", name)) - .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - - SelenideElement prismElement = $(By.cssSelector(".container-fluid.prism-object")) - .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); - - return new PrismForm<>(this, prismElement); - } - - @Override - public AbstractTable selectCheckboxByName(String name) { - - $(Schrodinger.byAncestorFollowingSiblingDescendantOrSelfElementEnclosedValue("input", "type", "checkbox", "data-s-id", "3", name)) - .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - - return this; - } - }; - } -} diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/UsersPageTable.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/UsersPageTable.java index 716483516ac..7fb4bfddd02 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/UsersPageTable.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/UsersPageTable.java @@ -11,7 +11,6 @@ import com.codeborne.selenide.ElementsCollection; import com.codeborne.selenide.SelenideElement; import com.evolveum.midpoint.schrodinger.MidPoint; -import com.evolveum.midpoint.schrodinger.component.assignmentholder.AssignmentHolderObjectListPage; import com.evolveum.midpoint.schrodinger.component.assignmentholder.AssignmentHolderObjectListTable; import com.evolveum.midpoint.schrodinger.component.modal.ConfirmationModal; import com.evolveum.midpoint.schrodinger.component.common.Search; diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/AssignmentHolderDetailsPage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/AssignmentHolderDetailsPage.java index 105b5dccd99..29138ab169c 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/AssignmentHolderDetailsPage.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/AssignmentHolderDetailsPage.java @@ -8,10 +8,11 @@ import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; + import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.AssignmentHolderBasicTab; -import com.evolveum.midpoint.schrodinger.component.common.TabPanel; import com.evolveum.midpoint.schrodinger.component.AssignmentsTab; +import com.evolveum.midpoint.schrodinger.component.common.TabPanel; import com.evolveum.midpoint.schrodinger.page.user.ProgressPage; import com.evolveum.midpoint.schrodinger.util.Schrodinger; diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/BasicPage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/BasicPage.java index 353a1f485c1..f8be63f88e1 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/BasicPage.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/BasicPage.java @@ -34,7 +34,7 @@ import com.evolveum.midpoint.schrodinger.page.service.ListServicesPage; import com.evolveum.midpoint.schrodinger.page.service.NewServicePage; import com.evolveum.midpoint.schrodinger.page.task.ListTasksPage; -import com.evolveum.midpoint.schrodinger.page.task.NewTaskPage; +import com.evolveum.midpoint.schrodinger.page.task.TaskPage; import com.evolveum.midpoint.schrodinger.page.user.FormSubmittablePage; import com.evolveum.midpoint.schrodinger.page.user.ListUsersPage; import com.evolveum.midpoint.schrodinger.page.user.UserPage; @@ -223,9 +223,9 @@ public ListTasksPage listTasks() { return new ListTasksPage(); } - public NewTaskPage newTask() { + public TaskPage newTask() { clickAdministrationMenu("PageAdmin.menu.top.serverTasks", "PageAdmin.menu.top.serverTasks.new"); - return new NewTaskPage(); + return new TaskPage(); } public ListReportsPage listReports() { diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/cases/ChildrenCaseTable.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/cases/ChildrenCaseTable.java index 183dff45019..30042e1ae08 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/cases/ChildrenCaseTable.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/cases/ChildrenCaseTable.java @@ -11,7 +11,6 @@ import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.common.table.TableWithPageRedirect; import com.evolveum.midpoint.schrodinger.page.BasicPage; -import com.evolveum.midpoint.schrodinger.page.task.EditTaskPage; import com.evolveum.midpoint.schrodinger.util.Schrodinger; import org.openqa.selenium.By; diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/configuration/ImportObjectPage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/configuration/ImportObjectPage.java index fb0cb7617c3..604b4f06826 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/configuration/ImportObjectPage.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/configuration/ImportObjectPage.java @@ -6,12 +6,23 @@ */ package com.evolveum.midpoint.schrodinger.page.configuration; +import com.codeborne.selenide.Condition; +import com.codeborne.selenide.SelenideElement; +import com.codeborne.selenide.WebDriverRunner; + import com.evolveum.midpoint.schrodinger.page.BasicPage; +import com.evolveum.midpoint.schrodinger.util.Schrodinger; + import org.openqa.selenium.By; +import org.openqa.selenium.Keys; import java.io.File; +import java.util.ArrayList; +import java.util.List; import static com.codeborne.selenide.Selenide.$; +import static com.codeborne.selenide.Selenide.executeJavaScript; + import static com.evolveum.midpoint.schrodinger.util.Utils.setOptionChecked; /** @@ -132,19 +143,52 @@ public ImportObjectPage chooseFile(File file) { return this; } - public ImportObjectPage setEditorText(String text) { - // todo implement, nothing works yet + public ImportObjectPage setEditorXmlText(String text) { + $(By.xpath("/html/body/div[2]/div/section/form/div[4]/div/div[1]/div/button[1]")).click(); + int lastIndex = 0; + SelenideElement aceEditor = $(By.className("ace_text-input")); + while (lastIndex < text.length() && text.substring(lastIndex, text.length()-1).contains("<")) { + text = text.substring(lastIndex, text.length()); + int actualIndex = text.indexOf("<"); + if (actualIndex != 0) { + aceEditor.setValue(text.substring(0, actualIndex)); + } + lastIndex = actualIndex; + text = text.substring(actualIndex); + if (text.startsWith("") + 1; + aceEditor.setValue(text.substring(0, lastIndex)); + } else if (text.startsWith("") + 2; + aceEditor.setValue(text.substring(0, lastIndex)); + } else if (text.startsWith("") + 3; + aceEditor.setValue(text.substring(0, lastIndex)); + } else { + + lastIndex = text.indexOf(">") + 1; + String tag = text.substring(0, lastIndex); + aceEditor.setValue(tag); + String endTag = ""; + for (int i = 0; i < endTag.length(); i++) { + aceEditor.sendKeys(Keys.DELETE); + } + + } + } + + // executeJavaScript( // "const ta = document.querySelector(\"textarea\"); " + // "ta.value = \"asdf\";" + // "ta.dispatchEvent(new Event(\"input\"));"); - +// // text = "asdf"; // executeJavaScript( // "var ta = $(\"textarea[name='input:inputAce:aceEditor']\"); " + // "ta.value('" + text + "'); " + // "ta.dispatchEvent(new Event(\"input\"));"); - +// // $(".ace_content").shouldBe(Condition.visible); // $(".ace_content").click(); // $(".ace_content").sendKeys("asdf"); @@ -153,11 +197,14 @@ public ImportObjectPage setEditorText(String text) { return this; } - public ImportObjectPage clickImport() { - $(".main-button-bar").$x("//a[@about='importFileButton']").click(); + public ImportObjectPage clickImportFileButton() { + $(".main-button-bar").$x("//a[@data-s-id='importFileButton']").click(); return this; } - + public ImportObjectPage clickImportXmlButton() { + $(".main-button-bar").$x("//a[@data-s-id='importXmlButton']").click(); + return this; + } } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/login/FormLoginPage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/login/FormLoginPage.java index cde6b75a24d..7253478a7fd 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/login/FormLoginPage.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/login/FormLoginPage.java @@ -39,6 +39,15 @@ public LoginPage forgotPassword() { return this; } + public BasicPage loginIfUserIsNotLog(String username, String password){ + open("/login"); + Selenide.sleep(5000); + if(!$(".dropdown.user.user-menu").exists()) { + return login(username, password); + } + return new BasicPage(); + } + public BasicPage loginWithReloadLoginPage(String username, String password) { return loginWithReloadLoginPage(username, password, null); } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/EditTaskPage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/EditTaskPage.java deleted file mode 100644 index c02a3578f76..00000000000 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/EditTaskPage.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2010-2019 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.schrodinger.page.task; - -import com.codeborne.selenide.Condition; -import com.codeborne.selenide.SelenideElement; -import com.evolveum.midpoint.schrodinger.MidPoint; -import com.evolveum.midpoint.schrodinger.component.AssignmentHolderBasicTab; -import com.evolveum.midpoint.schrodinger.component.AssignmentsTab; -import com.evolveum.midpoint.schrodinger.component.common.SummaryPanel; -import com.evolveum.midpoint.schrodinger.page.AssignmentHolderDetailsPage; -import com.evolveum.midpoint.schrodinger.util.Schrodinger; -import org.openqa.selenium.By; - -import static com.codeborne.selenide.Selenide.$; - - -/** - * Created by matus on 3/21/2018. - */ -public class EditTaskPage extends AssignmentHolderDetailsPage { - - - public SummaryPanel summary() { - - SelenideElement summaryBox = $(By.cssSelector("div.info-box-content")); - - return new SummaryPanel(this, summaryBox); - } - - public EditTaskPage clickResume() { - - $(Schrodinger.byDataResourceKey("a", "pageTaskEdit.button.resume")).waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - - return this; - } - - public EditTaskPage clickSuspend() { - $(Schrodinger.byDataResourceKey("a", "pageTaskEdit.button.suspend")).waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - return this; - } - - public boolean isRunNowVisible(){ - return $(Schrodinger.byDataResourceKey("a", "pageTaskEdit.button.runNow")).is(Condition.visible); - } - - public EditTaskPage clickRunNow() { - $(Schrodinger.byDataResourceKey("a", "pageTaskEdit.button.runNow")) - .waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - return this; - } - - @Override - public AssignmentHolderBasicTab selectTabBasic(){ - SelenideElement element = findTabPanel().clickTab("pageAdminFocus.basic") - .waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S); - - return new AssignmentHolderBasicTab(this, element); - } - - @Override - public AssignmentsTab selectTabAssignments(){ - //TODO implement - return null; - } -} diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/ListTasksPage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/ListTasksPage.java index b2fcb3290cf..8d6c7e49838 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/ListTasksPage.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/ListTasksPage.java @@ -7,6 +7,7 @@ package com.evolveum.midpoint.schrodinger.page.task; import com.codeborne.selenide.SelenideElement; + import com.evolveum.midpoint.schrodinger.component.assignmentholder.AssignmentHolderObjectListPage; import com.evolveum.midpoint.schrodinger.component.task.TasksPageTable; import com.evolveum.midpoint.schrodinger.util.Schrodinger; diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/NewTaskPage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/NewTaskPage.java deleted file mode 100644 index 1c2ce234da5..00000000000 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/NewTaskPage.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2010-2019 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.schrodinger.page.task; - -import com.codeborne.selenide.Condition; -import com.codeborne.selenide.SelenideElement; -import com.evolveum.midpoint.schrodinger.MidPoint; -import com.evolveum.midpoint.schrodinger.component.common.table.InputTable; -import com.evolveum.midpoint.schrodinger.page.BasicPage; -import com.evolveum.midpoint.schrodinger.util.Schrodinger; - -import static com.codeborne.selenide.Selenide.$; - -/** - * Created by Viliam Repan (lazyman). - */ -public class NewTaskPage extends BasicPage { - - public InputTable basicTable() { - - SelenideElement tableElement = $(Schrodinger.byPrecedingSiblingEnclosedValue("table", "class", "table table-condensed table-striped", "", "", "Basic")) - .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); - - return new InputTable<>(this, tableElement); - } - - public InputTable schedulingTable() { - - SelenideElement tableElement = $(Schrodinger.byPrecedingSiblingEnclosedValue("table", "class", "table table-condensed table-striped", "", "", "Scheduling")) - .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); - - return new InputTable<>(this, tableElement); - } - - public ListTasksPage clickSave() { - - $(Schrodinger.byDataId("saveButton")) - .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - - return new ListTasksPage(); - } - -} diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/TaskPage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/TaskPage.java new file mode 100644 index 00000000000..c617f606098 --- /dev/null +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/TaskPage.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2010-2019 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.schrodinger.page.task; + +import static com.codeborne.selenide.Selenide.$; + +import com.codeborne.selenide.Condition; +import com.codeborne.selenide.SelenideElement; + +import com.evolveum.midpoint.schrodinger.component.AssignmentHolderBasicTab; +import com.evolveum.midpoint.schrodinger.component.AssignmentsTab; +import com.evolveum.midpoint.schrodinger.component.task.TaskBasicTab; + +import com.evolveum.midpoint.schrodinger.page.AssignmentHolderDetailsPage; + +import org.openqa.selenium.By; + +import com.evolveum.midpoint.schrodinger.MidPoint; +import com.evolveum.midpoint.schrodinger.component.common.SummaryPanel; +import com.evolveum.midpoint.schrodinger.page.PreviewPage; +import com.evolveum.midpoint.schrodinger.util.Schrodinger; + +/** + * Created by Viliam Repan (lazyman). + */ +public class TaskPage extends AssignmentHolderDetailsPage { + + public PreviewPage clickPreviewChanges() { + $(Schrodinger.byDataId("previewChanges")).click(); + return new PreviewPage(); + } + + public SummaryPanel summary() { + + SelenideElement summaryBox = $(By.cssSelector("div.info-box-content")); + + return new SummaryPanel(this, summaryBox); + } + + public TaskPage clickResume() { + + $(Schrodinger.byDataResourceKey("span", "pageTaskEdit.button.resume")).waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + + return this; + } + + public TaskPage resumeStopRefreshing() { + + $(Schrodinger.byElementAttributeValue("span", "title", "Resume refreshing")).waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + + return this; + } + + public TaskPage clickRunNow() { + + $(Schrodinger.byDataResourceKey("span", "pageTaskEdit.button.runNow")).waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + + return this; + } + + public TaskPage clickSuspend() { + $(Schrodinger.byDataResourceKey("span", "pageTaskEdit.button.suspend")).waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + return this; + } + + public boolean isRunNowVisible(){ + return $(Schrodinger.byDataResourceKey("span", "pageTaskEdit.button.runNow")).is(Condition.visible); + } + + @Override + public

AssignmentHolderBasicTab

selectTabBasic() { + SelenideElement element = findTabPanel().clickTab("pageTask.basic.title") + .waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S); + + return (AssignmentHolderBasicTab

) new TaskBasicTab(this, element); + } + + @Override + public

AssignmentsTab

selectTabAssignments() { + return null; + } + + public AssignmentHolderBasicTab selectScheduleTab(){ + SelenideElement element = findTabPanel().clickTab("pageTask.schedule.title") + .waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S); + + return new AssignmentHolderBasicTab(this, element); + } +} diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/user/UserPage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/user/UserPage.java index c033193781b..60d4c65343c 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/user/UserPage.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/user/UserPage.java @@ -11,6 +11,7 @@ import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.AssignmentHolderBasicTab; import com.evolveum.midpoint.schrodinger.component.AssignmentsTab; +import com.evolveum.midpoint.schrodinger.component.ProjectionsTab; import com.evolveum.midpoint.schrodinger.component.common.SummaryPanel; import com.evolveum.midpoint.schrodinger.component.user.*; import com.evolveum.midpoint.schrodinger.page.AssignmentHolderDetailsPage; @@ -72,10 +73,10 @@ public PreviewPage clickPreviewChanges() { } - public UserProjectionsTab selectTabProjections() { + public ProjectionsTab selectTabProjections() { SelenideElement element = findTabPanel().clickTab("pageAdminFocus.projections"); - return new UserProjectionsTab(this, element); + return new ProjectionsTab(this, element); } public UserPersonasTab selectTabPersonas() {