Index: trunk/autoquest-plugin-uml/src/main/java/de/ugoe/cs/autoquest/plugin/uml/UMLUtils.java
===================================================================
--- trunk/autoquest-plugin-uml/src/main/java/de/ugoe/cs/autoquest/plugin/uml/UMLUtils.java	(revision 1900)
+++ trunk/autoquest-plugin-uml/src/main/java/de/ugoe/cs/autoquest/plugin/uml/UMLUtils.java	(revision 1908)
@@ -40,9 +40,17 @@
 import org.eclipse.uml2.uml.Connector;
 import org.eclipse.uml2.uml.ConnectorEnd;
+import org.eclipse.uml2.uml.DataType;
 import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Expression;
+import org.eclipse.uml2.uml.InstanceSpecification;
+import org.eclipse.uml2.uml.InstanceValue;
 import org.eclipse.uml2.uml.Interaction;
 import org.eclipse.uml2.uml.InteractionFragment;
 import org.eclipse.uml2.uml.Interface;
 import org.eclipse.uml2.uml.Lifeline;
+import org.eclipse.uml2.uml.LiteralBoolean;
+import org.eclipse.uml2.uml.LiteralInteger;
+import org.eclipse.uml2.uml.LiteralReal;
+import org.eclipse.uml2.uml.LiteralString;
 import org.eclipse.uml2.uml.Message;
 import org.eclipse.uml2.uml.MessageOccurrenceSpecification;
@@ -51,8 +59,12 @@
 import org.eclipse.uml2.uml.Operation;
 import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.Parameter;
+import org.eclipse.uml2.uml.ParameterDirectionKind;
 import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.PrimitiveType;
 import org.eclipse.uml2.uml.Profile;
 import org.eclipse.uml2.uml.Property;
 import org.eclipse.uml2.uml.Region;
+import org.eclipse.uml2.uml.Slot;
 import org.eclipse.uml2.uml.StateMachine;
 import org.eclipse.uml2.uml.Stereotype;
@@ -138,14 +150,8 @@
                         "Found the following services and operations in the usage data: ");
         for (Entry<String, Set<String>> entry : calledMethods.entrySet()) {
-            Console.trace(Level.INFO, "\tService \"" + entry.getKey() + "\": ");
-            Iterator<String> iter = entry.getValue().iterator();
-            StringBuilder strBld = new StringBuilder();
-            while (iter.hasNext()) {
-                strBld.append(iter.next());
-                if (iter.hasNext()) {
-                    strBld.append(", ");
-                }
-            }
-            Console.traceln(Level.INFO, strBld.toString());
+            Console.traceln(Level.INFO, "\tService \"" + entry.getKey() + "\": ");
+            for(String method : entry.getValue()) {
+                Console.traceln(Level.INFO, "\t\t"+method);
+            }
         }
 
@@ -197,13 +203,9 @@
                                     "\tFound the following realized interfaces for the service \"" +
                                         serviceName + "\": ");
-                    Iterator<Interface> iter = interfaces.iterator();
-                    while (iter.hasNext()) {
-                        String interfaceName = iter.next().getName();
-                        StringBuilder strBld = new StringBuilder();
-                        strBld.append(interfaceName);
-                        if (iter.hasNext()) {
-                            strBld.append(", ");
+                    for( Interface intface : interfaces ) {
+                        Console.traceln(Level.INFO, "\t" + intface.getName());
+                        for( Operation operation : intface.getAllOperations() ) {
+                            Console.traceln(Level.INFO, "\t\t" + operation.getName());
                         }
-                        Console.traceln(Level.INFO, strBld.toString());
                     }
                     for (String methodName : methodNames) {
@@ -221,7 +223,4 @@
                             Console.traceln(Level.SEVERE, "\tCould not find operation: " +
                                 methodName);
-                            Console
-                                .traceln(Level.SEVERE,
-                                         "\tHint: check if operation is present and spelled correctly");
                         }
                     }
@@ -568,5 +567,6 @@
                 // create call
                 Message callMessage = interaction.createMessage(methodName);
-                callMessage.setSignature(calledOperation);
+                callMessage.setSignature(calledOperation); 
+                setMessageParameters(callMessage, calledOperation, event);
                 callMessage.setConnector(inferConnector(msgSourceLifeline, msgTargetLifeline));
                 callMessage.setSendEvent(callSendFragment);
@@ -630,4 +630,6 @@
         }
     }
+
+    
 
     /**
@@ -958,3 +960,89 @@
         return null;
     }
+    
+    private static void setMessageParameters(Message callMessage, Operation calledOperation, Event event) {
+        // Set parameters of operation
+        for( Parameter param : calledOperation.getOwnedParameters() ) {
+            Expression argument = (Expression) callMessage.createArgument(param.getName(), param.getType(), UMLPackage.Literals.EXPRESSION);
+            
+            if( param.getDirection()==ParameterDirectionKind.IN_LITERAL || param.getDirection()==ParameterDirectionKind.INOUT_LITERAL) {
+                if( param.getType() instanceof DataType ) {
+                    InstanceSpecification instSpec = createInstanceSpecification((DataType) param.getType(), event);
+                    
+                    InstanceValue value = (InstanceValue) argument.createOperand(null, param.getType(), UMLPackage.Literals.INSTANCE_VALUE);
+                    value.setInstance(instSpec);
+                }
+                else if( param.getType() instanceof PrimitiveType ) {
+                    if( "String".equals(param.getType().getName()) ) {
+                        LiteralString spec = (LiteralString) argument.createOperand(param.getName(), null, UMLPackage.Literals.LITERAL_STRING);
+                        spec.setValue("foobar"); // TODO needs to be real value
+                    }
+                    else if( "Integer".equals(param.getType().getName()) ) {
+                        LiteralInteger spec = (LiteralInteger) argument.createOperand(param.getName(), null, UMLPackage.Literals.LITERAL_INTEGER);
+                        spec.setValue(42); // TODO needs to be real value
+                    }
+                    else if( "Boolean".equals(param.getType().getName()) ) {
+                        LiteralBoolean spec = (LiteralBoolean) argument.createOperand(param.getName(), null, UMLPackage.Literals.LITERAL_BOOLEAN);
+                        spec.setValue(true); // TODO needs to be real value
+                    }
+                    else if( "Real".equals(param.getType().getName()) ) {
+                        LiteralReal spec = (LiteralReal) argument.createOperand(param.getName(), null, UMLPackage.Literals.LITERAL_REAL);
+                        spec.setValue(3.14); // TODO needs to be real value
+                    }
+                }
+            } else {
+                // set literalNull for out and return parameters
+                argument.createOperand(null, param.getType(), UMLPackage.Literals.LITERAL_NULL);
+            }
+        }
+    }
+    
+    public static InstanceSpecification createInstanceSpecification(DataType type, Event event) {
+        String pkgUBTInstSpecs = "UBT_InstanceSpecifications";
+        Model model = type.getModel();
+        Package ubtInstSpecPkg = (Package) model.getOwnedMember(pkgUBTInstSpecs);
+        if( ubtInstSpecPkg==null ) {
+            ubtInstSpecPkg = (Package) type.getModel().createPackagedElement(pkgUBTInstSpecs, UMLPackage.Literals.PACKAGE);
+        }
+        String serviceName = ((SOAPEventType) event.getType()).getServiceName();
+        Package serviceInstSpecPkg = (Package) ubtInstSpecPkg.getOwnedMember(serviceName);
+        if( serviceInstSpecPkg==null ) {
+            serviceInstSpecPkg = (Package) ubtInstSpecPkg.createPackagedElement(serviceName, UMLPackage.Literals.PACKAGE);
+        }
+        
+        InstanceSpecification instSpec = (InstanceSpecification) serviceInstSpecPkg.createPackagedElement("instspec_"+type.getName(), UMLPackage.Literals.INSTANCE_SPECIFICATION);
+        instSpec.getClassifiers().add(type);
+        System.out.println(type.getName());
+        for( Property prop : type.getAllAttributes() ) {
+            // TODO handle multiplicity
+            //int lowerBound = prop.getLower();
+            //int upperBound = prop.getUpper();
+            
+            Slot slot = instSpec.createSlot();
+            slot.setDefiningFeature(prop);
+            if( prop.getType() instanceof PrimitiveType ) {
+                if( "String".equals(prop.getType().getName()) ) {
+                    LiteralString value = (LiteralString) slot.createValue(prop.getName(), null, UMLPackage.Literals.LITERAL_STRING);
+                    value.setValue("foobar"); // TODO needs to be real value
+                }
+                else if( "Integer".equals(prop.getType().getName()) ) {
+                    LiteralInteger value = (LiteralInteger) slot.createValue(prop.getName(), null, UMLPackage.Literals.LITERAL_INTEGER);
+                    value.setValue(42); // TODO needs to be real value
+                }
+                else if( "Boolean".equals(prop.getType().getName()) ) {
+                    LiteralBoolean value = (LiteralBoolean) slot.createValue(prop.getName(), null, UMLPackage.Literals.LITERAL_BOOLEAN);
+                    value.setValue(true); // TODO needs to be real value
+                }
+                else if( "Real".equals(prop.getType().getName()) ) {
+                    LiteralReal value = (LiteralReal) slot.createValue(prop.getName(), null, UMLPackage.Literals.LITERAL_REAL);
+                    value.setValue(3.14); // TODO needs to be real value
+                }
+            }
+            else if( prop.getType() instanceof DataType ) {
+                InstanceValue value = (InstanceValue) slot.createValue(prop.getName(), prop.getType(), UMLPackage.Literals.INSTANCE_VALUE);
+                value.setInstance(createInstanceSpecification((DataType) prop.getType(), event));
+            }
+        }
+        return instSpec;
+    }
 }
