Home | History | Annotate | Download | only in tzlookup
      1 /*
      2  * Copyright (C) 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.libcore.timezone.tzlookup;
     18 
     19 import java.util.ArrayList;
     20 import java.util.LinkedList;
     21 import java.util.List;
     22 
     23 /**
     24  * Stores context, errors and error severity for logging and flow control.
     25  */
     26 final class Errors {
     27 
     28     private final static int LEVEL_WARNING = 1;
     29     private final static int LEVEL_ERROR = 2;
     30     private final static int LEVEL_FATAL = 3;
     31 
     32     private int level = 0;
     33 
     34     private final LinkedList<String> scopes = new LinkedList<>();
     35     private final List<String> messages = new ArrayList<>();
     36 
     37     Errors() {
     38     }
     39 
     40     void pushScope(String name) {
     41         scopes.add(name);
     42     }
     43 
     44     String popScope() {
     45         return scopes.removeLast();
     46     }
     47 
     48     void addFatal(String msg) {
     49         level = Math.max(level, LEVEL_FATAL);
     50         add(msg);
     51     }
     52 
     53     void addError(String msg) {
     54         level = Math.max(level, LEVEL_ERROR);
     55         add(msg);
     56     }
     57 
     58     void addWarning(String msg) {
     59         level = Math.max(level, LEVEL_WARNING);
     60         add(msg);
     61     }
     62 
     63     String asString() {
     64         StringBuilder sb = new StringBuilder();
     65         for (String message : messages) {
     66             sb.append(message);
     67             sb.append("\n");
     68         }
     69         return sb.toString();
     70     }
     71 
     72     boolean isEmpty() {
     73         return messages.isEmpty();
     74     }
     75 
     76     boolean hasError() {
     77         return level >= LEVEL_ERROR;
     78     }
     79 
     80     boolean hasFatal() {
     81         return level >= LEVEL_FATAL;
     82     }
     83 
     84     private void add(String msg) {
     85         messages.add(scopes.toString() + ": " + msg);
     86     }
     87 }
     88