Commit f6db52be authored by Christos Tranoris's avatar Christos Tranoris
Browse files

Merge branch 'parent-child-characteristics' into 'develop'

Parent child characteristics

See merge request !7
parents f8db4939 d1f8e6bf
Loading
Loading
Loading
Loading
Loading
+267 −10
Original line number Original line Diff line number Diff line
@@ -250,7 +250,7 @@ export class ServiceRuleDesignComponent implements OnInit {
          this.workspace.charsListSet = this.workspace.charsListSet.concat( this.charsListArray );
          this.workspace.charsListSet = this.workspace.charsListSet.concat( this.charsListArray );


          this.workspace.charsListBoolean = this.charsListBoolean;
          this.workspace.charsListBoolean = this.charsListBoolean;

          this.workspace.specService = this.specService;




          this.charvarsAllFunction(this.workspace); //calling this function here causes a preloading of the blocks in the model in a synchronous manner. Asynchronously it is recalled later in the blockly toolbar
          this.charvarsAllFunction(this.workspace); //calling this function here causes a preloading of the blocks in the model in a synchronous manner. Asynchronously it is recalled later in the blockly toolbar
@@ -527,6 +527,8 @@ export class ServiceRuleDesignComponent implements OnInit {
    var xmlList = [];            
    var xmlList = [];            
    var chars: ServiceSpecRelationship[] = workspace.serviceSpecRel;
    var chars: ServiceSpecRelationship[] = workspace.serviceSpecRel;


    

    if (Blockly.Blocks['getServiceRefName']) {
    if (Blockly.Blocks['getServiceRefName']) {
      for (var i = 0; i < chars.length; i++) {
      for (var i = 0; i < chars.length; i++) {
        var blockText = '<block type="getServiceRefName">' +
        var blockText = '<block type="getServiceRefName">' +
@@ -558,10 +560,112 @@ export class ServiceRuleDesignComponent implements OnInit {
     
     





    // if (Blockly.Blocks['setServiceRefProps']) {
    //   for (var i = 0; i < chars.length; i++) {

    //     var options = [];
    //     var serviceRefSpec;
    //     var servRef = chars[i];

    //     workspace.specService.retrieveServiceSpecification({id: servRef.id, servRef , xmlList }).subscribe(
    //       data => serviceRefSpec = data,
    //       error => console.error(error),
    //       () => {                  
            
    //         var xmlx = xmlList; 
    //         var serviceRefChars: ServiceSpecCharacteristic[] = serviceRefSpec.serviceSpecCharacteristic;  
    //         for (var j = 0; j < serviceRefChars.length; j++) {
    //           options.push([ serviceRefChars[j].name, serviceRefChars[j].name ]);
    //         }
    //         console.log(servRef);
 
    //        var sortedArray: string[] = options.sort((n1,n2) => {
    //          if (n1 > n2) {
    //              return 1;
    //          }
         
    //          if (n1 < n2) {
    //              return -1;
    //          }
         
    //          return 0;
    //        });
 
    //        Blockly.Blocks['setServiceRefProps'] = {
    //          init: function() {
    //            this.appendDummyInput()
    //              .appendField("Service")
    //              .appendField(new Blockly.FieldLabelSerializable(""), "ASERVICEREFNAME");
    //            this.appendDummyInput()
    //              .appendField(new Blockly.FieldLabelSerializable(""), "ASERVICEREFUUID")
    //              .appendField(new Blockly.FieldLabelSerializable(""), "NAMELBL")
    //              .appendField(new Blockly.FieldDropdown( sortedArray ), "OPTIONEDVALUE");  
                 
                 
    //            this.appendValueInput("AVALUE")
    //              .setCheck("String")
    //              .setAlign(Blockly.ALIGN_RIGHT)
    //              .appendField("value");  
         
         
    //            this.setInputsInline( true );   
    //            this.setPreviousStatement(true, null);
    //            this.setNextStatement(true, null);
    //            this.setColour(160);
    //            this.setTooltip("Set values to characteristics of a refernced service.");
    //            this.setHelpUrl("");
         
    //          }, 
         
    //         };        
    //       }
    //     )

    //     var blockText = '<block type="setServiceRefProps">' +
    //         '<field name="ASERVICEREFNAME">'+ servRef.name +'</field>' +
    //         '<field name="ASERVICEREFUUID">'+ servRef.uuid +'</field>' +
    //             '</block>';
    //     var block = Blockly.Xml.textToDom(blockText);
    //     xmlList.push(block);
       

    //   }
    // }




    if (Blockly.Blocks['setServiceRefCharacteristicValues']) {
      for (var i = 0; i < chars.length; i++) {
       
        var blockText = '<block type="setServiceRefCharacteristicValues">' +
        '<field name="ASERVICEREFNAME">' + chars[i].name + '</field>' +
        '<field name="ASERVICEREFUUID">' + chars[i].uuid + '</field>' +
            '</block>';
        var block = Blockly.Xml.textToDom(blockText);
        xmlList.push(block);

      }
    }


    if (Blockly.Blocks['serviceRefCharacteristic']) {
      var blockText = '<block type="serviceRefCharacteristic">' +
      '<field name="ACHARACTERISTICNAME"></field>' +
      '<field name="AVALUE"></field>' +
          '</block>';
      var block = Blockly.Xml.textToDom(blockText);
      xmlList.push(block);
    }

    

    return xmlList;
    return xmlList;
  };
  };
  
  


  
     /**
     /**
     * Construct the blocks required by the flyout for the colours category.
     * Construct the blocks required by the flyout for the colours category.
     * @param {!Blockly.Workspace} workspace The workspace this flyout is for.
     * @param {!Blockly.Workspace} workspace The workspace this flyout is for.
@@ -581,7 +685,7 @@ export class ServiceRuleDesignComponent implements OnInit {
      }
      }
    }
    }


    blockText = '<block type="createresourcewhen"></block>';
    blockText = '<block type="createResourceRefIf"></block>';
    block = Blockly.Xml.textToDom(blockText);
    block = Blockly.Xml.textToDom(blockText);
    xmlList.push(block);   
    xmlList.push(block);   


@@ -618,11 +722,9 @@ export class ServiceRuleDesignComponent implements OnInit {


          var objects = Blockly.Java.valueToCode(block, 'VARIABLES', Blockly.Java.ORDER_NONE)  || null;
          var objects = Blockly.Java.valueToCode(block, 'VARIABLES', Blockly.Java.ORDER_NONE)  || null;


          objects = objects.replace('[', ' ,');
          objects = objects.substring(1, objects.length-1 ); //remove first and last brackets
          objects = objects.replace(']', ' ');



          var code = 'String.format(' +  atext + objects + ')';
          var code = 'String.format(' +  atext + ', ' + objects + ')';
          return [code, Blockly.Java.ORDER_ATOMIC];
          return [code, Blockly.Java.ORDER_ATOMIC];
      };
      };
  
  
@@ -1367,11 +1469,65 @@ export class ServiceRuleDesignComponent implements OnInit {
      var avalue =  Blockly.Java.valueToCode(block, 'CONDITION',
      var avalue =  Blockly.Java.valueToCode(block, 'CONDITION',
                Blockly.Java.ORDER_ASSIGNMENT) || 'true';
                Blockly.Java.ORDER_ASSIGNMENT) || 'true';


      var code = 'createServiceRefIf('  + serviceName    +', '+ avalue   +');\n';
      var charvalsVarName =  'charvals';      
      //put it in braces so to ensure the scope of the hashmap variable
      var code = '{\n';

      var charvalsVarName =  'charvals';
      code += 'java.util.HashMap<String,String> ' + charvalsVarName + ' = new java.util.HashMap<>();\n';

      var varray = '[';
      var cvs =  Blockly.Java.valueToCode(block, 'CHARVALUES', Blockly.Java.ORDER_NONE)  || null ;
      console.log( cvs );
      var objects = JSON.parse( cvs );
      console.log( objects );
      if (objects){
        objects.forEach(element => {
          var charname =  element.charname;
          var avalue =  element.charvalue; 
          code += charvalsVarName + '.put(' + charname + ',' +avalue + ');\n';
        });
      }
      varray += ']';


      code += 'createServiceRefIf('  + serviceName    +', '+ avalue +', '+ charvalsVarName  +');\n';
      code += '}\n';
      return code;
      return code;
  };
  };


  Blockly.Java['createResourceRefIf'] = function(block: any) {
    var resourceName = Blockly.Java.valueToCode(block, 'RESOURCE_NAME',
      Blockly.Java.ORDER_NONE) || '""';
    
  
      var avalue =  Blockly.Java.valueToCode(block, 'CONDITION',
                Blockly.Java.ORDER_ASSIGNMENT) || 'true';
                
      var charvalsVarName =  'charvals';      
      //put it in braces so to ensure the scope of the hashmap variable
      var code = '{\n';

      var charvalsVarName =  'charvals';
      code += 'java.util.HashMap<String,String> ' + charvalsVarName + ' = new java.util.HashMap<>();\n';

      var varray = '[';
      var cvs =  Blockly.Java.valueToCode(block, 'CHARVALUES', Blockly.Java.ORDER_NONE)  || null ;
      console.log( cvs );
      var objects = JSON.parse( cvs );
      console.log( objects );
      if (objects){
        objects.forEach(element => {
          var charname =  element.charname;
          var avalue =  element.charvalue; 
          code += charvalsVarName + '.put(' + charname + ',' +avalue + ');\n';
        });
      }
      varray += ']';

      code += 'createResourceRefIf('  + resourceName    +', '+ avalue +', '+ charvalsVarName  +');\n';
      code += '}\n';
      return code;
  };


  
  
  Blockly.Java['getServiceRefName'] = function(block: any) {
  Blockly.Java['getServiceRefName'] = function(block: any) {
@@ -1417,6 +1573,107 @@ export class ServiceRuleDesignComponent implements OnInit {




  
  
  // Blockly.Java['setServiceRefProps'] = function(block: any) {
  //   // Variable getter.
  //       console.log('setServiceRefProps');

    
  //   //var acharname='""';
  //   var servicename = block.getFieldValue('ASERVICEREFNAME');
  //   servicename = Blockly.Java.quote_( servicename );
  //   var servicerefuuid = block.getFieldValue('ASERVICEREFUUID');
  //   servicerefuuid = Blockly.Java.quote_( servicerefuuid );
    
  //   console.log( servicename );

           
  //   // var acharname =  Blockly.Java.valueToCode(block, 'characteristicName',
  //   //           Blockly.Java.ORDER_ASSIGNMENT) || '""';
  //   var acharname = block.getFieldValue('OPTIONEDVALUE');
  //   console.log( acharname );
    
           
  //   var aVALUE =  Blockly.Java.valueToCode(block, 'AVALUE',
  //             Blockly.Java.ORDER_ASSIGNMENT) || '""';
    
  //   console.log( aVALUE );

  //   var code = 'setServiceRefPropValue(' + servicename +', '+acharname +', '+aVALUE   +');\n';


  //   return  code;
  // };


  
  Blockly.Java['serviceRefCharacteristic'] = function(block: any) {
    // Variable getter.
    console.log('serviceRefCharacteristic');

    var acharname = Blockly.Java.valueToCode(block, 'ACHARACTERISTICNAME',
    Blockly.Java.ORDER_ASSIGNMENT) || '""';
    console.log( acharname );

    var aVALUE =  Blockly.Java.valueToCode(block, 'AVALUE',
              Blockly.Java.ORDER_ASSIGNMENT) || '""';
    
    console.log( aVALUE );

    var code: any = { "charname" : acharname, "charvalue" : aVALUE };

    code =  JSON.stringify( code, null );
    return [code, Blockly.Java.ORDER_ATOMIC];
  };

  Blockly.Java['setServiceRefCharacteristicValues'] = function(block: any) {
    // Variable getter.
        console.log('setServiceRefCharacteristicValues');

    
    //var acharname='""';
    var servicename = block.getFieldValue('ASERVICEREFNAME');
    servicename = Blockly.Java.quote_( servicename );
    var servicerefuuid = block.getFieldValue('ASERVICEREFUUID');
    servicerefuuid = Blockly.Java.quote_( servicerefuuid );
    
    console.log( servicename );

           
    var acharname =  Blockly.Java.valueToCode(block, 'characteristicName',
              Blockly.Java.ORDER_ASSIGNMENT) || '""';
    
    console.log( acharname );
    
    
    var cvs =  Blockly.Java.valueToCode(block, 'CHARVALUES', Blockly.Java.ORDER_NONE)  || null ;
    console.log( cvs );
    var objects = JSON.parse( cvs );
    console.log( objects );

    //var charvalsVarName =  'charvals_'+ Math.floor(Math.random() * 1000) + 1;
    var charvalsVarName =  'charvals';
    //put it in braces so to ensure the scope of the hashmap variable
    var code = '{\n';
    code += 'java.util.HashMap<String,String> ' + charvalsVarName + ' = new java.util.HashMap<>();\n';

    var varray = '[';

    if (objects){
      objects.forEach(element => {
        var charname =  element.charname;
        var avalue =  element.charvalue; 
        code += charvalsVarName + '.put(' + charname + ',' +avalue + ');\n';
      });
    }
    varray += ']';

    code += 'setServiceRefCharacteristicsValues(' + servicename +', ' + charvalsVarName + ');\n';
    code += '}\n';

    return  code;
  };


  
  
    }
    }
  
  
+120 −1
Original line number Original line Diff line number Diff line
@@ -1214,8 +1214,16 @@ Blockly.Blocks['example_variable_typed'] = {
          .appendField("Create Ref Service");
          .appendField("Create Ref Service");
      this.appendValueInput("CONDITION")
      this.appendValueInput("CONDITION")
          .setCheck("Boolean")
          .setCheck("Boolean")
          .setAlign(Blockly.ALIGN_RIGHT)
          .appendField("if");
          .appendField("if");
      this.setInputsInline(true);

      this.appendValueInput("CHARVALUES")
        .setCheck("Array")
        .setAlign(Blockly.ALIGN_RIGHT)
        .appendField("Characteristics");  


      this.setInputsInline(false);
      this.setPreviousStatement(true, null);
      this.setPreviousStatement(true, null);
      this.setNextStatement(true, null);
      this.setNextStatement(true, null);
      this.setColour(230);
      this.setColour(230);
@@ -1224,6 +1232,27 @@ Blockly.Blocks['example_variable_typed'] = {
    }
    }
  };
  };


  Blockly.Blocks['createResourceRefIf'] = {
    init: function() {
      this.appendValueInput("RESOURCE_NAME")
          .setCheck("String")
          .appendField("Create Ref Resource");
      this.appendValueInput("CONDITION")
          .setCheck("Boolean")
          .setAlign(Blockly.ALIGN_RIGHT)
          .appendField("if");
          this.appendValueInput("CHARVALUES")
          .setCheck("Array")
          .setAlign(Blockly.ALIGN_RIGHT)
          .appendField("Characteristics");  
      this.setInputsInline(false);
      this.setPreviousStatement(true, null);
      this.setNextStatement(true, null);
      this.setColour(230);
   this.setTooltip("Create a resource when a condition validates to true during the creation process.");
   this.setHelpUrl("");
    }
  };




  
  
@@ -1357,3 +1386,93 @@ Blockly.Blocks['example_variable_typed'] = {
    }
    }
  };
  };
  
  



  // Blockly.Blocks['setServiceRefProps'] = {
  //   init: function() {
  //     this.appendDummyInput()
  //       .appendField("Service")
  //       .appendField(new Blockly.FieldLabelSerializable(""), "ASERVICEREFNAME");  
  //       this.appendDummyInput()
  //         .appendField(new Blockly.FieldLabelSerializable(""), "ASERVICEREFUUID")       
  //         .appendField(new Blockly.FieldLabelSerializable(""), "NAMELBL")
  //         .appendField(new Blockly.FieldLabelSerializable(""), "OPTIONEDVALUE");
        

        
  //     this.appendValueInput("AVALUE")
  //       .setCheck("String")
  //       .setAlign(Blockly.ALIGN_RIGHT)
  //       .appendField("value");  


  //     this.setInputsInline( true );   
  //     this.setPreviousStatement(true, null);
  //     this.setNextStatement(true, null);
  //     this.setColour(colourtexts);
  //     this.setTooltip("Set values to characteristics of a refernced service.");
  //     this.setHelpUrl("");

  //   }, 

  // };


  
  Blockly.Blocks['serviceRefCharacteristic'] = {
    init: function() {

      this.appendValueInput("ACHARACTERISTICNAME")
        .setCheck("String")
        .setAlign(Blockly.ALIGN_RIGHT)
        .appendField("Name");  

        
      this.appendValueInput("AVALUE")
        .setCheck("String")
        .setAlign(Blockly.ALIGN_RIGHT)
        .appendField("value");  


      this.setInputsInline( true );   
      this.setOutput(true, 'String');
      this.setColour(colourtexts);
      this.setTooltip("Set values to characteristics of a referenced service.");
      this.setHelpUrl("");

    }, 

  };


  Blockly.Blocks['setServiceRefCharacteristicValues'] = {
    init: function() {
      this.appendDummyInput()
        .appendField("Service")
        .appendField(new Blockly.FieldLabelSerializable(""), "ASERVICEREFNAME");  
        this.appendDummyInput()
          .appendField(new Blockly.FieldLabelSerializable(""), "ASERVICEREFUUID");  
        

       
      this.appendValueInput("CHARVALUES")
        .setCheck("Array")
        .setAlign(Blockly.ALIGN_RIGHT)
        .appendField("Characteristics");  


      this.setInputsInline( false );   
      this.setPreviousStatement(true, null);
      this.setNextStatement(true, null);
      this.setColour(colourtexts);
      this.setTooltip("Set values to characteristics of a refernced service.");
      this.setHelpUrl("");

    }, 

    

    
  };
  
 No newline at end of file