/*++ © 1998 Seagate Software, Inc. All rights reserved. Module Name: VolAssign.cpp Abstract: This component is an object representation of the HSM Metadata Volume Assignement record. Author: Ron White [ronw] 3-Jun-1997 Revision History: --*/ #include "stdafx.h" #include "metaint.h" #include "metalib.h" #include "VolAsgn.h" #undef WSB_TRACE_IS #define WSB_TRACE_IS WSB_TRACE_BIT_META HRESULT CVolAssign::GetVolAssign( OUT GUID *pBagId, OUT LONGLONG *pSegStartLoc, OUT LONGLONG *pSegLen, OUT GUID *pVolId ) /*++ Implements: IVolAssign::GetVolAssign --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CVolAssign::GetVolAssign"),OLESTR("")); try { //Make sure we can provide data memebers WsbAssert(0 != pBagId, E_POINTER); WsbAssert(0 != pSegStartLoc, E_POINTER); WsbAssert(0 != pSegLen, E_POINTER); WsbAssert(0 != pVolId, E_POINTER); //Provide the data members *pBagId = m_BagId; *pSegStartLoc = m_SegStartLoc; *pSegLen = m_SegLen; *pVolId = m_VolId; } WsbCatch(hr); WsbTraceOut(OLESTR("CVolAssign::GetVolAssign"), OLESTR("BagId = <%ls>, SegStartLoc = <%ls>, SegLen = <%ls>, VolId = <%ls>"), WsbPtrToGuidAsString(pBagId), WsbStringCopy(WsbPtrToLonglongAsString(pSegStartLoc)), WsbStringCopy(WsbPtrToLonglongAsString(pSegLen)), WsbStringCopy(WsbPtrToGuidAsString(pVolId))); return(hr); } HRESULT CVolAssign::FinalConstruct( void ) /*++ Routine Description: This method does some initialization of the object that is necessary after construction. Arguments: None. Return Value: S_OK Anything returned by CWsbDbEntity::FinalConstruct(). --*/ { HRESULT hr = S_OK; try { WsbAssertHr(CWsbDbEntity::FinalConstruct()); m_BagId = GUID_NULL; m_SegStartLoc = 0; m_SegLen = 0; m_VolId = GUID_NULL; } WsbCatch(hr); return(hr); } HRESULT CVolAssign::GetClassID ( OUT LPCLSID pclsid ) /*++ Implements: IPerist::GetClassID() --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CVolAssign::GetClassID"), OLESTR("")); try { WsbAssert(0 != pclsid, E_POINTER); *pclsid = CLSID_CVolAssign; } WsbCatch(hr); WsbTraceOut(OLESTR("CVolAssign::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pclsid)); return(hr); } HRESULT CVolAssign::Load ( IN IStream* pStream ) /*++ Implements: IPersistStream::Load(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CVolAssign::Load"), OLESTR("")); try { WsbAssert(0 != pStream, E_POINTER); WsbAffirmHr(WsbLoadFromStream(pStream, &m_BagId)); WsbAffirmHr(WsbLoadFromStream(pStream, &m_SegStartLoc)); WsbAffirmHr(WsbLoadFromStream(pStream, &m_SegLen)); WsbAffirmHr(WsbLoadFromStream(pStream, &m_VolId)); } WsbCatch(hr); WsbTraceOut(OLESTR("CVolAssign::Load"), OLESTR("hr = <%ls>, GUID = <%ls>, SegStartLoc = <%ls>, SegLen = <%ls>, VolId = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(m_BagId), WsbStringCopy(WsbLonglongAsString(m_SegStartLoc)), WsbStringCopy(WsbLonglongAsString(m_SegLen)), WsbStringCopy(WsbGuidAsString(m_VolId))); return(hr); } HRESULT CVolAssign::Print ( IN IStream* pStream ) /*++ Implements: IWsbDbEntity::Print --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CVolAssign::Print"), OLESTR("")); try { WsbAssert(0 != pStream, E_POINTER); CWsbStringPtr strGuid; WsbAffirmHr(WsbSafeGuidAsString(m_BagId, strGuid)); WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" BagId = %ls"), (WCHAR *)strGuid)); WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(", StartLoc = %ls"), WsbLonglongAsString(m_SegStartLoc))); WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(", SegLen = %ls"), WsbLonglongAsString(m_SegLen))); WsbAffirmHr(WsbSafeGuidAsString(m_VolId, strGuid)); WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" new VolId = %ls"), (WCHAR *)strGuid)); WsbAffirmHr(CWsbDbEntity::Print(pStream)); } WsbCatch(hr); WsbTraceOut(OLESTR("CVolAssign::Print"), OLESTR("hr = <%ls>"), WsbHrAsString(hr)); return(hr); } HRESULT CVolAssign::Save ( IN IStream* pStream, IN BOOL clearDirty ) /*++ Implements: IPersistStream::Save(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CVolAssign::Save"), OLESTR("clearDirty = <%ls>"), WsbBoolAsString(clearDirty)); try { WsbAssert(0 != pStream, E_POINTER); WsbAffirmHr(WsbSaveToStream(pStream, m_BagId)); WsbAffirmHr(WsbSaveToStream(pStream, m_SegStartLoc)); WsbAffirmHr(WsbSaveToStream(pStream, m_SegLen)); WsbAffirmHr(WsbSaveToStream(pStream, m_VolId)); // If we got it saved and we were asked to clear the dirty bit, then // do so now. if (clearDirty) { m_isDirty = FALSE; } } WsbCatch(hr); WsbTraceOut(OLESTR("CVolAssign::Save"), OLESTR("hr = <%ls>"), WsbHrAsString(hr)); return(hr); } HRESULT CVolAssign::SetVolAssign ( IN GUID BagId, IN LONGLONG SegStartLoc, IN LONGLONG SegLen, IN GUID VolId ) /*++ Implements: IVolAssign::SetVolAssign(). --*/ { WsbTraceIn(OLESTR("CVolAssign::SetVolAssign"), OLESTR("BagId = <%ls>, SegStartLoc = <%ls>, SegLen = <%ls>, VolId = <%ls>"), WsbGuidAsString(BagId), WsbStringCopy(WsbLonglongAsString(SegStartLoc)), WsbStringCopy(WsbLonglongAsString(SegLen)), WsbStringCopy(WsbGuidAsString(VolId))); m_isDirty = TRUE; m_BagId = BagId; m_SegStartLoc = SegStartLoc; m_SegLen = SegLen; m_VolId = VolId; WsbTraceOut(OLESTR("CVolAssign::SetVolAssign"), OLESTR("hr = <%ls>"),WsbHrAsString(S_OK)); return(S_OK); } HRESULT CVolAssign::UpdateKey( IWsbDbKey *pKey ) /*++ Implements: IWsbDbEntity::UpdateKey --*/ { HRESULT hr = S_OK; try { WsbAffirmHr(pKey->SetToGuid(m_BagId)); WsbAffirmHr(pKey->AppendLonglong(m_SegStartLoc)); } WsbCatch(hr); return(hr); }