Hi, Scott.

Can you try to fix the issue as follows?
if (edge.isPublic() || edge.getSourceVertex() == source || edge.getTargetVertex() == target) {
   ...
}

Thanks,
Raymond

----- Original Message ----- From: "Scott Kurz" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Wednesday, January 09, 2008 2:02 PM
Subject: Re: Does the public/private transformer support have a bug?


I'll follow up my own question and ask whether we need to do more in order
to avoid an unwanted intermediate transformation such as this (a transform
into SDO in the midst of converting between JAXB and AXIOM).

So even if I fix what I was assuming was a bug (though I'm still not sure I
understand 100% the design intent) by doing:

               // Only look for public edge unless this is the first node
               if (nextNode.vertex.equals(source) || edge.isPublic()) {

I still have the same problem in the other direction.

That is, not only do I want to only convert from SDO to something else ONLY
if this is the first transform outbound....  I also want to convert from
something else to SDO ONLY
if this is the last transform "inbound", i.e. the transform resulting in the
ultimate target DB.

Does this sound reasonable?
Scott





On Jan 9, 2008 3:19 PM, Scott Kurz <[EMAIL PROTECTED]> wrote:


I have some code around the r603995 level... and I noticed the following
transformer chain when the impl uses JAXB with the WS binding (using AXIOM
DB):

org.apache.tuscany.sca.databinding.jaxb.JAXB2Node
org.apache.tuscany.sca.databinding.sdo.Node2DataObject
org.apache.tuscany.sca.databinding.sdo.DataObject2XMLStreamReader
org.apache.tuscany.sca.databinding.axiom.XMLStreamReader2OMElement
This let me to try to mark the DataObject2XMLStreamReader transformer as
private in order to get it out of the picture. However, I'm wondering
if this code has a bug.

Though as I understand it, the idea behind marking a transformer as
'private' is to only allow it to be used during the first outbound
transform, it appears the code doesn't match up
with this.

In  org.apache.tuscany.sca.databinding.impl.DirectedGraph we do:

    public Path getShortestPath(V sourceValue, V targetValue) {
        ....
        while (!otherNodes.isEmpty()) {
            nextNode = extractMin(otherNodes);
            if (nextNode.vertex == target) {
                path = getPath(nextNode);
                paths.put(pair, path); // Cache it
                return path;
            }
            nodesOnPath.add(nextNode);
            for (Edge edge : nextNode.vertex.outEdges.values()) {
                Node adjacentNode = nodes.get(edge.targetVertex);
                // Only look for public edge
                if (edge.isPublic()) {
                    if (nextNode.distance + edge.weight <
adjacentNode.distance) {
                        adjacentNode.distance = nextNode.distance +
edge.weight;
                        adjacentNode.previous = nextNode;
                    }
                }
            }
        }

So, the first time through this while loop, the 'nextNode' will simply be
the original source node. We immediately disallow private transformers,
then, via the isPublic() check in this logic, even in the first
outbound transform.

Am I understanding this correctly?
Scott








---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to