/* 
 * Licensed 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
 *
 *      http://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.
 *
 * Contributions from 2013-2017 where performed either by US government 
 * employees, or under US Veterans Health Administration contracts. 
 *
 * US Veterans Health Administration contributions by government employees
 * are work of the U.S. Government and are not subject to copyright
 * protection in the United States. Portions contributed by government 
 * employees are USGovWork (17USC §105). Not subject to copyright. 
 * 
 * Contribution by contractors to the US Veterans Health Administration
 * during this period are contractually contributed under the
 * Apache License, Version 2.0.
 *
 * See: https://www.usa.gov/government-works
 * 
 * Contributions prior to 2013:
 *
 * Copyright (C) International Health Terminology Standards Development Organisation.
 * Licensed under the Apache License, Version 2.0.
 *
 */



package sh.isaac.api.util;

//~--- JDK imports ------------------------------------------------------------

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Optional;
import java.util.UUID;
import sh.isaac.api.Get;

//~--- classes ----------------------------------------------------------------

/**
 * Various UUID related utilities.
 *
 * @author darmbrust
 * @author kec
 */
public class UUIDUtil {
   /**
    * Convert.
    *
    * @param data the data
    * @return the uuid
    */
   public static UUID convert(long[] data) {
      return new UUID(data[0], data[1]);
   }

   /**
    * Convert.
    *
    * @param id the id
    * @return the long[]
    */
   public static long[] convert(UUID id) {
      final long[] data = new long[2];

      data[0] = id.getMostSignificantBits();
      data[1] = id.getLeastSignificantBits();
      return data;
   }

   //~--- get methods ---------------------------------------------------------

   /**
    * Gets the uuid.
    *
    * @param string the string
    * @return the uuid
    */
   public static Optional<UUID> getUUID(String string) {
      if (string == null) {
         return Optional.empty();
      }

      if (string.length() != 36) {
         return Optional.empty();
      }

      try {
         return Optional.of(UUID.fromString(string));
      } catch (final IllegalArgumentException e) {
         return Optional.empty();
      }
   }

   /**
    * Checks if uuid.
    *
    * @param string the string
    * @return true, if uuid
    */
   public static boolean isUUID(String string) {
      return (getUUID(string).isPresent());
   }
   
   public static UUID fromList(UUID... uuids) {
       List<String> uuidStrList = new ArrayList<>();
       for (UUID uuid: uuids) {
           uuidStrList.add(uuid.toString());
       }
       uuidStrList.sort((String o1, String o2) -> o1.compareTo(o2));
       StringBuilder buff = new StringBuilder();
       for (String uuidStr: uuidStrList) {
           buff.append(uuidStr);
       }
       return UUID.fromString(buff.toString());
   }
   
    public static void addSortedUuids(List<UUID> uuidList, int... nids) throws NoSuchElementException {
        for (int nid: nids) {
            UUID[] uuids = Get.identifierService().getUuidArrayForNid(nid);
            Arrays.sort(uuids);
            for (UUID nidUuid: Get.identifierService().getUuidArrayForNid(nid)) {
                uuidList.add(nidUuid);
            }
        }
    }
    
   
}


@@ -3542,16 +3542,271 @@
   %7D%0A   %0A
+   /**%0A    * Note, this method does nothing to the sort order of the uuidList, it only ensures that the UUIDs assigned to each nid are added in %0A    * a consistent order.%0A    * @param uuidList%0A    * @param nids%0A    * @throws NoSuchElementException%0A    */%0A
     publ
@@ -3901,16 +3901,16 @@
 ption %7B%0A
-
         
@@ -4074,55 +4074,13 @@
 id: 
-Get.identifierService().getUuidArrayForNid(nid)
+uuids
 ) %7B%0A
@@ -4146,22 +4146,13 @@
   %7D%0A
+
     %7D%0A
-    %0A   %0A
 %7D%0A%0A

fix a broken method that didn't do what it was intended to, causing uuids to not be generated correctly for stamps.