public static Map<Item, Integer> factory(List<Item> items) {
        int temp_ORDERMAXSIZE = (Simulation.TEST) ? JUnitTestframe.ORDERMAXSIZE : Simulation.ORDERMAXSIZE;

        Map<Item, Integer> orderMap = new TreeMap<Item, Integer>();
        boolean orderComplete = false;
        int randomItem;
        int currentOrderSize = temp_ORDERMAXSIZE;
        Item tempItem = null;
        Integer tempQuantity = 0;

        while (!orderComplete) {

            // Zufaelliges Item aus uebergebener List<Item> suchen
            randomItem = (int) (Math.random() * items.size() + 1);

            for (Item element : items) {
                if (element.id() == randomItem) {
                    tempItem = element;
                }
            }

            // Wenn das neue Random Item zu gross ist, wird es nicht mehr hinzugefuegt
            if ((currentOrderSize - tempItem.size()) >= 0) {

                // Wenn das Item in der Map vorhanden ist, wird die Quantity vom Item erhoeht,
                // ansonten wird es neu angelegt
                if (orderMap.containsKey(tempItem)) {

                    tempQuantity = orderMap.get(tempItem);
                    tempQuantity++;
                } else {
                    tempQuantity = 1;
                }

                orderMap.put(tempItem, tempQuantity);
                currentOrderSize -= tempItem.size();
            } else {
                orderComplete = true;
            }
        }

        return orderMap;
    }