diff -r 000000000000 -r f58d6ec98e88 aknlayoutcompiler/src/UpdateLayoutApi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/aknlayoutcompiler/src/UpdateLayoutApi.cpp Thu Dec 17 09:14:18 2009 +0200 @@ -0,0 +1,197 @@ +/* +* Copyright (c) 2002-2004 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: +* +* +*/ + + + +// disable "identifier was truncated to '255' characters in the browser information" warning +#pragma warning (disable:4786) +#include "UpdateLayoutApi.h" +#include +#include "Lay2Cdl.h" +#include "LayoutParse.h" +#include "LayoutCompilerErr.h" +#include +#include + +using namespace std; + +typedef LayoutProcessArgsErr UpdateLayoutApiArgsErr; + + +int UpdateLayoutApi::Process(const vector& args) + { + if (args.size() != 6) + throw UpdateLayoutApiArgsErr(); + + const string& cdlName = args[2]; + const string& layoutName = args[3]; + const string& legacyName = args[4]; + const string& newName = args[5]; + + UpdateLayoutApi(cdlName, layoutName, legacyName, newName); + + return 0; + } + +void UpdateLayoutApi::ShowHelp(ostream& stream) + { + stream << "UpdateLayoutApi " << endl; + } + +UpdateLayoutApi::UpdateLayoutApi(const std::string& aCdlName, const std::string& aLayoutName, const std::string& aLegacyName, const std::string& aNewName) +: iCdlName(aCdlName), iLegacyName(aLegacyName), iInterface(0), iLayout(0), iLegacy(0), iNew(0), iInterfaceChanged(false) + { + LoadFiles(aLayoutName, aNewName); + MergeAndCheck(); + ProcessNewApi(); + WriteFiles(); + Report(); + } + +UpdateLayoutApi::~UpdateLayoutApi() + { + delete iInterface; + delete iLayout; + delete iLegacy; + delete iNew; + } + +void UpdateLayoutApi::LoadFiles(const std::string& aLayoutName, const std::string& aNewName) + { + CCdlTkCdlFileParser cdlParser(iCdlName); + auto_ptr iface(cdlParser.LoadAndParse(false)); + iInterface = iface.get(); + iface.release(); + + auto_ptr layout(TLayParseLayout::Parse(aLayoutName)); + iLayout = layout.get(); + layout.release(); + + auto_ptr legacy(TLayParseLayout::Parse(iLegacyName)); + iLegacy = legacy.get(); + legacy.release(); + + auto_ptr newLay(TLayParseLayout::Parse(aNewName)); + iNew = newLay.get(); + newLay.release(); + } + +void UpdateLayoutApi::MergeAndCheck() + { + TLayout combined(*iLayout); + combined.Merge(TLayout::KMergeModeMerge, *iLegacy); + auto_ptr iface(LayoutToCdl::LayoutToInterface(combined)); + InterfaceCheck check; + CCdlTkApiChecker process(*iInterface, *iface, check); + process.Process(); + } + +void UpdateLayoutApi::ProcessNewApi() + { + auto_ptr newIface(LayoutToCdl::LayoutToInterface(*iNew)); + CCdlTkApiChecker process(*iInterface, *newIface, *this); + process.Process(); + if (iInterfaceChanged) + { + CCdlTkInterface* curExt = iInterface->UltimateExtension(); + if (!iExt) + iExt = new CCdlTkInterface(); + curExt->SetExtension(iExt); + iExt->SetBase(curExt); + iExt->Header().SetVersion(CCdlTkInterfaceHeader::CVersion(curExt->Header().Version().Major(), curExt->Header().Version().Minor()+1)); + } + } + +void UpdateLayoutApi::WriteFiles() + { + if (iInterfaceChanged) + { + } + if (iLegacyUpdated) + { + } + } + +void UpdateLayoutApi::Report() + { + if (!iReport.empty()) + cout << iReport; + } + +void UpdateLayoutApi::StartCheck() + { + } + +void UpdateLayoutApi::CheckComplete() + { + } + +void UpdateLayoutApi::ApiInBoth(const CCdlTkApi& aApi) + { + } + +void UpdateLayoutApi::ApiNotInLeft(const CCdlTkApi& aApi) + { + // new API present - add it to the extension + iInterfaceChanged = true; + iExt->ApiList().push_back(aApi.Clone(*iExt)); + } + +void UpdateLayoutApi::ApiNotInRight(const CCdlTkApi& aApi) + { + // old API not present - rename it in the API, add data to legacy. + iInterfaceChanged = true; + + string oldName = aApi.Name(); + CCdlTkApi* api = iInterface->ApiList().Find(oldName); + + CCdlTkInterfaceHeader& header = iInterface->UltimateExtension()->Header(); + stringstream newName; + newName << oldName << "_V" << header.Version().Major() << "_" << header.Version().Minor(); + + api->SetName(newName.str()); + AddDataToLegacy(oldName, newName.str()); + } + +void UpdateLayoutApi::AddDataToLegacy(const std::string& /*aOldName*/, const std::string& /*aNewName*/) + { + iLegacyUpdated = true; + } + + +void UpdateLayoutApi::InterfaceCheck::StartCheck() + { + } + +void UpdateLayoutApi::InterfaceCheck::CheckComplete() + { + } + +void UpdateLayoutApi::InterfaceCheck::ApiInBoth(const CCdlTkApi&) + { + } + +void UpdateLayoutApi::InterfaceCheck::ApiNotInLeft(const CCdlTkApi&) + { + throw false; + } + + void UpdateLayoutApi::InterfaceCheck::ApiNotInRight(const CCdlTkApi&) + { + throw false; + }