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

io.imunity.furms.ui.community.allocations.CommunityAllocationComboBoxesModelsResolver Maven / Gradle / Ivy

There is a newer version: 4.3.1
Show newest version
/*
 * Copyright (c) 2021 Bixbit s.c. All rights reserved.
 *  See LICENSE file for licensing information.
 */

package io.imunity.furms.ui.community.allocations;

import io.imunity.furms.domain.resource_credits.ResourceCredit;
import io.imunity.furms.domain.resource_credits.ResourceCreditId;
import io.imunity.furms.domain.resource_types.ResourceType;
import io.imunity.furms.domain.resource_types.ResourceTypeId;
import io.imunity.furms.domain.sites.Site;
import io.imunity.furms.domain.sites.SiteId;
import io.imunity.furms.ui.components.support.models.SiteComboBoxModel;
import io.imunity.furms.ui.components.support.models.allocation.ResourceCreditComboBoxModel;
import io.imunity.furms.ui.components.support.models.allocation.ResourceTypeComboBoxModel;

import java.math.BigDecimal;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;

import static java.util.stream.Collectors.toSet;

public class CommunityAllocationComboBoxesModelsResolver {
	private final Set sites;
	private final Function> functionResourceType;
	private final Function> functionResourceCredit;
	private final Function functionAvailableAmount;

	public CommunityAllocationComboBoxesModelsResolver(Set sites,
	                                                   Function> functionResourceType,
	                                                   Function> functionResourceCredit,
	                                                   Function functionAvailableAmount) {
		this.sites = sites.stream().map(s -> new SiteComboBoxModel(s.getId(), s.getName())).collect(Collectors.toSet());
		this.functionResourceType = functionResourceType;
		this.functionResourceCredit = functionResourceCredit;
		this.functionAvailableAmount = functionAvailableAmount;
	}

	public Set getResourceTypes(SiteId siteId) {
		if (siteId == null)
			return Set.of();
		return functionResourceType.apply(siteId).stream()
				.map(r -> new ResourceTypeComboBoxModel(r.id, r.name, r.unit))
				.collect(toSet());
	}

	public Set getResourceCredits(ResourceTypeId resourceTypeId) {
		if (resourceTypeId == null)
			return Set.of();
		return functionResourceCredit.apply(resourceTypeId).stream()
				.filter(r -> getAvailableAmount(r.id).compareTo(BigDecimal.ZERO) > 0)
				.map(r -> new ResourceCreditComboBoxModel(r.id, r.name, r.amount, r.splittable))
				.collect(toSet());
	}

	public Set getSites() {
		return sites;
	}

	public BigDecimal getAvailableAmount(ResourceCreditId resourceCreditId) {
		return functionAvailableAmount.apply(resourceCreditId);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy