hashmap

2 views
Skip to first unread message

gaurav v bagga

unread,
Feb 1, 2007, 4:52:02 AM2/1/07
to Tefkat
hi,

have this rule
RULE tasks
FORALL SequenceFlow sf, Process p
WHERE ge = p.GraphicalElements AND
ge.Id = sf.source.Id
AND
////////////////////
var map<string,arraylist>
var list<sequenceflows>
list.add(sf)
map.put(ge,list)
/////////////////////
println(ge.Id,ge.eClass().getName(),sf) ;


INFO: [_q0PIMLArEdusCKMZT3C98w] [ParallerFork_Join]

INFO: [_qJds4LArEdusCKMZT3C98w] [Intermediate]

INFO: [_pmmQYLArEdusCKMZT3C98w] [Task]

INFO: [_o55icLArEdusCKMZT3C98w] [Task]

INFO: [_nJ16ELArEdusCKMZT3C98w] [ParallerFork_Join]
INFO: [_nJ16ELArEdusCKMZT3C98w] [ParallerFork_Join]
INFO: [_nJ16ELArEdusCKMZT3C98w] [ParallerFork_Join]

INFO: [_mVsgULArEdusCKMZT3C98w] [Start]


how to group elements into one collection
i want (ParallerFork_Join,{sf1,sf2,sf3})
(Intermediate,{s2})......

regards
gaurav

gaurav v bagga

unread,
Feb 1, 2007, 6:57:01 AM2/1/07
to Tefkat
hi,

figured out how to make hashmap

but having problem accesing it

MAP id {
"kill":["asd","asdasd","asdasd"]
};

regards
Gaurav

michael lawley

unread,
Feb 1, 2007, 6:57:07 AM2/1/07
to Tef...@googlegroups.com
Hi, I don't understand your question. Why do you need to "group"
things - what target objects are you trying to make?

michael

michael lawley

unread,
Feb 1, 2007, 7:01:54 AM2/1/07
to Tef...@googlegroups.com
You call the "map" function where ther first arg is the map name as a string.

For example:

WHERE x = map("id", "kill")

will bind x to ["asd","asdasd","asdasd"]

michael

On 01/02/07, gaurav v bagga <gaurav....@gmail.com> wrote:
>

gaurav v bagga

unread,
Feb 1, 2007, 7:07:45 AM2/1/07
to Tefkat
hi,
well

i am in a situation where

<?xml version="1.0" encoding="ASCII"?>
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:bpdm="http://bpdm">
<bpdm:BusinessProcessDiagram xmi:id="_kt-7oLArEdusCKMZT3C98w"
CreationDate="2007-01-30T12:01:52.850+0530" Author="Zensar
Technologies" Language="English">
<Pools Id="_TGI7MLArEdusCKMZT3C98w" Name="Pool">
<Process Name="Process">
<GraphicalElements xsi:type="bpdm:Start"
Id="_mVsgULArEdusCKMZT3C98w" Name="Start"/>
<GraphicalElements xsi:type="bpdm:ParallerFork_Join"
Id="_nJ16ELArEdusCKMZT3C98w" Name="Parallel Gateway"/>
<GraphicalElements xsi:type="bpdm:Task"
Id="_o55icLArEdusCKMZT3C98w" Pool="/0/@Pools.0" Name="Task"/>
<GraphicalElements xsi:type="bpdm:Task"
Id="_pmmQYLArEdusCKMZT3C98w" Pool="/0/@Pools.0" Name="Task"/>
<GraphicalElements xsi:type="bpdm:Intermediate"
Id="_qJds4LArEdusCKMZT3C98w" Name="Intermediate"/>
<GraphicalElements xsi:type="bpdm:ParallerFork_Join"
Id="_q0PIMLArEdusCKMZT3C98w" Name="Parallel Gateway"/>
<GraphicalElements xsi:type="bpdm:End"
Id="_sQBJsLArEdusCKMZT3C98w" Name="End"/>
</Process>
<lanes Id="_l6RvoLArEdusCKMZT3C98w" Name="Lane" parentpool="/0/
@Pools.0"/>
</Pools>
</bpdm:BusinessProcessDiagram>
<bpdm:SequenceFlow xmi:id="_xe_wALArEdusCKMZT3C98w">
<source xsi:type="bpdm:Task" Id="_pmmQYLArEdusCKMZT3C98w" Pool="/0/
@Pools.0" Name="Task"/>
<target xsi:type="bpdm:ParallerFork_Join"
Id="_q0PIMLArEdusCKMZT3C98w" Name="Parallel Gateway"/>
</bpdm:SequenceFlow>
<bpdm:SequenceFlow xmi:id="_xe_wAbArEdusCKMZT3C98w">
<source xsi:type="bpdm:ParallerFork_Join"
Id="_q0PIMLArEdusCKMZT3C98w" Name="Parallel Gateway"/>
<target xsi:type="bpdm:End" Id="_sQBJsLArEdusCKMZT3C98w"
Name="End"/>
</bpdm:SequenceFlow>
<bpdm:SequenceFlow xmi:id="_xe_wArArEdusCKMZT3C98w">
<source xsi:type="bpdm:Intermediate" Id="_qJds4LArEdusCKMZT3C98w"
Name="Intermediate"/>
<target xsi:type="bpdm:ParallerFork_Join"
Id="_q0PIMLArEdusCKMZT3C98w" Name="Parallel Gateway"/>
</bpdm:SequenceFlow>
<bpdm:SequenceFlow xmi:id="_xe_wA7ArEdusCKMZT3C98w">
<source xsi:type="bpdm:ParallerFork_Join"
Id="_nJ16ELArEdusCKMZT3C98w" Name="Parallel Gateway"/>
<target xsi:type="bpdm:Intermediate" Id="_qJds4LArEdusCKMZT3C98w"
Name="Intermediate"/>
</bpdm:SequenceFlow>
<bpdm:SequenceFlow xmi:id="_xe_wBLArEdusCKMZT3C98w">
<source xsi:type="bpdm:Start" Id="_mVsgULArEdusCKMZT3C98w"
Name="Start"/>
<target xsi:type="bpdm:ParallerFork_Join"
Id="_nJ16ELArEdusCKMZT3C98w" Name="Parallel Gateway"/>
</bpdm:SequenceFlow>
<bpdm:SequenceFlow xmi:id="_xe_wBbArEdusCKMZT3C98w">
<source xsi:type="bpdm:ParallerFork_Join"
Id="_nJ16ELArEdusCKMZT3C98w" Name="Parallel Gateway"/>
<target xsi:type="bpdm:Task" Id="_pmmQYLArEdusCKMZT3C98w" Pool="/0/
@Pools.0" Name="Task"/>
</bpdm:SequenceFlow>
<bpdm:SequenceFlow xmi:id="_xe_wBrArEdusCKMZT3C98w">
<source xsi:type="bpdm:ParallerFork_Join"
Id="_nJ16ELArEdusCKMZT3C98w" Name="Parallel Gateway"/>
<target xsi:type="bpdm:Task" Id="_o55icLArEdusCKMZT3C98w" Pool="/0/
@Pools.0" Name="Task"/>
</bpdm:SequenceFlow>
<bpdm:SequenceFlow xmi:id="_xe_wB7ArEdusCKMZT3C98w">
<source xsi:type="bpdm:Task" Id="_o55icLArEdusCKMZT3C98w" Pool="/0/
@Pools.0" Name="Task"/>
<target xsi:type="bpdm:ParallerFork_Join"
Id="_q0PIMLArEdusCKMZT3C98w" Name="Parallel Gateway"/>
</bpdm:SequenceFlow>
</xmi:XMI>


see for every sequence flow i have to make links
<Links
<link ....
</Link

then

eg: Task => Invoke
In invoke i want
<Invoke>
<......
(a) <source link1/>
(b) <target link1,link2,.../>
</Invoke>

so I was thinking if
I can collect all sequence flows having task as source in one
collection
also all sequence flows having task as target as one

then it will be easy for me to make (a) and (b)

Regards
gaurav bagga


David

unread,
Feb 1, 2007, 7:33:40 AM2/1/07
to Tefkat
Hi Gaurav,

What do you want to do with the collection? Tefkat does not support
collections as first-class values, since expressions involving sets
can be refactored away in declarative statements (by replacing set
membership with the logical condition that determines the elements of
that set). Perhaps you want something like this?

PATTERN elementFlow(ge, sf)


FORALL SequenceFlow sf, Process p
WHERE ge = p.GraphicalElements
AND ge.Id = sf.source.Id

;

Then the solutions to elementFlow(ge, sf) will include:

elementFlow(ParallelFork_Join, sf1)
elementFlow(ParallelFork_Join, sf2)
elementFlow(ParallelFork_Join, sf3)
elementFlow(Intermediate, s2)
...

When written in a collection-free way, most (if not all) declarative
things are simpler, so I'm fairly certain that you won't need them.
However you can still indirectly use collections by using a
corresponding Java collection object, but Tefkat just treats it as an
object and does not distinguish it as a collection object. Most
importantly, any operations invoked on a collection object should be
idempotent (doing it once is equivalent to doing it many times), which
not all collection methods are (e.g. List.add()).

hth,

-David

David

unread,
Feb 1, 2007, 8:01:35 AM2/1/07
to Tefkat
I think there are a number of ways you can solve this problem, but I'm
not sure I fully understand your bpdm metamodel.
If I understand correctly, you want to group all the Links into and
out of a Task, and set the (multi-valued) features of Task to
reference those Links.

1). If Link has a (singleton) source feature and target feature, then
surely these are opposites of the Task source and target features? If
so, then just setting the source and target of a Link will
automatically set the Task-related features, so you don't need to do
it yourself.

2). Otherwise, I'm assuming you have one Link per SequenceFlow, and
one Invoke per Task. Then perhaps:

RULE TaskToInvoke
FORALL Task t
MAKE Invoke i FROM invoke(t)
;

RULE SequenceFlowToLink
FORALL SequenceFlow sf
MAKE Link l FROM link(sf)
;

RULE InFlows
FORALL Task task, SequenceFlow flow
WHERE task.Id = flow.target.Id
MAKE Invoke inv FROM invoke(task),
Link link FROM link(flow)
SET inv.inlink = link
;

RULE OutFlows
FORALL Task task, SequenceFlow flow
WHERE task.Id = flow.source.Id
MAKE Invoke i FROM invoke(task),
Link link FROM link(flow)
SET inv.outlink = link
;

The first two rules are simple, mapping Tasks to Invokes, and
SequenceFlows to Links. The next two rules find all the pairs (task,
flow) related by an inflow or an outflow, and then use the injections
(FROM clause) to get the appropriate Invoke for the task and Link for
the flow, and then set the appropriate feature relating an Invoke to a
Link.

Tefkat sets multi-valued features monotonically, i.e. it adds values
to features, rather than setting the feature to be only that value.
To be really pedantic, it is a true interpretation of "multi-valued",
i.e. features have multiple values, as opposed to interpreting "multi-
valued" as having a "single-value" that is a collection.

hope this helps,

-David


On Feb 1, 10:07 pm, "gaurav v bagga" <gaurav.v.ba...@gmail.com> wrote:
> hi,
> well
>
> i am in a situation where
>
> <?xml version="1.0" encoding="ASCII"?>
> <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:bpdm="http://bpdm">
> <bpdm:BusinessProcessDiagram xmi:id="_kt-7oLArEdusCKMZT3C98w"
> CreationDate="2007-01-30T12:01:52.850+0530" Author="Zensar
> Technologies" Language="English">
> <Pools Id="_TGI7MLArEdusCKMZT3C98w" Name="Pool">
> <Process Name="Process">
> <GraphicalElements xsi:type="bpdm:Start"
> Id="_mVsgULArEdusCKMZT3C98w" Name="Start"/>
> <GraphicalElements xsi:type="bpdm:ParallerFork_Join"
> Id="_nJ16ELArEdusCKMZT3C98w" Name="Parallel Gateway"/>
> <GraphicalElements xsi:type="bpdm:Task"

> Id="_o55icLArEdusCKMZT3C98w" Pool="/...@Pools.0" Name="Task"/>


> <GraphicalElements xsi:type="bpdm:Task"

> Id="_pmmQYLArEdusCKMZT3C98w" Pool="/...@Pools.0" Name="Task"/>

gaurav v bagga

unread,
Feb 1, 2007, 10:01:38 AM2/1/07
to Tefkat
hi,

your assumption 2 is right
and
<Process
<GraphicalElements :Task
<GraphicalElements :Start
</Process

i.e
1---------------*
Process------------------GraphicalElemets{Task,Start,End.....}

RULE TaskToInvoke and RULE InFlows
you are making task again
in my source if i have one task in target i am getting more then one
Invokes

it should be 1---1

regards
gaurav


gaurav v bagga

unread,
Feb 1, 2007, 10:08:42 AM2/1/07
to Tefkat
RULE makeLinks(element)
WHERE BusinessProcessDiagram b // match the
singleton root instance
AND element = b.Pools.Process.GraphicalElements // "iterate"
over the individual elements
SET IF Task element THEN
MAKE Invoke i FROM invoke(element)
SET i.operation="sam"
ELSEIF Start element THEN
MAKE Recieve r FROM invoke(element)
SET r.operation = "ram"
ENDIF

;


RULE do1(f)
MAKE Flow f
SET f.name="Flow"

;

RULE SequenceFlowToLink(f,l)
EXTENDS do1(f)
FORALL SequenceFlow sf
MAKE Link1 l
SET
l.name = append("link", sf.hashCode()),
f.links{}.add(l)
;


//if here i can pass element created (MAKE) as in rule makeLinks
//assuming "made" is that then the rule below will solve the issue

RULE InFlows(element,made)
EXTENDS makeLinks(element)
FORALL SequenceFlow flow
WHERE element.Id = flow.target.Id
SET made.target = append("link", flow.hashCode())
;

regards
gaurav

michael lawley

unread,
Feb 1, 2007, 10:31:21 AM2/1/07
to Tef...@googlegroups.com
On 02/02/07, gaurav v bagga <gaurav....@gmail.com> wrote:

> RULE TaskToInvoke and RULE InFlows
> you are making task again
> in my source if i have one task in target i am getting more then one
> Invokes
>
> it should be 1---1

David's rules are right - note that they both use the same explicit FROM clause
MAKE Invoke i FROM invoke(t) so when the second rule runs no new
instances will be created -- think of "MAKE Invoke i FROM invoke(t)"
as meaning "Ensure that an instance of Invoke exists with the unique
identity 'invoke(t)', where t is the unique identity of a Task
instance". If you do this twice (or more) with the same value for t
then you'll only ever create a single Invoke instance.

michael

michael lawley

unread,
Feb 1, 2007, 10:39:27 AM2/1/07
to Tef...@googlegroups.com
On 02/02/07, gaurav v bagga <gaurav....@gmail.com> wrote:

> RULE SequenceFlowToLink(f,l)
> EXTENDS do1(f)
> FORALL SequenceFlow sf
> MAKE Link1 l
> SET
> l.name = append("link", sf.hashCode()),
> f.links{}.add(l)
> ;

This is not idempotent (see David's email). Just change the last line
to f.links = l and it will be fine.

> //if here i can pass element created (MAKE) as in rule makeLinks
> //assuming "made" is that then the rule below will solve the issue
>
> RULE InFlows(element,made)
> EXTENDS makeLinks(element)
> FORALL SequenceFlow flow
> WHERE element.Id = flow.target.Id
> SET made.target = append("link", flow.hashCode())
> ;

This rule will flounder -- made never gets a value. Did you mean for
it to be one of i or r from makeLinks?

Also, I don't have your model handy (and it's 1:30am :) but is the
type of made.target really String (ie a reference by name)?

michael

gaurav v bagga

unread,
Feb 2, 2007, 1:29:19 AM2/2/07
to Tefkat

> This rule will flounder -- made never gets a value. Did you mean for
> it to be one of i or r from makeLinks?

yes one of i or r from makeLinks

>
> Also, I don't have your model handy (and it's 1:30am :) but is the
> type of made.target really String (ie a reference by name)?

of type StandardTarget which as attribute name:String


gaurav

gaurav v bagga

unread,
Feb 2, 2007, 2:38:09 AM2/2/07
to Tefkat

> David's rules are right - note that they both use the same explicit FROM clause
> MAKE Invoke i FROM invoke(t) so when the second rule runs no new

RULE TaskToInvoke


FORALL Task t
MAKE Invoke i FROM

////////////////////////////////
invoke(t) ==================> should be invoke(task) ??????
////////////////////////////////
;

RULE InFlows
FORALL Task task, SequenceFlow flow
WHERE task.Id = flow.target.Id
MAKE Invoke inv FROM

/////////////////////////////////////////
invoke(task), =====================> or should be invoke(t) /
or let be same to match above
//////////////////////////////////////////


Link link FROM link(flow)
SET inv.inlink = link
;

gaurav

michael lawley

unread,
Feb 2, 2007, 3:30:00 AM2/2/07
to Tef...@googlegroups.com
No, 't' and 'task' are just (arbitrary) variable names which are bound
to Task instances in the FORALL line.

Consider the following equivalent "Java" code (actually, I don't think
the generics in make() are quite right, but the principle is fine).

Map<Object[], Invoke> invokeMap = new HashMap<Object[], Invoke>();
Map<Object[], Link> linkMap = new HashMap<Object[], Link>();

void taskToInvoke() {
for(Task t: src,allInstances(Task.class)) {
Invoke i = make(Invoke.class, invokeMap, t);
}
}

void inFlows() {
for(Task task: src,allInstances(Task.class)) {
for(SequenceFlow flow: src.allInstances(SequenceFlow.class)) {
if (task.getId().equals(flow.getTarget().getId())) {
Invoke inv = make(Invoke.class, invokeMap, task);
Link link = make(Link.class, linkMap, flow);
inv.setInLink(link)
}
}
}

<T> T make(Class cls, Map<Object[], T> map, Object[] args) {
T result = map.get(args);
if (null == result) {
result = (T) cls.newInstance();
map.put(args, result);
}
return result;
}

On 02/02/07, gaurav v bagga <gaurav....@gmail.com> wrote:
>
>
>

gaurav bagga

unread,
Feb 5, 2007, 3:54:01 AM2/5/07
to Tef...@googlegroups.com
hi,

I have written the following rules

RULE InFlows
FORALL Process p, SequenceFlow sf
WHERE t = p.GraphicalElements AND
       t.Id = sf.target.Id
SET  IF Task t THEN
       MAKE Invoke inv FROM invoke(t),
         Link1 link FROM link(sf)
         SET inv.target = link
       ELSEIF Start t THEN
         MAKE Recieve r FROM recieve(t),
         Link1 link FROM link(sf)
         SET  r.target = link
       ELSEIF Intermediate t THEN
         MAKE Wait w FROM intermediate(t),
         Link1 link FROM link(sf)
         SET  w.target = link
     ENDIF
 
;

RULE OutFlows
FORALL Process p, SequenceFlow sf
WHERE t = p.GraphicalElements AND
       t.Id = sf.source.Id
 SET  IF Task t THEN
       MAKE Invoke inv FROM invoke(t),
       Link1 link FROM link(sf)
      SET inv.source = link
     ELSEIF Start t THEN
       MAKE Recieve r FROM recieve(t),
       Link1 link FROM link(sf)
       SET  r.source = link
      ELSEIF Intermediate t THEN
         MAKE Wait w FROM intermediate(t),
         Link1 link FROM link(sf)
         SET  w.source = link  
     ENDIF
 
;

in my output problem is I am getting new instances of links.
eg

link1
link2
link3

start
 -- link1 source

invoke
 -- link2 source
 -- link1 target

and so on link1 instance of start as source should be target for invoke,
but in my output I am getting new instance

i.e

link1
link2
link3

start
 -- link1 source

invoke
 -- link2 source
 -- link3 target

how to refine above code.


regards
gaurav v bagga





bpdm1.bpmn
bpel1.bpel

David

unread,
Feb 6, 2007, 2:58:00 AM2/6/07
to Tefkat
Hi Gaurav,

The rules are working correctly; the problem is not a Tefkat bug, but
unfortunately a known bug of XMI/EMF. The multiple Links in the XMI
are actually the same objects (you can see they have the same XMI ID),
they have just been serialised multiple times by EMF's XMI resource
implementation. I think this bug has only surfaced in recent versions
of EMF/XMI. Michael knows much more about the status of this bug than
I do, and has reported it to the appropriate EMF/XMI project people.
There are a few Tefkat workarounds for this limitation floating around
the various repositories, maybe one hasn't appeared on the trunk yet?

Until then, there are two fixes that should work. First, if you can
register your metamodel URI, http://bpel, with an implementation of
your metamodel (e.g. the one you can generate using EMF), then the
serialisation problem should go away. There are a number of ways to
achieve this registration. The simplest way is to do it
programmatically by calling the init() method of the generated
metamodel implementation (e.g. BpelPackageImpl.init()). A more
complex way is to trust the generated editor plugins to do this
association automatically in a runtime workbench.

Second, if you have the source for Tefkat, then this little method
will prepare an EMF resource such that the bug won't appear when it is
serialised. You can insert calls to it just before any calls to
Resource.save(Map options).

private void fixDynamicEMFModel(Resource res) {
LinkedList<EObject> traversing = new
LinkedList<EObject> ();
traversing.addAll(res.getContents());

while (!traversing.isEmpty()) {
EObject o = traversing.removeFirst();

traversing.addAll(o.eContents());
res.getContents().removeAll(o.eContents());
}
}

regards,

-David

> bpdm1.bpmn
> 4KDownload
>
> bpel1.bpel
> 1KDownload

gaurav bagga

unread,
Feb 6, 2007, 3:17:40 AM2/6/07
to Tef...@googlegroups.com
<?xml version="1.0" encoding="ASCII"?>
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xmlns:bpel="http://bpel">
  <bpel:Invoke xmi:id="1778413">
    <target xsi:type="bpel:Link1" xmi:id="26358318"/> //Here it should have 7623799
    <source xsi:type="bpel:Link1" xmi:id="18654011"/>
  </bpel:Invoke>
  <bpel:Link1 xmi:id="18654011"/>
  <bpel:Invoke xmi:id="18918240">
    <target xsi:type="bpel:Link1" xmi:id="30617678"/> //Here it should have 7623799
    <source xsi:type="bpel:Link1" xmi:id="553374"/>
  </bpel:Invoke>
  <bpel:Link1 xmi:id="553374"/>
  <bpel:Link1 xmi:id="26358318"/>
  <bpel:Link1 xmi:id="30617678"/>
  <bpel:Recieve xmi:id="5987824">
    <source xsi:type="bpel:Link1" xmi:id="7623799"/>
  </bpel:Recieve>
  <bpel:Link1 xmi:id="7623799" />
  <bpel:Wait xmi:id="22383970">
    <target xsi:type="bpel:Link1" xmi:id="28657054"/>
    <source xsi:type="bpel:Link1" xmi:id="32360062"/>
  </bpel:Wait>
  <bpel:Link1 xmi:id="32360062"/>
  <bpel:Link1 xmi:id="28657054"/>
</xmi:XMI>






The rules are working correctly; the problem is not a Tefkat bug, but
unfortunately a known bug of XMI/EMF.  The multiple Links in the XMI
are actually the same objects (you can see they have the same XMI ID),
they have just been serialised multiple times by EMF's XMI resource
implementation. 

is it that I misunderstood you then correct me but as I have written above in output

7623799 should be present three places
 1) one its own description.
 2) as source in recieve.
 3) as target of one of the invokes.


as in output there is diferrent xmi:id at those places

I am still a bit confused have I made my point clear or when parsed the above output file I'll get the right number of instances which I doubt.

Meanwhile I try to explore what you adviced.

Regards
gaurav


David

unread,
Feb 6, 2007, 11:19:34 AM2/6/07
to Tefkat
test

David

unread,
Feb 6, 2007, 11:21:48 AM2/6/07
to Tefkat
HI Gaurav,

I just wrote a very long reply, and google appears to have lost it (it
said it was successful though, sigh). I don't have time to write it
out again, but basically the output you're expecting does not match
your rules. Perhaps you want to collapse the ParallerFork_Join
concept? i.e. define a connectivity pattern that matches the
connectivity relationships you want to codify in Link objects.

regards,

-David

On 7 Feb, 02:19, "David" <david.hearn...@gmail.com> wrote:
> test

David

unread,
Feb 6, 2007, 11:22:16 AM2/6/07
to Tefkat

David

unread,
Feb 6, 2007, 11:24:14 AM2/6/07
to Tefkat

Sorry Gaurav, I think I first misunderstood your problem. The EMF/XMI
problem I described seems unrelated, so disregard it.

-David

Reply all
Reply to author
Forward
0 new messages