public Object invoke(
            ModuleInstance module,
            Object source,
            Object[] args,
            QvtOperationalEvaluationEnv evalEnv) {
          String self = (String) source;
          self = self.trim();
          StringBuilder buf = new StringBuilder(self.length());
          boolean isWhiteArea = false;
          for (int i = 0; i < self.length(); i++) {
            char c = self.charAt(i);
            if (UCharacter.isWhitespace(c)) {
              if (isWhiteArea) {
                continue;
              }

              isWhiteArea = true;
              buf.append(c);
            } else {
              isWhiteArea = false;
              buf.append(c);
            }
          }
          return buf.toString();
        }