You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by ro...@apache.org on 2006/08/08 14:40:39 UTC
svn commit: r429639 - in
/incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo: SAX2Attributes.cpp
SAX2Attributes.h SDOSchemaSAX2Parser.cpp SDOSchemaSAX2Parser.h
Author: robbinspg
Date: Tue Aug 8 05:40:38 2006
New Revision: 429639
URL: http://svn.apache.org/viewvc?rev=429639&view=rev
Log:
TUSCANY-587 Pass the maxOccurs attribute from the <group ref= definition to the top level choice/sequence elements of the group
Modified:
incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SAX2Attributes.cpp
incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SAX2Attributes.h
incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.cpp
incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h
Modified: incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SAX2Attributes.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SAX2Attributes.cpp?rev=429639&r1=429638&r2=429639&view=diff
==============================================================================
--- incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SAX2Attributes.cpp (original)
+++ incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SAX2Attributes.cpp Tue Aug 8 05:40:38 2006
@@ -56,7 +56,37 @@
return attributes.size();
}
-
+
+ const SAX2Attribute* SAX2Attributes::getAttribute(const SDOXMLString& attributeName) const
+ {
+ for (int i=0; i < attributes.size(); i++)
+ {
+ if (attributes[i].getName().equalsIgnoreCase(attributeName))
+ {
+ return &attributes[i];
+ }
+ }
+ return NULL;
+ }
+
+ void SAX2Attributes::addAttribute(const SAX2Attribute& attr)
+ {
+ for (int i=0; i < attributes.size(); i++)
+ {
+ if (attributes[i].getUri().equals(attr.getUri()))
+ {
+ if (attributes[i].getName().equals(attr.getName()))
+ {
+ // oeverwrite this attribute
+ attributes[i] = attr;
+ return;
+ }
+ }
+ }
+ attributes.insert(attributes.end(), attr);
+ }
+
+
const SDOXMLString SAX2Attributes::nullValue;
const SDOXMLString& SAX2Attributes::getValue(
Modified: incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SAX2Attributes.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SAX2Attributes.h?rev=429639&r1=429638&r2=429639&view=diff
==============================================================================
--- incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SAX2Attributes.h (original)
+++ incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SAX2Attributes.h Tue Aug 8 05:40:38 2006
@@ -58,7 +58,11 @@
const SDOXMLString& getValue(
const SDOXMLString& attributeName) const;
-
+
+ const SAX2Attribute* getAttribute(
+ const SDOXMLString& attributeName) const;
+
+ void addAttribute(const SAX2Attribute& attr);
private:
typedef std::vector<SAX2Attribute> ATTRIBUTE_LIST;
ATTRIBUTE_LIST attributes;
Modified: incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.cpp?rev=429639&r1=429638&r2=429639&view=diff
==============================================================================
--- incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.cpp (original)
+++ incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.cpp Tue Aug 8 05:40:38 2006
@@ -87,7 +87,8 @@
void SDOSchemaSAX2Parser::replayEvents(
const SDOXMLString& uri,
const SDOXMLString& name,
- bool isGroup)
+ bool isGroup,
+ const SAX2Attributes& groupAttributes)
{
for (int i=0;i< groupList.size(); i++)
{
@@ -101,10 +102,33 @@
|| uri.equals(groupList[i].uri))
)
{
+ // Determine the maxOccurs value from the <group ref=... definition
+ bool isMany = false;
+ const SAX2Attribute* groupMaxOccurrs = groupAttributes.getAttribute("maxOccurs");
+ if (groupMaxOccurrs != 0 &&
+ !groupMaxOccurrs->getValue().equalsIgnoreCase("1"))
+ {
+ isMany = true;
+ }
+
+ int level = 0;
+
for (int j=0;j< groupList[i].events.size();j++)
{
if (groupList[i].events[j].isStartEvent)
{
+ // For top level <choice> or <sequence> we need to add the maxOccurrs
+ // attribute from the group definition if it was "many"
+ if ((level == 0) && isMany)
+ {
+ if (groupList[i].events[j].localname.equalsIgnoreCase("choice")
+ || groupList[i].events[j].localname.equalsIgnoreCase("sequence"))
+ {
+ // Add maxOccurs attribute to list
+ groupList[i].events[j].attributes.addAttribute(*groupMaxOccurrs);
+ }
+ }
+
startElementNs(
(const SDOXMLString&)
groupList[i].events[j].localname,
@@ -116,6 +140,8 @@
groupList[i].events[j].namespaces,
(const SAX2Attributes&)
groupList[i].events[j].attributes);
+
+ level++;
}
else
{
@@ -126,6 +152,8 @@
groupList[i].events[j].prefix,
(const SDOXMLString&)
groupList[i].events[j].URI);
+
+ level--;
}
}
return;
@@ -327,12 +355,12 @@
if (qname.getURI().isNull())
{
replayEvents(schemaInfo.getTargetNamespaceURI(), qname.getLocalName(),
- localname.equalsIgnoreCase("group"));
+ localname.equalsIgnoreCase("group"), attributes);
}
else
{
replayEvents(qname.getURI(), qname.getLocalName(),
- localname.equalsIgnoreCase("group"));
+ localname.equalsIgnoreCase("group"), attributes);
}
}
}
Modified: incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h?rev=429639&r1=429638&r2=429639&view=diff
==============================================================================
--- incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h (original)
+++ incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h Tue Aug 8 05:40:38 2006
@@ -99,7 +99,8 @@
virtual void replayEvents(
const SDOXMLString& uri,
const SDOXMLString& name,
- bool isGroup);
+ bool isGroup,
+ const SAX2Attributes& groupAttributes);
virtual void storeStartElementEvent(
const SDOXMLString& localname,
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org