Home | History | Annotate | Download | only in ipp
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  * Copyright (C) 2016 Mopria Alliance, Inc.
      4  *
      5  * Licensed under the Apache License, Version 2.0 (the "License");
      6  * you may not use this file except in compliance with the License.
      7  * 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 
     18 package com.android.bips.ipp;
     19 
     20 import android.text.TextUtils;
     21 
     22 import com.android.bips.R;
     23 import com.android.bips.jni.BackendConstants;
     24 
     25 import java.util.HashMap;
     26 import java.util.LinkedHashSet;
     27 import java.util.Map;
     28 import java.util.Set;
     29 
     30 public class JobStatus {
     31     public static final int ID_UNKNOWN = -1;
     32 
     33     /** Maps backend blocked reason codes to string resource IDs */
     34     private static final Map<String, Integer> sBlockReasonsMap = new HashMap<>();
     35 
     36     static {
     37         sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__DOOR_OPEN,
     38                 R.string.printer_door_open);
     39         sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__JAMMED, R.string.printer_jammed);
     40         sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__OUT_OF_PAPER,
     41                 R.string.printer_out_of_paper);
     42         sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__SERVICE_REQUEST,
     43                 R.string.printer_check);
     44         sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__OUT_OF_INK,
     45                 R.string.printer_out_of_ink);
     46         sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__OUT_OF_TONER,
     47                 R.string.printer_out_of_toner);
     48         sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__LOW_ON_INK,
     49                 R.string.printer_low_on_ink);
     50         sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__REALLY_LOW_ON_INK,
     51                 R.string.printer_low_on_ink);
     52         sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__LOW_ON_TONER,
     53                 R.string.printer_low_on_toner);
     54         sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__BUSY, R.string.printer_busy);
     55         sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__OFFLINE, R.string.printer_offline);
     56     }
     57 
     58     private int mId;
     59     private String mJobState;
     60     private String mJobResult;
     61     private final Set<String> mBlockedReasons;
     62 
     63     /** Create a new, blank job status */
     64     public JobStatus() {
     65         mId = ID_UNKNOWN;
     66         mBlockedReasons = new LinkedHashSet<>();
     67     }
     68 
     69     /** Create a copy of another object */
     70     private JobStatus(JobStatus other) {
     71         mId = other.mId;
     72         mJobState = other.mJobState;
     73         mJobResult = other.mJobResult;
     74         mBlockedReasons = other.mBlockedReasons;
     75     }
     76 
     77     /** Returns a string resource ID corresponding to a blocked reason, or 0 if none found */
     78     public int getBlockedReasonId() {
     79         for (String reason : mBlockedReasons) {
     80             if (sBlockReasonsMap.containsKey(reason)) {
     81                 return sBlockReasonsMap.get(reason);
     82             }
     83         }
     84         return 0;
     85     }
     86 
     87     /** Returns a job state (see {@link BackendConstants} JOB_DONE_*}) or null if not known */
     88     public String getJobState() {
     89         return mJobState;
     90     }
     91 
     92     /** Returns a job result (see {@link BackendConstants} JOB_RESULT_*}) or null if not known */
     93     public String getJobResult() {
     94         return mJobResult;
     95     }
     96 
     97     /** Return the job's identifier or ID_UNKNOWN */
     98     public int getId() {
     99         return mId;
    100     }
    101 
    102     /** Return true if the job is in a completion state */
    103     boolean isJobDone() {
    104         return !TextUtils.isEmpty(mJobResult);
    105     }
    106 
    107     @Override
    108     public String toString() {
    109         return "JobStatus{id=" + mId +
    110                 ", jobState=" + mJobState +
    111                 ", jobResult=" + mJobResult +
    112                 ", blockedReasons=" + mBlockedReasons +
    113                 "}";
    114     }
    115 
    116     static class Builder {
    117         final JobStatus mPrototype;
    118 
    119         Builder() {
    120             mPrototype = new JobStatus();
    121         }
    122 
    123         Builder(JobStatus from) {
    124             mPrototype = new JobStatus(from);
    125         }
    126 
    127         public Builder setId(int id) {
    128             mPrototype.mId = id;
    129             return this;
    130         }
    131 
    132         Builder setJobState(String jobState) {
    133             mPrototype.mJobState = jobState;
    134             return this;
    135         }
    136 
    137         Builder setJobResult(String jobResult) {
    138             mPrototype.mJobResult = jobResult;
    139             return this;
    140         }
    141 
    142         Builder clearBlockedReasons() {
    143             mPrototype.mBlockedReasons.clear();
    144             return this;
    145         }
    146 
    147         Builder addBlockedReason(String blockedReason) {
    148             mPrototype.mBlockedReasons.add(blockedReason);
    149             return this;
    150         }
    151 
    152         public JobStatus build() {
    153             return new JobStatus(mPrototype);
    154         }
    155     }
    156 }