Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Jan 18, 2019
2 parents 4f888ef + dba7853 commit 8f2034b
Show file tree
Hide file tree
Showing 58 changed files with 1,056 additions and 291 deletions.
Expand Up @@ -15,9 +15,11 @@
*/
package com.evolveum.midpoint.gui.api.component;

import java.io.Serializable;
import java.util.*;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.web.component.MultifunctionalButton;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.Component;
Expand All @@ -36,11 +38,9 @@
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.model.api.ModelAuthorizationAction;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
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.AjaxIconButton;
Expand All @@ -55,13 +55,9 @@
/**
* @author katkav
*/
public abstract class MainObjectListPanel<O extends ObjectType> extends ObjectListPanel<O> {
public abstract class MainObjectListPanel<O extends ObjectType, S extends Serializable> extends ObjectListPanel<O> {
private static final long serialVersionUID = 1L;

private static final String ID_REFRESH = "refresh";
private static final String ID_NEW_OBJECT = "newObject";
private static final String ID_IMPORT_OBJECT = "importObject";
private static final String ID_EXPORT_DATA = "exportData";
private static final String ID_BUTTON_BAR = "buttonBar";
private static final String ID_BUTTON_REPEATER = "buttonsRepeater";
private static final String ID_BUTTON = "button";
Expand Down Expand Up @@ -118,7 +114,7 @@ protected boolean isClickable(IModel<SelectableBean<O>> rowModel) {

protected abstract void objectDetailsPerformed(AjaxRequestTarget target, O object);

protected abstract void newObjectPerformed(AjaxRequestTarget target);
protected void newObjectPerformed(AjaxRequestTarget target, S collectionView){}

@Override
protected WebMarkupContainer createTableButtonToolbar(String id) {
Expand All @@ -127,18 +123,45 @@ protected WebMarkupContainer createTableButtonToolbar(String id) {

protected List<Component> createToolbarButtonsList(String buttonId){
List<Component> buttonsList = new ArrayList<>();
AjaxIconButton newObjectIcon = new AjaxIconButton(buttonId, new Model<>(GuiStyleConstants.CLASS_ADD_NEW_OBJECT),
createStringResource("MainObjectListPanel.newObject")) {

// AjaxIconButton newObjectIcon = new AjaxIconButton(buttonId, new Model<>(GuiStyleConstants.CLASS_ADD_NEW_OBJECT),
// createStringResource("MainObjectListPanel.newObject")) {
//
// private static final long serialVersionUID = 1L;
//
// @Override
// public void onClick(AjaxRequestTarget target) {
// newObjectPerformed(target);
// }
// };
// newObjectIcon.add(AttributeAppender.append("class", "btn btn-success btn-sm"));
// buttonsList.add(newObjectIcon);

MultifunctionalButton<S> createNewObjectButton =
new MultifunctionalButton<S>(buttonId){
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
newObjectPerformed(target);
protected List<S> getAdditionalButtonsObjects(){
return getNewObjectInfluencesList();
}

@Override
protected void buttonClickPerformed(AjaxRequestTarget target, S influencingObject){
newObjectPerformed(target, influencingObject);
}

@Override
protected String getDefaultButtonStyle(){
return getNewObjectButtonStyle();
}

@Override
protected String getAdditionalButtonStyle(S buttonObject){
return getNewObjectSpecificStyle(buttonObject);
}
};
newObjectIcon.add(AttributeAppender.append("class", "btn btn-success btn-sm"));
buttonsList.add(newObjectIcon);
buttonsList.add(createNewObjectButton);


AjaxIconButton refreshIcon = new AjaxIconButton(buttonId, new Model<>(GuiStyleConstants.CLASS_RECONCILE),
createStringResource("MainObjectListPanel.refresh")) {
Expand Down Expand Up @@ -231,11 +254,23 @@ private boolean isRawOrNoFetchOption(Collection<SelectorOptions<GetOperationOpti
return false;
}

protected List<S> getNewObjectInfluencesList(){
return new ArrayList<>();
}

protected String getNewObjectButtonStyle(){
return GuiStyleConstants.CLASS_ADD_NEW_OBJECT;
}

protected String getNewObjectSpecificStyle(S buttonObject){
return "";
}

private static class ButtonBar extends Fragment {

private static final long serialVersionUID = 1L;

public <O extends ObjectType> ButtonBar(String id, String markupId, MainObjectListPanel<O> markupProvider, List<Component> buttonsList) {
public <O extends ObjectType, S extends Serializable> ButtonBar(String id, String markupId, MainObjectListPanel<O, S> markupProvider, List<Component> buttonsList) {
super(id, markupId, markupProvider);

initLayout(buttonsList);
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2010-2018 Evolveum
* Copyright (c) 2010-2019 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -49,7 +49,7 @@
import com.evolveum.midpoint.common.refinery.RefinedResourceSchema;
import com.evolveum.midpoint.gui.api.SubscriptionType;
import com.evolveum.midpoint.gui.api.model.ReadOnlyValueModel;
import com.evolveum.midpoint.model.api.ArchetypeInteractionSpecification;
import com.evolveum.midpoint.model.api.AssignmentTargetSpecification;
import com.evolveum.midpoint.model.api.ModelExecuteOptions;
import com.evolveum.midpoint.model.api.ModelInteractionService;
import com.evolveum.midpoint.model.api.RoleSelectionSpecification;
Expand All @@ -72,6 +72,7 @@
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItemAction;
import com.evolveum.midpoint.web.component.prism.*;
import com.evolveum.midpoint.web.session.UserProfileStorage;
import com.evolveum.midpoint.web.util.ObjectTypeGuiDescriptor;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.types_3.ObjectDeltaType;
Expand Down Expand Up @@ -1924,6 +1925,18 @@ public static String createShadowIcon(PrismObject<ShadowType> object) {
return GuiStyleConstants.CLASS_SHADOW_ICON_UNKNOWN;
}

public static <AHT extends AssignmentHolderType> AHT createNewObjectWithCollectionRef(Class<AHT> type, PrismContext context,
ObjectReferenceType collectionRef){
if (UserType.class.equals(type) && collectionRef != null && ArchetypeType.COMPLEX_TYPE.equals(collectionRef.getType())){
UserType user = new UserType(context);
AssignmentType assignment = new AssignmentType();
assignment.setTargetRef(collectionRef.clone());
user.getAssignment().add(assignment);
return (AHT) user;
}
return null;
}

public static String createUserIconTitle(PrismObject<UserType> object) {
UserType user = object.asObjectable();

Expand Down Expand Up @@ -2546,7 +2559,7 @@ public static boolean getElementVisibility(UserInterfaceElementVisibilityType vi
}

public static <AR extends AbstractRoleType> IModel<String> createAbstractRoleConfirmationMessage(String actionName,
ColumnMenuAction action, MainObjectListPanel<AR> abstractRoleTable, PageBase pageBase) {
ColumnMenuAction action, MainObjectListPanel<AR, CompiledObjectCollectionView> abstractRoleTable, PageBase pageBase) {
List<AR> selectedRoles = new ArrayList<>();
if (action.getRowModel() == null) {
selectedRoles.addAll(abstractRoleTable.getSelectedObjects());
Expand Down Expand Up @@ -3042,7 +3055,7 @@ public static PrismObject<ResourceType> getConstructionResource(ConstructionType
return WebModelServiceUtils.resolveReferenceNoFetch(resourceRef, pageBase, task, result);
}

public static <O extends ObjectType> ArchetypeInteractionSpecification getArchetypeSpecification(PrismObject<O> object, ModelServiceLocator locator){
public static <O extends ObjectType> ArchetypePolicyType getArchetypeSpecification(PrismObject<O> object, ModelServiceLocator locator){
if (object == null || object.asObjectable() == null){
return null;
}
Expand All @@ -3051,9 +3064,9 @@ public static <O extends ObjectType> ArchetypeInteractionSpecification getArchet
if (!object.canRepresent(AssignmentHolderType.class)) {
return null;
}
ArchetypeInteractionSpecification spec = null;
ArchetypePolicyType spec = null;
try {
spec = locator.getModelInteractionService().getInteractionSpecification((PrismObject<? extends AssignmentHolderType>) object, result);
spec = locator.getModelInteractionService().determineArchetypePolicy((PrismObject<? extends AssignmentHolderType>) object, result);
} catch (SchemaException | ConfigurationException ex){
result.recordPartialError(ex.getLocalizedMessage());
LOGGER.error("Cannot load ArchetypeInteractionSpecification for object ", object, ex.getLocalizedMessage());
Expand Down
Expand Up @@ -28,7 +28,7 @@
* @author skublik
*/
public class CompositedIcon implements Serializable {

private static final long serialVersionUID = 1L;

private String basicIcon;
Expand Down
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
~ Copyright (c) 2010-2019 Evolveum
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<wicket:panel xmlns:wicket="http://wicket.apache.org">
<button wicket:id="mainButton" type="button" class="btn btn-success btn-sm dropdown-toggle" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
</button>
<ul class="dropdown-menu">
<li>
<div wicket:id="additionalButton" />
</li>
</ul>
</wicket:panel>
@@ -0,0 +1,142 @@
/*
* Copyright (c) 2010-2019 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.evolveum.midpoint.web.component;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.impl.component.AjaxCompositedIconButton;
import com.evolveum.midpoint.gui.impl.component.icon.CompositedIcon;
import com.evolveum.midpoint.gui.impl.component.icon.CompositedIconBuilder;
import com.evolveum.midpoint.gui.impl.component.icon.IconCssStyle;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.MarkupStream;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.Model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
* Created by honchar
*/
public class MultifunctionalButton<S extends Serializable> extends BasePanel<S> {

private static String ID_MAIN_BUTTON = "mainButton";
private static String ID_BUTTON = "additionalButton";

public MultifunctionalButton(String id){
super(id);
}

@Override
protected void onInitialize(){
super.onInitialize();
initLayout();
}

private void initLayout(){
List<S> additionalButtons = getAdditionalButtonsObjects();

CompositedIconBuilder builder = new CompositedIconBuilder();
builder.setBasicIcon(getDefaultButtonStyle(), IconCssStyle.IN_ROW_STYLE, "")
.appendLayerIcon(GuiStyleConstants.CLASS_PLUS_CIRCLE, IconCssStyle.BOTTOM_RIGHT_STYLE, "green");

AjaxCompositedIconButton mainButton = new AjaxCompositedIconButton(ID_MAIN_BUTTON, builder.build(),
createStringResource("MainObjectListPanel.newObject")) {

private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
if (!additionalButtonsExist()){
buttonClickPerformed(target, null);
}
}
};
add(mainButton);

RepeatingView buttonsPanel = new RepeatingView(ID_BUTTON);
buttonsPanel.add(new VisibleBehaviour(() -> additionalButtonsExist()));
add(buttonsPanel);

if (additionalButtons != null){
additionalButtons.forEach(additionalButtonObject -> {
AjaxIconButton newObjectIcon = new AjaxIconButton(buttonsPanel.newChildId(),
new Model<>(getAdditionalButtonStyle(additionalButtonObject)),
createStringResource("MainObjectListPanel.newObject")) {

private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
buttonClickPerformed(target, additionalButtonObject);
}

@Override
public void onComponentTagBody(final MarkupStream markupStream, final ComponentTag openTag) {
super.onComponentTagBody(markupStream, openTag);
}
};
newObjectIcon.add(AttributeAppender.append("class", "btn btn-success btn-sm buttons-panel-marging"));
buttonsPanel.add(newObjectIcon);
});

CompositedIconBuilder defaultButtonBuilder = new CompositedIconBuilder();
AjaxCompositedIconButton defaultButton = new AjaxCompositedIconButton(buttonsPanel.newChildId(),
builder.build(),
createStringResource("MainObjectListPanel.newObject")) {

private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
if (!additionalButtonsExist()){
buttonClickPerformed(target, null);
}
}
};
defaultButton.add(AttributeAppender.append("class", "btn btn-success btn-sm buttons-panel-marging"));
buttonsPanel.add(defaultButton);
}
}

protected String getAdditionalButtonStyle(S buttonObject){
return "";
}

protected String getDefaultButtonStyle(){
return "";
}

protected void buttonClickPerformed(AjaxRequestTarget target, S buttonObject){

}

private boolean additionalButtonsExist(){
List additionalButtons = getAdditionalButtonsObjects();
return additionalButtons != null && additionalButtons.size() > 0;
}

protected List<S> getAdditionalButtonsObjects(){
return new ArrayList<>();
}


}

0 comments on commit 8f2034b

Please sign in to comment.