    importPackage(Packages.de.elo.ix.client);

    //@include lib_Class.js
    //@include lib_sol.common.WfUtils.js
    //@include lib_sol.common.ix.ServiceBase.js

    var logger = sol.create("sol.Logger", { scope: "sol.common.ix.services.GetWorkflowMetadata" });

    /**
     * Retrieves some metadata of a workflow.
     *
     * # As IX service call
     *
     *     sol.common.IxUtils.execute('RF_sol_common_service_GetWorkflowMetadata', {
     *       flowId: "4711"
     *     });
     *
     * Returns the workflow metadata:
     *
     *     {
     *       flowId: 4711,            // the workflow id
     *       name: "Musterflow",      // the workflow name
     *       objId: "0815",           // the objId
     *       objName: "Testdoc",      // the objects name
     *       status: "SUCCESS",       // the workflow status
     *       templateId: 23,          // the template id
     *       templateName: "Muster",  // the template name
     *       ownerId: 0,              // the owner id
     *       ownerName: "Admin",      // the owner name
     *       activeNodes: [           // a list of all active nodes
     *         {
     *           nodeId: 1,           // id of the active node
     *           nodeName: "node 1",  // name of the active node
     *           userId: 0,           // id of the node user
     *           userName: "Admin"    // name of the node user
     *         }
     *       ]
     *     }
     *
     * @author PZ, ELO Digital Office GmbH
     * @version 1.0
     *
     * @eloix
     * @requires sol.common.WfUtils
     * @requires sol.common.ix.RfUtils
     */
    sol.define("sol.common.ix.services.GetWorkflowMetadata", {
      extend: "sol.common.ix.ServiceBase",

      requiredConfig: ["flowId"],

      /**
       * @cfg {String} flowId
       */

      /**
       * @cfg {Boolean} [inclFinished=true] (optional)
       */

      initialize: function (config) {
        var me = this;
        me.$super("sol.common.ix.ServiceBase", "initialize", [config]);

        me.inclFinished = (me.inclFinished === false) ? false : true;
      },

      /**
       * Retrieves the metadata
       * @return {Object}
       */
      process: function () {
        var me = this,
            wfUtils = sol.common.WfUtils,
            result = {},
            wfDiagram, wfStatus, activeNodes;

        try {
          wfDiagram = wfUtils.getWorkflow(me.flowId, { inclFinished: me.inclFinished });
          wfStatus = wfUtils.getWorkflowStatus(wfDiagram);

          result.flowId = wfDiagram.id;
          result.name = wfDiagram.name;
          result.objId = wfDiagram.objId;
          result.objName = wfDiagram.objName;
          result.status = wfStatus;
          result.templateId = wfDiagram.templateId;
          result.templateName = wfDiagram.templateName;
          result.ownerId = wfDiagram.ownerId;
          result.ownerName = wfDiagram.ownerName;

          activeNodes = wfUtils.getActiveNodes(wfDiagram);

          if (activeNodes && (activeNodes.length > 0)) {
            result.activeNodes = activeNodes.map(function (node) {
              return {
                nodeId: node.id,
                nodeName: node.name,
                userId: node.userId,
                userName: node.userName
              };
            });
          }

        } catch (ex) {
          me.logger.error("error retrieving workflow metadata", ex);
        }

        return result;
      }

    });

    /**
     * @member sol.common.ix.services.GetWorkflowMetadata
     * @method RF_sol_common_service_GetWorkflowMetadata
     * @static
     * @inheritdoc sol.common.ix.ServiceBase#RF_ServiceBaseName
     */
    function RF_sol_common_service_GetWorkflowMetadata(iXSEContext, args) {
      logger.enter("RF_sol_common_service_GetWorkflowMetadata", args);

      var params = sol.common.ix.RfUtils.parseAndCheckParams(iXSEContext, arguments.callee.name, args, "flowId"),
          service, result;

      service = sol.create("sol.common.ix.services.GetWorkflowMetadata", params);
      result = sol.common.JsonUtils.stringifyAll(service.process());

      logger.exit("RF_sol_common_service_GetWorkflowMetadata", result);

      return result;
    }