testexecfw/stf/stfext/testlibplugins/filelibplugin/src/stffiletestlibplugin.cpp
author Johnson Ma <johnson.ma@nokia.com>
Thu, 13 May 2010 17:42:48 +0800
changeset 3 a5f55a5789f3
parent 2 8bb370ba6d1d
permissions -rw-r--r--
Defect Fix: TeamTrack DEF145107

/*
* 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: This file contains the header file of the CAtsLogger 
* class.
*
*/

#include "stffiletestlibplugin.h"	
#include <f32file.h> 

_LIT(KSTFRunUtilsMakeReadWrite,"MakeReadWrite");
_LIT(KSTFRunUtilsCopyFile,"CopyFile");
_LIT(KSTFRunUtilsMkDir,"MkDir");
_LIT(KSTFRunUtilsDeleteFile,"DeleteFile");
_LIT(KSTFRunUtilsDelete,"Delete");
_LIT(KSTFRunUtilsDeleteDirectory,"DeleteDirectory");
EXPORT_C  CStfFileTestLibPlugin* LibEntryL()
    {
    CStfFileTestLibPlugin* self=CStfFileTestLibPlugin::NewL();
    return  self;
    }



//  Member Functions

CStfFileTestLibPlugin* CStfFileTestLibPlugin::NewL()
    {
    CStfFileTestLibPlugin* self = new (ELeave) CStfFileTestLibPlugin;
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop(self);
    return self;
    }
CStfFileTestLibPlugin::~CStfFileTestLibPlugin()
    {

    }




EXPORT_C TBool CStfFileTestLibPlugin::IsCommandSupported(const TDesC& aCommand)
    {
    TBool result=EFalse;
    if(aCommand==KSTFRunUtilsMakeReadWrite)
        {
        result=ETrue;
        }
    else if(aCommand==KSTFRunUtilsCopyFile)
        {
        result=ETrue;
        }
    else if(aCommand==KSTFRunUtilsMkDir)
        {
        result=ETrue;
        }
    else if(aCommand==KSTFRunUtilsDeleteFile)
        {
        result=ETrue;
        }
    else if(aCommand==KSTFRunUtilsDelete)
        {
        result=ETrue;
        }
    else if(aCommand==KSTFRunUtilsDeleteDirectory)
        {
        result=ETrue;
        }
    
    return result;
    }

EXPORT_C TInt CStfFileTestLibPlugin::ExecuteCommandL(const TDesC& aCommandLine) 
    {
    TInt err = 0;
    _LIT(KDefault,              "?:\\default");
    _LIT(KCDrive,               "?:\\"); 
    _LIT(KSTFBackslash,         "\\" );
    TBuf<10> defaultPath(KDefault);
    defaultPath.Replace(0, 2, _L("c:"));

    TBuf<3> cDrive(KCDrive);
    cDrive.Replace(0, 2, _L("c:"));

    RFs fS;
    User::LeaveIfError(fS.Connect() );
    CleanupClosePushL(fS);

    TLex lex(aCommandLine);
  //  lex.NextToken();
    TPtrC token(lex.NextToken());
    if(token.CompareF(KSTFRunUtilsCopyFile) == 0)
        {
        TPtrC file1=lex.NextToken();
        TPtrC file2=lex.NextToken();
        TParse source, dest;
        CFileMan* fMan = CFileMan::NewL(fS);
        CleanupStack::PushL(fMan);
        User::LeaveIfError(source.Set(file1, &defaultPath, NULL) );
        User::LeaveIfError(dest.Set(file2, &defaultPath, NULL) );
        TPtrC sourcefile=source.FullName();
        TPtrC destfile=dest.FullName();
        err=fMan->Copy(file1, file2, CFileMan::EOverWrite);
        User::LeaveIfError(err);
        CleanupStack::PopAndDestroy(fMan);
        }
    else if(token.CompareF(KSTFRunUtilsMkDir) == 0)
        {
        token.Set(lex.NextToken());
        TParse fileName;

        if (!token.Length())
            User::Leave(KErrPathNotFound);
        
        TPtrC lastChar(token.Mid(token.Length() - 1));
        if ( lastChar.CompareF(KSTFBackslash) != 0 )
            {
            TBuf<64> tempToken(token);
            tempToken.Append(KSTFBackslash);
            token.Set(tempToken);
            }

        User::LeaveIfError( fileName.Set(token, &cDrive, NULL) );
        err=fS.MkDir( fileName.DriveAndPath() );
        User::LeaveIfError( err );
        }
    else if(token.CompareF(KSTFRunUtilsDeleteFile) == 0 ||
             token.CompareF(KSTFRunUtilsDelete) == 0)
        {
        token.Set(lex.NextToken());
  
        CFileMan* fMan = CFileMan::NewL(fS);
        CleanupStack::PushL(fMan);
        err=fMan->Delete(token);
        User::LeaveIfError(err );
        CleanupStack::PopAndDestroy(fMan);
        }
    else if(token.CompareF(KSTFRunUtilsMakeReadWrite) == 0)
        {
        token.Set(lex.NextToken());
        TParse fileName;
        User::LeaveIfError(fileName.Set(token, &defaultPath, NULL) );
        err = fS.SetAtt(fileName.FullName(),0, KEntryAttReadOnly);
        if (err != KErrNone && err != KErrNotFound)
            User::Leave(err);
        }
    //It deletes the specified directory
    else if(token.CompareF(KSTFRunUtilsDeleteDirectory) == 0)
        {
        token.Set(lex.NextToken());
        TParse fileName;

        if (!token.Length())
            User::Leave(KErrPathNotFound);
        
        TPtrC lastChar(token.Mid(token.Length() - 1));
        if ( lastChar.CompareF(KSTFBackslash) != 0 )
            {
            TBuf<64> tempToken(token);
            tempToken.Append(KSTFBackslash);
            token.Set(tempToken);
            }

        CFileMan* fMan = CFileMan::NewL(fS);
        CleanupStack::PushL(fMan);

        User::LeaveIfError(fileName.Set(token, &cDrive, NULL) );
        err=fMan->RmDir( fileName.DriveAndPath() );
        User::LeaveIfError(err  );

        CleanupStack::PopAndDestroy(fMan);
        }
    
    fS.Close();
    CleanupStack::Pop(&fS);
    return err;
    }

CStfFileTestLibPlugin::CStfFileTestLibPlugin()
// note, CBase initialises all member variables to zero
    {
    }

void CStfFileTestLibPlugin::ConstructL()
    {
    // second phase constructor, anything that may leave must be constructed here
  
    }