string DeleteCommand::Undo ( ) { executionCounter++; Controller * controller = Controller::GetInstance( ); vector<IdSet>::iterator agregatesIterator = parentAgregates.begin( ); // For each object that was deleted // (and its corresponding parent agregates) for ( IdSet::iterator it = targets.begin( ); it != targets.end( ); ++it ) { // Add it back to the document controller->AddIdToDocument( *it ); // And add it back in all agregates that it used // to be part of Agregate * currentAgregate; for ( IdSet::iterator jt = agregatesIterator->begin( ); jt != agregatesIterator->end( ); ++jt ) { currentAgregate = (Agregate *) controller->GetObjectById( *jt ); currentAgregate->AddComponent( *it ); } agregatesIterator++; } return STATUS_OK; }
string DeleteCommand::Execute ( ) { executionCounter++; Controller * controller = Controller::GetInstance( ); IdSet allAgregates = controller->GetAllAgregatesInDocument( ); vector<IdSet>::iterator parentsIterator = parentAgregates.begin( ); // For each object to delete for ( IdSet::iterator it = targets.begin( ); it != targets.end( ); ++it ) { // Remove it from the document controller->RemoveObjectFromDocument( *it ); // Find all agregates containing the deleted object // in order to remember them Agregate * currentAgregate; for ( IdSet::iterator jt = allAgregates.begin( ); jt != allAgregates.end( ); ++jt ) { currentAgregate = (Agregate *) controller->GetObjectById( *jt ); if ( currentAgregate->Contains( *it ) ) { currentAgregate->RemoveComponent( *it ); parentsIterator->insert( *jt ); } } parentsIterator++; } return STATUS_OK; }