diff -r 87c71b25c937 -r 88ee4cf65e19 remotestoragefw/remotefileengine/src/rsfwmkdirstatemachine.cpp --- a/remotestoragefw/remotefileengine/src/rsfwmkdirstatemachine.cpp Wed Jun 09 10:37:35 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,223 +0,0 @@ -/* -* Copyright (c) 2005-2006 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: State machine for creating directories -* -*/ - - -#include "rsfwmkdirstatemachine.h" -#include "rsfwfileentry.h" -#include "rsfwfiletable.h" -#include "rsfwinterface.h" -#include "rsfwfileengine.h" -#include "mdebug.h" -#include "rsfwdirentattr.h" -#include "rsfwvolumetable.h" - -// Make dir - -// ---------------------------------------------------------------------------- -// CRsfwMkDirStateMachine::CRsfwMkDirStateMachine -// ---------------------------------------------------------------------------- -// -CRsfwMkDirStateMachine::CRsfwMkDirStateMachine() - { - } - -// ---------------------------------------------------------------------------- -// CRsfwMkDirStateMachine::~CRsfwMkDirStateMachine -// ---------------------------------------------------------------------------- -// -CRsfwMkDirStateMachine::~CRsfwMkDirStateMachine() - { - delete iDirEntAttr; - } - -// ---------------------------------------------------------------------------- -// CRsfwMkDirStateMachine::CompleteRequestL -// ---------------------------------------------------------------------------- -// -CRsfwRfeStateMachine::TState* CRsfwMkDirStateMachine::CompleteRequestL(TInt aError) - { - if (iKidCreated && aError) - { - if ( aError == KErrNotFound ) - { - User::Leave( KErrNotFound ); - } - delete iKidFep; - iKidFep = NULL; - } - - // it may happen by chance that the new name is equal to iLastFailedLookup value - FileEngine()->ResetFailedLookup(); - - CompleteAndDestroyState()->SetErrorCode(aError); - return CompleteAndDestroyState(); - } - - - -// Check if exists - - -// ---------------------------------------------------------------------------- -// CRsfwMkDirStateMachine::TCheckIfExistsState::TCheckIfExistsState -// ---------------------------------------------------------------------------- -// -CRsfwMkDirStateMachine:: -TCheckIfExistsState::TCheckIfExistsState(CRsfwMkDirStateMachine* aParent) - : iOperation(aParent) - { - } - -// ---------------------------------------------------------------------------- -// CRsfwMkDirStateMachine::TCheckIfExistsState::EnterL -// ---------------------------------------------------------------------------- -// -void CRsfwMkDirStateMachine::TCheckIfExistsState::EnterL() - { - TRfeMkdirInArgs* inArgs = - static_cast(iOperation->iInArgs); - TPtrC kidName(inArgs->iEntry.iName); - - iOperation->iKidFep = NULL; - iOperation->iKidCreated = EFalse; - - // the parent to which we are making - if (!iOperation->Node()) - { - User::Leave(KErrNotFound); - } - - DEBUGSTRING16(("making directory '%S' in fid %d", - &kidName, - iOperation->Node()->Fid().iNodeId)); - - // Do we know about the kid yet? - iOperation->iKidFep = iOperation->Node()->FindKidByName(kidName); - if (!iOperation->iKidFep) - { - // This is either a completely new directory, - // or a directory that we have not yet created a file entry for. - // (should always happen) - if (!iOperation->Volumes()->EnsureMetadataCanBeAddedL(iOperation->Node())) - { - User::Leave(KErrNoMemory); - } - iOperation->iKidFep = CRsfwFileEntry::NewL(kidName, iOperation->Node()); - iOperation->iKidCreated = ETrue; - } - - iOperation->FileEngine()->GetAttributesL(*iOperation->iKidFep, - iOperation->iDirEntAttr, - KNodeTypeDir, - iOperation); - } - -// ---------------------------------------------------------------------------- -// CRsfwMkDirStateMachine::TCheckIfExistsState::CompleteL -// ---------------------------------------------------------------------------- -// -CRsfwMkDirStateMachine::TState* -CRsfwMkDirStateMachine::TCheckIfExistsState::CompleteL() - { - // GetAttributes returned KErrNone - // directory exist and we return KErrAlreadyExitsts - return iOperation->CompleteRequestL(KErrAlreadyExists); - } - -// ---------------------------------------------------------------------------- -// CRsfwMkDirStateMachine::TCheckIfExistsState::ErrorL -// ---------------------------------------------------------------------------- -// -CRsfwMkDirStateMachine::TState* -CRsfwMkDirStateMachine::TCheckIfExistsState::ErrorL(TInt /*aCode*/) - { - // GetAttributes returned error - - // directory does not exists, let's create it - - return new CRsfwMkDirStateMachine::TMakeDirectoryState(iOperation); - } - - - -// Make directory - -// ---------------------------------------------------------------------------- -// CRsfwMkDirStateMachine::TMakeDirectoryState::TMakeDirectoryState -// ---------------------------------------------------------------------------- -// -CRsfwMkDirStateMachine:: -TMakeDirectoryState::TMakeDirectoryState(CRsfwMkDirStateMachine* aParent) - : iOperation(aParent) - { - } - -// ---------------------------------------------------------------------------- -// CRsfwMkDirStateMachine::TMakeDirectoryState::EnterL -// ---------------------------------------------------------------------------- -// -void CRsfwMkDirStateMachine::TMakeDirectoryState::EnterL() - { - // Make the directory - if (!iOperation->FileEngine()->Disconnected()) - { - HBufC* kidPath = - iOperation->FileEngine()->FullNameLC(*iOperation->iKidFep); - iOperation->FileEngine()->RemoteAccessL()->MakeDirectoryL(*kidPath, - iOperation); - CleanupStack::PopAndDestroy(kidPath); - } - } - -// ---------------------------------------------------------------------------- -// CRsfwMkDirStateMachine::TMakeDirectoryState::CompleteL -// ---------------------------------------------------------------------------- -// -CRsfwMkDirStateMachine::TState* -CRsfwMkDirStateMachine::TMakeDirectoryState::CompleteL() - { - iOperation->iKidFep->SetType(KNodeTypeDir); - iOperation->FileEngine()->SetupAttributes(*iOperation->iKidFep); - - // Attach the kid - if (iOperation->iKidCreated) - { - iOperation->FileEngine()->iFileTable->AddL(iOperation->iKidFep); - iOperation->Node()->AddKid(*iOperation->iKidFep); - } - - // Create an empty container file locally - iOperation->FileEngine()->CreateContainerFileL(*iOperation->iKidFep); - iOperation->iKidFep->SetCached(ETrue); - iOperation->iKidFep->SetAttribValidationTime(); - - // Refresh parent directory next time it is accessed - iOperation->Node()->SetLocallyDirty(); - - return iOperation->CompleteRequestL(KErrNone); - } - -// ---------------------------------------------------------------------------- -// CRsfwMkDirStateMachine::TMakeDirectoryState::ErrorL -// ---------------------------------------------------------------------------- -// -CRsfwMkDirStateMachine::TState* -CRsfwMkDirStateMachine::TMakeDirectoryState::ErrorL(TInt aCode) - { - DEBUGSTRING(("remote mkdir failed!")); - return iOperation->CompleteRequestL(aCode); - } -