package com.capgemini.reports.teamcenter.resolution.structureservice;

import com.capgemini.framework.teamcenter.exceptions.EmptyNomenclatureException;
import com.capgemini.framework.teamcenter.exceptions.NoSuchBomViewException;
import com.capgemini.framework.teamcenter.resolution.filtering.ITcTypeFilter;
import com.capgemini.reports.bomlineholder.BOMLineHolder;
import com.capgemini.reports.exceptions.InvalidInputException;
import com.capgemini.reports.exceptions.MalformedNomenclatureException;
import com.capgemini.reports.filter.IFilterExplosionNomenclature;
import com.teamcenter.soa.client.model.strong.BOMLine;

/**
 * Interface for all Services than can perfom an explosion of Nomenclature on a given congiguration.
 */
public interface IStructureServiceCaller {

    /**
     * Resolve a nomenclature for a given configuration, while only exposing objects that belong to the provided wanted types.
     *
     * @param topBomLine the configuration
     * @param filter     is a {@link ITcTypeFilter}.
     * @return a {@link BOMLineHolder} representing the top Line of the nomenclature.
     */
    BOMLineHolder resolve(final BOMLine topBomLine, final IFilterExplosionNomenclature filter)
            throws EmptyNomenclatureException, NoSuchBomViewException, InvalidInputException, MalformedNomenclatureException;

}
