//	@Transactional(TransactionPropagationType.REQUIRED)
  //	@TransactionAttribute(TransactionAttributeType.REQUIRED)
  public void updateTextContentItem(ContentItemI item, String content) {

    ContentItem _item = item.getDelegate();

    if (renderingPipeline.renderEditor(_item, currentUser).equals(content)) {
      log.error("!!!!!!!!!!!!!!!!! renderingPipeline fails");
      return;
      // throw new TextContentNotChangedException("Could not create TextContentUpdate for an
      // unchanged text content");
    }
    StoringService storingPipeline = (StoringService) Component.getInstance("storingPipeline");

    TextContent tc = new TextContent(_item);
    tc.setXmlString(storingPipeline.processHtmlSource(_item.getResource(), content));
    tc = storingPipeline.processTextContent(_item.getResource(), tc);

    entityManager.persist(tc);

    // TODO: check whether content has changed and create version
    // TODO: maybe we can check this even before the pipeline runs?
    UpdateTextContentService utcs =
        (UpdateTextContentService) Component.getInstance("updateTextContentService");
    if (content != null) {
      utcs.updateTextContent(_item, tc);
    }

    _item.setTextContent(tc);

    Events.instance().raiseEvent(KiWiEvents.ACTIVITY_EDITCONTENTITEM, currentUser, _item);
    Events.instance().raiseTransactionSuccessEvent(KiWiEvents.CONTENT_UPDATED, _item);
  }
  //	@Transactional(TransactionPropagationType.REQUIRED)
  //	@TransactionAttribute(TransactionAttributeType.REQUIRED)
  public void updateTextContentWithoutStoringPipeline(ContentItemI item, String content)
      throws TextContentNotChangedException {

    ContentItem _item = item.getDelegate();

    if (renderingPipeline.renderEditor(_item, currentUser).equals(content)) {
      log.error("!!!!!!!!!!!!!!!!! renderingPipeline fails");
      throw new TextContentNotChangedException(
          "Could not create TextContentUpdate for an unchanged text content");
    }

    TextContent tc = new TextContent(_item);
    // TODO: can this cause some damage? Maybe we should at least do some regex checking
    tc.setXmlString(content);

    // TODO: check whether content has changed and create version
    UpdateTextContentService utcs =
        (UpdateTextContentService) Component.getInstance("updateTextContentService");
    if (content != null) {
      utcs.updateTextContent(_item, tc);
    }

    _item.setTextContent(tc);

    Events.instance().raiseEvent(KiWiEvents.ACTIVITY_EDITCONTENTITEM, currentUser, _item);
    Events.instance().raiseTransactionSuccessEvent(KiWiEvents.CONTENT_UPDATED, _item);
  }
  //	@Transactional(TransactionPropagationType.REQUIRED)
  //	@TransactionAttribute(TransactionAttributeType.REQUIRED)
  public void updateTextContentItem(ContentItemI item, Document content) {
    ContentItem _item = item.getDelegate();

    TextContent tc = new TextContent(_item);
    tc.setXmlDocument(content);

    // To check if the content has changed, check whether both contents produce the same output for
    // the editor
    if (_item.getTextContent() != null
        && _item.getTextContent().getXmlString(true).equals(tc.getXmlString(true))) {
      log.error("!!!!!!!!!!!!!!!!! renderingPipeline fails");
      return;
      // throw new TextContentNotChangedException("Could not create TextContentUpdate for an
      // unchanged text content");
    }
    entityManager.persist(tc);

    // TODO: check whether content has changed and create version
    UpdateTextContentService utcs =
        (UpdateTextContentService) Component.getInstance("updateTextContentService");
    if (content != null) {
      utcs.updateTextContent(_item, tc);
    }

    _item.setTextContent(tc);

    Events.instance().raiseEvent(KiWiEvents.ACTIVITY_EDITCONTENTITEM, currentUser, _item);
    Events.instance().raiseTransactionSuccessEvent(KiWiEvents.CONTENT_UPDATED, _item);
  }
  //	@Transactional(TransactionPropagationType.REQUIRED)
  //	@TransactionAttribute(TransactionAttributeType.REQUIRED)
  @Override
  public ContentItem createTextContentItem(String content) {
    ContentItem item = createContentItem();

    StoringService storingPipeline = (StoringService) Component.getInstance("storingPipeline");

    TextContent tc = new TextContent(item);
    tc.setXmlString(storingPipeline.processHtmlSource(item.getResource(), content));
    tc = storingPipeline.processTextContent(item.getResource(), tc);
    entityManager.persist(tc);

    UpdateTextContentService utcs =
        (UpdateTextContentService) Component.getInstance("updateTextContentService");
    if (content != null) {
      utcs.updateTextContent(item, tc);
    }

    item.setTextContent(tc);

    Events.instance().raiseEvent(KiWiEvents.ACTIVITY_EDITCONTENTITEM, currentUser, item);
    Events.instance().raiseTransactionSuccessEvent(KiWiEvents.CONTENT_UPDATED, item);
    return item;
  }