Switch to unified view

a/src/main/java/net/timbusproject/extractors/modules/tavernaextractor/TavernaExtractor.java b/src/main/java/net/timbusproject/extractors/modules/tavernaextractor/TavernaExtractor.java
...
...
49
import net.sf.taverna.t2.workflowmodel.processor.activity.Activity;
49
import net.sf.taverna.t2.workflowmodel.processor.activity.Activity;
50
import net.sf.taverna.t2.workflowmodel.processor.activity.DisabledActivity;
50
import net.sf.taverna.t2.workflowmodel.processor.activity.DisabledActivity;
51
import net.sf.taverna.t2.workflowmodel.processor.activity.UnrecognizedActivity;
51
import net.sf.taverna.t2.workflowmodel.processor.activity.UnrecognizedActivity;
52
import net.sf.taverna.t2.workflowmodel.processor.iteration.IterationTypeMismatchException;
52
import net.sf.taverna.t2.workflowmodel.processor.iteration.IterationTypeMismatchException;
53
import net.sf.taverna.t2.workflowmodel.serialization.DeserializationException;
53
import net.sf.taverna.t2.workflowmodel.serialization.DeserializationException;
54
import net.timbusproject.extractors.core.*;
55
import net.timbusproject.extractors.modules.tavernaextractor.utils.*;
54
import net.timbusproject.extractors.modules.tavernaextractor.utils.*;
56
import net.timbusproject.extractors.modules.tavernaextractor.utils.Container;
55
import net.timbusproject.extractors.modules.tavernaextractor.utils.Container;
57
import net.timbusproject.extractors.modules.tavernaextractor.utils.Container.Orientation;
56
import net.timbusproject.extractors.modules.tavernaextractor.utils.Container.Orientation;
58
import org.apache.batik.swing.JSVGCanvas;
57
import org.apache.batik.swing.JSVGCanvas;
59
import org.apache.commons.lang.StringUtils;
58
import org.apache.commons.lang.StringUtils;
...
...
61
import org.dom4j.DocumentException;
60
import org.dom4j.DocumentException;
62
import org.dom4j.DocumentHelper;
61
import org.dom4j.DocumentHelper;
63
import org.eclipse.emf.common.util.URI;
62
import org.eclipse.emf.common.util.URI;
64
import org.eclipse.emf.ecore.resource.Resource;
63
import org.eclipse.emf.ecore.resource.Resource;
65
import org.eclipse.emf.ecore.resource.ResourceSet;
64
import org.eclipse.emf.ecore.resource.ResourceSet;
66
import org.osgi.framework.BundleContext;
67
import org.osgi.framework.Version;
68
import org.osgi.service.log.LogService;
65
import org.osgi.service.log.LogService;
69
import org.sbaresearch.licensecheck.LicenseCheck;
66
import org.sbaresearch.licensecheck.LicenseCheck;
70
import org.springframework.beans.factory.annotation.Autowired;
67
import org.slf4j.Logger;
68
import org.slf4j.LoggerFactory;
71
import org.w3c.dom.NodeList;
69
import org.w3c.dom.NodeList;
72
import org.xml.sax.SAXException;
70
import org.xml.sax.SAXException;
73
import uk.ac.bolton.archimate.editor.model.viewpoints.IViewpoint;
71
import uk.ac.bolton.archimate.editor.model.viewpoints.IViewpoint;
74
import uk.ac.bolton.archimate.model.*;
72
import uk.ac.bolton.archimate.model.*;
75
import uk.ac.bolton.archimate.model.impl.BusinessEvent;
73
import uk.ac.bolton.archimate.model.impl.BusinessEvent;
...
...
92
90
93
/**
91
/**
94
 * @author Rudolf Mayer (rmayer@sba-research.org)
92
 * @author Rudolf Mayer (rmayer@sba-research.org)
95
 * @author Marco Unterberger (munterberger@sba-research.org)
93
 * @author Marco Unterberger (munterberger@sba-research.org)
96
 */
94
 */
97
public class TavernaExtractor extends CommandLineLauncher implements IExtractor {
95
public class TavernaExtractor extends CommandLineLauncher {
98
96
99
    private IArchimateFactory factory;
97
    private IArchimateFactory factory;
100
    private Map<String, IDiagramModelArchimateObject> elementModelObjectMap;
98
    private Map<String, IDiagramModelArchimateObject> elementModelObjectMap;
101
    private List<IRelationship> relations;
99
    private List<IRelationship> relations;
102
    private IArchimateDiagramModel layeredView;
100
    private IArchimateDiagramModel layeredView;
...
...
175
    private IApplicationFunction callScriptApplicationFunction = null;
173
    private IApplicationFunction callScriptApplicationFunction = null;
176
    private IApplicationFunction callWebServiceApplicationFunction = null;
174
    private IApplicationFunction callWebServiceApplicationFunction = null;
177
    private IApplicationFunction callToolInvocationFunction = null;
175
    private IApplicationFunction callToolInvocationFunction = null;
178
176
179
    private Dataflow dataflow;
177
    private Dataflow dataflow;
180
181
    private SSHManager sshManager;
178
    private SSHManager sshManager;
182
179
    private Logger LOGGER = LoggerFactory.getLogger(TavernaExtractor.class);
183
    @Autowired
184
    private BundleContext bundleContext;
185
186
    @Autowired
187
    private LogService LOGGER;
188
180
189
    public TavernaExtractor(){}
181
    public TavernaExtractor(){}
190
182
191
    public TavernaExtractor(boolean verbose) {
183
    public TavernaExtractor(boolean verbose) {
192
       //intenionally left empty in OSGi version
193
    }
184
    }
194
185
195
    public TavernaExtractor(SSHManager sshManager) {
186
    public TavernaExtractor(SSHManager sshManager) {
196
        this.sshManager = sshManager;
187
        this.sshManager = sshManager;
197
    }
188
    }
...
...
257
        return this.businessProcesses.getElements();
248
        return this.businessProcesses.getElements();
258
    }
249
    }
259
250
260
    public List<IArchimateElement> getBusinessObjects() {
251
    public List<IArchimateElement> getBusinessObjects() {
261
        return this.businessObjects.getElements();
252
        return this.businessObjects.getElements();
262
    }
263
264
265
    /*
266
        OSGi behaviour
267
     */
268
    @Override
269
    public String getName() {
270
        if(bundleContext != null)
271
            return bundleContext.getBundle().getHeaders().get("Bundle-Name");
272
273
        return String.valueOf("");
274
    }
275
276
    @Override
277
    public String getSymbolicName() {
278
        return bundleContext.getBundle().getSymbolicName();
279
    }
280
281
    @Override
282
    public Version getVersion() {
283
        return bundleContext.getBundle().getVersion();
284
    }
285
286
    @Override
287
    public EnumSet<OperatingSystem> getSupportedOperatingSystems() {
288
        return EnumSet.of(OperatingSystem.LINUX, OperatingSystem.OSX, OperatingSystem.WINDOWS);
289
    }
290
291
    @Override
292
    public HashMap<String, Parameter> getParameters() {
293
        HashMap<String, Parameter> parameters = new HashMap<>();
294
        Parameter defaultParameter = new Parameter(false, true, ParameterType.STRING);
295
        parameters.put("user", new Parameter(false));
296
        parameters.put("password", new Parameter(true));
297
        parameters.put("port", new Parameter(false, ParameterType.NUMBER));
298
        parameters.put("fqdn", new Parameter(false));
299
        parameters.put("tavernaHome", defaultParameter);
300
        parameters.put("archimateOutputPath", defaultParameter);
301
        parameters.put("inputFileName", defaultParameter);
302
        return parameters;
303
    }
304
305
    @Override
306
    public String extract(Endpoint endpoint, boolean b) throws Exception {
307
308
        // setting in- and output files
309
310
        //TODO ?? detect OS of endpoint and apply to paths ??
311
312
        Path tavernaHome = Paths.get(endpoint.getProperty("tavernaHome"));
313
        String archimateOutputPath = endpoint.getProperty("archimateOutputPath");
314
        String inputFileName = endpoint.getProperty("inputFileName");
315
316
        System.out.println(tavernaHome);
317
        System.out.println(archimateOutputPath);
318
        System.out.println(inputFileName);
319
320
        SSHManager _sshManager = new SSHManager(endpoint.getProperty("fqdn")
321
                ,new Integer(endpoint.getProperty("port")),
322
                endpoint.getProperty("user"),
323
                endpoint.getProperty("password"));
324
        TavernaExtractor extractor = new TavernaExtractor(_sshManager);
325
        TavernaExtractor.setTavernaHome(tavernaHome);
326
        TavernaExtractor.setArchimateOutputPath(archimateOutputPath);
327
        TavernaExtractor.setInputFileName(inputFileName);
328
329
        // starts the execution
330
        extractor.process();
331
332
        return new String("Extraction finished.");
333
    }
253
    }
334
254
335
    /*
255
    /*
336
     * // Transform a Taverna (t2flow) file to an Archimate file ///////////////
256
     * // Transform a Taverna (t2flow) file to an Archimate file ///////////////
337
     */
257
     */
338
    public void process() throws EditException, OpenDataflowException, InvalidOptionException,
258
    public void process() throws EditException, OpenDataflowException, InvalidOptionException,
339
            InvalidDataflowException, TokenOrderException, ReadInputException, DatabaseConfigurationException,
259
            InvalidDataflowException, TokenOrderException, ReadInputException, DatabaseConfigurationException,
340
            CMException, IOException, DeserializationException, IterationTypeMismatchException {
260
            CMException, IOException, DeserializationException, IterationTypeMismatchException {
341
261
342
        LOGGER.log(LogService.LOG_INFO, "Start Taverna Extractor ...");
262
        LOGGER.info( "Start Taverna Extractor ...");
343
263
344
        //setup
264
        //setup
345
        TavernaExtractor.setTavernaHomeLib(TavernaExtractor.getTavernaHome().resolve("lib"));
265
        TavernaExtractor.setTavernaHomeLib(TavernaExtractor.getTavernaHome().resolve("lib"));
346
        TavernaExtractor.setTavernaHomeRepo(TavernaExtractor.getTavernaHome().resolve("repository"));
266
        TavernaExtractor.setTavernaHomeRepo(TavernaExtractor.getTavernaHome().resolve("repository"));
347
267
348
        validateDirectories(TavernaExtractor.getTavernaHome(), TavernaExtractor.getTavernaHomeLib(), TavernaExtractor.getTavernaHomeRepo());
268
        validateDirectories(TavernaExtractor.getTavernaHome(), TavernaExtractor.getTavernaHomeLib(), TavernaExtractor.getTavernaHomeRepo());
349
269
350
        LOGGER.log(LogService.LOG_INFO, "TavernaHome is set to [" + TavernaExtractor.getTavernaHome() + "].");
270
        LOGGER.info( "TavernaHome is set to [" + TavernaExtractor.getTavernaHome() + "].");
351
        LOGGER.log(LogService.LOG_INFO, "TavernaHomeLib is set to [" + TavernaExtractor.getTavernaHomeLib() + "].");
271
        LOGGER.info( "TavernaHomeLib is set to [" + TavernaExtractor.getTavernaHomeLib() + "].");
352
        LOGGER.log(LogService.LOG_INFO, "TavernaHomeRepo is set to [" + TavernaExtractor.getTavernaHomeRepo() + "].");
272
        LOGGER.info( "TavernaHomeRepo is set to [" + TavernaExtractor.getTavernaHomeRepo() + "].");
353
        LOGGER.log(LogService.LOG_INFO, "Workflow input file is [" + TavernaExtractor.getInputFileName() + "].");
273
        LOGGER.info( "Workflow input file is [" + TavernaExtractor.getInputFileName() + "].");
354
        LOGGER.log(LogService.LOG_INFO, "Archimate output file is [" + TavernaExtractor.getArchimateOutputPath() + "].");
274
        LOGGER.info( "Archimate output file is [" + TavernaExtractor.getArchimateOutputPath() + "].");
355
275
356
        inputPorts = new Container(Orientation.VERTICAL);
276
        inputPorts = new Container(Orientation.VERTICAL);
357
        outputPorts = new Container(Orientation.VERTICAL);
277
        outputPorts = new Container(Orientation.VERTICAL);
358
        businessObjects = new Container(Orientation.HORIZONTAL);
278
        businessObjects = new Container(Orientation.HORIZONTAL);
359
        businessProcesses = new Container(Orientation.HORIZONTAL);
279
        businessProcesses = new Container(Orientation.HORIZONTAL);
...
...
401
321
402
            if (file.exists()) {
322
            if (file.exists()) {
403
                    workflowURL = file.toURI().toURL();
323
                    workflowURL = file.toURI().toURL();
404
            }
324
            }
405
325
406
            LOGGER.log(LogService.LOG_INFO, "Reading workflow from " + workflowURL);
326
            LOGGER.info( "Reading workflow from " + workflowURL);
407
            dataflow = openDataflow(workflowURL);
327
            dataflow = openDataflow(workflowURL);
408
        } catch (NullPointerException npe) {
328
        } catch (NullPointerException npe) {
409
            npe.printStackTrace();
329
            npe.printStackTrace();
410
            LOGGER.log(LogService.LOG_ERROR, "ERROR reading workflow from [" + inputFileName + "]." + npe.getMessage());
330
            LOGGER.error( "ERROR reading workflow from [" + inputFileName + "]." + npe.getMessage());
411
            return;
331
            return;
412
        }
332
        }
413
333
414
        // current classpath
334
        // current classpath
415
        String classpath = System.getProperty("java.class.path");
335
        String classpath = System.getProperty("java.class.path");
...
...
528
                String jarLocation = jarDep.getAbsolutePath();
448
                String jarLocation = jarDep.getAbsolutePath();
529
                repoBundle.getProperties().add(createDepProperties(jarLocation));
449
                repoBundle.getProperties().add(createDepProperties(jarLocation));
530
            }
450
            }
531
         }
451
         }
532
        else{
452
        else{
533
            LOGGER.log(LogService.LOG_ERROR, "ERROR: "+TavernaExtractor.getTavernaHomeRepo().toFile()+" is not a directory. No further dependecies processing.");
453
            LOGGER.error( "ERROR: "+TavernaExtractor.getTavernaHomeRepo().toFile()+" is not a directory. No further dependecies processing.");
534
        }
454
        }
535
        // --- END Taverna ---
455
        // --- END Taverna ---
536
456
537
        // --- BEGIN Events ---
457
        // --- BEGIN Events ---
538
        // Start Event
458
        // Start Event
...
...
559
                OS_SYSTEM_INFO, infrastructureFolder, nodeElements);
479
                OS_SYSTEM_INFO, infrastructureFolder, nodeElements);
560
        ArchiUtils.initRelationNodeElement(factory.createUsedByRelationship(), operatingSystem, java, relationsFolder,
480
        ArchiUtils.initRelationNodeElement(factory.createUsedByRelationship(), operatingSystem, java, relationsFolder,
561
                nodeElements);
481
                nodeElements);
562
        // --- END CREATING DEFAULT ELEMENTS ---
482
        // --- END CREATING DEFAULT ELEMENTS ---
563
483
564
        LOGGER.log(LogService.LOG_DEBUG, "Process Input ports");
484
        LOGGER.debug("Process Input ports");
565
        for (DataflowInputPort inputPort : dataflow.getInputPorts()) {
485
        for (DataflowInputPort inputPort : dataflow.getInputPorts()) {
566
            IBusinessObject port_business = ArchiUtils.initElement(factory.createBusinessObject(), inputPort.getName(),
486
            IBusinessObject port_business = ArchiUtils.initElement(factory.createBusinessObject(), inputPort.getName(),
567
                    businessFolder, inputPorts);
487
                    businessFolder, inputPorts);
568
            IDataObject port_data = ArchiUtils.initElement(factory.createDataObject(), inputPort.getName(),
488
            IDataObject port_data = ArchiUtils.initElement(factory.createDataObject(), inputPort.getName(),
569
                    applicationFolder, dataObjects);
489
                    applicationFolder, dataObjects);
...
...
575
            ArchiUtils.initRelation(factory.createRealisationRelationship(), port_data, port_business, relationsFolder,
495
            ArchiUtils.initRelation(factory.createRealisationRelationship(), port_data, port_business, relationsFolder,
576
                    relations);
496
                    relations);
577
            ArchiUtils.initRelation(factory.createRealisationRelationship(), port_infrastructure, port_data,
497
            ArchiUtils.initRelation(factory.createRealisationRelationship(), port_infrastructure, port_data,
578
                    relationsFolder, relations);
498
                    relationsFolder, relations);
579
        }
499
        }
580
        LOGGER.log(LogService.LOG_DEBUG, "Process Output ports");
500
        LOGGER.debug("Process Output ports");
581
        for (DataflowOutputPort outputPort : dataflow.getOutputPorts()) {
501
        for (DataflowOutputPort outputPort : dataflow.getOutputPorts()) {
582
            IBusinessObject port_business = ArchiUtils.initElement(factory.createBusinessObject(),
502
            IBusinessObject port_business = ArchiUtils.initElement(factory.createBusinessObject(),
583
                    outputPort.getName(), businessFolder, outputPorts);
503
                    outputPort.getName(), businessFolder, outputPorts);
584
            IDataObject port_data = ArchiUtils.initElement(factory.createDataObject(), outputPort.getName(),
504
            IDataObject port_data = ArchiUtils.initElement(factory.createDataObject(), outputPort.getName(),
585
                    applicationFolder, dataObjects);
505
                    applicationFolder, dataObjects);
...
...
672
        //sshManager.send(...);
592
        //sshManager.send(...);
673
593
674
        resource.getContents().add(model);
594
        resource.getContents().add(model);
675
        resource.save(null);
595
        resource.save(null);
676
596
677
        LOGGER.log(LogService.LOG_INFO, "Wrote model successfully to " + outFile.getAbsolutePath());
597
        LOGGER.info( "Wrote model successfully to " + outFile.getAbsolutePath());
678
    }
598
    }
679
599
680
    public void processWebServiceActivity(IFolder businessFolder, IFolder infrastructureFolder,
600
    public void processWebServiceActivity(IFolder businessFolder, IFolder infrastructureFolder,
681
                                          IFolder applicationFolder, IFolder relationsFolder, IApplicationComponent workflowApplicationComponent,
601
                                          IFolder applicationFolder, IFolder relationsFolder, IApplicationComponent workflowApplicationComponent,
682
                                          HashMap<Processor, IBusinessProcess> processorProcessMap,
602
                                          HashMap<Processor, IBusinessProcess> processorProcessMap,
...
...
690
        String type = null;
610
        String type = null;
691
        IProperty prop = factory.createProperty();
611
        IProperty prop = factory.createProperty();
692
        IProperty locationProp = factory.createProperty();
612
        IProperty locationProp = factory.createProperty();
693
        if (a instanceof WSDLActivity) {
613
        if (a instanceof WSDLActivity) {
694
614
695
            LOGGER.log(LogService.LOG_DEBUG, "WSDL Service found = " + processor.getLocalName());
615
            LOGGER.debug("WSDL Service found = " + processor.getLocalName());
696
            type = "SOAP";
616
            type = "SOAP";
697
            WSDLActivity wsdlActivity = (WSDLActivity) a;
617
            WSDLActivity wsdlActivity = (WSDLActivity) a;
698
            prop.setKey("WSDL_Location");
618
            prop.setKey("WSDL_Location");
699
            prop.setValue(wsdlActivity.getConfiguration().getWsdl());
619
            prop.setValue(wsdlActivity.getConfiguration().getWsdl());
700
            externalNode.getProperties().add(prop);
620
            externalNode.getProperties().add(prop);
...
...
702
            locationProp = createDepProperties(WSDLActivity.class);
622
            locationProp = createDepProperties(WSDLActivity.class);
703
        }
623
        }
704
624
705
        if (a instanceof RESTActivity) {
625
        if (a instanceof RESTActivity) {
706
626
707
            LOGGER.log(LogService.LOG_DEBUG, "RESTful Service found = " + processor.getLocalName());
627
            LOGGER.debug("RESTful Service found = " + processor.getLocalName());
708
            type = "HTTP";
628
            type = "HTTP";
709
            RESTActivity restActivity = (RESTActivity) a;
629
            RESTActivity restActivity = (RESTActivity) a;
710
            prop.setKey("URL");
630
            prop.setKey("URL");
711
            prop.setValue(restActivity.getConfiguration().getUrlSignature());
631
            prop.setValue(restActivity.getConfiguration().getUrlSignature());
712
            externalNode.getProperties().add(prop);
632
            externalNode.getProperties().add(prop);
...
...
792
                                      HashMap<Processor, IBusinessProcess> processorProcessMap,
712
                                      HashMap<Processor, IBusinessProcess> processorProcessMap,
793
                                      IApplicationFunction callWebServiceApplicationFunction, Processor processor, String processorName,
713
                                      IApplicationFunction callWebServiceApplicationFunction, Processor processor, String processorName,
794
                                      Activity<?> a) {
714
                                      Activity<?> a) {
795
715
796
        if (!(a instanceof RshellActivity)) {
716
        if (!(a instanceof RshellActivity)) {
797
            LOGGER.log(LogService.LOG_INFO, "Activity [" + a + "] is not an instance of RshellActivity. Stop further processing!");
717
            LOGGER.info( "Activity [" + a + "] is not an instance of RshellActivity. Stop further processing!");
798
            return;
718
            return;
799
        }
719
        }
800
720
801
        RshellActivity rshellActivity = (RshellActivity) a;
721
        RshellActivity rshellActivity = (RshellActivity) a;
802
722
...
...
887
                                    HashMap<Processor, IBusinessProcess> processorProcessMap,
807
                                    HashMap<Processor, IBusinessProcess> processorProcessMap,
888
                                    IApplicationFunction callWebServiceApplicationFunction, Processor processor, String processorName,
808
                                    IApplicationFunction callWebServiceApplicationFunction, Processor processor, String processorName,
889
                                    Activity<?> a, boolean isExternal) {
809
                                    Activity<?> a, boolean isExternal) {
890
810
891
        if (!(a instanceof ExternalToolActivity)) {
811
        if (!(a instanceof ExternalToolActivity)) {
892
            LOGGER.log(LogService.LOG_INFO, "Activity [" + a + "] is not an instance of ExternalToolActivity. Stop further processing!");
812
            LOGGER.info( "Activity [" + a + "] is not an instance of ExternalToolActivity. Stop further processing!");
893
            return;
813
            return;
894
        }
814
        }
895
815
896
        ExternalToolActivity externalInvocation = (ExternalToolActivity) a;
816
        ExternalToolActivity externalInvocation = (ExternalToolActivity) a;
897
817
...
...
999
                                         IFolder applicationFolder, IFolder relationsFolder, IApplicationComponent workflowApplicationComponent,
919
                                         IFolder applicationFolder, IFolder relationsFolder, IApplicationComponent workflowApplicationComponent,
1000
                                         HashMap<Processor, IBusinessProcess> processorProcessMap, Processor processor, Activity<?> a)
920
                                         HashMap<Processor, IBusinessProcess> processorProcessMap, Processor processor, Activity<?> a)
1001
            throws IOException {
921
            throws IOException {
1002
        beanshellScripts.add((BeanshellActivity) a);
922
        beanshellScripts.add((BeanshellActivity) a);
1003
923
1004
        LOGGER.log(LogService.LOG_DEBUG, "Beanshell script found = " + processor.getLocalName());
924
        LOGGER.debug("Beanshell script found = " + processor.getLocalName());
1005
925
1006
        // create external application service for each business process/function
926
        // create external application service for each business process/function
1007
        if (callScriptApplicationFunction == null) {
927
        if (callScriptApplicationFunction == null) {
1008
928
1009
            callScriptApplicationFunction = ArchiUtils.initElement(factory.createApplicationFunction(),
929
            callScriptApplicationFunction = ArchiUtils.initElement(factory.createApplicationFunction(),
...
...
1085
            Iterator<String> iter = conf.getLocalDependencies().iterator();
1005
            Iterator<String> iter = conf.getLocalDependencies().iterator();
1086
            while (iter.hasNext()) {
1006
            while (iter.hasNext()) {
1087
1007
1088
                String item = iter.next();
1008
                String item = iter.next();
1089
1009
1090
                LOGGER.log(LogService.LOG_DEBUG, "\t Dependency for " + processor.getLocalName() + " [" + item + "]");
1010
                LOGGER.debug("\t Dependency for " + processor.getLocalName() + " [" + item + "]");
1091
1011
1092
                IArtifact beanshellScriptDep = (IArtifact) ArchiUtils.initElement(factory.createArtifact(), item,
1012
                IArtifact beanshellScriptDep = (IArtifact) ArchiUtils.initElement(factory.createArtifact(), item,
1093
                        infrastructureFolder, nodeElements);
1013
                        infrastructureFolder, nodeElements);
1094
1014
1095
                ArchiUtils.initRelationNodeElement(factory.createAssociationRelationship(), script, beanshellScriptDep,
1015
                ArchiUtils.initRelationNodeElement(factory.createAssociationRelationship(), script, beanshellScriptDep,
...
...
1107
                Path pathToDep = Paths.get(fileName);
1027
                Path pathToDep = Paths.get(fileName);
1108
                if (Files.exists(pathToDep)) {
1028
                if (Files.exists(pathToDep)) {
1109
                    String license = licenseCheck.extract(pathToDep.toAbsolutePath().toString());
1029
                    String license = licenseCheck.extract(pathToDep.toAbsolutePath().toString());
1110
1030
1111
                    if (license.equals("Unknown license")) {
1031
                    if (license.equals("Unknown license")) {
1112
                        LOGGER.log(LogService.LOG_DEBUG, "\t Unknown license for dependency [" + item + "].");
1032
                        LOGGER.debug("\t Unknown license for dependency [" + item + "].");
1113
                    }
1033
                    }
1114
1034
1115
                    if (license != null && !license.equals("Unknown license")) {
1035
                    if (license != null && !license.equals("Unknown license")) {
1116
1036
1117
                        LOGGER.log(LogService.LOG_DEBUG, "\t Found license [" + license + "] for dependency [" + item + "].");
1037
                        LOGGER.debug("\t Found license [" + license + "] for dependency [" + item + "].");
1118
1038
1119
                        // create constraint element for dependency
1039
                        // create constraint element for dependency
1120
                        IConstraint licenseConstraint = ArchiUtils.initElement(factory.createConstraint(), license,
1040
                        IConstraint licenseConstraint = ArchiUtils.initElement(factory.createConstraint(), license,
1121
                                motivationFolder, infrastructure);
1041
                                motivationFolder, infrastructure);
1122
1042
1123
                        ArchiUtils.initRelation(factory.createRealisationRelationship(), beanshellScriptDep,
1043
                        ArchiUtils.initRelation(factory.createRealisationRelationship(), beanshellScriptDep,
1124
                                licenseConstraint, relationsFolder, relations);
1044
                                licenseConstraint, relationsFolder, relations);
1125
                    }
1045
                    }
1126
                } else {
1046
                } else {
1127
                    LOGGER.log(LogService.LOG_ERROR, "\t ERROR: Jar file [" + fileName + "] not found!");
1047
                    LOGGER.error( "\t ERROR: Jar file [" + fileName + "] not found!");
1128
                }
1048
                }
1129
            }
1049
            }
1130
        }
1050
        }
1131
    }
1051
    }
1132
1052
...
...
1501
        }
1421
        }
1502
1422
1503
        externalInfrastructureModelGroup.setBounds(0, starting_y, overall_X, 150);
1423
        externalInfrastructureModelGroup.setBounds(0, starting_y, overall_X, 150);
1504
        overall_Y += 150;
1424
        overall_Y += 150;
1505
1425
1506
        LOGGER.log(LogService.LOG_DEBUG, "drawExternalInfrastructureServices.getElements().size() = "
1426
        LOGGER.debug("drawExternalInfrastructureServices.getElements().size() = "
1507
                + infrastructureServices.getElements().size());
1427
                + infrastructureServices.getElements().size());
1508
1428
1509
        Map<String, int[]> boundsMap = ArchiLayoutUtils.getBoundsForElements(infrastructureServices.getElements(),
1429
        Map<String, int[]> boundsMap = ArchiLayoutUtils.getBoundsForElements(infrastructureServices.getElements(),
1510
                infrastructureServices.orientation);
1430
                infrastructureServices.orientation);
1511
        for (IArchimateElement element : infrastructureServices.getElements()) {
1431
        for (IArchimateElement element : infrastructureServices.getElements()) {
...
...
1585
            }
1505
            }
1586
            if (relation.getTarget() == null) {
1506
            if (relation.getTarget() == null) {
1587
                return;
1507
                return;
1588
            }
1508
            }
1589
1509
1590
            LOGGER.log(LogService.LOG_DEBUG, "drawing relation [" + relation.getSource().getName() + "("
1510
            LOGGER.debug("drawing relation [" + relation.getSource().getName() + "("
1591
                    + relation.getSource().eClass().getName() + ")] --> [" + relation.getTarget().getName() + "("
1511
                    + relation.getSource().eClass().getName() + ")] --> [" + relation.getTarget().getName() + "("
1592
                    + relation.getTarget().eClass().getName() + ")]");
1512
                    + relation.getTarget().eClass().getName() + ")]");
1593
1513
1594
            IDiagramModelArchimateObject source = elementModelObjectMap.get(relation.getSource().getId());
1514
            IDiagramModelArchimateObject source = elementModelObjectMap.get(relation.getSource().getId());
1595
            IDiagramModelArchimateObject target = elementModelObjectMap.get(relation.getTarget().getId());
1515
            IDiagramModelArchimateObject target = elementModelObjectMap.get(relation.getTarget().getId());
...
...
1618
1538
1619
        for (IArchimateElement element : layout.getGraph().getVertices()) {
1539
        for (IArchimateElement element : layout.getGraph().getVertices()) {
1620
1540
1621
            int x = (int) ((AbstractLayout<IArchimateElement, IArchimateElement>) layout).getX(element);
1541
            int x = (int) ((AbstractLayout<IArchimateElement, IArchimateElement>) layout).getX(element);
1622
            int y = (int) ((AbstractLayout<IArchimateElement, IArchimateElement>) layout).getY(element);
1542
            int y = (int) ((AbstractLayout<IArchimateElement, IArchimateElement>) layout).getY(element);
1623
            LOGGER.log(LogService.LOG_DEBUG, element.getName() + "[" + x + "][" + y + "]");
1543
            LOGGER.debug(element.getName() + "[" + x + "][" + y + "]");
1624
            items.put(element, new Point(x, y));
1544
            items.put(element, new Point(x, y));
1625
        }
1545
        }
1626
        return items;
1546
        return items;
1627
    }
1547
    }
1628
1548
...
...
1693
            portProperty.setKey("Port");
1613
            portProperty.setKey("Port");
1694
            portProperty.setValue(document.selectSingleNode("//port").getText());
1614
            portProperty.setValue(document.selectSingleNode("//port").getText());
1695
            props.add(portProperty);
1615
            props.add(portProperty);
1696
1616
1697
        } catch (DocumentException e) {
1617
        } catch (DocumentException e) {
1698
            LOGGER.log(LogService.LOG_ERROR, "ERROR parsing external tool invocation mechanism. " + e.getMessage());
1618
            LOGGER.error( "ERROR parsing external tool invocation mechanism. " + e.getMessage());
1699
        }
1619
        }
1700
1620
1701
        IProperty commandProperty = factory.createProperty();
1621
        IProperty commandProperty = factory.createProperty();
1702
        commandProperty.setKey("Command");
1622
        commandProperty.setKey("Command");
1703
        commandProperty.setValue(configuration.getUseCaseDescription().getCommand());
1623
        commandProperty.setValue(configuration.getUseCaseDescription().getCommand());
...
...
1730
1650
1731
    private void printPortInformation(Processor processor) {
1651
    private void printPortInformation(Processor processor) {
1732
1652
1733
        if (processor != null) {
1653
        if (processor != null) {
1734
            for (ProcessorInputPort inputPort : processor.getInputPorts()) {
1654
            for (ProcessorInputPort inputPort : processor.getInputPorts()) {
1735
                LOGGER.log(LogService.LOG_DEBUG, "--> Port = " + inputPort.getName() + "[depth = " + inputPort.getDepth() + "]");
1655
                LOGGER.debug("--> Port = " + inputPort.getName() + "[depth = " + inputPort.getDepth() + "]");
1736
            }
1656
            }
1737
            for (ProcessorOutputPort outputPort : processor.getOutputPorts()) {
1657
            for (ProcessorOutputPort outputPort : processor.getOutputPorts()) {
1738
                LOGGER.log(LogService.LOG_DEBUG, "<-- Port = " + outputPort.getName() + "[depth = " + outputPort.getDepth() + "]");
1658
                LOGGER.debug("<-- Port = " + outputPort.getName() + "[depth = " + outputPort.getDepth() + "]");
1739
            }
1659
            }
1740
        }
1660
        }
1741
    }
1661
    }
1742
1662
1743
    private List<Processor> findStartingProcessors(Dataflow dataflow) {
1663
    private List<Processor> findStartingProcessors(Dataflow dataflow) {
...
...
1757
            if (ArchiUtils.isValueProcessor(processor)) {
1677
            if (ArchiUtils.isValueProcessor(processor)) {
1758
                break;
1678
                break;
1759
            }
1679
            }
1760
1680
1761
            if (hasNoPrecedentProcessor(processor, outputPorts)) {
1681
            if (hasNoPrecedentProcessor(processor, outputPorts)) {
1762
                LOGGER.log(LogService.LOG_DEBUG, "Processor '" + processor.getLocalName() + "' has no precendent processors.");
1682
                LOGGER.debug("Processor '" + processor.getLocalName() + "' has no precendent processors.");
1763
                startingProcessors.add(processor);
1683
                startingProcessors.add(processor);
1764
            }
1684
            }
1765
        }
1685
        }
1766
        return startingProcessors;
1686
        return startingProcessors;
1767
    }
1687
    }
...
...
1778
        List<Processor> endingProcessors = new ArrayList<Processor>();
1698
        List<Processor> endingProcessors = new ArrayList<Processor>();
1779
        for (Processor processor : dataflow.getProcessors()) {
1699
        for (Processor processor : dataflow.getProcessors()) {
1780
1700
1781
            // detect if first step processor
1701
            // detect if first step processor
1782
            if (hasNoSucceedProcessor(processor, inputPorts)) {
1702
            if (hasNoSucceedProcessor(processor, inputPorts)) {
1783
                LOGGER.log(LogService.LOG_DEBUG, "Processor '" + processor.getLocalName() + "' has no succeed processors.");
1703
                LOGGER.debug("Processor '" + processor.getLocalName() + "' has no succeed processors.");
1784
                endingProcessors.add(processor);
1704
                endingProcessors.add(processor);
1785
            }
1705
            }
1786
        }
1706
        }
1787
        return endingProcessors;
1707
        return endingProcessors;
1788
    }
1708
    }
...
...
1831
            // Dot to SVG
1751
            // Dot to SVG
1832
            File svgTmp = new File(tmpDirPath + File.separator + "tavernaExtractorToArchimate.dot.svg");
1752
            File svgTmp = new File(tmpDirPath + File.separator + "tavernaExtractorToArchimate.dot.svg");
1833
1753
1834
            String[] COMMAND = { TavernaExtractor.getDotLocation(), "-Tsvg", dotTmp.getAbsolutePath(), "-o", svgTmp.getAbsolutePath() };
1754
            String[] COMMAND = { TavernaExtractor.getDotLocation(), "-Tsvg", dotTmp.getAbsolutePath(), "-o", svgTmp.getAbsolutePath() };
1835
1755
1836
            LOGGER.log(LogService.LOG_DEBUG, "Running command '" + StringUtils.join(COMMAND, " ") + "'.");
1756
            LOGGER.debug("Running command '" + StringUtils.join(COMMAND, " ") + "'.");
1837
1757
1838
            ProcessBuilder proc = new ProcessBuilder(COMMAND);
1758
            ProcessBuilder proc = new ProcessBuilder(COMMAND);
1839
            Process process = proc.start();
1759
            Process process = proc.start();
1840
1760
1841
            InputStream stderr = process.getErrorStream();
1761
            InputStream stderr = process.getErrorStream();
...
...
1885
            try {
1805
            try {
1886
                Integer x = (int) Math.abs(Double.parseDouble(nodeList.item(i).getTextContent()));
1806
                Integer x = (int) Math.abs(Double.parseDouble(nodeList.item(i).getTextContent()));
1887
                Integer y = (int) Math.abs(Double.parseDouble(nodeList.item(i + 1).getTextContent()));
1807
                Integer y = (int) Math.abs(Double.parseDouble(nodeList.item(i + 1).getTextContent()));
1888
                map.put(key, new Point(x, y));
1808
                map.put(key, new Point(x, y));
1889
            } catch (NumberFormatException nfe) {
1809
            } catch (NumberFormatException nfe) {
1890
                LOGGER.log(LogService.LOG_ERROR, "ERROR: Unable to convert to integer. " + nfe.getMessage());
1810
                LOGGER.error( "ERROR: Unable to convert to integer. " + nfe.getMessage());
1891
                map.put(key, new Point(1, 1));
1811
                map.put(key, new Point(1, 1));
1892
            }
1812
            }
1893
        }
1813
        }
1894
1814
1895
        for (Entry<String, Point> entry : map.entrySet()) {
1815
        for (Entry<String, Point> entry : map.entrySet()) {
...
...
1945
1865
1946
            String processorName = processor.getLocalName();
1866
            String processorName = processor.getLocalName();
1947
1867
1948
            for (Activity<?> a : processor.getActivityList()) {
1868
            for (Activity<?> a : processor.getActivityList()) {
1949
1869
1950
                LOGGER.log(LogService.LOG_DEBUG, processorName + " [" + processor.getActivityList().size() + "] -> "
1870
                LOGGER.debug(processorName + " [" + processor.getActivityList().size() + "] -> "
1951
                        + a.getClass().getName());
1871
                        + a.getClass().getName());
1952
1872
1953
                printPortInformation(processor);
1873
                printPortInformation(processor);
1954
1874
1955
                // TODO UnrecognizedActivity detected !!
1875
                // TODO UnrecognizedActivity detected !!
1956
                if (a instanceof UnrecognizedActivity) {
1876
                if (a instanceof UnrecognizedActivity) {
1957
                    LOGGER.log(LogService.LOG_ERROR, "PROBLEM: UnrecognizedActivity detected! ");
1877
                    LOGGER.error( "PROBLEM: UnrecognizedActivity detected! ");
1958
                }
1878
                }
1959
                // TODO DisabledActivity detected !!
1879
                // TODO DisabledActivity detected !!
1960
                // From the javadoc: A disabled activity is a wrapper for an Activity that is offline or similarly
1880
                // From the javadoc: A disabled activity is a wrapper for an Activity that is offline or similarly
1961
                // disabled
1881
                // disabled
1962
                if (a instanceof DisabledActivity) {
1882
                if (a instanceof DisabledActivity) {
1963
                    LOGGER.log(LogService.LOG_ERROR, "PROBLEM: DisabledActivity detected! ");
1883
                    LOGGER.error( "PROBLEM: DisabledActivity detected! ");
1964
                    // TODO: create a note element with information
1884
                    // TODO: create a note element with information
1965
                }
1885
                }
1966
1886
1967
                // nested worklfow
1887
                // nested worklfow
1968
                if (a instanceof DataflowActivity) {
1888
                if (a instanceof DataflowActivity) {
...
...
2147
        for (Processor processor : dataflow.getProcessors()) {
2067
        for (Processor processor : dataflow.getProcessors()) {
2148
            boolean isValueProcessor = ArchiUtils.isValueProcessor(processor);
2068
            boolean isValueProcessor = ArchiUtils.isValueProcessor(processor);
2149
2069
2150
            for (ProcessorOutputPort processorOutputPort : processor.getOutputPorts()) {
2070
            for (ProcessorOutputPort processorOutputPort : processor.getOutputPorts()) {
2151
2071
2152
                LOGGER.log(LogService.LOG_DEBUG, "Process processorOutputPort = '" + processorOutputPort.getName() + "'");
2072
                LOGGER.debug("Process processorOutputPort = '" + processorOutputPort.getName() + "'");
2153
2073
2154
                for (Datalink datalink : processorOutputPort.getOutgoingLinks()) {
2074
                for (Datalink datalink : processorOutputPort.getOutgoingLinks()) {
2155
2075
2156
                    EventHandlingInputPort sink = datalink.getSink();
2076
                    EventHandlingInputPort sink = datalink.getSink();
2157
2077
...
...
2193
                                IOrJunction mergeJunction = loopsJunctions.get(processor);
2113
                                IOrJunction mergeJunction = loopsJunctions.get(processor);
2194
2114
2195
                                ArchiUtils.initRelation(factory.createTriggeringRelationship(), mergeJunction,
2115
                                ArchiUtils.initRelation(factory.createTriggeringRelationship(), mergeJunction,
2196
                                        splitJunction, relationsFolder, relations);
2116
                                        splitJunction, relationsFolder, relations);
2197
2117
2198
                                LOGGER.log(LogService.LOG_DEBUG, "loop detected between [" + startProcessor.getLocalName() + "] --> ["
2118
                                LOGGER.debug("loop detected between [" + startProcessor.getLocalName() + "] --> ["
2199
                                        + processor.getLocalName() + "]");
2119
                                        + processor.getLocalName() + "]");
2200
                            }
2120
                            }
2201
                        }
2121
                        }
2202
2122
2203
                        Processor targetProcessor = ((ProcessorInputPortImpl) sink).getProcessor();
2123
                        Processor targetProcessor = ((ProcessorInputPortImpl) sink).getProcessor();
...
...
2249
2169
2250
                            // 2. create business object
2170
                            // 2. create business object
2251
                            IBusinessObject businessObject = ArchiUtils.initElement(factory.createBusinessObject(),
2171
                            IBusinessObject businessObject = ArchiUtils.initElement(factory.createBusinessObject(),
2252
                                    sink.getName(), businessFolder, businessObjects);
2172
                                    sink.getName(), businessFolder, businessObjects);
2253
2173
2254
                            LOGGER.log(LogService.LOG_DEBUG, "\t BusinessObject for datalink '" + datalink.getSource().getName() + " -> "
2174
                            LOGGER.debug("\t BusinessObject for datalink '" + datalink.getSource().getName() + " -> "
2255
                                    + sink.getName() + "' created.");
2175
                                    + sink.getName() + "' created.");
2256
2176
2257
                            if (processorObjectMapping.get(processor) == null) {
2177
                            if (processorObjectMapping.get(processor) == null) {
2258
                                processorObjectMapping.put(processor, new ArrayList<IBusinessObject>());
2178
                                processorObjectMapping.put(processor, new ArrayList<IBusinessObject>());
2259
                            }
2179
                            }