diff --git a/src/inport/TaskCase.java b/src/inport/TaskCase.java index 2a9524d7fcf1f6ac5b9550fc20b27cad4792fc4d..940a959bc96b0d36133c1ac6365bb8edd9ac43e8 100644 --- a/src/inport/TaskCase.java +++ b/src/inport/TaskCase.java @@ -13,6 +13,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.util.*; import java.util.function.BiFunction; +import java.util.function.Consumer; import java.util.logging.Level; import java.util.logging.Logger; @@ -617,38 +618,47 @@ public class TaskCase { mt.setId(Integer.parseInt(tokens[0].trim())); mt.setTimeWindow(tokens[2].trim()); - int direction = 1; - - BiFunction addLoaderOrStorage = (Integer key, Integer loaderDirection) -> { + BiFunction extractDirection = (Integer key, Integer loaderDirection) -> { int dir = 1; + if ((vesselTypes.containsKey(key)) || (m_vessel.containsKey(key))) { + dir = loaderDirection; + } else + if (m_storage.containsKey(key)) { + dir = -loaderDirection; + } else + if ((m_bunker.containsKey(key)) || (bunkerTypes.containsKey(key))) { + if (mt.getStorage() != null) { + dir = loaderDirection; + } else { + dir = -loaderDirection; + } + } + return dir; + }; + + Consumer addLoaderOrStorage = (Integer key) -> { if (vesselTypes.containsKey(key)) { mt.setLoaderType(OptionalInt.of(key)); - dir = loaderDirection; } else if (m_vessel.containsKey(key)) { mt.setLoader((TransportShip)m_vessel.get(key)); - dir = loaderDirection; } else if (m_storage.containsKey(key)) { mt.setStorage(m_storage.get(key)); - dir = -loaderDirection; } else if (m_bunker.containsKey(key)) { mt.setBunker(Optional.of(m_bunker.get(key))); - dir = -loaderDirection; - } else - if (bunkerTypes.containsKey(key)) { + } else if (bunkerTypes.containsKey(key)) { mt.setBunkerType(OptionalInt.of(key)); - dir = -loaderDirection; } - return dir; }; int key; // Источник. key = Integer.parseInt(tokens[3].trim()); - direction = addLoaderOrStorage.apply(key, -1); + addLoaderOrStorage.accept(key); + // Груз. key = Integer.parseInt(tokens[4].trim());; for (Cargo cargo : cargoes) { @@ -658,7 +668,10 @@ public class TaskCase { } // Приемник. key = Integer.parseInt(tokens[5].trim()); - direction = addLoaderOrStorage.apply(key, 1); + addLoaderOrStorage.accept(key); + + int direction = extractDirection.apply(key, 1); + key = Integer.parseInt(tokens[6].trim()); mt.setStartLocation(m_berth.get(key)); String[] rs = tokens[7].trim().replace("[", "").replace("]", "").split(",");