blob: 72be347e3b44e3f5b1b578ee36e4ab724e6c32ed [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
* Copyright (C) 2016 Mopria Alliance, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.bips.ipp;
import android.text.TextUtils;
import com.android.bips.R;
import com.android.bips.jni.BackendConstants;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
public class JobStatus {
public static final int ID_UNKNOWN = -1;
/** Maps backend blocked reason codes to string resource IDs */
private static final Map<String, Integer> sBlockReasonsMap = new HashMap<>();
static {
sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__DOOR_OPEN,
R.string.printer_door_open);
sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__JAMMED, R.string.printer_jammed);
sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__OUT_OF_PAPER,
R.string.printer_out_of_paper);
sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__SERVICE_REQUEST,
R.string.printer_check);
sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__OUT_OF_INK,
R.string.printer_out_of_ink);
sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__OUT_OF_TONER,
R.string.printer_out_of_toner);
sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__LOW_ON_INK,
R.string.printer_low_on_ink);
sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__REALLY_LOW_ON_INK,
R.string.printer_low_on_ink);
sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__LOW_ON_TONER,
R.string.printer_low_on_toner);
sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__BUSY, R.string.printer_busy);
sBlockReasonsMap.put(BackendConstants.BLOCKED_REASON__OFFLINE, R.string.printer_offline);
}
private int mId;
private String mJobState;
private String mJobResult;
private final Set<String> mBlockedReasons;
/** Create a new, blank job status */
public JobStatus() {
mId = ID_UNKNOWN;
mBlockedReasons = new LinkedHashSet<>();
}
/** Create a copy of another object */
private JobStatus(JobStatus other) {
mId = other.mId;
mJobState = other.mJobState;
mJobResult = other.mJobResult;
mBlockedReasons = other.mBlockedReasons;
}
/** Returns a string resource ID corresponding to a blocked reason, or 0 if none found */
public int getBlockedReasonId() {
for (String reason : mBlockedReasons) {
if (sBlockReasonsMap.containsKey(reason)) {
return sBlockReasonsMap.get(reason);
}
}
return 0;
}
/** Returns a job state (see {@link BackendConstants} JOB_DONE_*}) or null if not known */
public String getJobState() {
return mJobState;
}
/** Returns a job result (see {@link BackendConstants} JOB_RESULT_*}) or null if not known */
public String getJobResult() {
return mJobResult;
}
/** Return the job's identifier or ID_UNKNOWN */
public int getId() {
return mId;
}
/** Return true if the job is in a completion state */
boolean isJobDone() {
return !TextUtils.isEmpty(mJobResult);
}
@Override
public String toString() {
return "JobStatus{id=" + mId
+ ", jobState=" + mJobState
+ ", jobResult=" + mJobResult
+ ", blockedReasons=" + mBlockedReasons
+ "}";
}
static class Builder {
final JobStatus mPrototype;
Builder() {
mPrototype = new JobStatus();
}
Builder(JobStatus from) {
mPrototype = new JobStatus(from);
}
public Builder setId(int id) {
mPrototype.mId = id;
return this;
}
Builder setJobState(String jobState) {
mPrototype.mJobState = jobState;
return this;
}
Builder setJobResult(String jobResult) {
mPrototype.mJobResult = jobResult;
return this;
}
Builder clearBlockedReasons() {
mPrototype.mBlockedReasons.clear();
return this;
}
Builder addBlockedReason(String blockedReason) {
mPrototype.mBlockedReasons.add(blockedReason);
return this;
}
public JobStatus build() {
return new JobStatus(mPrototype);
}
}
}