SnapshotImpl.h revision dfb073f3abf5769e19100045e864659305014ea2
76aa6dcf2a33e270b39d3c266fe6a5c6ae7f2017vboxsync/** @file
d68a7b3807babcc0f13ac51c5681a76080d2af07vboxsync *
d68a7b3807babcc0f13ac51c5681a76080d2af07vboxsync * VirtualBox COM class implementation
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync */
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync/*
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync * Copyright (C) 2006-2009 Sun Microsystems, Inc.
d68a7b3807babcc0f13ac51c5681a76080d2af07vboxsync *
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync * available from http://www.virtualbox.org. This file is free software;
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync * you can redistribute it and/or modify it under the terms of the GNU
d68a7b3807babcc0f13ac51c5681a76080d2af07vboxsync * General Public License (GPL) as published by the Free Software
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
d68a7b3807babcc0f13ac51c5681a76080d2af07vboxsync *
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync * additional information or have any questions.
d68a7b3807babcc0f13ac51c5681a76080d2af07vboxsync */
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync#ifndef ____H_SNAPSHOTIMPL
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync#define ____H_SNAPSHOTIMPL
d68a7b3807babcc0f13ac51c5681a76080d2af07vboxsync
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync#include "VirtualBoxBase.h"
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync#include <iprt/time.h>
d68a7b3807babcc0f13ac51c5681a76080d2af07vboxsync
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsyncclass SnapshotMachine;
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsyncclass VirtualBox;
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync
d68a7b3807babcc0f13ac51c5681a76080d2af07vboxsyncnamespace settings
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync{
15f5ec010f877cf7deb5f99855da0a8bdd1d3904vboxsync struct Snapshot;
76aa6dcf2a33e270b39d3c266fe6a5c6ae7f2017vboxsync}
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync
76aa6dcf2a33e270b39d3c266fe6a5c6ae7f2017vboxsyncclass ATL_NO_VTABLE Snapshot :
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync public VirtualBoxSupportErrorInfoImpl<Snapshot, ISnapshot>,
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync public VirtualBoxSupportTranslation<Snapshot>,
76aa6dcf2a33e270b39d3c266fe6a5c6ae7f2017vboxsync public VirtualBoxBase, // WithTypedChildren<Snapshot>,
76aa6dcf2a33e270b39d3c266fe6a5c6ae7f2017vboxsync VBOX_SCRIPTABLE_IMPL(ISnapshot)
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync{
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsyncpublic:
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync DECLARE_NOT_AGGREGATABLE(Snapshot)
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync BEGIN_COM_MAP(Snapshot)
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync COM_INTERFACE_ENTRY (ISupportErrorInfo)
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync COM_INTERFACE_ENTRY (ISnapshot)
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync COM_INTERFACE_ENTRY2 (IDispatch, ISnapshot)
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync END_COM_MAP()
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync Snapshot()
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync : m(NULL)
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync { };
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync ~Snapshot()
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync { };
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync HRESULT FinalConstruct();
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync void FinalRelease();
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync // public initializer/uninitializer only for internal purposes
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync HRESULT init(VirtualBox *aVirtualBox,
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync const Guid &aId,
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync const Utf8Str &aName,
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync const Utf8Str &aDescription,
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync const RTTIMESPEC &aTimeStamp,
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync SnapshotMachine *aMachine,
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync Snapshot *aParent);
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync void uninit();
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync void beginDiscard();
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync // ISnapshot properties
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync STDMETHOD(COMGETTER(Id)) (BSTR *aId);
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync STDMETHOD(COMGETTER(Name)) (BSTR *aName);
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync STDMETHOD(COMSETTER(Name)) (IN_BSTR aName);
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync STDMETHOD(COMGETTER(Description)) (BSTR *aDescription);
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync STDMETHOD(COMSETTER(Description)) (IN_BSTR aDescription);
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync STDMETHOD(COMGETTER(TimeStamp)) (LONG64 *aTimeStamp);
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync STDMETHOD(COMGETTER(Online)) (BOOL *aOnline);
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync STDMETHOD(COMGETTER(Machine)) (IMachine **aMachine);
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync STDMETHOD(COMGETTER(Parent)) (ISnapshot **aParent);
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync STDMETHOD(COMGETTER(Children)) (ComSafeArrayOut (ISnapshot *, aChildren));
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync // ISnapshot methods
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync // public methods only for internal purposes
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync const Utf8Str& stateFilePath() const;
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync ComObjPtr<Snapshot> parent() const
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync {
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync return (Snapshot*)mParent;
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync }
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync ULONG getChildrenCount();
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync ULONG getAllChildrenCount();
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync ULONG getAllChildrenCountImpl();
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync ComPtr<SnapshotMachine> getSnapshotMachine();
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync Guid getId() const;
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync const Utf8Str& getName() const;
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync RTTIMESPEC getTimeStamp() const;
f16eae3a88a153e77d39470718866de731f6ff3fvboxsync
f019cf48439421432be96667759de8db043dc588vboxsync ComObjPtr<Snapshot> findChildOrSelf(IN_GUID aId);
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync ComObjPtr<Snapshot> findChildOrSelf(const Utf8Str &aName);
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync void updateSavedStatePaths(const char *aOldPath,
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync const char *aNewPath);
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync void updateSavedStatePathsImpl(const char *aOldPath,
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync const char *aNewPath);
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync HRESULT saveSnapshot(settings::Snapshot &data, bool aAttrsOnly);
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync HRESULT saveSnapshotImpl(settings::Snapshot &data, bool aAttrsOnly);
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync // for VirtualBoxSupportErrorInfoImpl
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync static const wchar_t *getComponentName()
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync {
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync return L"Snapshot";
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync }
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsyncprivate:
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync /** weak VirtualBox parent */
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync const ComObjPtr<VirtualBox, ComWeakRef> mVirtualBox;
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync ComObjPtr<Snapshot, ComWeakRef> mParent;
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync struct Data; // opaque, defined in SnapshotImpl.cpp
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync Data *m;
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync};
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync
518b915da95be553a50762aa5e9a19834ae7bbb5vboxsync#endif // ____H_SNAPSHOTIMPL
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync/* vi: set tabstop=4 shiftwidth=4 expandtab: */
f473a76bd35761b96b7e967e94e262f0a5029665vboxsync