Package org.apache.syncope.console.commons.status

Source Code of org.apache.syncope.console.commons.status.StatusUtils

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you 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 org.apache.syncope.console.commons.status;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.syncope.common.mod.StatusMod;
import org.apache.syncope.common.to.AbstractAttributableTO;
import org.apache.syncope.common.to.AbstractSubjectTO;
import org.apache.syncope.common.to.AttributeTO;
import org.apache.syncope.common.to.ConnObjectTO;
import org.apache.syncope.console.commons.ConnIdSpecialAttributeName;
import org.apache.syncope.console.commons.Constants;
import org.apache.syncope.console.pages.panels.ImagePanel;
import org.apache.syncope.console.pages.panels.StatusPanel;
import org.apache.syncope.console.rest.AbstractSubjectRestClient;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.image.Image;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class StatusUtils implements Serializable {

    private static final long serialVersionUID = 7238009174387184309L;

    /**
     * Logger.
     */
    private static final Logger LOG = LoggerFactory.getLogger(StatusUtils.class);

    public static final String IMG_STATUES = "../statuses/";

    private final AbstractSubjectRestClient restClient;

    public StatusUtils(final AbstractSubjectRestClient restClient) {
        this.restClient = restClient;
    }

    public List<ConnObjectWrapper> getConnectorObjects(final AbstractSubjectTO subject) {
        final List<ConnObjectWrapper> objects = new ArrayList<ConnObjectWrapper>();
        objects.addAll(getConnectorObjects(subject, subject.getResources()));
        return objects;
    }

    public List<ConnObjectWrapper> getConnectorObjects(
            final Collection<AbstractSubjectTO> subjects, final Collection<String> resources) {

        final List<ConnObjectWrapper> objects = new ArrayList<ConnObjectWrapper>();

        for (AbstractSubjectTO subject : subjects) {
            objects.addAll(getConnectorObjects(subject, resources));
        }

        return objects;
    }

    private List<ConnObjectWrapper> getConnectorObjects(
            final AbstractSubjectTO subject, final Collection<String> resources) {

        final List<ConnObjectWrapper> objects = new ArrayList<ConnObjectWrapper>();

        for (String resourceName : resources) {
            ConnObjectTO objectTO = null;
            try {
                objectTO = restClient.getConnectorObject(resourceName, subject.getId());
            } catch (Exception e) {
                LOG.warn("ConnObject '{}' not found on resource '{}'", subject.getId(), resourceName);
            }

            objects.add(new ConnObjectWrapper(subject, resourceName, objectTO));
        }

        return objects;
    }

    public StatusBean getStatusBean(
            final AbstractAttributableTO attributable,
            final String resourceName,
            final ConnObjectTO objectTO,
            final boolean isRole) {
        final StatusBean statusBean = new StatusBean(attributable, resourceName);

        if (objectTO != null) {
            final Boolean enabled = isEnabled(objectTO);

            final Status status = enabled == null
                    ? (isRole ? Status.ACTIVE : Status.UNDEFINED)
                    : enabled
                    ? Status.ACTIVE
                    : Status.SUSPENDED;

            final String accountLink = getAccountLink(objectTO);

            statusBean.setStatus(status);
            statusBean.setAccountLink(accountLink);
        }

        return statusBean;
    }

    private Boolean isEnabled(final ConnObjectTO objectTO) {
        final Map<String, AttributeTO> attributeTOs = objectTO.getAttrMap();

        final AttributeTO status = attributeTOs.get(ConnIdSpecialAttributeName.ENABLE);

        return status != null && status.getValues() != null && !status.getValues().isEmpty()
                ? Boolean.parseBoolean(status.getValues().get(0))
                : null;
    }

    private String getAccountLink(final ConnObjectTO objectTO) {
        final Map<String, AttributeTO> attributeTOs = objectTO == null
                ? Collections.<String, AttributeTO>emptyMap()
                : objectTO.getAttrMap();

        final AttributeTO name = attributeTOs.get(ConnIdSpecialAttributeName.NAME);

        return name != null && name.getValues() != null && !name.getValues().isEmpty()
                ? name.getValues().get(0)
                : null;
    }

    public static StatusMod buildStatusMod(final Collection<StatusBean> statuses) {
        return buildStatusMod(statuses, null);
    }

    public static StatusMod buildStatusMod(final Collection<StatusBean> statuses, final Boolean enable) {
        StatusMod statusMod = new StatusMod();
        statusMod.setOnSyncope(false);

        for (StatusBean status : statuses) {
            if (enable == null
                    || (enable && !status.getStatus().isActive()) || (!enable && status.getStatus().isActive())) {

                if ("syncope".equalsIgnoreCase(status.getResourceName())) {
                    statusMod.setOnSyncope(true);
                } else {
                    statusMod.getResourceNames().add(status.getResourceName());
                }

            }
        }

        return statusMod;
    }

    public static void update(
            final AbstractAttributableTO attributable,
            final StatusPanel statusPanel,
            final AjaxRequestTarget target,
            final Collection<String> resourcesToAdd,
            final Collection<String> resourcesToRemove) {

        if (statusPanel != null) {
            Map<String, StatusBean> statusMap = new LinkedHashMap<String, StatusBean>();
            for (StatusBean statusBean : statusPanel.getStatusBeans()) {
                statusMap.put(statusBean.getResourceName(), statusBean);
            }

            for (String resourceName : resourcesToAdd) {
                if (!statusMap.keySet().contains(resourceName)) {
                    StatusBean statusBean;
                    if (statusPanel.getInitialStatusBeanMap().containsKey(resourceName)) {
                        statusBean = statusPanel.getInitialStatusBeanMap().get(resourceName);
                    } else {
                        statusBean = new StatusBean(attributable, resourceName);
                        statusBean.setStatus(Status.NOT_YET_SUBMITTED);
                    }

                    statusMap.put(statusBean.getResourceName(), statusBean);
                }
            }

            for (String resource : resourcesToRemove) {
                statusMap.remove(resource);
            }

            statusPanel.updateStatusBeans(new ArrayList<StatusBean>(statusMap.values()));
            target.add(statusPanel);
        }
    }

    public ConnObjectTO getConnObjectTO(
            final Long attributableId, final String resourceName, final List<ConnObjectWrapper> objects) {

        for (ConnObjectWrapper object : objects) {
            if (attributableId.equals(object.getAttributable().getId())
                    && resourceName.equalsIgnoreCase(object.getResourceName())) {

                return object.getConnObjectTO();
            }
        }

        return null;
    }

    public Image getStatusImage(final String componentId, final Status status) {
        final String alt, title, statusName;

        switch (status) {

            case NOT_YET_SUBMITTED:
                statusName = Status.UNDEFINED.toString();
                alt = "undefined icon";
                title = "Not yet submitted";
                break;

            case ACTIVE:
                statusName = Status.ACTIVE.toString();
                alt = "active icon";
                title = "Enabled";
                break;

            case UNDEFINED:
                statusName = Status.UNDEFINED.toString();
                alt = "undefined icon";
                title = "Undefined status";
                break;

            case OBJECT_NOT_FOUND:
                statusName = Status.OBJECT_NOT_FOUND.toString();
                alt = "notfound icon";
                title = "Not found";
                break;

            default:
                statusName = Status.SUSPENDED.toString();
                alt = "inactive icon";
                title = "Disabled";
        }

        final Image img = new Image(componentId, IMG_STATUES + statusName + Constants.PNG_EXT);

        img.add(new Behavior() {

            private static final long serialVersionUID = 1469628524240283489L;

            @Override
            public void onComponentTag(final Component component, final ComponentTag tag) {
                tag.put("alt", alt);
                tag.put("title", title);
            }
        });

        return img;
    }

    public ImagePanel getStatusImagePanel(final String componentId, final Status status) {
        final String alt, title, statusName;

        switch (status) {

            case NOT_YET_SUBMITTED:
                statusName = Status.UNDEFINED.toString();
                alt = "undefined icon";
                title = "Not yet submitted";
                break;

            case ACTIVE:
                statusName = Status.ACTIVE.toString();
                alt = "active icon";
                title = "Enabled";
                break;

            case UNDEFINED:
                statusName = Status.UNDEFINED.toString();
                alt = "undefined icon";
                title = "Undefined status";
                break;

            case OBJECT_NOT_FOUND:
                statusName = Status.OBJECT_NOT_FOUND.toString();
                alt = "notfound icon";
                title = "Not found";
                break;

            default:
                statusName = Status.SUSPENDED.toString();
                alt = "inactive icon";
                title = "Disabled";
        }

        final ImagePanel imagePanel = new ImagePanel(componentId, IMG_STATUES + statusName + Constants.PNG_EXT);
        imagePanel.add(new Behavior() {

            private static final long serialVersionUID = 1469628524240283489L;

            @Override
            public void onComponentTag(final Component component, final ComponentTag tag) {
                tag.put("alt", alt);
                tag.put("title", title);
            }
        });

        return imagePanel;
    }
}
TOP

Related Classes of org.apache.syncope.console.commons.status.StatusUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.