@Override
  public InterpreterResult interpret(String st, InterpreterContext context)
      throws InterpreterException {

    try {
      Properties finalProperties = new Properties();
      finalProperties.putAll(getProperties());
      Properties newProperties = new Properties();
      newProperties.load(new StringReader(st));
      for (String key : newProperties.stringPropertyNames()) {
        finalProperties.put(key.trim(), newProperties.getProperty(key).trim());
      }
      LOGGER.debug("Properties for InterpreterGroup: {} is {}", interpreterGroupId, finalProperties);
      interpreterSetting.setInterpreterGroupProperties(interpreterGroupId, finalProperties);
      return new InterpreterResult(InterpreterResult.Code.SUCCESS);
    } catch (IOException e) {
      LOGGER.error("Fail to update interpreter setting", e);
      return new InterpreterResult(InterpreterResult.Code.ERROR, ExceptionUtils.getStackTrace(e));
    }
  }
@Test
  void testPropertyTrim() throws InterpreterException {
    assertTrue(interpreterFactory.getInterpreter("test.conf", executionContext) instanceof ConfInterpreter);
    ConfInterpreter confInterpreter = (ConfInterpreter) interpreterFactory.getInterpreter("test.conf", executionContext);

    InterpreterContext context = InterpreterContext.builder()
            .setNoteId("noteId")
            .setParagraphId("paragraphId")
            .build();

    // space before key and space after values
    InterpreterResult result = confInterpreter.interpret(" property_1 \tnew_value \n new_property  \t dummy_value \n", context);
    assertEquals(InterpreterResult.Code.SUCCESS, result.code);

    assertTrue(interpreterFactory.getInterpreter("test", executionContext) instanceof RemoteInterpreter);
    RemoteInterpreter remoteInterpreter = (RemoteInterpreter) interpreterFactory.getInterpreter("test", executionContext);
    remoteInterpreter.interpret("hello world", context);
    Properties intpProperties = remoteInterpreter.getProperties();
    // Total 7 properties,
    // 3 built-in properties (zeppelin.interpreter.output.limit, zeppelin.interpreter.localRepo, zeppelin.interpreter.connection.poolsize)
    assertEquals(7, intpProperties.size());
    assertNotNull(intpProperties.getProperty("zeppelin.interpreter.output.limit"));
    assertNotNull(intpProperties.getProperty("zeppelin.interpreter.localRepo"));
    assertNotNull(intpProperties.getProperty("zeppelin.interpreter.connection.poolsize"));
    assertEquals("new_value", intpProperties.getProperty("property_1"));
    assertEquals("new_value_2", intpProperties.getProperty("property_2"));
    assertEquals("value_3", intpProperties.getProperty("property_3"));
    assertEquals("dummy_value", intpProperties.getProperty("new_property"));
  }