001 /** 002 * Copyright 2010-2013 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.common.util.inform; 017 018 import org.kuali.common.util.Assert; 019 import org.kuali.common.util.log.LoggerUtils; 020 import org.slf4j.Logger; 021 import org.slf4j.LoggerFactory; 022 023 /** 024 * 025 */ 026 public final class StartStopInformer { 027 028 private static final Logger logger = LoggerFactory.getLogger(StartStopInformer.class); 029 030 private final Inform inform; 031 032 public StartStopInformer() { 033 this(Inform.DEFAULT_INFORM); 034 } 035 036 public StartStopInformer(Inform inform) { 037 Assert.noNulls(inform); 038 this.inform = inform; 039 } 040 041 private boolean started = false; 042 043 /** 044 * Indicates if we are in the "started" state 045 */ 046 public boolean isStarted() { 047 return started; 048 } 049 050 /** 051 * Make sure we haven't already been started. Set the started indicator to true. Log the start message. Print the start token. 052 */ 053 public synchronized void start() { 054 Assert.isFalse(started, "Already started"); 055 this.started = true; 056 LoggerUtils.log(inform.getStartMessage(), logger); 057 inform.getPrintStream().print(inform.getStartToken()); 058 } 059 060 /** 061 * Make sure we haven't already been stopped. Set the started indicator to false. Print the stop token. Log the stop message. 062 */ 063 public synchronized void stop() { 064 Assert.isTrue(started, "Not started"); 065 this.started = false; 066 inform.getPrintStream().print(inform.getCompleteToken()); 067 LoggerUtils.log(inform.getStopMessage(), logger); 068 } 069 070 public Inform getInform() { 071 return inform; 072 } 073 074 }