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

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

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

/**
 * Creates a new repository entry.
 *
 * This service is useful if repositiory entries should be created from web applications.
 *
 * # As IX service call
 *
 *     sol.common.IxUtils.execute('RF_sol_dev_service_CreateRepoEntry', {
 *       saveToRepoConfig: { repoPath: arcPath, maskId: elo.CONST.DOC_MASK.GUID_ELOSCRIPTS, contentObject: configJson }
 *     });
 *
 * @author JHR, ELO Digital Office GmbH
 * @version 1.0
 *
 * @eloix
 *
 * @requires  sol.Logger
 * @requires  sol.common.RepoUtils
 * @requires  sol.common.ix.RfUtils
 * @requires  sol.common.ix.ServiceBase
 */
sol.define("sol.dev.ix.services.CreateRepoEntry", {
  extend: "sol.common.ix.ServiceBase",
  requiredConfig: ["saveToRepoConfig"],

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

  /**
   * Creates a new repository document or saves a new version to an existing document
   * @return {Object}
   */
  process: function () {
    var me = this,
        objId;

    objId = sol.common.RepoUtils.saveToRepo(me.saveToRepoConfig);

    return {
      objId: objId
    };
  }
});

/**
 * @member sol.dev.ix.services.CreateRepoEntry
 * @method RF_sol_dev_service_CreateRepoEntry
 * @static
 * @inheritdoc sol.common.ix.ServiceBase#RF_ServiceBaseName
 */
function RF_sol_dev_service_CreateRepoEntry(iXSEContext, args) {
  logger.enter("RF_sol_dev_service_CreateRepoEntry", args);
  var params, service, result;

  params = sol.common.ix.RfUtils.parseAndCheckParams(iXSEContext, arguments.callee.name, args, "saveToRepoConfig");
  service = sol.create("sol.dev.ix.services.CreateRepoEntry", params);
  result = sol.common.JsonUtils.stringifyAll(service.process());
  logger.exit("RF_sol_dev_service_CreateRepoEntry", result);
  return result;
}