--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsstar/wsstarpolicy/src/wspolicywriter.cpp Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,388 @@
+/*
+* 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:
+*
+*/
+
+
+
+
+
+
+
+#include "wspolicywriter.h"
+#include "wspolicyreader.h"
+
+#include "policyassertion.h"
+#include "andcompositeassertion.h"
+#include "xorcompositeassertion.h"
+#include "assertion.h"
+#include "primitiveassertion.h"
+#include "policyreferenceassertion.h"
+using namespace WSPolicy;
+using namespace PolicyWriter;
+
+CWSPolicyWriter* CWSPolicyWriter::NewL()
+{
+ CWSPolicyWriter* pSelf = CWSPolicyWriter::NewLC();
+ CleanupStack::Pop(pSelf);
+ return pSelf;
+
+}
+CWSPolicyWriter* CWSPolicyWriter::NewLC()
+{
+ CWSPolicyWriter* pSelf = new (ELeave) CWSPolicyWriter();
+ CleanupStack::PushL(pSelf);
+ pSelf->ConstructL();
+ return pSelf;
+
+}
+CWSPolicyWriter::~CWSPolicyWriter()
+{
+ iNamespcaes.Reset();
+}
+CWSPolicyWriter::CWSPolicyWriter():iNamespcaes(ETrue,ETrue)
+{
+}
+void CWSPolicyWriter::ConstructL()
+{
+count = 0;
+}
+
+TPtrC8 CWSPolicyWriter::WriteToBufL(CBufBase& aBuf, CPolicyAssertion* aEle)
+ {
+ RBufWriteStream bufWs(aBuf);
+ CleanupClosePushL(bufWs);
+ WritePolicyL(aEle, bufWs);
+ CleanupStack::PopAndDestroy(); // bufWs.Close();
+// TPtrC8 p = aBuf.Ptr(0);
+// TInt size(p.Length());
+ iNamespcaes.Reset();
+ return aBuf.Ptr(0);
+ }
+HBufC8* CWSPolicyWriter::WriteAllAsXMlL(CPolicyAssertion* aPolicy)
+{
+ if(!aPolicy)
+ return NULL;
+
+ CBufFlat *pBuf = CBufFlat::NewL(128);
+ CleanupStack::PushL(pBuf);
+ TPtrC8 p = WriteToBufL(*pBuf, aPolicy);
+
+ TInt size(p.Length());
+ HBufC8* pRet = NULL; //p.AllocL();
+
+ if (size > 0)
+ {
+ pRet = HBufC8::NewLC(size);
+ TPtr8 retP = pRet->Des();
+ retP.Copy(p.Ptr(),size);
+ CleanupStack::Pop(); //pRet
+ WriteToFileAllL(retP);
+ }
+
+ CleanupStack::PopAndDestroy(); // pBuf;
+ iNamespcaes.Reset();
+ return pRet;
+}
+HBufC8* CWSPolicyWriter::WriteAllAsXmlL(CSenElement* /*aXml*/)
+{
+return NULL;
+}
+
+TInt CWSPolicyWriter::WritePolicyL(CPolicyAssertion* aEle, RWriteStream& aWriteStream)
+{
+ aWriteStream.WriteL(KStartElement);
+ aWriteStream.WriteL(KWspPolicyPrefix);
+ TPtrC8 name(KSenXmlNsAttNamePlusColonWsp);
+ if(IsNamespaceAdded(name) == KErrNotFound)
+ {
+ aWriteStream.WriteL(KSenXmlNsAttNamePlusColonWsp); //namespace
+ aWriteStream.WriteL(KSenEqualsDblQuot);
+ aWriteStream.WriteL(KWsPolicyNsUri); //namespace
+ aWriteStream.WriteL(KSenDblQuot);
+ TPtrC8 nameuri(KWsPolicyNsUri);
+ AddNameSpaceL(name, nameuri); //codescannerwarnings
+ }
+
+/*
+ if (policy.getId() != null) {
+
+ writer.writeNamespace(PolicyConstants.WSU_NAMESPACE_PREFIX,
+ PolicyConstants.WSU_NAMESPACE_URI);
+ writer.setPrefix(PolicyConstants.WSU_NAMESPACE_PREFIX,
+ PolicyConstants.WSU_NAMESPACE_URI);
+
+ writer.writeAttribute("wsu", PolicyConstants.WSU_NAMESPACE_URI,
+ "Id", policy.getId());
+ }
+*/
+ RPolicyTerms terms = aEle->GetTerms();
+
+ if(terms.Count() > 0)
+ {
+ aWriteStream.WriteL(KSenGreaterThan);
+ for (TInt i = 0; i< terms.Count(); i++)
+ {
+ MAssertion* term = terms[i];
+ WriteAssertionL(term, aWriteStream);
+ }
+ }
+ else
+ {
+ aWriteStream.WriteL(KSenGreaterThan);
+ }
+
+
+ aWriteStream.WriteL(KSenLessThanSlash);
+ aWriteStream.WriteL(KWspPolicyPrefix);
+ aWriteStream.WriteL(KSenGreaterThan);
+
+ return KErrNone;
+}
+TInt CWSPolicyWriter::WriteAndAssertionL(CAndCompositeAssertion* aEle, RWriteStream& aWriteStream)
+{
+ aWriteStream.WriteL(KStartElement);
+ aWriteStream.WriteL(KWspAndPrefix);
+ aWriteStream.WriteL(KSenGreaterThan);
+ RPolicyTerms terms = aEle->GetTerms();
+
+ if(terms.Count() > 0)
+ {
+ WriteTermsL(terms, aWriteStream);
+ }
+
+ aWriteStream.WriteL(KSenLessThanSlash);
+ aWriteStream.WriteL(KWspAndPrefix);
+ aWriteStream.WriteL(KSenGreaterThan);
+
+ return KErrNone;
+}
+TInt CWSPolicyWriter::WriteXorAssertionL(CXorCompositeAssertion* aEle, RWriteStream& aWriteStream)
+{
+ aWriteStream.WriteL(KStartElement);
+ aWriteStream.WriteL(KWspXorPrefix);
+ aWriteStream.WriteL(KSenGreaterThan);
+ RPolicyTerms terms = aEle->GetTerms();
+
+ if(terms.Count() > 0)
+ {
+ WriteTermsL(terms, aWriteStream);
+ }
+
+
+ aWriteStream.WriteL(KSenLessThanSlash);
+ aWriteStream.WriteL(KWspXorPrefix);
+ aWriteStream.WriteL(KSenGreaterThan);
+ return KErrNone;
+}
+TInt CWSPolicyWriter::WriteAssertionL(MAssertion* aEle, RWriteStream& aWriteStream)
+{
+ if(!aEle)
+ return KErrNone;
+
+ if (aEle->Type() == EPrimitiveType)
+ {
+ WritePrimitiveAssertionL((CPrimitiveAssertion*) aEle, aWriteStream);
+
+ }
+ else if (aEle->Type() == ECompositeXorType)
+ {
+ WriteXorAssertionL((CXorCompositeAssertion*) aEle, aWriteStream);
+ }
+ else if (aEle->Type()== EPolicyReferenceType )
+ {
+ WritePolicyReferenceL((CPolicyReferenceAssertion*)aEle, aWriteStream);
+ }
+ else if (aEle->Type() == ECompositePolicyType)
+ {
+ WritePolicyL((CPolicyAssertion*) aEle, aWriteStream);
+
+ }
+ else if (aEle->Type() == ECompositeAndType)
+ {
+ WriteAndAssertionL((CAndCompositeAssertion*) aEle,aWriteStream);
+
+ }
+ else
+ {
+ }
+
+ return KErrNone;
+}
+TInt CWSPolicyWriter::WritePolicyReferenceL(CPolicyReferenceAssertion* aAssertion, RWriteStream& aWriteStream)
+{
+
+ aWriteStream.WriteL(KStartElement);
+ aWriteStream.WriteL(KWspPolicyReferencePrefix);
+ aWriteStream.WriteL(KSenSpace);
+ aWriteStream.WriteL(KWspPolicyReferenceUri);
+
+ aWriteStream.WriteL(KSenEqualsDblQuot);
+ aWriteStream.WriteL(aAssertion->PolicyUri());
+ aWriteStream.WriteL(KSenDblQuot);
+ aWriteStream.WriteL(KSenGreaterThan);
+
+
+ aWriteStream.WriteL(KSenLessThanSlash);
+ aWriteStream.WriteL(KWspPolicyReferencePrefix);
+ aWriteStream.WriteL(KSenGreaterThan);
+
+ return KErrNone;
+}
+TInt CWSPolicyWriter::WritePrimitiveAssertionL(CPrimitiveAssertion* aAssertion, RWriteStream& aWriteStream)
+{
+ TPtrC8 qname = aAssertion->Name();
+ aWriteStream.WriteL(KStartElement);
+ aWriteStream.WriteL(qname);
+
+ TBuf8<200> name(KSenXmlNsAttNamePlusColon);
+ name.Append(aAssertion->iQname->Prefix());
+// if(IsNamespaceAdded(name) == KErrNotFound)
+ {
+ aWriteStream.WriteL(name); //namespace
+ aWriteStream.WriteL(KSenEqualsDblQuot);
+ aWriteStream.WriteL(aAssertion->iQname->Uri()); //namespace
+ aWriteStream.WriteL(KSenDblQuot);
+ TPtrC8 nameuri(aAssertion->iQname->Uri());
+ AddNameSpaceL(name, nameuri); //codescannerwarnings
+ }
+
+ WriteAttributesL(aAssertion, aWriteStream);
+ aWriteStream.WriteL(KSenGreaterThan);
+
+ TPtrC8 strValue = aAssertion->StrValue();
+
+ if (strValue != KNullDesC8()) {
+
+ aWriteStream.WriteL(strValue);
+ }
+
+
+ RPolicyTerms terms = aAssertion->GetTerms();
+ if(terms.Count() > 0)
+ {
+
+ WriteTermsL(terms, aWriteStream);
+ }
+
+ aWriteStream.WriteL(KSenLessThanSlash);
+ aWriteStream.WriteL(qname);
+ aWriteStream.WriteL(KSenGreaterThan);
+ return KErrNone;
+}
+TInt CWSPolicyWriter::WriteTermsL(RPointerArray<MAssertion>& aTerms, RWriteStream& aWriteStream)
+{
+
+ for (TInt i=0; i<aTerms.Count(); i++ )
+ {
+ CAssertion* obj = (CAssertion*)aTerms[i];
+ if(obj)
+ {
+ WriteAssertionL(obj, aWriteStream);
+ }
+ }
+ return KErrNone;
+}
+void WriteAttrToL(RWriteStream& aWriteStream, TDesC8& aName, TDesC8& aValue)
+{
+ aWriteStream.WriteL(KSenSpace);
+ aWriteStream.WriteL(aName);
+ aWriteStream.WriteL(KSenEqualsDblQuot);
+ aWriteStream.WriteL(aValue);
+ aWriteStream.WriteL(KSenDblQuot);
+}
+
+void CWSPolicyWriter::WriteAttributesL(CPrimitiveAssertion* aAssertion, RWriteStream& aWriteStream)
+{
+
+ RAttributeMap& attributes = aAssertion->Attributes();
+
+ TInt attCount = attributes.Count();
+
+ for (TInt i=0; i<attCount; i++ )
+ {
+ const TDesC8* nameptr= attributes.KeyAt(i);
+ const TDesC8* valptr= attributes.ValueAt(i);
+ HBufC8* tt = nameptr->AllocL();
+ HBufC8* tt2 = valptr->AllocL();
+ TPtrC8 name = tt->Des();
+ TPtrC8 value = tt2->Des();
+ WriteAttrToL(aWriteStream, name, value);
+ delete tt;
+ delete tt2;
+
+ }
+}
+
+TPtrC8 CWSPolicyWriter::GetAttrib(TPtrC8 /*aReference*/, CSenElement* /*aEle*/)
+{
+ return KNullDesC8();
+}
+TBool CWSPolicyWriter::IsNamespaceAdded(TPtrC8 aName)
+{
+ return iNamespcaes.Find(aName);
+}
+
+TInt CWSPolicyWriter::AddNameSpaceL(TPtrC8 aName, TPtrC8 aUri) //codescannerwarnings
+{
+ if(IsNamespaceAdded(aName) == KErrNotFound)
+ {
+ return iNamespcaes.Append(aName.AllocL(),aUri.AllocL());
+ }
+ return KErrGeneral;
+}
+
+//#ifdef _SENDEBUG
+void CWSPolicyWriter::WriteToFileAllL(CSenElement* aXml)
+{
+ RFs fss;
+ User::LeaveIfError(fss.Connect());
+ CleanupClosePushL(fss);
+
+ TBuf<255> file;
+ _LIT( KFileName, "c:\\logs\\normalizer%d.xml");
+ file.Format(KFileName, count);
+ count++;
+ TPtrC OutputFile(file);
+
+ RFile xmlFile;
+ xmlFile.Replace(fss , OutputFile, EFileWrite );
+ HBufC8* temp = aXml->AsXmlL();
+ CleanupStack::PushL(temp);
+ xmlFile.Write(temp->Des());
+ xmlFile.Close();
+ CleanupStack::PopAndDestroy(temp);
+ CleanupStack::PopAndDestroy(1); // fss
+}
+void CWSPolicyWriter::WriteToFileAllL(TDesC8& aXml)
+{
+ RFs fss;
+ User::LeaveIfError(fss.Connect());
+ CleanupClosePushL(fss);
+
+ TBuf<255> file;
+ _LIT( KFileName, "c:\\logs\\normalizer%d.xml");
+ file.Format(KFileName, count);
+ count++;
+ TPtrC OutputFile(file);
+
+ RFile xmlFile;
+ xmlFile.Replace(fss , OutputFile, EFileWrite );
+ xmlFile.Write(aXml);
+ xmlFile.Close();
+ CleanupStack::PopAndDestroy(1); // fss
+}
+
+//#endif