package com.capgemini.reports.documentationobjects;

/**
 * Interface for visitor Pattern, allows someone to visit every Doc type avaialble and implement a dedicated treatent.
 * 
 * @param <T> a produced object during the visit
 */
public interface IDocVisitor<T> {

    /**
     * Behaviour when visiting a {@link DocDrawing}.
     * 
     * @param doc
     * @return a produced result
     */
    T visit(final DocDrawing doc);

    /**
     * Behaviour when visiting a {@link DocGeometry}.
     * 
     * @param doc
     * @return a produced result
     */
    T visit(final DocGeometry doc);

    /**
     * Behaviour when visiting a {@link DocNorm}.
     * 
     * @param doc
     * @return a produced result
     */
    T visit(final DocNorm doc);

    /**
     * Behaviour when visiting a {@link DocNormStandard}.
     * 
     * @param doc
     * @return a produced result
     */
    T visit(final DocNormStandard doc);

    /**
     * Behaviour when visiting a {@link DocTechnic}.
     * 
     * @param doc
     * @return a produced result
     */
    T visit(final DocTechnic doc);
}
