Here come a patch for review, as I may miss some things.
3 modifications here :
1) Move the updateEnhancementGraph(ci); call from "enhance" to "put", as updateEnhancementGraph(ci); fit better in "put" as it's the clerezza graph counterpart of Solr save.
So now, "enhance" only enhance and "put" save your CI (in the clerezza graph and in the Solr Core).
2) Change a triple iteration to the build-in graph.addAll() function. There is a special reason to use an iteration here ?
3) Remove code duplication in the "put(ContentItem ci)" and "put(ContentItem ci, String ldProgramName)"
Patch attached for comments.