001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.juneau.common.utils;
018
019import java.util.*;
020import java.util.concurrent.*;
021import java.util.function.*;
022
023/**
024 * System utilities.
025 */
026public class SystemUtils {
027
028   static final List<Supplier<String>> SHUTDOWN_MESSAGES = new CopyOnWriteArrayList<>();
029
030   static {
031      Runtime.getRuntime().addShutdownHook(new Thread() {
032         @Override
033         public void run() {
034            if (Boolean.getBoolean("SystemUtils.verbose"))
035               SHUTDOWN_MESSAGES.forEach(x -> System.out.println(x.get()));  // NOSONAR - System.out.println is acceptable here for shutdown messages.
036         }
037      });
038   }
039   /**
040    * Adds a console message to display when the JVM shuts down.
041    *
042    * @param message The message to display.
043    */
044   public static void shutdownMessage(Supplier<String> message) {
045      SHUTDOWN_MESSAGES.add(message);
046   }
047
048   /**
049    * Constructor.
050    */
051   protected SystemUtils() {}
052}