This is an automated email from the ASF dual-hosted git repository.

aradzinski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git


The following commit(s) were added to refs/heads/master by this push:
     new 9277b8b  WIP
9277b8b is described below

commit 9277b8becc3aa1b21805a2a6b21c9d9231d90c21
Author: Aaron Radzinski <aradzin...@datalingvo.com>
AuthorDate: Tue Oct 5 11:53:58 2021 -0700

    WIP
---
 .../org/apache/nlpcraft/common/util/NCUtils.scala  | 86 ++++++++++++++++++++++
 .../apache/nlpcraft/common/version/NCVersion.scala | 72 ++++++++++++++++++
 2 files changed, 158 insertions(+)

diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
index f512afe..daa3313 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
@@ -21,10 +21,13 @@ import com.typesafe.scalalogging.{LazyLogging, Logger}
 import org.apache.nlpcraft.common.NCException
 import org.apache.nlpcraft.common.ansi.NCAnsi.*
 
+import java.io.{IOException, InputStream, OutputStream}
+import java.net.{ServerSocket, Socket}
 import java.util.Random
 import java.util.regex.Pattern
 import scala.annotation.tailrec
 import scala.sys.SystemProperties
+import scala.util.control.Exception.ignoring
 
 /**
   *
@@ -559,3 +562,86 @@ object NCUtils extends LazyLogging:
       */
     def interruptThread(t: Thread): Unit = if t != null then t.interrupt()
 
+    /**
+      * Checks duplicated elements in collection.
+      *
+      * @param list Collection. Note, it should be list.
+      * @param seen Checked elements.
+      * @see #getDups
+      */
+    @tailrec
+    def containsDups[T](list: List[T], seen: Set[T] = Set.empty[T]): Boolean =
+        list match
+            case x :: xs => if (seen.contains(x)) true else containsDups(xs, 
seen + x)
+            case _ => false
+
+    /**
+      * Gets set of duplicate values from given sequence (potentially empty).
+      *
+      * @param seq Sequence to check for dups from.
+      * @tparam T
+      * @return
+      * @see #containsDups
+      */
+    def getDups[T](seq: Seq[T]): Set[T] = seq.diff(seq.distinct).toSet
+
+    /**
+      * Gets a sequence without dups. It works by checking for dups first, 
before creating a new
+      * sequence if dups are found. It's more efficient when dups are rare.
+      *
+      * @param seq Sequence with potential dups.
+      */
+    def distinct[T](seq: List[T]): List[T] = if containsDups(seq) then 
seq.distinct else seq
+
+    /**
+      * Safely and silently closes the client socket.
+      *
+      * @param sock Client socket to close.
+      */
+    def close(sock: Socket): Unit =
+        if sock != null then
+            ignoring(classOf[IOException]) {
+                sock.close()
+            }
+
+    /**
+      * Safely and silently closes the server socket.
+      *
+      * @param sock Server socket to close.
+      */
+    def close(sock: ServerSocket): Unit =
+        if sock != null then
+            ignoring(classOf[IOException]) {
+                sock.close()
+            }
+
+    /**
+      *
+      * @param in Stream.
+      */
+    def close(in: InputStream): Unit =
+        if in != null then
+            ignoring(classOf[IOException]) {
+                in.close()
+            }
+
+    /**
+      *
+      * @param out Stream.
+      */
+    def close(out: OutputStream): Unit =
+        if out != null then
+            ignoring(classOf[IOException]) {
+                out.close()
+            }
+
+    /**
+      * Closes auto-closeable ignoring any exceptions.
+      *
+      * @param a Resource to close.
+      */
+    def close(a: AutoCloseable): Unit =
+        if a != null then
+            ignoring(classOf[Exception]) {
+                a.close()
+            }
\ No newline at end of file
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/version/NCVersion.scala 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/version/NCVersion.scala
new file mode 100644
index 0000000..9c9470d
--- /dev/null
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/version/NCVersion.scala
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.nlpcraft.common.version
+
+import java.time.{LocalDate, Year}
+import com.typesafe.scalalogging.LazyLogging
+import org.apache.nlpcraft.common.*
+import org.apache.nlpcraft.common.util.NCUtils
+
+/**
+  * Release version holder. Note that this is manually changing property. For 
every official
+  * release the new version will be added to this object manually.
+  */
+object NCVersion extends LazyLogging:
+    final val year = Year.now().toString
+    final val copyright = s"Copyright (C) $year Apache Software Foundation"
+    final val copyrightShort = s"(C) $year ASF"
+
+    /**
+      *
+      * @param version Semver-based release version of the NLPCraft.
+      * @param date Date of this release.
+      */
+    case class Version(
+        version: String, // Semver.
+        date: LocalDate
+    ):
+        override def toString = s"Version [version=$version, date=$date]"
+
+    // +=================================================+
+    // | UPDATE THIS SEQUENCE FOR EACH RELEASE MANUALLY. |
+    // +=================================================+
+    private final val VERSIONS = Seq(
+        Version("0.5.0", LocalDate.of(2020, 4, 16)),
+        Version("0.6.0", LocalDate.of(2020, 5, 25)),
+        Version("0.6.2", LocalDate.of(2020, 7, 9)),
+        Version("0.7.0", LocalDate.of(2020, 9, 29)),
+        Version("0.7.1", LocalDate.of(2020, 10, 29)),
+        Version("0.7.2", LocalDate.of(2020, 11, 19)),
+        Version("0.7.3", LocalDate.of(2020, 12, 31)),
+        Version("0.7.4", LocalDate.of(2021, 1, 31)),
+        Version("0.7.5", LocalDate.of(2021, 4, 30)),
+        Version("0.8.0", LocalDate.of(2021, 5, 30)),
+        Version("0.9.0", LocalDate.of(2021, 7, 10)),
+    ).sortBy(_.version)
+    // +=================================================+
+    // | UPDATE THIS SEQUENCE FOR EACH RELEASE MANUALLY. |
+    // +=================================================+
+
+    if 
NCUtils.distinct(VERSIONS.map(_.version).toList).lengthCompare(VERSIONS.size) 
!= 0 then
+        throw new AssertionError(s"Versions are NOT unique.")
+
+    /**
+      * Gets current version.
+      */
+    lazy val getCurrent: Version = VERSIONS.last
+

Reply via email to