--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/metadataengine/server/inc/mdsimportexport.h Mon Jan 18 20:34:07 2010 +0200
@@ -0,0 +1,526 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Metadata import/export metadata and schema files
+*
+*/
+
+#ifndef __MDSIMPORTEXPORT_H__
+#define __MDSIMPORTEXPORT_H__
+
+#include <e32base.h>
+#include <s32file.h>
+#include <flogger.h>
+
+#include "mdccommon.h"
+
+
+class CMdsNamespaceDef;
+class CMdsObjectDef;
+class CMdsRelationDef;
+class CMdsEventDef;
+class CCnvCharacterSetConverter;
+class CMdsClauseBuffer;
+class CMdsSchema;
+class CMdSSqlObjectManipulate;
+class CMdCSerializationBuffer;
+class CDesC16ArrayFlat;
+class RRowData;
+
+// declarations
+const TInt KMdsMaxLineLenght = 1024;
+const TInt KPropertyMinValue = 1;
+const TInt KPropertyMaxValue = 2;
+const TInt KPropertyDefValue = 3;
+
+/**
+ * Metadata schema container within server
+ *
+ * This class is responsible for read MDE schema file and store all
+ * information into one memory place.
+ *
+ */
+class CMdsImportExport : public CBase
+ {
+// friend class CMdsSchema;
+public:
+ /**
+ * Create new SchemaImport class
+ * @return new created class
+ */
+ static CMdsImportExport* NewL();
+
+ /**
+ * Create new SchemaImport class
+ * @return new created class
+ */
+ static CMdsImportExport* NewLC();
+
+ /**
+ * Destructor
+ */
+ virtual ~CMdsImportExport();
+
+ /**
+ * Reads and process schema file to classess hierarchy.
+ *
+ * @param aFileName filename to read from
+ * @param aSchema schema where to read file ontology
+ */
+ void ImportSchemaFromFileL( const TDesC& aFileName, CMdsSchema& aSchema, TUint32 aVendorId );
+
+ /**
+ * Reads schema from DB
+ *
+ * @param aConnection connection to DB
+ * @param aSchema returning schema
+ */
+ void ImportSchemaFromDBL( CMdsSchema& aSchema );
+
+ /**
+ * Checks for schema version information
+ * @return ETrue if match, otherwise EFalse
+ */
+ TBool ImportCheckVersionInfoL();
+
+ /**
+ * Import items from file and add them do DB
+ *
+ * @return failed count
+ */
+ TInt ImportMetadataL( CMdSSqlObjectManipulate& aManipulate, CMdsSchema& aSchemaNew, const TDesC16& aFileName );
+
+ /**
+ * Export all (without confidential) items to file
+ */
+ void ExportMetadataL( CMdsSchema& aSchemaNew, const TDesC16& aFileName,
+ CMdCSerializationBuffer& aItems );
+
+protected:
+
+
+ /*
+ IMPORT SCHEMA FILE
+ */
+
+ /**
+ * Imports a single schema file line
+ * @param aParser a TLex8 object that parses a line of stream
+ */
+ void ImportSchemaLineL( TLex8& aParser );
+
+ /**
+ * imports a namespace
+ * @param aParser the remaining parameters
+ */
+ void ImportSchemaNamespaceL( TLex8& aParser );
+
+ /**
+ * imports an object def
+ * @param aParser the remaining parameters
+ */
+ void ImportSchemaObjectDefL( TLex8& aParser );
+
+ /**
+ * imports a property definition
+ * @param aParser the remaining parameters
+ */
+ void ImportSchemaPropertyDefL( TLex8& aParser );
+
+ /**
+ * imports a relation definition
+ * @param aParser the remaining parameters
+ */
+ void ImportSchemaRelationDefL( TLex8& aParser );
+
+ /**
+ * imports a event definition
+ * @param aParser the remaining parameters
+ */
+ void ImportSchemaEventDefL( TLex8& aParser );
+
+ /**
+ * imports a version number
+ * @param aParser the remaining parameters
+ */
+ void ImportSchemaVersionL( TLex8& aParser );
+
+ /**
+ * Checks that no more parameters are given in the current schema line.
+ * @param aParser the remaining parameters
+ */
+ void CheckNoMoreNumericParametersL( TLex8& aParser );
+
+ /*
+ IMPORT METADATA FILE
+ */
+ /**
+ * Reads a single metadata file line
+ * @return if reading is still possible (not end of file)
+ */
+ TBool ReadMetadataFileLineL();
+
+ /**
+ * add object to DB
+ */
+ void AddObjectToDBL( CMdSSqlObjectManipulate& aManipulate, CMdsNamespaceDef* aNamespaceDef );
+
+ /**
+ * Imports a single metadata item
+ * @param aParser a TLex8 object that parses a line of stream
+ */
+ void ImportMetadataItemL( TLex8& aParser, CMdSSqlObjectManipulate& aManipulate );
+
+ /**
+ * imports an metadata file object
+ * @param aParser the remaining parameters
+ */
+ void ImportMetadataFileObjectL( TLex8& aParser, CMdSSqlObjectManipulate& aManipulate );
+
+ /**
+ * imports an metadata file property
+ * @param aParser the remaining parameters
+ */
+ TMdCOffset ImportMetadataFilePropertyL( TLex8& aParser, TMdCOffset aFreespaceOffset );
+
+ /**
+ * imports an metadata file freetext
+ * @param aParser the remaining parameters
+ */
+ void ImportMetadataFileFreeTextL( TLex8& aParser, CDesC16ArrayFlat& aFreeTextArray );
+
+ /**
+ * imports an metadata file relation
+ * @param aParser the remaining parameters
+ */
+ void ImportMetadataFileRelationL( TLex8& aParser, CMdSSqlObjectManipulate& aManipulate );
+
+ /**
+ * imports an metadata file event
+ * @param aParser the remaining parameters
+ */
+ void ImportMetadataFileEventL( TLex8& aParser, CMdSSqlObjectManipulate& aManipulate );
+
+
+ /*
+ EXPORT MATADATA FILE
+ */
+ // objects
+ void ExportMetadataMakeSqlObjectClauseL( const CMdsNamespaceDef& aNamespaceDef, const CMdsObjectDef& aObjectDef,
+ CMdsClauseBuffer& aClause, RRowData& aDataRow );
+
+ void ExportMetadataMakeFreeTextSqlClauseL( const CMdsNamespaceDef& aNamespaceDef,
+ CMdsClauseBuffer& aFreeTextClause, RRowData& aFreeTextRow );
+
+ void ExportMetadataWriteObjectInfoL( const CMdsNamespaceDef& aNamespaceDef, const CMdsObjectDef& aObjectDef,
+ CMdsClauseBuffer& aClause, RRowData& aDataRow,
+ CMdsClauseBuffer& aFreeTextClause, RRowData& aFreeTextRow );
+
+ // relations
+ void ExportMetadataMakeSqlRelationClauseL( const CMdsNamespaceDef& aNamespaceDef,
+ CMdsClauseBuffer& aClause, RRowData& aDataRow );
+
+ void ExportMetadataWriteRelationInfoL( const CMdsNamespaceDef& aNamespaceDef, const CMdsRelationDef& aRelationDef,
+ CMdsClauseBuffer& aClause, RRowData& aDataRow );
+
+ // events
+ void ExportMetadataMakeSqlEventClauseL( const CMdsNamespaceDef& aNamespaceDef,
+ CMdsClauseBuffer& aClause, RRowData& aDataRow );
+
+ void ExportMetadataWriteEventInfoL( const CMdsNamespaceDef& aNamespaceDef, const CMdsEventDef& aEventDef,
+ CMdsClauseBuffer& aClause, RRowData& aDataRow );
+
+
+ //
+ // Helpers
+ //
+
+ /**
+ * Parses a safe TUint32 from the lexical parser.
+ * The type is assumed to be decimal.
+ * @param aValue parsed TUint32 value
+ * @param aParser the remaining patameters
+ * @return system wide error code
+ */
+ TInt ImportUInt32( TUint32& aValue, TLex8& aParser );
+
+ /**
+ * Parses mediaID from the lexical parser.
+ * The type is assumed to be decimal.
+ * @param aValue parsed TUint32 value
+ * @param aParser the remaining patameters
+ * @param aDriveLetter drive letter of the drive where the file under processing is located
+ * @return system wide error code
+ */
+ TInt ImportMediaId( TUint32& aValue, TLex8& aParser, TChar& aDriveLetter );
+
+ /**
+ * Parses a safe TInt64 from the lexical parser.
+ * The type is assumed to be decimal.
+ * @param aValue parsed TInt64 value
+ * @param aParser the remaining patameters
+ * @return system wide error code
+ */
+ TInt ImportInt64( TInt64& aValue, TLex8& aParser );
+
+ /**
+ * Parses a safe TTime from the lexical parser.
+ * implemented using GetNumericL template method.
+ * @param aValue parsed TTime value
+ * @param aParser the remaining patameters
+ * @return system wide error code
+ */
+ TInt ImportTime( TTime& aValue, TLex8& aParser );
+
+ /**
+ * Parses a safe descriptor from the lexical parser.
+ * @param aValue parsed descriptor
+ * @param aParser the remaining patameters
+ * @return system wide error code
+ */
+ TInt ImportText( TDes16& aBuffer, TLex8& aParser );
+
+ /**
+ * Parses a safe number type from given lexical parser.
+ * The number type is given in a template parameter.
+ * @param aValue parsed value of number type
+ * @param aParser the remaining patameters
+ * @return system wide error code
+ */
+ template<class NumberType>
+ TInt ImportNum( NumberType& aValue, TLex8& aParser )
+ {
+ TLex8 tokenParser( aParser.NextToken() );
+ aParser.SkipSpace();
+ if ( tokenParser.Val( aValue ) != KErrNone )
+ {
+ return KErrCorrupt;
+ }
+ return KErrNone;
+ }
+
+ TInt ImportNum( TReal32& aValue, TLex8& aParser )
+ {
+ TLex8 tokenParser( aParser.NextToken() );
+ aParser.SkipSpace();
+ if ( tokenParser.Val( aValue,TChar(TUint('.')) ) != KErrNone )
+ {
+ return KErrCorrupt;
+ }
+ return KErrNone;
+ }
+
+ TInt ImportNum( TReal64& aValue, TLex8& aParser )
+ {
+ TLex8 tokenParser( aParser.NextToken() );
+ aParser.SkipSpace();
+ if ( tokenParser.Val( aValue,TChar(TUint('.')) ) != KErrNone )
+ {
+ return KErrCorrupt;
+ }
+ return KErrNone;
+ }
+ /**
+ * Converts from UTF8 -> Unicode
+ * @param aUtf8 input descriptor
+ * @param aBuffer result buffer
+ * @return descriptor of TDesC16 type
+ */
+ TDesC16& Conv8To16( const TDesC8& aUtf8, TDes16& aBuffer );
+
+ /**
+ * Converts from Unicode -> UTF8
+ * @param aUnicode input descriptor
+ * @param aBuffer result buffer
+ * @return descriptor of TDesC8 type
+ */
+ TDesC8& Conv16To8( const TDesC16& aUnicode, TDes8& aBuffer );
+
+
+ /** PROPERTY READING HELPER FUNCTIONS */
+
+ /**
+ * Parses Uint32 value or check for one of min, max or def
+ * constant value
+ * @return depending on result:
+ * 1 for min
+ * 2 for max
+ * 3 for default
+ * -value for errors
+ */
+ TInt CheckForConstant( TLex8& aParser );
+
+ /**
+ * Parses Uint32 value or check for one of min, max or def
+ * constant value
+ */
+ TInt ImportPropertyUInt32( TUint32& aValue, TLex8& aParser );
+
+ /**
+ * Parses a safe TInt64 from the lexical parser.
+ * The type is assumed to be decimal.
+ * @param aValue parsed TInt64 value
+ * @param aParser parser
+ */
+ TInt ImportPropertyInt64( TInt64& aValue, TLex8& aParser );
+
+ /**
+ * Parses a safe TTime from the lexical parser.
+ * implemented using GetNumericL template method.
+ * @param aValue parsed TTime value
+ * @param aParser the remaining patameters
+ * @return system wide error code
+ */
+ TInt ImportPropertyTime( TTime& aValue, TLex8& aParser );
+
+ /**
+ * Parses a safe number type from given lexical parser.
+ * The number type is given in a template parameter.
+ * @param aValue parsed value of number type
+ * @param aParser the remaining patameters
+ * @return system wide error code
+ */
+ template<class NumberType>
+ TInt SetMinMaxDefValueL( TInt aError, NumberType& aValue,
+ const NumberType& aMinValue, const NumberType& aMaxValue,
+ const NumberType& aDefValue )
+ {
+ if ( aError < KErrNone )
+ {
+ return aError;
+ }
+ if ( aError == KPropertyMinValue)
+ {
+ aValue = aMinValue;
+ return KErrNone;
+ }
+ else if ( aError == KPropertyMaxValue )
+ {
+ aValue = aMaxValue;
+ return KErrNone;
+ }
+ else if ( aError == KPropertyDefValue )
+ {
+ aValue = aDefValue;
+ return KErrNone;
+ }
+ return KErrArgument;
+ }
+private:
+
+ CMdsImportExport();
+
+ void ImportNamespaceFromDBL();
+ /*
+ * 2nd phase constructor
+ */
+ void ConstructL();
+
+ /**
+ * Data import error logger
+ * @param aMessage a message to be logged
+ */
+ void LogError( const TDesC& aMessage );
+
+private:
+ /**
+ * Store every namespace read from schema file.
+ */
+ CMdsSchema* iSchema;
+
+ /**
+ * default schema
+ * not own - do not delete
+ */
+ CMdsSchema* iDefaultSchema;
+
+ /**
+ * Last read objectdef, where new properties should go.
+ * Just for speed access to property add access time.
+ * !! DO NOT DELETE !! - NOT OWN
+ */
+ CMdsObjectDef* iLastObjectDef;
+
+ /**
+ * Unicode<->UTF8 converter
+ */
+ CCnvCharacterSetConverter* iConverter;
+
+ /** logs import errors to file */
+ RFileLogger iLog;
+
+ /**
+ * File stream used for reading the import file
+ */
+ RFileReadStream iReadStream;
+
+ /**
+ * File stream used for reading the import file
+ */
+ RFileWriteStream iWriteStream;
+
+
+ /**
+ * Handle to actual processing file
+ */
+ RFs iFs;
+
+ /**
+ * current parsing filename
+ */
+ TFileName iFileName;
+
+ /**
+ * current verdor id
+ */
+ TUint32 iVendorId;
+
+ /**
+ * current parsing line buffer
+ */
+ TBuf8<KMdsMaxLineLenght> iLine;
+
+ /**
+ * buffer for reading metadata file
+ */
+ CMdCSerializationBuffer* iBuffer;
+
+ /**
+ * indicated if last line was processed
+ */
+ TBool iLastLineProcessed;
+
+ /**
+ * current parsing line number
+ */
+ TInt iLineNumber;
+
+ /**
+ * import failed count
+ */
+ TUint32 iFailed;
+
+ enum TImportVersionFlags
+ {
+ EVersionNone = 0x0000,
+ EVersionAlreadyRead = 0x0001,
+ };
+ TUint32 iVersionFlags;
+
+ TInt iLastDriveNumber;
+
+ TVolumeInfo iLastVolumeInfo;
+ };
+
+
+#endif // __MDSIMPORTEXPORT_H__