/****************************************************************************
|
| Copyright (c) 2006 Novell, Inc.
| All Rights Reserved.
|
| This program is free software; you can redistribute it and/or
| modify it under the terms of version 2 of the GNU General Public License as
| published by the Free Software Foundation.
|
| This program is distributed in the hope that it will be useful,
| but WITHOUT ANY WARRANTY; without even the implied warranty of
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
| GNU General Public License for more details.
|
| You should have received a copy of the GNU General Public License
| along with this program; if not, contact Novell, Inc.
|
| To contact Novell about this file by physical or electronic mail,
| you may find current contact information at www.novell.com
|
|***************************************************************************
/**
@author Brad Nicholes
*/
#ifndef OMC_OMCCLPPRINT_H_INCLUDE_GUARD_
#define OMC_OMCCLPPRINT_H_INCLUDE_GUARD_
#include "omcclpcommon.h"
#include "omcclpcmdshow.h"
#include <openwbem/OW_CIMObjectPath.hpp>
#include <openwbem/OW_CIMClass.hpp>
#include <openwbem/OW_CIMProperty.hpp>
#include <openwbem/OW_CIMValue.hpp>
namespace OMCCLP {
class InstancePrinter {
public:
InstancePrinter() {}
InstancePrinter(OMCCLPCmdShow* showCmd);
virtual ~InstancePrinter() {};
String getUFiP(const CIMObjectPath& cop);
String getPropertyValue (const CIMInstance& cop, const String& propertyName);
void virtual outputHead(std::ostream& clpout){}
void virtual outputTail(std::ostream& clpout){}
void virtual outputInstanceHead(std::ostream& clpout){}
void virtual outputUFiP(std::ostream& clpout, const String& ufip) {
clpout << outputIndent() << "UFiP:" << CLPENDL;
increaseIndent();
clpout << outputIndent() << ufip << CLPENDL;
decreaseIndent();
}
void virtual outputUFcT(std::ostream& clpout, String ufct){}
void virtual outputTargetHead(std::ostream& clpout){
clpout << outputIndent() << "Targets:" << CLPENDL;
}
void virtual outputTarget(std::ostream& clpout, const OMCCLPCimObjectPathInfoRef& t);
void virtual outputTargetTail(std::ostream& clpout){}
void virtual outputPropertiesHead(std::ostream& clpout) {
clpout << outputIndent() << "Properties:" << CLPENDL;
}
void virtual outputProperty(std::ostream& clpout, const CIMInstance& ci, CIMProperty& prop) {
String cpName = prop.getName();
clpout << outputIndent() << cpName << " = " << getPropertyValue(ci, cpName) << CLPENDL;
}
void virtual outputPropertiesTail(std::ostream& clpout){}
void virtual outputAssociationsHead(std::ostream& clpout){
clpout << outputIndent() << "Associations:" << CLPENDL;
}
void virtual outputAssociationHead(std::ostream& clpout, CIMInstance cia){
/*XXX This should print out the user friend name not a CIM class name */
clpout << outputIndent() << "Association = " << cia.getName() << CLPENDL;
}
void virtual outputAssociation(std::ostream& clpout, CIMProperty cpa);
void virtual outputAssociationTail(std::ostream& clpout){}
void virtual outputAssociationsTail(std::ostream& clpout){}
void virtual outputVerbsHead(std::ostream& clpout) {
clpout << outputIndent() << "Verbs:" << CLPENDL;
}
void virtual outputStandardVerbs(std::ostream& clpout, StringArray verbs);
void virtual outputOEMVerbs(std::ostream& clpout, StringArray verbs){}
void virtual outputVerbsTail(std::ostream& clpout){}
void virtual outputInstanceTail(std::ostream& clpout){}
#define INDENT_STR " "
String outputIndent() {
String indent;
for (int i=0; i<m_indentLevel; i++) {
indent += String(INDENT_STR);
}
return indent;}
void increaseIndent() {m_indentLevel++;}
void decreaseIndent() {m_indentLevel--;if (m_indentLevel<0)m_indentLevel=0;}
void print(const OMCCLPCimObjectPathInfoRef& t, Int32 level=1);
protected:
OMCCLPCmdShow* m_showCmd;
OMCCLPOptionRef m_dispayOption;
OMCCLPOptionRef m_outputOption;
OMCCLPOptionRef m_levelOption;
OMCCLPOptionRef m_allOption;
String m_statusTag;
// TODO use short for status and jobId for now.
// The type should change when we figure out what values go in these.
short m_status;
short m_jobId;
private:
Int32 m_indentLevel;
};
class InstanceTextPrinter : public InstancePrinter {
public:
InstanceTextPrinter(OMCCLPCmdShow* showCmd) : InstancePrinter(showCmd) {}
virtual ~InstanceTextPrinter() {};
};
class InstanceKeywordPrinter : public InstancePrinter {
public:
InstanceKeywordPrinter(OMCCLPCmdShow* showCmd) : InstancePrinter(showCmd) {}
virtual ~InstanceKeywordPrinter() {};
void outputHead(std::ostream& clpout) {}
void outputTail(std::ostream& clpout) {clpout << "endoutput" << CLPENDL;}
void outputInstanceHead(std::ostream& clpout){clpout << "begingroup=instance" << CLPENDL;}
void outputUFiP(std::ostream& clpout, const String& ufip) {
clpout << "ufip=" << ufip << CLPENDL;
}
void outputUFcT(std::ostream& clpout, String ufct) {clpout << "ufip=" << ufct << CLPENDL;}
void outputTargetHead(std::ostream& clpout){clpout << "begingroup=targets" << CLPENDL;}
void outputTarget(std::ostream& clpout, const OMCCLPCimObjectPathInfoRef& t);
void outputTargetTail(std::ostream& clpout){clpout << "endgroup" << CLPENDL;}
void outputPropertiesHead(std::ostream& clpout) {}
// TODO what should the type be for propValue?
void outputProperty(std::ostream& clpout, const CIMObjectPath& cop, CIMProperty& prop);
void outputPropertiesTail(std::ostream& clpout){}
void outputAssociationsHead(std::ostream& clpout) {clpout << "begingroup=associations" << CLPENDL;}
void outputAssociationHead(std::ostream& clpout, CIMInstance cia){
clpout << "begingroup=association" << CLPENDL;
clpout << "name=" << cia.getName() << CLPENDL;
}
void outputAssociation(std::ostream& clpout, CIMProperty cpa);
void outputAssociationTail(std::ostream& clpout){clpout << "endgroup" << CLPENDL;}
void outputAssociationsTail(std::ostream& clpout){clpout << "endgroup" << CLPENDL;}
void outputVerbsHead(std::ostream& clpout) {
clpout << "begingroup=verbs" << CLPENDL;
}
void outputStandardVerbs(std::ostream& clpout, StringArray verbs);
void outputOEMVerbs(std::ostream& clpout, StringArray verbs){}
void outputVerbsTail(std::ostream& clpout) {
clpout << "endgroup" << CLPENDL;
}
void outputInstanceTail(std::ostream& clpout){clpout << "endgroup" << CLPENDL;}
};
class InstanceXMLPrinter : public InstancePrinter {
public:
InstanceXMLPrinter(OMCCLPCmdShow* showCmd) : InstancePrinter(showCmd) {}
virtual ~InstanceXMLPrinter() {};
void outputHead(std::ostream& clpout) {}
void outputTail(std::ostream& clpout) {clpout << "</show></response>" << CLPENDL;}
void outputInstanceHead(std::ostream& clpout){clpout << "<instance>";}
void outputUFiP(std::ostream& clpout, const String& ufip){
clpout << "<ufip>" << ufip <<"</ufip>" << CLPENDL;
}
void outputUFcT(std::ostream& clpout, String ufct) {clpout << "<ufip>" << ufct <<"</ufip>" << CLPENDL;}
void outputTargetHead(std::ostream& clpout){clpout << "<targets>" << CLPENDL;}
void outputTarget(std::ostream& clpout, const OMCCLPCimObjectPathInfoRef& t);
void outputTargetTail(std::ostream& clpout){clpout << "</targets>" << CLPENDL;}
void outputPropertiesHead(std::ostream& clpout) {clpout << "<properties>";}
void outputProperty(std::ostream& clpout, const CIMObjectPath& cop, CIMProperty& prop);
void outputPropertiesTail(std::ostream& clpout){clpout <<"</properties>" << CLPENDL;}
void outputAssociationsHead(std::ostream& clpout) {clpout << "<associations>";}
void outputAssociationHead(std::ostream& clpout, CIMInstance cia) {
clpout << "<association>";
clpout << "<ufct>" << cia.getName() << "</ufct>" << CLPENDL;
}
void outputAssociation(std::ostream& clpout, CIMProperty cpa);
void outputAssociationTail(std::ostream& clpout) {clpout << "</association>" << CLPENDL;}
void outputAssociationsTail(std::ostream& clpout) {clpout << "</associations>" << CLPENDL;}
void outputVerbsHead(std::ostream& clpout) {
clpout << "<verbs>";
}
void outputStandardVerbs(std::ostream& clpout, StringArray verbs);
void outputOEMVerbs(std::ostream& clpout, StringArray verbs){clpout << "<oemverbs>" << "</oemverbs>";}
void outputVerbsTail(std::ostream& clpout) {
clpout << "</verbs>";
}
void outputInstanceTail(std::ostream& clpout){clpout << "</instance>" << CLPENDL;}
};
}
#endif