[GME-commit] GMESRC/GME/Core CoreXmlFile.cpp,NONE,1.1 CoreXmlFile.h,NONE,1.1 CoreXmlFile.rgs,NONE,1.1

gme-commit at list.isis.vanderbilt.edu gme-commit at list.isis.vanderbilt.edu
Mon May 3 15:16:52 CDT 2004


Update of /var/lib/gme/GMESRC/GME/Core
In directory braindrain:/tmp/cvs-serv19383

Added Files:
	CoreXmlFile.cpp CoreXmlFile.h CoreXmlFile.rgs 
Log Message:
no message

CVS User: bogyom

--- NEW FILE: CoreXmlFile.cpp ---

#include "stdafx.h"
#include <io.h>
#include <stdlib.h>
#include <util/PlatformUtils.hpp>
#include <dom/DOM_NamedNodeMap.hpp>
#include "CoreXmlFile.h"
#include "CommonCollection.h"

void bin2string( const unsigned char * bytes, int len, string& str )
{
    char hex[3];
    str.clear();
    for( int i=0; i<len; ++i )
    {
        sprintf( hex, "%02x", bytes[i] );
        str += hex;
    }
}
[...1266 lines suppressed...]
	vector<xmlobjects_iterator>::const_iterator e = a.end();
	while( i != e )
	{
		idpairs.push_back( (*i)->first );

		++i;
	}

	CopyTo(idpairs, p);
}

template<>
void XmlAttr<VALTYPE_COLLECTION>::ToString(string& str) const
{
}
    
template<>
void XmlAttr<VALTYPE_COLLECTION>::FromString(const char * str)
{
}

--- NEW FILE: CoreXmlFile.h ---

#ifndef MGA_COREXMLFILE_H
#define MGA_COREXMLFILE_H

#include <fstream.h>
#include <slist>
#include <map>
#include <hash_map>
#include <parsers/DOMParser.hpp>
#include "..\Mga\MgaGeneric.h"

class CCoreXmlFile;

const metaobjidpair_type null_objid = {METAID_NONE, METAID_NONE};
const GUID null_guid = {0,0,0,{0,0,0,0,0,0,0,0}};

void bin2string( const unsigned char * bytes, int len, string& str );
void string2bin( const char * str, unsigned char * bytes );

// --------------------------- XmlAttr

class XmlAttrBase
{
public:
    attrid_type attrid;

	                     XmlAttrBase () : attrid(ATTRID_NONE) { }
	virtual             ~XmlAttrBase () { }

	static XmlAttrBase * Create      (valtype_type valtype);

	virtual valtype_type GetValType  () const NOTHROW = 0;
	virtual void         Set         (CCoreXmlFile *binfile, VARIANT p) = 0;
	virtual void         Get         (CCoreXmlFile *binfile, VARIANT *p) const = 0;
    virtual void         ToString    (string& str) const = 0;
    virtual void         FromString  (const char * str) = 0;
};

typedef slist<XmlAttrBase*>     xmlattrs_type;
typedef xmlattrs_type::iterator xmlattrs_iterator;

template<int VALTYPE>
class XmlAttr;

// --------------------------- XmlObject

class XmlObject
{
public:
    xmlattrs_type      xmlattrs;
	bool               deleted;
    metaobjidpair_type parent;
    GUID               guid;

                    XmlObject           ();
	               ~XmlObject           ();
	
	void            CreateAttributes    (ICoreMetaObject *metaobject);
	void            DestroyAttributes   ();
    XmlAttrBase *   FindAttribute       (attrid_type attrid);
};

typedef hash_map<metaobjidpair_type, XmlObject,
	metaobjidpair_hashfunc, metaobjidpair_equalkey> xmlobjects_type;
typedef xmlobjects_type::iterator                   xmlobjects_iterator;
typedef map<metaid_type,attrid_type>                parentmap_type;

extern xmlobjects_iterator no_xmlobject;

// --------------------------- CCoreXmlFile

class ATL_NO_VTABLE CCoreXmlFile : 
	public CComObjectRootEx<CComSingleThreadModel>,
	public IDispatchImpl<ICoreStorage, &IID_ICoreStorage, &LIBID_CORELib>,
	public ISupportErrorInfoImpl<&IID_ICoreStorage>,
	public CComCoClass<CCoreXmlFile, &CLSID_CoreBinFile>
{
public:
	CCoreXmlFile();
	~CCoreXmlFile();

BEGIN_COM_MAP(CCoreXmlFile)
	COM_INTERFACE_ENTRY(ICoreStorage)
	COM_INTERFACE_ENTRY(IDispatch)
	COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()

DECLARE_REGISTRY_RESOURCEID(IDR_COREXMLFILE)

// ------- MetaProject

public:
	CComObjPtr<ICoreMetaProject> metaproject;
	bindata metaprojectid;

	STDMETHODIMP get_MetaProject(ICoreMetaProject **p);
	STDMETHODIMP put_MetaProject(ICoreMetaProject *p);

	void OpenMetaProject();
	void CloseMetaProject() NOTHROW;

// ------- MetaObject

public:
	CComObjPtr<ICoreMetaObject> metaobject;
	metaid_type metaid;

	STDMETHODIMP get_MetaObject(ICoreMetaObject **p);
	STDMETHODIMP put_MetaObject(ICoreMetaObject *p);

	STDMETHODIMP get_MetaID(metaid_type *p);
	STDMETHODIMP put_MetaID(metaid_type p);

	void OpenMetaObject();
	void CloseMetaObject() NOTHROW;

// ------- MetaAttribute

public:
	CComObjPtr<ICoreMetaAttribute> metaattribute;
	attrid_type attrid;

	STDMETHODIMP get_MetaAttribute(ICoreMetaAttribute **p);
	STDMETHODIMP put_MetaAttribute(ICoreMetaAttribute *p);

	STDMETHODIMP get_AttrID(attrid_type *p);
	STDMETHODIMP put_AttrID(attrid_type p);

	void OpenMetaAttribute();
	void CloseMetaAttribute() NOTHROW;

// ------- Attribute

public:
	typedef hash_map< XmlAttrBase*, CComVariant, 
		ptr_hashfunc<XmlAttrBase>, ptr_equalkey<XmlAttrBase> > undos_type;
	typedef undos_type::iterator undos_iterator;

	undos_type undos;

	STDMETHODIMP get_AttributeValue(VARIANT *p);
	STDMETHODIMP put_AttributeValue(VARIANT p);

// ------- Object

public:
	xmlobjects_type     objects;
	xmlobjects_iterator opened_object;

	//typedef hash_map<metaid_type, objid_type> maxobjids_type;
	//typedef maxobjids_type::iterator maxobjids_iterator;

	//maxobjids_type maxobjids;
    int nextobjid;

	slist<xmlobjects_iterator> deleted_objects;
	slist<xmlobjects_iterator> created_objects;

	struct resolve_type
	{
		xmlobjects_iterator obj;
		attrid_type attrid;
		metaobjidpair_type idpair;
	};

	typedef slist<resolve_type> resolvelist_type;
	resolvelist_type resolvelist;

	void InitObjID();

public:
	STDMETHODIMP OpenObject(objid_type objid);
	STDMETHODIMP CreateObject(objid_type *objid);
	STDMETHODIMP CloseObject() NOTHROW;

	STDMETHODIMP DeleteObject();
	STDMETHODIMP LockObject();
    
// ------- Project

public:
	string filename;    // holds the root file name without extension
    string filePath;    // holds the path
	bool   read_only;
	bool   intrans;
	bool   modified;

    void FillFileNameAndPath(BSTR connection); 

	bool IsOpened() const { return !filename.empty(); }
	bool InTransaction() const { return intrans; }

	void CancelProject() NOTHROW;
	void SaveProject();
	void LoadProject();

public:
	STDMETHODIMP OpenProject(BSTR connection, VARIANT_BOOL *ro_mode);
	STDMETHODIMP CreateProject(BSTR connection);
	STDMETHODIMP CloseProject( VARIANT_BOOL abort = VARIANT_FALSE) NOTHROW;
	STDMETHODIMP SaveProject(BSTR connection, VARIANT_BOOL keepoldname);
	STDMETHODIMP DeleteProject() { return E_NOTIMPL; }

	STDMETHODIMP BeginTransaction();
	STDMETHODIMP CommitTransaction();
	STDMETHODIMP AbortTransaction();

	STDMETHODIMP get_StorageType(long *p);

protected:
    parentmap_type  parentmap;

    void ReadObject         ( DOM_Element * element );
    void WriteObject        ( FILE * file, string indent, xmlobjects_iterator it );
    void FillParentMap      ();
    void SetParents         ();
    void SetPointers        ();
    void SetCollections     ();
};

// --------------------------- XmlAttr<VALTYPE_LONG>

template<>
class XmlAttr<VALTYPE_LONG> : public XmlAttrBase
{
public:
	XmlAttr() : a(0) { }

	long a;

	virtual valtype_type GetValType() const NOTHROW { return VALTYPE_LONG; }
	virtual void Set(CCoreXmlFile *binfile, VARIANT p)
	    { ASSERT( binfile != NULL ); binfile->modified = true; CopyTo(p, a); }

	virtual void Get         (CCoreXmlFile *binfile, VARIANT *p) const { CopyTo(a, p); }
    virtual void ToString    (string& str) const;
    virtual void FromString  (const char * str);
};

// --------------------------- XmlAttr<VALTYPE_REAL>

template<>
class XmlAttr<VALTYPE_REAL> : public XmlAttrBase
{
public:
	XmlAttr() : a(0) { }

	double a;

	virtual valtype_type GetValType() const NOTHROW { return VALTYPE_REAL; }
	virtual void Set(CCoreXmlFile *binfile, VARIANT p)
	{ ASSERT( binfile != NULL ); binfile->modified = true; CopyTo(p, a); }

	virtual void Get         (CCoreXmlFile *binfile, VARIANT *p) const { CopyTo(a, p); }
    virtual void ToString    (string& str) const;
    virtual void FromString  (const char * str);
};

// --------------------------- XmlAttr<VALTYPE_STRING>

template<>
class XmlAttr<VALTYPE_STRING> : public XmlAttrBase
{
public:
	CComBstrObj a;

	virtual valtype_type GetValType() const NOTHROW { return VALTYPE_STRING; }
	virtual void Set(CCoreXmlFile *binfile, VARIANT p)
	{ ASSERT( binfile != NULL ); binfile->modified = true; CopyTo(p, a); }

	virtual void Get         (CCoreXmlFile *binfile, VARIANT *p) const { CopyTo(a, p); }
    virtual void ToString    (string& str) const { CopyTo(a, str); }
    virtual void FromString  (const char * str)  { CopyTo(str, a); }
};

// --------------------------- XmlAttr<VALTYPE_BINARY>

template<>
class XmlAttr<VALTYPE_BINARY> : public XmlAttrBase
{
public:
	bindata a;

	virtual valtype_type GetValType() const NOTHROW { return VALTYPE_BINARY; }
	virtual void Set(CCoreXmlFile *binfile, VARIANT p)
	{ ASSERT( binfile != NULL ); binfile->modified = true; CopyTo(p, a); }

	virtual void Get         (CCoreXmlFile *binfile, VARIANT *p) const { CopyTo(a, p); }
    virtual void ToString    (string& str) const;
    virtual void FromString  (const char * str);
};

// --------------------------- XmlAttr<VALTYPE_LOCK>

template<>
class XmlAttr<VALTYPE_LOCK> : public XmlAttrBase
{
public:
	XmlAttr() : a(0) { }

	lockval_type a;

	virtual valtype_type GetValType() const NOTHROW { return VALTYPE_LOCK; }
	virtual void Set         (CCoreXmlFile *binfile, VARIANT p) { CopyTo(p, a); }
	virtual void Get         (CCoreXmlFile *binfile, VARIANT *p) const { CopyTo(a, p); }
    virtual void ToString    (string& str) const {}         // TODO
    virtual void FromString  (const char * str) { a = 0; }  // TODO
};

// --------------------------- XmlAttr<VALTYPE_POINTER>

template<>
class XmlAttr<VALTYPE_POINTER> : public XmlAttrBase
{
public:
	XmlAttr() : a(no_xmlobject) { }

	xmlobjects_iterator a;
    GUID                refered_objid;

	virtual valtype_type GetValType() const NOTHROW { return VALTYPE_POINTER; }
	void Set(CCoreXmlFile *binfile, xmlobjects_iterator a);
	virtual void Set         (CCoreXmlFile *binfile, VARIANT p);
	virtual void Get         (CCoreXmlFile *binfile, VARIANT *p) const;
    virtual void ToString    (string& str) const;
    virtual void FromString  (const char * str);
};

// --------------------------- XmlAttr<VALTYPE_COLLECTION>

template<>
class XmlAttr<VALTYPE_COLLECTION> : public XmlAttrBase
{
public:
	vector<xmlobjects_iterator> a;

	virtual valtype_type GetValType() const NOTHROW { return VALTYPE_COLLECTION; }
	virtual void Set         (CCoreXmlFile *binfile, VARIANT p) { ASSERT(false); }
	virtual void Get         (CCoreXmlFile *binfile, VARIANT *p) const;
    virtual void ToString    (string& str) const;
    virtual void FromString  (const char * str);
};

#endif//MGA_COREXMLFILE_H

--- NEW FILE: CoreXmlFile.rgs ---
HKCR
{
	Mga.CoreXmlFile.1 = s 'CoreXmlFile Class'
	{
		CLSID = s '{7281C07A-3E09-11D3-B2F7-715004D38590}'
	}
	Mga.CoreXmlFile = s 'CoreXmlFile Class'
	{
		CLSID = s '{7281C07A-3E09-11D3-B2F7-715004D38590}'
		CurVer = s 'Mga.CoreXmlFile.1'
	}
	NoRemove CLSID
	{
		ForceRemove {7281C07A-3E09-11D3-B2F7-715004D38590} = s 'CoreXmlFile Class'
		{
			ProgID = s 'Mga.CoreXmlFile.1'
			VersionIndependentProgID = s 'Mga.CoreXmlFile'
			ForceRemove 'Programmable'
			InprocServer32 = s '%MODULE%'
			{
				val ThreadingModel = s 'Apartment'
			}
			'TypeLib' = s '{9E9AAACF-28B8-11D3-B36C-0060082DF884}'
		}
	}
}



More information about the GME-commit mailing list