ApplianceImpl.h revision d440eb388d1459ffc6f581ff0c786ef3f048dc39
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync/* $Id$ */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync/** @file
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync *
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * VirtualBox COM class implementation
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync/*
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * Copyright (C) 2006-2009 Sun Microsystems, Inc.
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync *
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * available from http://www.virtualbox.org. This file is free software;
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * you can redistribute it and/or modify it under the terms of the GNU
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * General Public License (GPL) as published by the Free Software
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync *
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * additional information or have any questions.
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync#ifndef ____H_APPLIANCEIMPL
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync#define ____H_APPLIANCEIMPL
6754e49069315bd28137abb0f9241e3aeb99a97evboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync#include "VirtualBoxBase.h"
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync#include <string>
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsyncclass VirtualBox;
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsyncclass ATL_NO_VTABLE Appliance :
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync public VirtualBoxBaseWithChildrenNEXT,
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync public VirtualBoxSupportErrorInfoImpl <Appliance, IAppliance>,
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync public VirtualBoxSupportTranslation <Appliance>,
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync public IAppliance
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync{
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsyncpublic:
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT (Appliance)
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync DECLARE_NOT_AGGREGATABLE(Appliance)
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync BEGIN_COM_MAP(Appliance)
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync COM_INTERFACE_ENTRY(ISupportErrorInfo)
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync COM_INTERFACE_ENTRY(IAppliance)
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync END_COM_MAP()
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
8b98c71a5a01d215eafbc3605cb7a66cc91ea774vboxsync NS_DECL_ISUPPORTS
8b98c71a5a01d215eafbc3605cb7a66cc91ea774vboxsync
8b98c71a5a01d215eafbc3605cb7a66cc91ea774vboxsync DECLARE_EMPTY_CTOR_DTOR (Appliance)
8b98c71a5a01d215eafbc3605cb7a66cc91ea774vboxsync
8b98c71a5a01d215eafbc3605cb7a66cc91ea774vboxsync // public initializer/uninitializer for internal purposes only
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync HRESULT FinalConstruct() { return S_OK; }
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync void FinalRelease() { uninit(); }
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync HRESULT init(VirtualBox *aVirtualBox, IN_BSTR &path);
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync void uninit();
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
8b98c71a5a01d215eafbc3605cb7a66cc91ea774vboxsync // for VirtualBoxSupportErrorInfoImpl
8b98c71a5a01d215eafbc3605cb7a66cc91ea774vboxsync static const wchar_t *getComponentName() { return L"Appliance"; }
8b98c71a5a01d215eafbc3605cb7a66cc91ea774vboxsync
8b98c71a5a01d215eafbc3605cb7a66cc91ea774vboxsync /* IAppliance properties */
8b98c71a5a01d215eafbc3605cb7a66cc91ea774vboxsync STDMETHOD(COMGETTER(Path))(BSTR *aPath);
8b98c71a5a01d215eafbc3605cb7a66cc91ea774vboxsync STDMETHOD(COMGETTER(Disks))(ComSafeArrayOut(BSTR, aDisks));
8b98c71a5a01d215eafbc3605cb7a66cc91ea774vboxsync STDMETHOD(COMGETTER(VirtualSystemDescriptions))(ComSafeArrayOut(IVirtualSystemDescription*, aVirtualSystemDescriptions));
8b98c71a5a01d215eafbc3605cb7a66cc91ea774vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync /* IAppliance methods */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync /* void interpret (); */
8b98c71a5a01d215eafbc3605cb7a66cc91ea774vboxsync STDMETHOD(Interpret)(void);
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync /* public methods only for internal purposes */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync STDMETHOD(ImportAppliance)();
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync /* private instance data */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsyncprivate:
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync /** weak VirtualBox parent */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync const ComObjPtr <VirtualBox, ComWeakRef> mVirtualBox;
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync struct Data; // obscure, defined in AppliannceImpl.cpp
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync Data *m;
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync HRESULT LoopThruSections(const char *pcszPath, const xml::Node *pReferencesElem, const xml::Node *pCurElem);
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync HRESULT HandleDiskSection(const char *pcszPath, const xml::Node *pReferencesElem, const xml::Node *pSectionElem);
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync HRESULT HandleNetworkSection(const char *pcszPath, const xml::Node *pSectionElem);
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync HRESULT HandleVirtualSystemContent(const char *pcszPath, const xml::Node *pContentElem);
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
6754e49069315bd28137abb0f9241e3aeb99a97evboxsync HRESULT searchUniqueVMName (std::string& aName) const;
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync HRESULT searchUniqueDiskImageFilePath(std::string& aName) const;
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync};
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsyncstruct VirtualSystemDescriptionEntry
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync{
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync VirtualSystemDescriptionType_T type; /* Of which type is this value */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync std::string strRef; /* Reference value to the internal implementation */
6754e49069315bd28137abb0f9241e3aeb99a97evboxsync std::string strOriginalValue; /* The original OVF value */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync std::string strAutoValue; /* The value which VBox suggest */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync std::string strFinalValue; /* The value the user select */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync std::string strConfiguration; /* Additional configuration data for this type */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync};
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsyncclass ATL_NO_VTABLE VirtualSystemDescription :
508452243fd3328f7b9e0405d39fb9dc004e31b8vboxsync public VirtualBoxBaseWithChildrenNEXT,
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync public VirtualBoxSupportErrorInfoImpl <VirtualSystemDescription, IVirtualSystemDescription>,
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync public VirtualBoxSupportTranslation <VirtualSystemDescription>,
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync public IVirtualSystemDescription
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync{
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync friend class Appliance;
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsyncpublic:
6754e49069315bd28137abb0f9241e3aeb99a97evboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT (VirtualSystemDescription)
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
6754e49069315bd28137abb0f9241e3aeb99a97evboxsync DECLARE_NOT_AGGREGATABLE(VirtualSystemDescription)
6754e49069315bd28137abb0f9241e3aeb99a97evboxsync
6754e49069315bd28137abb0f9241e3aeb99a97evboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
c8befbec2916e0bba4d254c81d87e5b0e78013bavboxsync
6754e49069315bd28137abb0f9241e3aeb99a97evboxsync BEGIN_COM_MAP(VirtualSystemDescription)
508452243fd3328f7b9e0405d39fb9dc004e31b8vboxsync COM_INTERFACE_ENTRY(ISupportErrorInfo)
6754e49069315bd28137abb0f9241e3aeb99a97evboxsync COM_INTERFACE_ENTRY(IVirtualSystemDescription)
8b98c71a5a01d215eafbc3605cb7a66cc91ea774vboxsync END_COM_MAP()
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync NS_DECL_ISUPPORTS
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync DECLARE_EMPTY_CTOR_DTOR (VirtualSystemDescription)
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync // public initializer/uninitializer for internal purposes only
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync HRESULT FinalConstruct() { return S_OK; }
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync void FinalRelease() { uninit(); }
8b98c71a5a01d215eafbc3605cb7a66cc91ea774vboxsync
HRESULT init();
void uninit();
// for VirtualBoxSupportErrorInfoImpl
static const wchar_t *getComponentName() { return L"VirtualSystemDescription"; }
/* IVirtualSystemDescription properties */
/* IVirtualSystemDescription methods */
STDMETHOD(GetDescription)(ComSafeArrayOut(VirtualSystemDescriptionType_T, aTypes),
ComSafeArrayOut(BSTR, aOrigValues),
ComSafeArrayOut(BSTR, aAutoValues),
ComSafeArrayOut(BSTR, aConfigurations));
STDMETHOD(SetFinalValues)(ComSafeArrayIn(IN_BSTR, aFinalValues));
/* public methods only for internal purposes */
/* private instance data */
private:
void addEntry(VirtualSystemDescriptionType_T aType, std::string aRef, std::string aOrigValue, std::string aAutoValue, std::string aConfig = "");
std::list<VirtualSystemDescriptionEntry> findByType(VirtualSystemDescriptionType_T aType);
struct Data;
Data *m;
};
#endif // ____H_APPLIANCEIMPL