/*++

Copyright (c) 1994-95  Microsoft Corporation

Module Name:

    llsdoc.cpp

Abstract:

    Document implementation.

Author:

    Don Ryan (donryan) 12-Feb-1995

Environment:

    User Mode - Win32

Revision History:

--*/

#include "stdafx.h"
#include "llsmgr.h"
#include "llsdoc.h"
#include "llsview.h"

#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

IMPLEMENT_DYNCREATE(CLlsmgrDoc, CDocument)

BEGIN_MESSAGE_MAP(CLlsmgrDoc, CDocument)
    //{{AFX_MSG_MAP(CLlsmgrDoc)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

BEGIN_DISPATCH_MAP(CLlsmgrDoc, CDocument)
    //{{AFX_DISPATCH_MAP(CLlsmgrDoc)
    //}}AFX_DISPATCH_MAP
END_DISPATCH_MAP()


CLlsmgrDoc::CLlsmgrDoc()

/*++

Routine Description:

    Constructor for document object.

Arguments:

    None.

Return Values:

    None.

--*/

{
    m_pDomain   = NULL;
    m_pController = NULL;
}


CLlsmgrDoc::~CLlsmgrDoc()

/*++

Routine Description:

    Destructor for document object.

Arguments:

    None.

Return Values:

    None.

--*/

{
    //
    // Nothing to do here.
    //
}


#ifdef _DEBUG

void CLlsmgrDoc::AssertValid() const

/*++

Routine Description:

    Validates object.

Arguments:

    None.

Return Values:

    None.

--*/

{
    CDocument::AssertValid();
}

#endif //_DEBUG


#ifdef _DEBUG

void CLlsmgrDoc::Dump(CDumpContext& dc) const

/*++

Routine Description:

    Dumps contents of object.

Arguments:

    dc - dump context.

Return Values:

    None.

--*/

{
    CDocument::Dump(dc);
}

#endif //_DEBUG


CController* CLlsmgrDoc::GetController()

/*++

Routine Description:

    Retrieves current controller object.

Arguments:

    None.

Return Values:

    Object pointer or NULL.

--*/

{
    if (!m_pController)
    {
        m_pController = (CController*)MKOBJ(LlsGetApp()->GetActiveController());
        VALIDATE_OBJECT(m_pController, CController);

        if (m_pController)
            m_pController->InternalRelease();   // held open by CApplication
    }
    
    return m_pController;    
}


CDomain* CLlsmgrDoc::GetDomain()    

/*++

Routine Description:

    Retrieves current domain object.

Arguments:

    None.

Return Values:

    Object pointer or NULL.

--*/

{
    if (!m_pDomain)
    {
        m_pDomain = (CDomain*)MKOBJ(LlsGetApp()->GetActiveDomain());
        VALIDATE_OBJECT(m_pDomain, CDomain);

        if (m_pDomain)
            m_pDomain->InternalRelease();   // held open by CApplication
    }
    
    return m_pDomain;    
}


CLicenses* CLlsmgrDoc::GetLicenses()

/*++

Routine Description:

    Retrieves current list of licenses.

Arguments:

    None.

Return Values:

    Object pointer or NULL.

--*/

{
    CLicenses* pLicenses = NULL;

    GetController();    // initialize if necessary

    if (m_pController)
    {    
        VARIANT va;
        VariantInit(&va);

        pLicenses = (CLicenses*)MKOBJ(m_pController->GetLicenses(va));

        if (pLicenses)
            pLicenses->InternalRelease(); // held open by CController  
    }
    
    return pLicenses;    
}


CMappings* CLlsmgrDoc::GetMappings()  

/*++

Routine Description:

    Retrieves current list of mappings.

Arguments:

    None.

Return Values:

    Object pointer or NULL.

--*/

{
    CMappings* pMappings = NULL;

    GetController();    // initialize if necessary

    if (m_pController)
    {    
        VARIANT va;
        VariantInit(&va);

        pMappings = (CMappings*)MKOBJ(m_pController->GetMappings(va));

        if (pMappings)
            pMappings->InternalRelease(); // held open by CController  
    }
    
    return pMappings;    
}


CProducts* CLlsmgrDoc::GetProducts()  

/*++

Routine Description:

    Retrieves current list of products.

Arguments:

    None.

Return Values:

    Object pointer or NULL.

--*/

{
    CProducts* pProducts = NULL;

    GetController();    // initialize if necessary

    if (m_pController)
    {    
        VARIANT va;
        VariantInit(&va);

        pProducts = (CProducts*)MKOBJ(m_pController->GetProducts(va));

        if (pProducts)
            pProducts->InternalRelease(); // held open by CController  
    }
    
    return pProducts;    
}


CUsers* CLlsmgrDoc::GetUsers()     

/*++

Routine Description:

    Retrieves current list of users.

Arguments:

    None.

Return Values:

    Object pointer or NULL.

--*/

{
    CUsers* pUsers = NULL;

    GetController();    // initialize if necessary

    if (m_pController)
    {    
        VARIANT va;
        VariantInit(&va);

        pUsers = (CUsers*)MKOBJ(m_pController->GetUsers(va));

        if (pUsers)
            pUsers->InternalRelease(); // held open by CController  
    }
    
    return pUsers;    
}


void CLlsmgrDoc::OnCloseDocument() 

/*++

Routine Description:

    Called by framework to close document.

Arguments:

    None.

Return Values:

    None.

--*/

{
    CDocument::OnCloseDocument();
}


BOOL CLlsmgrDoc::OnNewDocument()

/*++

Routine Description:

    Called by framework to open new document.

Arguments:

    None.

Return Values:

    Returns true if document successfully opened.

--*/

{
    return TRUE;    // always succeeds
}


BOOL CLlsmgrDoc::OnOpenDocument(LPCTSTR lpszPathName) 

/*++

Routine Description:

    Called by framework to open existing document.

Arguments:

    lpszPathName - file name. 

Return Values:

    Returns true if document successfully opened.

--*/

{
    Update();   // invalidate info...

    CString strTitle;

    if (LlsGetApp()->IsFocusDomain())
    {
        CDomain* pDomain = GetDomain();
        VALIDATE_OBJECT(pDomain, CDomain);

        strTitle = pDomain->m_strName;

        POSITION position = GetFirstViewPosition();
        ((CLlsmgrView*)GetNextView(position))->AddToMRU(strTitle);
    }
    else
    {
        strTitle.LoadString(IDS_ENTERPRISE);
    }

    SetTitle(strTitle);  

    return TRUE;    // always succeeds
}


BOOL CLlsmgrDoc::OnSaveDocument(LPCTSTR lpszPathName) 

/*++

Routine Description:

    Called by framework to save open document.

Arguments:

    None.

Return Values:

    Returns true if document successfully saved.

--*/

{
    return TRUE;    // always succeeds
}


void CLlsmgrDoc::Update()

/*++

Routine Description:

    Resets information so its updated when queried.

Arguments:

    None.

Return Values:

    None.

--*/

{
    m_pDomain = NULL;
}


BOOL CLlsmgrDoc::SaveModified() 

/*++

Routine Description:

    Called by framework to determine if document can be saved modified.

Arguments:

    None.

Return Values:

    Returns true if document can be saved.

--*/

{
    return TRUE;    // always succeeds
}


void CLlsmgrDoc::SetPathName(LPCTSTR lpszPathName, BOOL bAddToMRU) 

/*++

Routine Description:

    Called by framework to save pathname in MRU list.

Arguments:

    None.

Return Values:

    None.

--*/

{
    //
    // Nothing to do here.
    //
}


void CLlsmgrDoc::Serialize(CArchive& ar)

/*++

Routine Description:

    Called by framework for document i/o.

Arguments:

    ar - archive object.

Return Values:

    None.

--*/

{
    //
    // Nothing to do here.
    //
}