/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * 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.sdklib.internal.repository;

import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
import com.android.utils.ILogger;
import com.android.utils.NullLogger;


/**
 * A no-op implementation of the {@link ITaskMonitor} interface.
 * <p/>
 * This can be passed to methods that require a monitor when the caller doesn't
 * have any UI to update or means to report tracked progress.
 * A custom {@link ILogger} is used. Clients could use {@link NullLogger} if
 * they really don't care about the logging either.
 *
 * @deprecated
 * com.android.sdklib.internal.repository has moved into Studio as
 * com.android.tools.idea.sdk.remote.internal.
 */
@Deprecated
public class NullTaskMonitor implements ITaskMonitor {

    private final ILogger mLog;

    /**
     * Creates a no-op {@link ITaskMonitor} that defers logging to the specified
     * logger.
     * <p/>
     * This can be passed to methods that require a monitor when the caller doesn't
     * have any UI to update or means to report tracked progress.
     *
     * @param log An {@link ILogger}. Must not be null. Consider using {@link NullLogger}.
     */
    public NullTaskMonitor(ILogger log) {
        mLog = log;
    }

    @Override
    public void setDescription(String format, Object...args) {
        // pass
    }

    @Override
    public void log(String format, Object...args) {
        mLog.info(format, args);
    }

    @Override
    public void logError(String format, Object...args) {
        mLog.error(null /*throwable*/, format, args);
    }

    @Override
    public void logVerbose(String format, Object...args) {
        mLog.verbose(format, args);
    }

    @Override
    public void setProgressMax(int max) {
        // pass
    }

    @Override
    public int getProgressMax() {
        return 0;
    }

    @Override
    public void incProgress(int delta) {
        // pass
    }

    /** Always return 1. */
    @Override
    public int getProgress() {
        return 1;
    }

    /** Always return false. */
    @Override
    public boolean isCancelRequested() {
        return false;
    }

    @Override
    public ITaskMonitor createSubMonitor(int tickCount) {
        return this;
    }

    /** Always return false. */
    @Override
    public boolean displayPrompt(final String title, final String message) {
        return false;
    }

    /** Always return null. */
    @Override
    public UserCredentials displayLoginCredentialsPrompt(String title, String message) {
        return null;
    }

    // --- ILogger ---

    @Override
    public void error(@Nullable Throwable t, @Nullable String errorFormat, Object... args) {
        mLog.error(t, errorFormat, args);
    }

    @Override
    public void warning(@NonNull String warningFormat, Object... args) {
        mLog.warning(warningFormat, args);
    }

    @Override
    public void info(@NonNull String msgFormat, Object... args) {
        mLog.info(msgFormat, args);
    }

    @Override
    public void verbose(@NonNull String msgFormat, Object... args) {
        mLog.verbose(msgFormat, args);
    }
}
