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

import com.capgemini.framework.teamcenter.exceptions.EmptyNomenclatureException;
import com.capgemini.framework.teamcenter.resolution.filtering.ITcTypeFilter;
import com.capgemini.reports.bomlineholder.BOMLineHolder;
import com.teamcenter.soa.client.model.ModelObject;
import com.teamcenter.soa.client.model.strong.BOMLine;
import com.teamcenter.soa.client.model.strong.Item;
import com.teamcenter.soa.client.model.strong.ItemRevision;

interface StructureServiceRaw {

    /**
     * Run a resolution from a configuration.<br>
     * The top {@link ModelObject} should be an {@link Item} or an {@link ItemRevision}.<br/>
     * <p>
     * There may be several outcomes, depending on the Resolution Mode:
     * <ul>
     * <li><b>SINGLE:</b>In this mode, the explosion is performed throughout only 1 link.<br/>
     * It returns a {@link BOMLine} containing the top item (the one provided for the explosion)</li>
     * <li><b>MONO:</b>In this mode, the explosion is performed throughout 3 consecutive links, usually as part of the Receptor-Repere-Component relationship<br>
     * It returns a {@link BOMLine} containing the top item (the one provided for the explosion)</li>
     * <li><b>MULTI:</b>In this mode, the explosion is performed throughout all the links, and all the children and grand-children are revealed.<br>
     * It returns a {@link BOMLine} containing the top item (the one provided for the explosion)</li>
     * </ul>
     */
    BOMLineHolder resolve(final BOMLine topBomLine, final ITcTypeFilter filter) throws EmptyNomenclatureException;
}

