private def getAndLog[T]()

in nlpcraft/src/main/scala/org/apache/nlpcraft/internal/util/NCUtils.scala [389:441]


    private def getAndLog[T](data: T, f: File, log: Logger = logger): T =
        log.trace(s"Loaded file: ${f.getAbsolutePath}")

        data

    /**
      * Reads lines from given resource.
      *
      * @param res Resource, file absolute or relative path or input stream.
      * @param enc Encoding. Default value is "UTF-8".
      * @param strip Strip flag. If `true` it strips all read lines. Default value is `true`.
      * @param convert Line conversion method. Applied after `strip`. By default it passes lines as is.
      * @param filterText. Filtering text flag. If `true` it skips empty lines and lines with headers (# symbol). Default value is `false`.
      * @param log Logger.
      */
    def readLines(
        res: String | File | InputStream,
        enc: String = "UTF-8",
        strip: Boolean = true,
        convert: String => String = s => s,
        filterText: Boolean = false,
        log: Logger = logger
    ): Iterator[String] =
        try
            val (stream, name) =
                res match
                    case is: InputStream => (is, is.getClass.getName)
                    case s: String => (new BufferedInputStream(getStream(s)), s)
                    case f: File => (new BufferedInputStream(new FileInputStream(f)), f.getAbsolutePath)

            val out = Source.fromInputStream(stream, enc).getLines().flatMap(line =>
                val s = convert(if strip then line.strip else line)
                Option.when(!filterText || s.nonEmpty && s.head != '#')(s)
            )
            log.info(s"Loaded resource: $name")
            out
        catch case e: IOException => E(s"Failed to read stream: $res", e)

    /**
      *
      * @param bodies
      * @param ec
      */
    def execPar(bodies: Seq[() => Any])(ec: ExecutionContext): Unit =
        val errs = new CopyOnWriteArrayList[Throwable]()

        bodies.map(body => Future {
            try
                body()
            catch
                case e: Throwable => errs.add(e)

        } (ec)).foreach(Await.result(_, Duration.Inf))