@Override
  public void activateKaleoDefinition(long kaleoDefinitionId, ServiceContext serviceContext)
      throws PortalException {

    KaleoDefinition kaleoDefinition =
        kaleoDefinitionPersistence.findByPrimaryKey(kaleoDefinitionId);

    kaleoDefinition.setModifiedDate(new Date());
    kaleoDefinition.setActive(true);

    kaleoDefinitionPersistence.update(kaleoDefinition);
  }
  @Override
  public void activateKaleoDefinition(String name, int version, ServiceContext serviceContext)
      throws PortalException {

    KaleoDefinition kaleoDefinition =
        kaleoDefinitionPersistence.findByC_N_V(serviceContext.getCompanyId(), name, version);

    kaleoDefinition.setModifiedDate(new Date());
    kaleoDefinition.setActive(true);

    kaleoDefinitionPersistence.update(kaleoDefinition);
  }
  @Override
  public void activateKaleoDefinition(
      long kaleoDefinitionId, long startKaleoNodeId, ServiceContext serviceContext)
      throws PortalException {

    KaleoDefinition kaleoDefinition =
        kaleoDefinitionPersistence.findByPrimaryKey(kaleoDefinitionId);

    try {
      KaleoDefinition previousKaleoDefinition =
          getLatestKaleoDefinition(kaleoDefinition.getName(), serviceContext);

      previousKaleoDefinition.setModifiedDate(new Date());
      previousKaleoDefinition.setActive(false);

      kaleoDefinitionPersistence.update(previousKaleoDefinition);
    } catch (NoSuchDefinitionException nsde) {
    }

    kaleoDefinition.setStartKaleoNodeId(startKaleoNodeId);
    kaleoDefinition.setModifiedDate(new Date());
    kaleoDefinition.setActive(true);

    kaleoDefinitionPersistence.update(kaleoDefinition);
  }
  @Override
  public KaleoDefinition updateTitle(
      String name, int version, String title, ServiceContext serviceContext)
      throws PortalException {

    KaleoDefinition kaleoDefinition =
        kaleoDefinitionPersistence.findByC_N_V(serviceContext.getCompanyId(), name, version);

    kaleoDefinition.setTitle(title);

    kaleoDefinitionPersistence.update(kaleoDefinition);

    return kaleoDefinition;
  }
  @Override
  public KaleoDefinition incrementKaleoDefinition(
      Definition definition, String title, ServiceContext serviceContext) throws PortalException {

    KaleoDefinition kaleoDefinition =
        getLatestKaleoDefinition(definition.getName(), serviceContext);

    return addKaleoDefinition(
        definition.getName(),
        title,
        definition.getDescription(),
        definition.getContent(),
        kaleoDefinition.getVersion() + 1,
        serviceContext);
  }
  @Override
  public void deleteKaleoDefinition(String name, int version, ServiceContext serviceContext)
      throws PortalException {

    // Kaleo definition

    KaleoDefinition kaleoDefinition = getKaleoDefinition(name, version, serviceContext);

    if (kaleoDefinition.isActive()) {
      throw new WorkflowException(
          "Cannot delete active workflow definition " + kaleoDefinition.getKaleoDefinitionId());
    }

    if (kaleoDefinition.hasIncompleteKaleoInstances()) {
      throw new WorkflowException(
          "Cannot delete incomplete workflow definition " + kaleoDefinition.getKaleoDefinitionId());
    }

    kaleoDefinitionPersistence.remove(kaleoDefinition);

    // Kaleo condition

    kaleoConditionLocalService.deleteKaleoDefinitionKaleoCondition(
        kaleoDefinition.getKaleoDefinitionId());

    // Kaleo instances

    kaleoInstanceLocalService.deleteKaleoDefinitionKaleoInstances(
        kaleoDefinition.getKaleoDefinitionId());

    // Kaleo nodes

    kaleoNodeLocalService.deleteKaleoDefinitionKaleoNodes(kaleoDefinition.getKaleoDefinitionId());

    // Kaleo tasks

    kaleoTaskLocalService.deleteKaleoDefinitionKaleoTasks(kaleoDefinition.getKaleoDefinitionId());

    // Kaleo transitions

    kaleoTransitionLocalService.deleteKaleoDefinitionKaleoTransitions(
        kaleoDefinition.getKaleoDefinitionId());
  }
  @Override
  public boolean equals(Object obj) {
    if (this == obj) {
      return true;
    }

    if (!(obj instanceof KaleoDefinition)) {
      return false;
    }

    KaleoDefinition kaleoDefinition = (KaleoDefinition) obj;

    long primaryKey = kaleoDefinition.getPrimaryKey();

    if (getPrimaryKey() == primaryKey) {
      return true;
    } else {
      return false;
    }
  }
  @Override
  public int compareTo(KaleoDefinition kaleoDefinition) {
    int value = 0;

    if (getVersion() < kaleoDefinition.getVersion()) {
      value = -1;
    } else if (getVersion() > kaleoDefinition.getVersion()) {
      value = 1;
    } else {
      value = 0;
    }

    value = value * -1;

    if (value != 0) {
      return value;
    }

    return 0;
  }
  @Override
  public KaleoDefinition addKaleoDefinition(
      String name,
      String title,
      String description,
      String content,
      int version,
      ServiceContext serviceContext)
      throws PortalException {

    User user = userPersistence.findByPrimaryKey(serviceContext.getGuestOrUserId());
    Date now = new Date();

    long kaleoDefinitionId = counterLocalService.increment();

    KaleoDefinition kaleoDefinition = kaleoDefinitionPersistence.create(kaleoDefinitionId);

    kaleoDefinition.setCompanyId(user.getCompanyId());
    kaleoDefinition.setUserId(user.getUserId());
    kaleoDefinition.setUserName(user.getFullName());
    kaleoDefinition.setCreateDate(now);
    kaleoDefinition.setModifiedDate(now);
    kaleoDefinition.setName(name);
    kaleoDefinition.setTitle(title);
    kaleoDefinition.setDescription(description);
    kaleoDefinition.setContent(content);
    kaleoDefinition.setVersion(version);
    kaleoDefinition.setActive(false);

    kaleoDefinitionPersistence.update(kaleoDefinition);

    return kaleoDefinition;
  }
  /**
   * Converts the soap model instance into a normal model instance.
   *
   * @param soapModel the soap model instance to convert
   * @return the normal model instance
   */
  public static KaleoDefinition toModel(KaleoDefinitionSoap soapModel) {
    if (soapModel == null) {
      return null;
    }

    KaleoDefinition model = new KaleoDefinitionImpl();

    model.setKaleoDefinitionId(soapModel.getKaleoDefinitionId());
    model.setGroupId(soapModel.getGroupId());
    model.setCompanyId(soapModel.getCompanyId());
    model.setUserId(soapModel.getUserId());
    model.setUserName(soapModel.getUserName());
    model.setCreateDate(soapModel.getCreateDate());
    model.setModifiedDate(soapModel.getModifiedDate());
    model.setName(soapModel.getName());
    model.setTitle(soapModel.getTitle());
    model.setDescription(soapModel.getDescription());
    model.setContent(soapModel.getContent());
    model.setVersion(soapModel.getVersion());
    model.setActive(soapModel.getActive());
    model.setStartKaleoNodeId(soapModel.getStartKaleoNodeId());

    return model;
  }