/*
 * DebugConsole.h
 *
 *  Created on: Mar 24, 2011
 *      Author: Anis Kadri <anis@adobe.com>
 *
 *  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you 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.
 */

#ifndef DEBUGCONSOLE_H_
#define DEBUGCONSOLE_H_

#include "CordovaCommand.h"

class DebugConsole: public CordovaCommand {
public:
	DebugConsole(Web* pWeb);
	virtual ~DebugConsole();
public:
	void Run(const String& command);
private:
	void CleanUp(String& str);
	void Log(String& statement, String& logLevel);
};

#endif /* DEBUGCONSOLE_H_ */
