Changeset 1908


Ignore:
Timestamp:
03/11/15 15:43:03 (9 years ago)
Author:
sherbold
Message:
  • default values are added to parameters of operation calls in generated UML interactions
  • new model of ITA pilot
Location:
trunk
Files:
4 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/autoquest-plugin-uml-test/src/test/java/de/ugoe/cs/autoquest/plugin/uml/UMLUtilsTest.java

    r1900 r1908  
    205205     
    206206    @Test 
    207     public void testHL7v2_1() throws Exception { 
    208         // parse log file 
    209         HTTPLogParser parser = 
    210             new HTTPLogParser(new File(ClassLoader 
    211                 .getSystemResource("hl7_servicenamemap.txt") 
    212                 .getFile())); 
    213         parser 
    214             .parseFile(new File(ClassLoader 
    215                 .getSystemResource("testCreateInteractionFromEventSequence_1_usagedata.log") 
    216                 .getFile())); 
    217         Collection<List<Event>> httpSequences = parser.getSequences(); 
    218  
    219          
    220         Model model = 
    221             ModelUtils.loadModel(ClassLoader 
    222                 .getSystemResourceAsStream("hl7model_v2.uml")); 
    223  
    224         for (List<Event> httpSequence : httpSequences) { 
    225             for (Iterator<Event> eventIter = httpSequence.iterator(); eventIter.hasNext();) { 
    226                 Event event = eventIter.next(); 
    227                 if (!(event.getType() instanceof SOAPEventType)) { 
    228                     eventIter.remove(); 
    229                 } 
    230             } 
    231  
    232             UMLUtils.createInteractionFromEventSequence(httpSequence, model, "testSequence", "RLUSTestSuite_1"); 
    233         } 
    234  
    235         ModelUtils.writeModelToFile(model, OUTPUT_DIR + "testCreateInteractionFromEventSequence_2_result.uml"); 
    236          
    237     } 
    238  
    239     @Test 
    240207    public void testCalculateUsageScore_1() throws Exception { 
    241208        // parse log file 
     
    372339        } 
    373340    } 
     341     
     342    @Test 
     343    public void testValidateModelWithLog_ITA_v2() throws Exception { 
     344        HTTPLogParser parser = 
     345                new HTTPLogParser(new File(ClassLoader 
     346                    .getSystemResource("ita_v2_servicenamemap.txt") 
     347                    .getFile())); 
     348        parser 
     349            .parseFile(new File(ClassLoader 
     350                .getSystemResource("ita_usagejournal_v2_2.log") 
     351                .getFile())); 
     352        Collection<List<Event>> httpSequences = parser.getSequences(); 
     353 
     354         
     355        Model model = 
     356            ModelUtils.loadModel(ClassLoader 
     357                .getSystemResourceAsStream("ita_model_v2.uml")); 
     358         
     359        int violations = UMLUtils.validateModelWithLog(httpSequences, model, null); 
     360        if( violations==0 ) { 
     361            System.out.println("No problems found."); 
     362        } else { 
     363            System.out.println(violations + " violations found."); 
     364        } 
     365         
     366        // remove everything but transport from sequences 
     367        for (List<Event> httpSequence : httpSequences) { 
     368            for (Iterator<Event> eventIter = httpSequence.iterator(); eventIter.hasNext();) { 
     369                Event event = eventIter.next(); 
     370                if (!(event.getType() instanceof SOAPEventType)) { 
     371                    eventIter.remove(); 
     372                } else { 
     373                    SOAPEventType eventType = (SOAPEventType) event.getType(); 
     374                    if( !"TransportService".equals(eventType.getServiceName()) )  { 
     375                        eventIter.remove(); 
     376                    } 
     377                } 
     378            } 
     379             
     380            UMLUtils.createInteractionFromEventSequence(httpSequence, model, "foo", "LogisticsTestSuite"); 
     381        } 
     382         
     383        ModelUtils.writeModelToFile(model, OUTPUT_DIR + "ita_v2_result.uml"); 
     384         
     385    } 
    374386 
    375387    private void deleteFiles(File file) { 
  • trunk/autoquest-plugin-uml/src/main/java/de/ugoe/cs/autoquest/plugin/uml/UMLUtils.java

    r1900 r1908  
    4040import org.eclipse.uml2.uml.Connector; 
    4141import org.eclipse.uml2.uml.ConnectorEnd; 
     42import org.eclipse.uml2.uml.DataType; 
    4243import org.eclipse.uml2.uml.Element; 
     44import org.eclipse.uml2.uml.Expression; 
     45import org.eclipse.uml2.uml.InstanceSpecification; 
     46import org.eclipse.uml2.uml.InstanceValue; 
    4347import org.eclipse.uml2.uml.Interaction; 
    4448import org.eclipse.uml2.uml.InteractionFragment; 
    4549import org.eclipse.uml2.uml.Interface; 
    4650import org.eclipse.uml2.uml.Lifeline; 
     51import org.eclipse.uml2.uml.LiteralBoolean; 
     52import org.eclipse.uml2.uml.LiteralInteger; 
     53import org.eclipse.uml2.uml.LiteralReal; 
     54import org.eclipse.uml2.uml.LiteralString; 
    4755import org.eclipse.uml2.uml.Message; 
    4856import org.eclipse.uml2.uml.MessageOccurrenceSpecification; 
     
    5159import org.eclipse.uml2.uml.Operation; 
    5260import org.eclipse.uml2.uml.Package; 
     61import org.eclipse.uml2.uml.Parameter; 
     62import org.eclipse.uml2.uml.ParameterDirectionKind; 
    5363import org.eclipse.uml2.uml.Port; 
     64import org.eclipse.uml2.uml.PrimitiveType; 
    5465import org.eclipse.uml2.uml.Profile; 
    5566import org.eclipse.uml2.uml.Property; 
    5667import org.eclipse.uml2.uml.Region; 
     68import org.eclipse.uml2.uml.Slot; 
    5769import org.eclipse.uml2.uml.StateMachine; 
    5870import org.eclipse.uml2.uml.Stereotype; 
     
    138150                        "Found the following services and operations in the usage data: "); 
    139151        for (Entry<String, Set<String>> entry : calledMethods.entrySet()) { 
    140             Console.trace(Level.INFO, "\tService \"" + entry.getKey() + "\": "); 
    141             Iterator<String> iter = entry.getValue().iterator(); 
    142             StringBuilder strBld = new StringBuilder(); 
    143             while (iter.hasNext()) { 
    144                 strBld.append(iter.next()); 
    145                 if (iter.hasNext()) { 
    146                     strBld.append(", "); 
    147                 } 
    148             } 
    149             Console.traceln(Level.INFO, strBld.toString()); 
     152            Console.traceln(Level.INFO, "\tService \"" + entry.getKey() + "\": "); 
     153            for(String method : entry.getValue()) { 
     154                Console.traceln(Level.INFO, "\t\t"+method); 
     155            } 
    150156        } 
    151157 
     
    197203                                    "\tFound the following realized interfaces for the service \"" + 
    198204                                        serviceName + "\": "); 
    199                     Iterator<Interface> iter = interfaces.iterator(); 
    200                     while (iter.hasNext()) { 
    201                         String interfaceName = iter.next().getName(); 
    202                         StringBuilder strBld = new StringBuilder(); 
    203                         strBld.append(interfaceName); 
    204                         if (iter.hasNext()) { 
    205                             strBld.append(", "); 
     205                    for( Interface intface : interfaces ) { 
     206                        Console.traceln(Level.INFO, "\t" + intface.getName()); 
     207                        for( Operation operation : intface.getAllOperations() ) { 
     208                            Console.traceln(Level.INFO, "\t\t" + operation.getName()); 
    206209                        } 
    207                         Console.traceln(Level.INFO, strBld.toString()); 
    208210                    } 
    209211                    for (String methodName : methodNames) { 
     
    221223                            Console.traceln(Level.SEVERE, "\tCould not find operation: " + 
    222224                                methodName); 
    223                             Console 
    224                                 .traceln(Level.SEVERE, 
    225                                          "\tHint: check if operation is present and spelled correctly"); 
    226225                        } 
    227226                    } 
     
    568567                // create call 
    569568                Message callMessage = interaction.createMessage(methodName); 
    570                 callMessage.setSignature(calledOperation); 
     569                callMessage.setSignature(calledOperation);  
     570                setMessageParameters(callMessage, calledOperation, event); 
    571571                callMessage.setConnector(inferConnector(msgSourceLifeline, msgTargetLifeline)); 
    572572                callMessage.setSendEvent(callSendFragment); 
     
    630630        } 
    631631    } 
     632 
     633     
    632634 
    633635    /** 
     
    958960        return null; 
    959961    } 
     962     
     963    private static void setMessageParameters(Message callMessage, Operation calledOperation, Event event) { 
     964        // Set parameters of operation 
     965        for( Parameter param : calledOperation.getOwnedParameters() ) { 
     966            Expression argument = (Expression) callMessage.createArgument(param.getName(), param.getType(), UMLPackage.Literals.EXPRESSION); 
     967             
     968            if( param.getDirection()==ParameterDirectionKind.IN_LITERAL || param.getDirection()==ParameterDirectionKind.INOUT_LITERAL) { 
     969                if( param.getType() instanceof DataType ) { 
     970                    InstanceSpecification instSpec = createInstanceSpecification((DataType) param.getType(), event); 
     971                     
     972                    InstanceValue value = (InstanceValue) argument.createOperand(null, param.getType(), UMLPackage.Literals.INSTANCE_VALUE); 
     973                    value.setInstance(instSpec); 
     974                } 
     975                else if( param.getType() instanceof PrimitiveType ) { 
     976                    if( "String".equals(param.getType().getName()) ) { 
     977                        LiteralString spec = (LiteralString) argument.createOperand(param.getName(), null, UMLPackage.Literals.LITERAL_STRING); 
     978                        spec.setValue("foobar"); // TODO needs to be real value 
     979                    } 
     980                    else if( "Integer".equals(param.getType().getName()) ) { 
     981                        LiteralInteger spec = (LiteralInteger) argument.createOperand(param.getName(), null, UMLPackage.Literals.LITERAL_INTEGER); 
     982                        spec.setValue(42); // TODO needs to be real value 
     983                    } 
     984                    else if( "Boolean".equals(param.getType().getName()) ) { 
     985                        LiteralBoolean spec = (LiteralBoolean) argument.createOperand(param.getName(), null, UMLPackage.Literals.LITERAL_BOOLEAN); 
     986                        spec.setValue(true); // TODO needs to be real value 
     987                    } 
     988                    else if( "Real".equals(param.getType().getName()) ) { 
     989                        LiteralReal spec = (LiteralReal) argument.createOperand(param.getName(), null, UMLPackage.Literals.LITERAL_REAL); 
     990                        spec.setValue(3.14); // TODO needs to be real value 
     991                    } 
     992                } 
     993            } else { 
     994                // set literalNull for out and return parameters 
     995                argument.createOperand(null, param.getType(), UMLPackage.Literals.LITERAL_NULL); 
     996            } 
     997        } 
     998    } 
     999     
     1000    public static InstanceSpecification createInstanceSpecification(DataType type, Event event) { 
     1001        String pkgUBTInstSpecs = "UBT_InstanceSpecifications"; 
     1002        Model model = type.getModel(); 
     1003        Package ubtInstSpecPkg = (Package) model.getOwnedMember(pkgUBTInstSpecs); 
     1004        if( ubtInstSpecPkg==null ) { 
     1005            ubtInstSpecPkg = (Package) type.getModel().createPackagedElement(pkgUBTInstSpecs, UMLPackage.Literals.PACKAGE); 
     1006        } 
     1007        String serviceName = ((SOAPEventType) event.getType()).getServiceName(); 
     1008        Package serviceInstSpecPkg = (Package) ubtInstSpecPkg.getOwnedMember(serviceName); 
     1009        if( serviceInstSpecPkg==null ) { 
     1010            serviceInstSpecPkg = (Package) ubtInstSpecPkg.createPackagedElement(serviceName, UMLPackage.Literals.PACKAGE); 
     1011        } 
     1012         
     1013        InstanceSpecification instSpec = (InstanceSpecification) serviceInstSpecPkg.createPackagedElement("instspec_"+type.getName(), UMLPackage.Literals.INSTANCE_SPECIFICATION); 
     1014        instSpec.getClassifiers().add(type); 
     1015        System.out.println(type.getName()); 
     1016        for( Property prop : type.getAllAttributes() ) { 
     1017            // TODO handle multiplicity 
     1018            //int lowerBound = prop.getLower(); 
     1019            //int upperBound = prop.getUpper(); 
     1020             
     1021            Slot slot = instSpec.createSlot(); 
     1022            slot.setDefiningFeature(prop); 
     1023            if( prop.getType() instanceof PrimitiveType ) { 
     1024                if( "String".equals(prop.getType().getName()) ) { 
     1025                    LiteralString value = (LiteralString) slot.createValue(prop.getName(), null, UMLPackage.Literals.LITERAL_STRING); 
     1026                    value.setValue("foobar"); // TODO needs to be real value 
     1027                } 
     1028                else if( "Integer".equals(prop.getType().getName()) ) { 
     1029                    LiteralInteger value = (LiteralInteger) slot.createValue(prop.getName(), null, UMLPackage.Literals.LITERAL_INTEGER); 
     1030                    value.setValue(42); // TODO needs to be real value 
     1031                } 
     1032                else if( "Boolean".equals(prop.getType().getName()) ) { 
     1033                    LiteralBoolean value = (LiteralBoolean) slot.createValue(prop.getName(), null, UMLPackage.Literals.LITERAL_BOOLEAN); 
     1034                    value.setValue(true); // TODO needs to be real value 
     1035                } 
     1036                else if( "Real".equals(prop.getType().getName()) ) { 
     1037                    LiteralReal value = (LiteralReal) slot.createValue(prop.getName(), null, UMLPackage.Literals.LITERAL_REAL); 
     1038                    value.setValue(3.14); // TODO needs to be real value 
     1039                } 
     1040            } 
     1041            else if( prop.getType() instanceof DataType ) { 
     1042                InstanceValue value = (InstanceValue) slot.createValue(prop.getName(), prop.getType(), UMLPackage.Literals.INSTANCE_VALUE); 
     1043                value.setInstance(createInstanceSpecification((DataType) prop.getType(), event)); 
     1044            } 
     1045        } 
     1046        return instSpec; 
     1047    } 
    9601048} 
Note: See TracChangeset for help on using the changeset viewer.