All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.imunity.home.console.HomeServiceConfiguration Maven / Gradle / Ivy

/*
 * Copyright (c) 2019 Bixbit - Krzysztof Benedyczak. All rights reserved.
 * See LICENCE.txt file for licensing information.
 */


package io.imunity.home.console;

import io.imunity.home.HomeEndpointProperties;
import io.imunity.home.HomeEndpointProperties.RemovalModes;
import io.imunity.vaadin.auth.services.idp.GroupWithIndentIndicator;
import pl.edu.icm.unity.base.exceptions.InternalException;
import pl.edu.icm.unity.base.group.Group;
import pl.edu.icm.unity.base.message.MessageSource;

import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 
 * Contains home service configuration
 * 
 * @author P.Piernik
 *
 */
public class HomeServiceConfiguration
{
	private List enabledTabs;
	private List enabledUserDetailsControls;
	private List exposedAttributes;
	private boolean allowRemovalSheduling;
	private boolean allow2ndFactorOptIn;
	private RemovalModes removalMode;
	private boolean enableUpMan;
	private String upManService;
	private String imageAttribute;
	private List enquiryForms;

	HomeServiceConfiguration()
	{
		enabledTabs = new ArrayList<>();
		enabledUserDetailsControls = new ArrayList<>();
		exposedAttributes = new ArrayList<>();
		allowRemovalSheduling = true;
		allow2ndFactorOptIn = false;
		removalMode = RemovalModes.remove;
		enquiryForms = new ArrayList<>();
	}

	public String toProperties()
	{
		Properties raw = new Properties();
		List allComponents = Stream.of(HomeEndpointProperties.Components.values())
				.map(HomeEndpointProperties.Components::toString).collect(Collectors.toList());
	
		allComponents.removeAll(enabledTabs);
		allComponents.removeAll(enabledUserDetailsControls);

		if (!allComponents.isEmpty())
		{
			allComponents.forEach(c -> raw.put(HomeEndpointProperties.PREFIX
					+ HomeEndpointProperties.DISABLED_COMPONENTS
					+ (allComponents.indexOf(c) + 1), c));
		}

		for (ExposedAttribute a : exposedAttributes)
		{
			raw.put(HomeEndpointProperties.PREFIX + HomeEndpointProperties.ATTRIBUTES
					+ (exposedAttributes.indexOf(a) + 1) + "."
					+ HomeEndpointProperties.GWA_ATTRIBUTE, a.getName());
			raw.put(HomeEndpointProperties.PREFIX + HomeEndpointProperties.ATTRIBUTES
					+ (exposedAttributes.indexOf(a) + 1) + "."
					+ HomeEndpointProperties.GWA_GROUP, a.getGroup().group().toString());

			raw.put(HomeEndpointProperties.PREFIX + HomeEndpointProperties.ATTRIBUTES
					+ (exposedAttributes.indexOf(a) + 1) + "."
					+ HomeEndpointProperties.GWA_EDITABLE, String.valueOf(a.isEditable()));

			raw.put(HomeEndpointProperties.PREFIX + HomeEndpointProperties.ATTRIBUTES
					+ (exposedAttributes.indexOf(a) + 1) + "."
					+ HomeEndpointProperties.GWA_SHOW_GROUP,
					String.valueOf(a.isShowGroup()));
		}

		raw.put(HomeEndpointProperties.PREFIX + HomeEndpointProperties.DISABLE_REMOVAL_SCHEDULE,
				String.valueOf(!allowRemovalSheduling));
		if (allowRemovalSheduling)
		{
			raw.put(HomeEndpointProperties.PREFIX + HomeEndpointProperties.REMOVAL_MODE,
					String.valueOf(removalMode));
		}
		raw.put(HomeEndpointProperties.PREFIX + HomeEndpointProperties.ENABLE_PROJECT_MANAGEMENT_LINK,
				String.valueOf(enableUpMan));
		if (enableUpMan)
		{
			if (upManService != null && !upManService.isEmpty())
			{
				raw.put(HomeEndpointProperties.PREFIX
						+ HomeEndpointProperties.PROJECT_MANAGEMENT_ENDPOINT,
						upManService);
			}
		}

		raw.put(HomeEndpointProperties.PREFIX + HomeEndpointProperties.DISABLE_2ND_FACTOR_OPT_IN,
				String.valueOf(!allow2ndFactorOptIn));

		if (!enquiryForms.isEmpty())
		{
			enquiryForms.forEach(c -> raw.put(HomeEndpointProperties.PREFIX
					+ HomeEndpointProperties.ENQUIRIES + (enquiryForms.indexOf(c) + 1), c));
		}

		if(imageAttribute != null)
			raw.put(HomeEndpointProperties.PREFIX + HomeEndpointProperties.AVATAR_IMAGE_ATTRIBUTE_NAME, imageAttribute);

		HomeEndpointProperties prop = new HomeEndpointProperties(raw);
		return prop.getAsString();
	}

	public void fromProperties(String properties, MessageSource msg, 
			List allGroups)
	{
		Properties raw = new Properties();
		try
		{
			raw.load(new StringReader(properties));
		} catch (IOException e)
		{
			throw new InternalException("Invalid configuration of the home ui service", e);
		}

		HomeEndpointProperties homeProperties = new HomeEndpointProperties(raw);

		List disabledComponents = homeProperties
				.getListOfValues(HomeEndpointProperties.DISABLED_COMPONENTS);

		enabledTabs = HomeServiceEditorComponent.getAvailableTabs();
		enabledUserDetailsControls = HomeServiceEditorComponent.getAvailableControls();

		enabledTabs.removeAll(disabledComponents);
		enabledUserDetailsControls.removeAll(disabledComponents);

		Set attrKeys = homeProperties.getStructuredListKeys(HomeEndpointProperties.ATTRIBUTES);
		for (String key : attrKeys)
		{
			ExposedAttribute attr = new ExposedAttribute();
			attr.setName(homeProperties.getValue(key + HomeEndpointProperties.GWA_ATTRIBUTE));

			String groupPath = homeProperties.getValue(key + HomeEndpointProperties.GWA_GROUP);
			attr.setGroup(new GroupWithIndentIndicator(
					allGroups.stream().filter(g -> g.toString().equals(groupPath))
							.findFirst().orElse(new Group(groupPath)),
					false));
			attr.setEditable(homeProperties
					.getBooleanValue(key + HomeEndpointProperties.GWA_EDITABLE));
			attr.setShowGroup(homeProperties
					.getBooleanValue(key + HomeEndpointProperties.GWA_SHOW_GROUP));
			exposedAttributes.add(attr);
		}

		removalMode = homeProperties.getEnumValue(HomeEndpointProperties.REMOVAL_MODE,
				HomeEndpointProperties.RemovalModes.class);
		allowRemovalSheduling = !homeProperties
				.getBooleanValue(HomeEndpointProperties.DISABLE_REMOVAL_SCHEDULE);
		allow2ndFactorOptIn = !homeProperties
				.getBooleanValue(HomeEndpointProperties.DISABLE_2ND_FACTOR_OPT_IN);

		enableUpMan = homeProperties
				.getBooleanValue(HomeEndpointProperties.ENABLE_PROJECT_MANAGEMENT_LINK);
		upManService = homeProperties.getValue(HomeEndpointProperties.PROJECT_MANAGEMENT_ENDPOINT);

		imageAttribute = homeProperties.getValue(HomeEndpointProperties.AVATAR_IMAGE_ATTRIBUTE_NAME);

		enquiryForms = homeProperties.getListOfValues(HomeEndpointProperties.ENQUIRIES);
	}

	public List getEnabledTabs()
	{
		return enabledTabs;
	}

	public void setEnabledTabs(List enabledTabs)
	{
		this.enabledTabs = enabledTabs;
	}

	public List getEnabledUserDetailsControls()
	{
		return enabledUserDetailsControls;
	}

	public void setEnabledUserDetailsControls(List enabledUserDetailsControls)
	{
		this.enabledUserDetailsControls = enabledUserDetailsControls;
	}

	public List getExposedAttributes()
	{
		return exposedAttributes;
	}

	public void setExposedAttributes(List exposedAttributes)
	{
		this.exposedAttributes = exposedAttributes;
	}

	public boolean isAllowRemovalSheduling()
	{
		return allowRemovalSheduling;
	}

	public void setAllowRemovalSheduling(boolean allowRemovalSheduling)
	{
		this.allowRemovalSheduling = allowRemovalSheduling;
	}

	public boolean isAllow2ndFactorOptIn()
	{
		return allow2ndFactorOptIn;
	}

	public void setAllow2ndFactorOptIn(boolean allow2ndFactorOptIn)
	{
		this.allow2ndFactorOptIn = allow2ndFactorOptIn;
	}

	public RemovalModes getRemovalMode()
	{
		return removalMode;
	}

	public void setRemovalMode(RemovalModes removalMode)
	{
		this.removalMode = removalMode;
	}

	public boolean isEnableUpMan()
	{
		return enableUpMan;
	}

	public void setEnableUpMan(boolean enableUpMan)
	{
		this.enableUpMan = enableUpMan;
	}

	public String getUpManService()
	{
		return upManService;
	}

	public void setUpManService(String upManService)
	{
		this.upManService = upManService;
	}

	public List getEnquiryForms()
	{
		return enquiryForms;
	}

	public void setEnquiryForms(List enquiryForms)
	{
		this.enquiryForms = enquiryForms;
	}

	public String getImageAttribute()
	{
		return imageAttribute;
	}

	public void setImageAttribute(String imageAttribute)
	{
		this.imageAttribute = imageAttribute;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy