code: public ClassificationModel attachClassification(GraphRewrite event, Rule rule, FileModel fileModel, String categoryId, String classificationTitle, String description)
      {
          Traversal<?, ?> classificationTraversal = getQuery().traverse(g -> g.has(ClassificationModel.CLASSIFICATION, classificationTitle)).getRawTraversal();
          ClassificationModel classification = getUnique(classificationTraversal);
          if (classification == null)
          {
              classification = create();
              classification.setClassification(classificationTitle);
              classification.setDescription(description);
              classification.setEffort(0);
  
              IssueCategoryModel cat = IssueCategoryRegistry.loadFromGraph(event.getGraphContext(), categoryId);
              classification.setIssueCategory(cat);
  
              classification.setRuleID(rule.getId());
              if (fileModel instanceof DuplicateArchiveModel)
              {
                  fileModel = ((DuplicateArchiveModel) fileModel).getCanonicalArchive();
              }
              classification.addFileModel(fileModel);
              if (fileModel instanceof SourceFileModel)
                  ((SourceFileModel) fileModel).setGenerateSourceReport(true);
  
              ClassificationServiceCache.cacheClassificationFileModel(event, classification, fileModel, true);
              return classification;
          }
          else
          {
              if (!StringUtils.equals(description, classification.getDescription()))
                  LOG.warning("The description of the newly attached classification differs from the same-titled existing one, so the old description is being changed."
                          + System.lineSeparator()+"   Clsf title: " + classification.getClassification()
                          + System.lineSeparator()+"   Old desc: " + classification.getDescription()
                          + System.lineSeparator()+"   New desc: " + description);
              classification.setDescription(description);
          }
  
          return attachClassification(event, classification, fileModel);
      }
docs: Attach a {@link ClassificationModel} with the given classificationText and description to the provided {@link FileModel}.
  If an existing Model exists with the provided classificationText, that one will be used instead.
  
  The classification is looked up by name and created only if not found.
  That means that the new description is discarded. FIXME