@Override public DocumentModel create( CoreSession documentManager, Blob content, String path, boolean overwrite, String fullname, TypeManager typeService) throws ClientException, IOException { path = getNearestContainerPath(documentManager, path); doSecurityCheck(documentManager, path, getNoteTypeName(), typeService); String filename = FileManagerUtils.fetchFileName(fullname); String title = FileManagerUtils.fetchTitle(filename); // Looking if an existing Document with the same filename exists. DocumentModel docModel = FileManagerUtils.getExistingDocByTitle(documentManager, path, title); if (overwrite && docModel != null) { docModel.setProperty(NOTE_SCHEMA, NOTE_FIELD, getString(content)); docModel.setProperty(NOTE_SCHEMA, MT_FIELD, content.getMimeType()); docModel = overwriteAndIncrementversion(documentManager, docModel); } else { PathSegmentService pss; try { pss = Framework.getService(PathSegmentService.class); } catch (Exception e) { throw new ClientException(e); } // Create a new empty DocumentModel of type Note in memory docModel = documentManager.createDocumentModel(getNoteTypeName()); // Update known attributes (title, note) docModel.setProperty(DUBLINCORE_SCHEMA, TITLE_FIELD, title); docModel.setProperty(NOTE_SCHEMA, NOTE_FIELD, getString(content)); docModel.setProperty(NOTE_SCHEMA, MT_FIELD, content.getMimeType()); // Create the new document in the repository docModel.setPathInfo(path, pss.generatePathSegment(docModel)); docModel = documentManager.createDocument(docModel); } documentManager.save(); log.debug( "Created the Note: " + docModel.getName() + " with icon: " + docModel.getProperty(COMMON_SCHEMA, ICON_FIELD)); return docModel; }
@Test public void testCreateExistingBlobWithNonNFCNormalizedFilename() throws Exception { // Create doc from NFC normalized filename String fileName = "ÜÜÜ ÓÓÓ.rtf"; String nfcNormalizedFileName = Normalizer.normalize(fileName, Normalizer.Form.NFC); Blob blob = Blobs.createBlob("Test content", "text/rtf", null, nfcNormalizedFileName); service.createDocumentFromBlob( coreSession, blob, workspace.getPathAsString(), true, nfcNormalizedFileName); assertNotNull( FileManagerUtils.getExistingDocByFileName( coreSession, workspace.getPathAsString(), nfcNormalizedFileName)); // Check existing doc with non NFC (NFD) normalized filename String nfdNormalizedFileName = Normalizer.normalize(fileName, Normalizer.Form.NFD); assertNotNull( FileManagerUtils.getExistingDocByFileName( coreSession, workspace.getPathAsString(), nfdNormalizedFileName)); }