View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements. See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache license, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License. You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the license for the specific language governing permissions and
    15   * limitations under the license.
    16   */
    17  package org.apache.logging.log4j.core;
    18
    19  import java.io.Serializable;
    20
    21  import org.apache.logging.log4j.status.StatusLogger;
    22
    23  /**
    24   * A life cycle to be extended.
    25   * <p>
    26   * Wraps a {@link LifeCycle.State}.
    27   * </p>
    28   */
    29  public class AbstractLifeCycle implements LifeCycle, Serializable {
    30
    31      /**
    32       * Allow subclasses access to the status logger without creating another instance.
    33       */
    34      protected static final org.apache.logging.log4j.Logger LOGGER = StatusLogger.getLogger();
    35
    36      private static final long serialVersionUID = 1L;
    37
    38      private volatile LifeCycle.State state = LifeCycle.State.INITIALIZED;
    39
    40      protected boolean equalsImpl(final Object obj) {
    41          if (this == obj) {
    42              return true;
    43          }
    44          if (obj == null) {
    45              return false;
    46          }
    47          if (getClass() != obj.getClass()) {
    48              return false;
    49          }
    50          final LifeCycle other = (LifeCycle) obj;
    51          if (state != other.getState()) {
    52              return false;
    53          }
    54          return true;
    55      }
    56
    57      @Override
    58      public LifeCycle.State getState() {
    59          return this.state;
    60      }
    61
    62      protected int hashCodeImpl() {
    63          final int prime = 31;
    64          int result = 1;
    65          result = prime * result + ((state == null) ? 0 : state.hashCode());
    66          return result;
    67      }
    68
    69      public boolean isInitialized() {
    70          return this.state == LifeCycle.State.INITIALIZED;
    71      }
    72
    73      @Override
    74      public boolean isStarted() {
    75          return this.state == LifeCycle.State.STARTED;
    76      }
    77
    78      public boolean isStarting() {
    79          return this.state == LifeCycle.State.STARTING;
    80      }
    81
    82      @Override
    83      public boolean isStopped() {
    84          return this.state == LifeCycle.State.STOPPED;
    85      }
    86
    87      public boolean isStopping() {
    88          return this.state == LifeCycle.State.STOPPING;
    89      }
    90
    91      protected void setStarted() {
    92          this.setState(LifeCycle.State.STARTED);
    93      }
    94
    95      protected void setStarting() {
    96          this.setState(LifeCycle.State.STARTING);
    97      }
    98
    99      protected void setState(final LifeCycle.State newState) {
    100         this.state = newState;
    101         // Need a better string than this.toString() for the message
    102         // LOGGER.debug("{} {}", this.state, this);
    103     }
    104
    105     protected void setStopped() {
    106         this.setState(LifeCycle.State.STOPPED);
    107     }
    108
    109     protected void setStopping() {
    110         this.setState(LifeCycle.State.STOPPING);
    111     }
    112
    113     @Override
    114     public void start() {
    115         this.setStarted();
    116     }
    117
    118     @Override
    119     public void stop() {
    120         this.state = LifeCycle.State.STOPPED;
    121     }
    122
    123 }