summaryrefslogtreecommitdiff
path: root/print/XPSDrvSmpl/src/common/pthndlr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'print/XPSDrvSmpl/src/common/pthndlr.cpp')
-rw-r--r--print/XPSDrvSmpl/src/common/pthndlr.cpp1385
1 files changed, 0 insertions, 1385 deletions
diff --git a/print/XPSDrvSmpl/src/common/pthndlr.cpp b/print/XPSDrvSmpl/src/common/pthndlr.cpp
deleted file mode 100644
index 61158c1f..00000000
--- a/print/XPSDrvSmpl/src/common/pthndlr.cpp
+++ /dev/null
@@ -1,1385 +0,0 @@
-/*++
-
-Copyright (c) 2005 Microsoft Corporation
-
-All rights reserved.
-
-File Name:
-
- pthndlr.cpp
-
-Abstract:
-
- Base PrintTicket handler class implementation. This class provides common
- PrintTicket handling functionality for any filter that requires print
- ticket handling. A feature specific handler can derive from
- this class to get feature unspecific XML handling functionality.
-
---*/
-
-
-//
-// Note on handling missing DOM nodes:
-//
-// Convert MSXML's S_FALSE to E_ELEMENT_NOT_FOUND. This allows clients to
-// use the SUCCEEDED macro more effectively.
-//
-// E_ELEMENT_NOT_FOUND should not be propogated as an error to the
-// filter pipeline or config module - treat as though the requested feature
-// has not been enabled.
-//
-
-#include "precomp.h"
-#include "debug.h"
-#include "globals.h"
-#include "xdstring.h"
-#include "pthndlr.h"
-#include "ptquerybld.h"
-
-using XDPrintSchema::PRINTTICKET_NAME;
-using XDPrintSchema::PARAM_INIT_ELEMENT_NAME;
-using XDPrintSchema::PARAM_REF_ELEMENT_NAME;
-using XDPrintSchema::NAME_ATTRIBUTE_NAME;
-using XDPrintSchema::VALUE_ELEMENT_NAME;
-using XDPrintSchema::SCHEMA_TYPE;
-using XDPrintSchema::SCHEMA_INTEGER;
-using XDPrintSchema::FEATURE_ELEMENT_NAME;
-using XDPrintSchema::OPTION_ELEMENT_NAME;
-using XDPrintSchema::FRAMEWORK_URI;
-using XDPrintSchema::SCHEMA_INST_URI;
-
-/*++
-
-Routine Name:
-
- CPTHandler::CPTHandler
-
-Routine Description:
-
- CPTHandler class constructor
-
-Arguments:
-
- pPrintTicket - Pointer to the DOM document representation of the PrintTicket
-
-Return Value:
-
- None
-
- Note: Base Class (CPSHandler) - Throws CXDException(HRESULT) on an error
-
---*/
-CPTHandler::CPTHandler(
- _In_ IXMLDOMDocument2 *pDOMDocument
- ) :
- CPSHandler(CComBSTR(PRINTTICKET_NAME), pDOMDocument)
-{
-}
-
-/*++
-
-Routine Name:
-
- CPTHandler::~CPTHandler
-
-Routine Description:
-
- CPTHandler class destructor
-
-Arguments:
-
- None
-
-Return Value:
-
- None
-
---*/
-CPTHandler::~CPTHandler()
-{
-}
-
-/*++
-
-Routine Name:
-
- CPTHandler::DeleteFeature
-
-Routine Description:
-
- This routine finds and deletes the named feature
-
-Arguments:
-
- bstrFeature - the feature name to be deleted
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_* - On error
-
---*/
-HRESULT
-CPTHandler::DeleteFeature(
- _In_z_ BSTR bstrFeature
- )
-{
- HRESULT hr = S_OK;
-
- if (SysStringLen(bstrFeature) > 0)
- {
- //
- // Find the feature node
- //
- CPTQueryBuilder propertyQuery(m_bstrFrameworkPrefix);
- CComBSTR bstrQuery;
-
- CComPtr<IXMLDOMNode> pFeatureNode(NULL);
-
- if (SUCCEEDED(hr = propertyQuery.AddFeature(m_bstrKeywordsPrefix, bstrFeature)) &&
- SUCCEEDED(hr = propertyQuery.GetQuery(&bstrQuery)))
- {
- //
- // Keep querying and deleting till all instances of the feature are
- // removed - generally this should be a single instance
- //
- while (SUCCEEDED(hr) &&
- SUCCEEDED(hr = GetNode(bstrQuery, &pFeatureNode)) &&
- hr != S_FALSE)
- {
- //
- // Delete the feature node and all children, then locate and delete
- // all orphaned parameter init nodes
- //
- if (SUCCEEDED(hr = DeleteNode(pFeatureNode)))
- {
- //
- // We need to delete all orphaned paramater init elements. Construct a
- // list of parameter ref nodes and parameter init nodes and delete parameter
- // init nodes that do not have a corresponding reference.
- //
- CComPtr<IXMLDOMNodeList> pInitList(NULL);
- CComPtr<IXMLDOMNodeList> pRefList(NULL);
-
- if (SUCCEEDED(hr = GetNodes(CComBSTR(PARAM_INIT_ELEMENT_NAME), &pInitList)) &&
- hr != S_FALSE &&
- SUCCEEDED(hr = GetNodes(CComBSTR(PARAM_REF_ELEMENT_NAME), &pRefList)) &&
- hr != S_FALSE)
- {
- hr = DeleteParamInitOrphans(pRefList, pInitList);
- }
- }
-
- //
- // Release the feature node for the next pass
- //
- pFeatureNode = NULL;
- }
- }
- }
- else
- {
- hr = E_INVALIDARG;
- }
-
- ERR_ON_HR(hr);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CPTHandler::DeleteParamInitOrphans
-
-Routine Description:
-
- When a feature is deleted it may orphan a set of parameter init nodes.
- This routine takes a list of parameter init nodes and a list of parameter
- ref nodes and deletes the init nodes with no corresponding ref node.
-
-Arguments:
-
- pRefList - pointer to a node list containined the ref nodes
- pInitList - pointer to a node list containined the init nodes
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_* - On error
-
---*/
-HRESULT
-CPTHandler::DeleteParamInitOrphans(
- _In_ IXMLDOMNodeList* pRefList,
- _Inout_ IXMLDOMNodeList* pInitList
- )
-{
- HRESULT hr = S_OK;
-
- if (SUCCEEDED(hr = CHECK_POINTER(pRefList, E_POINTER)) &&
- SUCCEEDED(hr = CHECK_POINTER(pInitList, E_POINTER)))
- {
- LONG cRefNodes = 0;
-
- if (SUCCEEDED(hr = pRefList->get_length(&cRefNodes)) &&
- cRefNodes == 0)
- {
- //
- // There are no ref nodes - delete all init nodes
- //
- hr = DeleteNodeList(pInitList);
- }
- else
- {
- //
- // Iterate over init list and search for a corresponding ref node
- //
- LONG cInitNodes = 0;
- hr = pInitList->get_length(&cInitNodes);
-
- for (LONG cInitNode = 0; cInitNode < cInitNodes && SUCCEEDED(hr); cInitNode++)
- {
- CComPtr<IXMLDOMNode> pInitNode(NULL);
- CComBSTR bstrInitName;
-
- if (SUCCEEDED(hr = pInitList->get_item(cInitNode, &pInitNode)) &&
- hr != S_FALSE &&
- SUCCEEDED(hr = GetAttributeValue(pInitNode,
- CComBSTR(NAME_ATTRIBUTE_NAME),
- &bstrInitName)) &&
- hr != S_FALSE &&
- SUCCEEDED(hr = pRefList->reset()))
- {
- //
- // Iterate over the ref list tring to match
- //
- BOOL bMatched = FALSE;
-
- for (LONG cRefNode = 0; cRefNode < cRefNodes && SUCCEEDED(hr) && !bMatched; cRefNode++)
- {
- CComPtr<IXMLDOMNode> pRefNode(NULL);
- CComBSTR bstrRefName;
- if (SUCCEEDED(hr = pRefList->get_item(cRefNode, &pRefNode)) &&
- hr != S_FALSE &&
- SUCCEEDED(hr = GetAttributeValue(pRefNode,
- CComBSTR(NAME_ATTRIBUTE_NAME),
- &bstrRefName)) &&
- hr != S_FALSE)
- {
- if (bstrRefName == bstrInitName)
- {
- bMatched = TRUE;
- }
- }
- }
-
- if (!bMatched)
- {
- //
- // There were no matches - delete the init node
- //
- hr = DeleteNode(pInitNode);
- }
- }
- }
- }
- }
-
- ERR_ON_HR(hr);
- return hr;
-}
-
-
-/*++
-
-Routine Name:
-
- CPTHandler::DeleteNodeList
-
-Routine Description:
-
- This routine deletes all nodes in a node list
-
-Arguments:
-
- pNodeList - the node list containing the nodes to be deleted
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_* - On error
-
---*/
-HRESULT
-CPTHandler::DeleteNodeList(
- _Inout_ IXMLDOMNodeList* pNodeList
- )
-{
- HRESULT hr = S_OK;
-
- if (SUCCEEDED(hr = CHECK_POINTER(pNodeList, E_POINTER)))
- {
- LONG cNodes = 0;
-
- hr = pNodeList->get_length(&cNodes);
-
- for (LONG cNode = 0; cNode < cNodes && SUCCEEDED(hr); cNode++)
- {
- CComPtr<IXMLDOMNode> pNode(NULL);
- if (SUCCEEDED(hr = pNodeList->get_item(cNode, &pNode)) &&
- hr != S_FALSE)
- {
- hr = DeleteNode(pNode);
- }
- }
- }
-
- ERR_ON_HR(hr);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CPTHandler::DeleteProperty
-
-Routine Description:
-
- This routine finds and deletes the named property
-
-Arguments:
-
- bstrProperty - the property name to be deleted
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_* - On error
-
---*/
-HRESULT
-CPTHandler::DeleteProperty(
- _In_z_ BSTR bstrProperty
- )
-{
- HRESULT hr = S_OK;
-
- if (SysStringLen(bstrProperty) > 0)
- {
- //
- // Find the property node
- //
- CPTQueryBuilder propertyQuery(m_bstrFrameworkPrefix);
- CComBSTR bstrQuery;
-
- CComPtr<IXMLDOMNode> pPropertyNode(NULL);
-
- if (SUCCEEDED(hr = propertyQuery.AddProperty(m_bstrFrameworkPrefix, bstrProperty)) &&
- SUCCEEDED(hr = propertyQuery.GetQuery(&bstrQuery)) &&
- SUCCEEDED(hr = GetNode(bstrQuery, &pPropertyNode)) &&
- hr != S_FALSE)
- {
- //
- // Delete the property node and all children
- //
- hr = DeleteNode(pPropertyNode);
- }
- }
- else
- {
- hr = E_INVALIDARG;
- }
-
- ERR_ON_HR(hr);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CPTHandler::QueryNodeOption
-
-Routine Description:
-
- This routine locates the node specified by the XPath query passed in and
- returns the value of the "name" attribute as a string. The PrintSchema
- keyword prefix is stripped from the result.
-
-Arguments:
-
- bstrQuery - The XPath query locating the node to retrieve the value for
- pbstrOption - Pointer to a BSTR to recieve the option string
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_ELEMENT_NOT_FOUND - If node does not exist
- E_* - On error
-
---*/
-HRESULT
-CPTHandler::QueryNodeOption(
- _In_z_ BSTR bstrQuery,
- _Outptr_result_maybenull_z_ BSTR* pbstrOption
- )
-{
- HRESULT hr = S_OK;
-
- //
- // Validate input parameters
- //
- if (SUCCEEDED(hr = CHECK_POINTER(pbstrOption, E_POINTER)))
- {
- *pbstrOption = NULL;
-
- if (SysStringLen(bstrQuery) <= 0)
- {
- hr = E_INVALIDARG;
- }
- }
-
- //
- // Given a bare PrintSchema query, retrieve the selected option
- //
- if (SUCCEEDED(hr))
- {
- CComPtr<IXMLDOMNode> pQueryNode(NULL);
-
- if (SUCCEEDED(hr = GetNode(bstrQuery, &pQueryNode)) &&
- hr != S_FALSE &&
- SUCCEEDED(hr = GetAttributeValue(pQueryNode, CComBSTR(NAME_ATTRIBUTE_NAME), pbstrOption)) &&
- hr != S_FALSE)
- {
- hr = StripKeywordNamespace(pbstrOption);
- }
- }
-
- if (hr == S_FALSE)
- {
- hr = E_ELEMENT_NOT_FOUND;
- }
-
- ERR_ON_HR_EXC(hr, E_ELEMENT_NOT_FOUND);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CPTHandler::FeaturePresent
-
-Routine Description:
-
- This routine checks if the named feature is present in the PrintTicket
- and optionally returns that node
-
-Arguments:
-
- bstrFeature - The feature name to be located
- ppFeatureNode - optional paramter that recieves the node
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_ELEMENT_NOT_FOUND - If node does not exist
- E_* - On error
-
---*/
-HRESULT
-CPTHandler::FeaturePresent(
- _In_z_ BSTR bstrFeature,
- _Outptr_opt_ IXMLDOMNode** ppFeatureNode
- )
-{
- HRESULT hr = S_OK;
-
- //
- // Validate input parameters
- //
- if (SysStringLen(bstrFeature) > 0)
- {
- //
- // Find the feature node
- //
- CPTQueryBuilder propertyQuery(m_bstrFrameworkPrefix);
- CComBSTR bstrQuery;
-
- CComPtr<IXMLDOMNode> pFeatureNode(NULL);
-
- if (SUCCEEDED(hr = propertyQuery.AddFeature(m_bstrKeywordsPrefix, bstrFeature)) &&
- SUCCEEDED(hr = propertyQuery.GetQuery(&bstrQuery)))
- {
- if (ppFeatureNode == NULL)
- {
- hr = GetNode(bstrQuery, &pFeatureNode);
- }
- else
- {
- hr = GetNode(bstrQuery, ppFeatureNode);
- }
- }
- }
- else
- {
- hr = E_INVALIDARG;
- }
-
- if (hr == S_FALSE)
- {
- hr = E_ELEMENT_NOT_FOUND;
- }
-
- ERR_ON_HR_EXC(hr, E_ELEMENT_NOT_FOUND);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CPTHandler::GetFeatureOption
-
-Routine Description:
-
- This routine retrieves the option set for the named feature passed in.
-
-Arguments:
-
- bstrFeature - The feature name to retrieve the option for
- pbstrOption - Pointer to a BSTR to recieve the option
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_ELEMENT_NOT_FOUND - If node does not exist
- E_* - On error
-
---*/
-HRESULT
-CPTHandler::GetFeatureOption(
- _In_z_ BSTR bstrFeature,
- _Outptr_result_maybenull_z_ BSTR* pbstrOption
- )
-{
- HRESULT hr = S_OK;
-
- //
- // Validate input parameters
- //
- if (SUCCEEDED(hr = CHECK_POINTER(pbstrOption, E_POINTER)))
- {
- if (SysStringLen(bstrFeature) <= 0)
- {
- hr = E_INVALIDARG;
- }
- }
-
- //
- // Given a bare PrintSchema feature name, retrieve the selected option
- //
- if (SUCCEEDED(hr))
- {
- //
- // Find the feature option node
- //
- CPTQueryBuilder propertyQuery(m_bstrFrameworkPrefix);
- CComBSTR bstrQuery;
-
- CComPtr<IXMLDOMNode> pOptionNode(NULL);
-
- if (SUCCEEDED(hr = propertyQuery.AddFeature(m_bstrKeywordsPrefix, bstrFeature)) &&
- SUCCEEDED(hr = propertyQuery.AddOption(m_bstrKeywordsPrefix)) &&
- SUCCEEDED(hr = propertyQuery.GetQuery(&bstrQuery)) &&
- SUCCEEDED(hr = GetNode(bstrQuery, &pOptionNode)) &&
- hr != S_FALSE)
- {
- //
- // If this is a shorthand option then the option is stored in the "name" attribute
- //
- hr = GetAttributeValue(pOptionNode, CComBSTR(NAME_ATTRIBUTE_NAME), pbstrOption);
-
- if (hr == S_FALSE)
- {
- //
- // This might be a longhand option in which case the node we have retrieved
- // is pointing at a scored property the value of which is the option
- //
- CComVariant varValue;
- if (SUCCEEDED(hr = pOptionNode->get_nodeTypedValue(&varValue)) &&
- hr != S_FALSE)
- {
- *pbstrOption = ::SysAllocString(varValue.bstrVal);
-
- if (*pbstrOption == NULL)
- {
- hr = E_OUTOFMEMORY;
- }
- }
- }
-
- if (SUCCEEDED(hr) &&
- hr != S_FALSE)
- {
- hr = StripKeywordNamespace(pbstrOption);
- }
- }
- }
-
- if (hr == S_FALSE)
- {
- hr = E_ELEMENT_NOT_FOUND;
- }
-
- ERR_ON_HR_EXC(hr, E_ELEMENT_NOT_FOUND);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CPTHandler::GetSubFeatureOption
-
-Routine Description:
-
- This routine retrieves the current option for a sub feature. The routine
- finds the named parent feature, then the sub-feature and retrieves the
- option that is set.
-
-Arguments:
-
- bstrParentFeature - The parent feature name
- bstrFeature - The sub-feature name
- pbstrOption - Pointer to a BSTR to recieve the option
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_ELEMENT_NOT_FOUND - If node does not exist
- E_* - On error
-
---*/
-HRESULT
-CPTHandler::GetSubFeatureOption(
- _In_z_ BSTR bstrParentFeature,
- _In_z_ BSTR bstrFeature,
- _Outptr_result_maybenull_z_ BSTR* pbstrOption
- )
-{
- HRESULT hr = S_OK;
-
- //
- // Validate input parameters
- //
- if (SUCCEEDED(hr = CHECK_POINTER(pbstrOption, E_POINTER)))
- {
- *pbstrOption = NULL;
-
- if (SysStringLen(bstrFeature) <= 0 ||
- SysStringLen(bstrParentFeature) <= 0)
- {
- hr = E_INVALIDARG;
- }
- }
-
- //
- // Given a bare PrintSchema feature name, retrieve the selected option
- //
- if (SUCCEEDED(hr))
- {
- //
- // Find the sub feature option node
- //
- CPTQueryBuilder propertyQuery(m_bstrFrameworkPrefix);
- CComBSTR bstrQuery;
-
- CComPtr<IXMLDOMNode> pFeatureNode(NULL);
-
- if (SUCCEEDED(hr = propertyQuery.AddFeature(m_bstrKeywordsPrefix, bstrParentFeature)) &&
- SUCCEEDED(hr = propertyQuery.AddFeature(m_bstrKeywordsPrefix, bstrFeature)) &&
- SUCCEEDED(hr = propertyQuery.AddOption(m_bstrKeywordsPrefix)) &&
- SUCCEEDED(hr = propertyQuery.GetQuery(&bstrQuery)) &&
- SUCCEEDED(hr = GetNode(bstrQuery, &pFeatureNode)) &&
- hr != S_FALSE &&
- SUCCEEDED(hr = GetAttributeValue(pFeatureNode, CComBSTR(NAME_ATTRIBUTE_NAME), pbstrOption)) &&
- hr != S_FALSE)
- {
- hr = StripKeywordNamespace(pbstrOption);
- }
- }
-
- if (hr == S_FALSE)
- {
- hr = E_ELEMENT_NOT_FOUND;
- }
-
- ERR_ON_HR_EXC(hr, E_ELEMENT_NOT_FOUND);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CPTHandler::GetScoredPropertyValue
-
-Routine Description:
-
- This routine retrieves the scored property value as a string for a given feature.
-
-Arguments:
-
- bstrParentFeature - The parent feature name
- bstrProperty - The scored property name
- pbstrValue - Pointer to a BSTR to recieve the scored property value
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_* - On error
-
---*/
-HRESULT
-CPTHandler::GetScoredPropertyValue(
- _In_z_ BSTR bstrParentFeature,
- _In_z_ BSTR bstrProperty,
- _Outptr_result_maybenull_ BSTR* pbstrValue
- )
-{
- HRESULT hr = S_OK;
-
- //
- // Validate input parameters
- //
- if (SUCCEEDED(hr = CHECK_POINTER(pbstrValue, E_POINTER)))
- {
- *pbstrValue = NULL;
-
- if (SysStringLen(bstrProperty) <= 0 ||
- SysStringLen(bstrParentFeature) <= 0)
- {
- hr = E_INVALIDARG;
- }
- }
-
- if (SUCCEEDED(hr))
- {
- //
- // Get the scored property value
- //
- CPTQueryBuilder propertyQuery(m_bstrFrameworkPrefix);
- CComBSTR bstrQuery;
-
- if (SUCCEEDED(hr = propertyQuery.AddFeature(m_bstrKeywordsPrefix, bstrParentFeature)) &&
- SUCCEEDED(hr = propertyQuery.AddScoredProperty(m_bstrKeywordsPrefix, bstrProperty)) &&
- SUCCEEDED(hr = propertyQuery.GetQuery(&bstrQuery)))
- {
- hr = GetNodeValue(bstrQuery, pbstrValue);
- }
- }
-
- if (hr == S_FALSE)
- {
- hr = E_ELEMENT_NOT_FOUND;
- }
-
- ERR_ON_HR_EXC(hr, E_ELEMENT_NOT_FOUND);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CPTHandler::GetScoredPropertyValue
-
-Routine Description:
-
- This routine retrieves the integer value of a scored property from a named
- feature
-
-Arguments:
-
- bstrParentFeature - The name of the parent feature
- bstrProperty - The name of the scored property to retrieve the value of
- pValue - Pointer to an INT that recieves the property value
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_* - On error
-
---*/
-HRESULT
-CPTHandler::GetScoredPropertyValue(
- _In_z_ BSTR bstrParentFeature,
- _In_z_ BSTR bstrProperty,
- _Out_ INT* pValue
- )
-{
- HRESULT hr = S_OK;
-
- CComBSTR bstrValue;
- if (SUCCEEDED(hr = CHECK_POINTER(pValue, E_POINTER)))
- {
- if (SysStringLen(bstrParentFeature) <= 0 ||
- SysStringLen(bstrProperty) <= 0)
- {
- hr = E_INVALIDARG;
- }
- }
-
- if (SUCCEEDED(hr) &&
- SUCCEEDED(hr = GetScoredPropertyValue(bstrParentFeature, bstrProperty, &bstrValue)))
- {
- *pValue = static_cast<INT>(_wtoi(bstrValue));
- }
-
- ERR_ON_HR_EXC(hr, E_ELEMENT_NOT_FOUND);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CPTHandler::GetScoredPropertyValue
-
-Routine Description:
-
- This routine retrieves the REAL value of a scored property from a named
- feature
-
-Arguments:
-
- bstrParentFeature - The name of the parent feature
- bstrProperty - The name of the scored property to retrieve the value of
- pValue - Pointer to a REAL that recieves the property value
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_* - On error
-
---*/
-HRESULT
-CPTHandler::GetScoredPropertyValue(
- _In_z_ BSTR bstrParentFeature,
- _In_z_ BSTR bstrProperty,
- _Out_ REAL* pValue
- )
-{
- HRESULT hr = S_OK;
-
- CComBSTR bstrValue;
- if (SUCCEEDED(hr = CHECK_POINTER(pValue, E_POINTER)))
- {
- if (SysStringLen(bstrParentFeature) <= 0 ||
- SysStringLen(bstrProperty) <= 0)
- {
- hr = E_INVALIDARG;
- }
- }
-
- if (SUCCEEDED(hr) &&
- SUCCEEDED(hr = GetScoredPropertyValue(bstrParentFeature, bstrProperty, &bstrValue)))
- {
- *pValue = static_cast<REAL>(_wtof(bstrValue));
- }
-
- ERR_ON_HR_EXC(hr, E_ELEMENT_NOT_FOUND);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CPTHandler::StripKeywordNamespace
-
-Routine Description:
-
- This routine strips the PrintSchema keyword namespace prefix from a value
-
-Arguments:
-
- pbstrValue - Pointer to the value string to have the prefix stripped
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_* - On error
-
---*/
-HRESULT
-CPTHandler::StripKeywordNamespace(
- _Inout_ BSTR* pbstrValue
- )
-{
- HRESULT hr = S_OK;
-
- if (SUCCEEDED(hr = CHECK_POINTER(pbstrValue, E_POINTER)))
- {
- if (SysStringLen(*pbstrValue) <= 0)
- {
- hr = E_INVALIDARG;
- }
- }
-
- if (SUCCEEDED(hr))
- {
- try
- {
- CStringXDW cstrStrippedName(*pbstrValue);
-
- INT cchStringStart = cstrStrippedName.Find(m_bstrKeywordsPrefix);
- size_t cchKWPrefix = 0;
- if (cchStringStart != -1 &&
- SUCCEEDED(hr = StringCchLength(m_bstrKeywordsPrefix, STRSAFE_MAX_CCH, &cchKWPrefix)))
- {
- cstrStrippedName.Delete(cchStringStart, static_cast<INT>(cchKWPrefix));
- SysFreeString(*pbstrValue);
- *pbstrValue = cstrStrippedName.AllocSysString();
- }
- }
- catch (CXDException& e)
- {
- hr = e;
- }
- }
-
- ERR_ON_HR(hr);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CPTHandler::CreateParamRefInitPair
-
-Routine Description:
-
- This routine create a pair of DOM elements corresponding to the ParameterRef and
- the ParameterInit that describe a ScoredProperty value.
-
-Arguments:
-
- bstrParam - The name of the property
- bstrType - The type of the value (string, integer etc.)
- bstrValue - The value of the property
- ppParamRef - Pointer to a IXMLDOMElement pointer that recives the new ParameterRef
- ppParamInit - Pointer to a IXMLDOMElement pointer that recives the new ParameterInit
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_* - On error
-
---*/
-HRESULT
-CPTHandler::CreateParamRefInitPair(
- _In_ CONST BSTR bstrParam,
- _In_ CONST BSTR bstrType,
- _In_ CONST BSTR bstrValue,
- _Outptr_ IXMLDOMElement** ppParamRef,
- _Outptr_ IXMLDOMElement** ppParamInit
- )
-{
- HRESULT hr = S_OK;
-
- if (SUCCEEDED(hr = CHECK_POINTER(ppParamRef, E_POINTER)) &&
- SUCCEEDED(hr = CHECK_POINTER(ppParamInit, E_POINTER)))
- {
- *ppParamRef = NULL;
- *ppParamInit = NULL;
-
- if (SysStringLen(bstrParam) <= 0 ||
- SysStringLen(bstrType) <= 0 ||
- SysStringLen(bstrValue) <= 0)
- {
- hr = E_INVALIDARG;
- }
- }
-
- CComPtr<IXMLDOMElement> pParamInit(NULL);
- CComPtr<IXMLDOMElement> pParamRef(NULL);
-
- if (SUCCEEDED(hr))
- {
- CComBSTR bstrPRefName;
- if (wcscmp(bstrParam, L"PageWatermarkSizeWidth") == 0 ||
- wcscmp(bstrParam, L"PageWatermarkSizeHeight") == 0)
- {
- bstrPRefName += m_bstrUserKeywordsPrefix;
- }
- else
- {
- bstrPRefName += m_bstrKeywordsPrefix;
- }
-
- bstrPRefName += bstrParam;
-
- //
- // Create the parameter ref element
- //
- CComBSTR bstrTagName(m_bstrFrameworkPrefix);
- bstrTagName += PARAM_REF_ELEMENT_NAME;
-
- if(SUCCEEDED(hr))
- {
- hr = CreateXMLElement(bstrTagName, FRAMEWORK_URI, &pParamRef);
- }
-
- if (SUCCEEDED(hr))
- {
- hr = CreateXMLAttribute(pParamRef, NAME_ATTRIBUTE_NAME, NULL, bstrPRefName );
- }
-
- //
- // Create the parameter init element
- //
- bstrTagName.Empty();
- bstrTagName += m_bstrFrameworkPrefix;
- bstrTagName += PARAM_INIT_ELEMENT_NAME;
-
- if(SUCCEEDED(hr))
- {
- hr = CreateXMLElement(bstrTagName, FRAMEWORK_URI, &pParamInit);
- }
-
- if (SUCCEEDED(hr))
- {
- hr = CreateXMLAttribute(pParamInit, NAME_ATTRIBUTE_NAME, NULL, bstrPRefName );
- }
-
- //
- // Create the parameter init value and add to the parameter init element
- //
- CComPtr<IXMLDOMElement> pValue(NULL);
-
- bstrTagName.Empty();
- bstrTagName += m_bstrFrameworkPrefix;
- bstrTagName += VALUE_ELEMENT_NAME;
-
- CComBSTR bstrAttrib(m_bstrSchemaInstPrefix);
- bstrAttrib += SCHEMA_TYPE;
-
- CComBSTR bstrAttribValue(m_bstrSchemaPrefix);
- bstrAttribValue += bstrType;
-
- if(SUCCEEDED(hr))
- {
- hr = CreateXMLElement(bstrTagName, FRAMEWORK_URI, &pValue);
- }
-
- if (SUCCEEDED(hr))
- {
- if( SUCCEEDED(hr = CreateXMLAttribute(pValue, bstrAttrib, SCHEMA_INST_URI, bstrAttribValue )) &&
- SUCCEEDED(hr = pValue->put_text(bstrValue)))
- {
- hr = pParamInit->appendChild(pValue, NULL);
- }
- }
- }
-
- if (SUCCEEDED(hr))
- {
- //
- // Assign the outgoing element pointers - detach from CComPtr to release ownership
- //
- *ppParamRef = pParamRef.Detach();
- *ppParamInit = pParamInit.Detach();
- }
-
- ERR_ON_HR(hr);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CPTHandler::CreateParamRefInitPair
-
-Routine Description:
-
- This routine create a pair of DOM elements corresponding to the ParameterRef and
- the ParameterInit that describe a ScoredProperty value. This overload is INT specific
-
-Arguments:
-
- bstrParam - The name of the property
- intValue - The integer value of the scored property
- ppParamRef - Pointer to a IXMLDOMElement pointer that recives the new ParameterRef
- ppParamInit - Pointer to a IXMLDOMElement pointer that recives the new ParameterInit
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_* - On error
-
---*/
-HRESULT
-CPTHandler::CreateParamRefInitPair(
- _In_ CONST BSTR bstrParam,
- _In_ CONST INT intValue,
- _Outptr_ IXMLDOMElement** ppParamRef,
- _Outptr_ IXMLDOMElement** ppParamInit
- )
-{
- HRESULT hr = S_OK;
-
- if (SUCCEEDED(hr = CHECK_POINTER(ppParamRef, E_POINTER)) &&
- SUCCEEDED(hr = CHECK_POINTER(ppParamInit, E_POINTER)))
- {
- if (SysStringLen(bstrParam) <= 0)
- {
- hr = E_INVALIDARG;
- }
- }
-
- if (SUCCEEDED(hr))
- {
- try
- {
- CStringXDW cstrValue;
- cstrValue.Format(L"%i", intValue);
-
- hr = CreateParamRefInitPair(bstrParam,
- CComBSTR(SCHEMA_INTEGER),
- CComBSTR(cstrValue.AllocSysString()),
- ppParamRef,
- ppParamInit);
- }
- catch (CXDException& e)
- {
- hr = e;
- }
- }
-
- ERR_ON_HR(hr);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CPTHandler::CreateFeatureOptionPair
-
-Routine Description:
-
- This routine create a pair of DOM elements corresponding to Feature and Option.
- Note this method does not intialise the option element, it merely creates an Option
- node appended to the Feature element. It is up to the caller to set the option value.
-
-Arguments:
-
- bstrFeatureName - The name of the feature
- ppFeatureElement - Pointer to a IXMLDOMElement pointer that recives the new Feature
- ppOptionElement - Pointer to a IXMLDOMElement pointer that recives the new Option
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_* - On error
-
---*/
-HRESULT
-CPTHandler::CreateFeatureOptionPair(
- _In_ CONST BSTR bstrFeatureName,
- _Outptr_ IXMLDOMElement** ppFeatureElement,
- _Outptr_ IXMLDOMElement** ppOptionElement
- )
-{
- HRESULT hr = S_OK;
-
- if (SUCCEEDED(hr = CHECK_POINTER(ppFeatureElement, E_POINTER)) &&
- SUCCEEDED(hr = CHECK_POINTER(ppOptionElement, E_POINTER)))
- {
- *ppFeatureElement = NULL;
- *ppOptionElement = NULL;
-
- if (SysStringLen(bstrFeatureName) <= 0)
- {
- hr = E_INVALIDARG;
- }
- }
- else
- {
- hr = E_POINTER;
- }
-
- if (SUCCEEDED(hr))
- {
- CComBSTR bstrFeature(m_bstrFrameworkPrefix);
- bstrFeature += FEATURE_ELEMENT_NAME;
-
- CComBSTR bstrAttribName(m_bstrKeywordsPrefix);
- bstrAttribName += bstrFeatureName;
-
- CComBSTR bstrOption(m_bstrFrameworkPrefix);
- bstrOption += OPTION_ELEMENT_NAME;
-
- if(SUCCEEDED(hr))
- {
- hr = CreateXMLElement(bstrFeature, FRAMEWORK_URI, ppFeatureElement);
- }
-
- if(SUCCEEDED(hr))
- {
- hr = CreateXMLElement(bstrOption, FRAMEWORK_URI, ppOptionElement);
- }
-
- if(SUCCEEDED(hr))
- {
- if (SUCCEEDED(hr = CreateXMLAttribute(*ppFeatureElement, NAME_ATTRIBUTE_NAME, NULL, bstrAttribName )))
- {
- hr = (*ppFeatureElement)->appendChild(*ppOptionElement, NULL);
- }
- }
- }
-
- ERR_ON_HR(hr);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CPTHandler::CreateFeatureOptionPair
-
-Routine Description:
-
- This routine create a pair of DOM elements corresponding to Feature and Option.
-
-Arguments:
-
- bstrFeatureName - The name of the feature
- bstrOptionName - The name of the option
- ppFeatureElement - Pointer to a IXMLDOMElement pointer that recives the new Feature
- ppOptionElement - Pointer to a IXMLDOMElement pointer that recives the new Option
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_* - On error
-
---*/
-HRESULT
-CPTHandler::CreateFeatureOptionPair(
- _In_ CONST BSTR bstrFeatureName,
- _In_ CONST BSTR bstrOptionName,
- _Outptr_ IXMLDOMElement** ppFeatureElement,
- _Outptr_ IXMLDOMElement** ppOptionElement
- )
-{
- HRESULT hr = S_OK;
-
- if (SUCCEEDED(hr = CHECK_POINTER(ppFeatureElement, E_POINTER)) &&
- SUCCEEDED(hr = CHECK_POINTER(ppOptionElement, E_POINTER)))
- {
- if (SysStringLen(bstrFeatureName) <= 0 ||
- SysStringLen(bstrOptionName) <= 0)
- {
- hr = E_INVALIDARG;
- }
- }
-
- if (SUCCEEDED(hr))
- {
- if (SUCCEEDED(hr = CreateFeatureOptionPair(bstrFeatureName, ppFeatureElement, ppOptionElement)))
- {
- //
- // Set the option name attribute
- //
- CComBSTR bstrAttribValue(m_bstrKeywordsPrefix);
- bstrAttribValue += bstrOptionName;
-
- hr = CreateXMLAttribute(*ppOptionElement, NAME_ATTRIBUTE_NAME, NULL, bstrAttribValue );
-
- }
- }
-
- ERR_ON_HR(hr);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CPTHandler::AppendToElement
-
-Routine Description:
-
- This routine uses the passed element name to locate the node to which
- it will append the DOM node passed in.
-
-Arguments:
-
- bstrElementName - The name of the element to append to
- pAppendNode - The node to append
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_* - On error
-
---*/
-HRESULT
-CPTHandler::AppendToElement(
- _In_ CONST BSTR bstrElementName,
- _In_ IXMLDOMNode* pAppendNode
- )
-{
- HRESULT hr = S_OK;
-
- if (SUCCEEDED(hr = CHECK_POINTER(pAppendNode, E_POINTER)))
- {
- if (SysStringLen(bstrElementName) <= 0)
- {
- hr = E_INVALIDARG;
- }
- }
-
- if (SUCCEEDED(hr))
- {
- CComPtr<IXMLDOMNode> pNode(NULL);
-
- CComBSTR bstrQuery(m_bstrFrameworkPrefix);
- bstrQuery += bstrElementName;
-
- if (SUCCEEDED(hr = GetNode(bstrQuery, &pNode)))
- {
- hr = pNode->appendChild(pAppendNode, NULL);
- }
- }
-
- ERR_ON_HR(hr);
- return hr;
-}
-