public boolean isReadOnly(String directoryName) { boolean isReadOnly; try (Session dirSession = dirService.open(directoryName)) { // Check Directory ReadOnly Status boolean dirReadOnly = dirSession.isReadOnly(); // Check DirectoryUI ReadOnly Status boolean dirUIReadOnly; DirectoryUI dirInfo = directoryUIManager.getDirectoryInfo(directoryName); if (dirInfo == null) { // assume read-only dirUIReadOnly = true; } else { dirUIReadOnly = Boolean.TRUE.equals(dirInfo.isReadOnly()); } isReadOnly = dirReadOnly || dirUIReadOnly; } return isReadOnly; }
private static void updateSubDirectoryEntry(SubDirectoryInfo dirInfo, Map<String, Object> fieldMap, String id, boolean canCreateIfOptional) { DocumentModel dirEntry = dirInfo.getSession().getEntry(id); if (dirInfo.getSession().isReadOnly() || (dirEntry != null && isReadOnlyEntry(dirEntry))) { return; } if (dirEntry == null && !canCreateIfOptional) { // entry to update doesn't belong to this directory return; } Map<String, Object> map = new HashMap<>(); map.put(dirInfo.idField, id); for (Entry<String, String> e : dirInfo.fromSource.entrySet()) { map.put(e.getValue(), fieldMap.get(e.getKey())); } if (map.size() > 1) { if (canCreateIfOptional && dirInfo.isOptional && dirEntry == null) { // if entry does not exist, create it dirInfo.getSession().createEntry(map); } else { final DocumentModel entry = BaseSession.createEntryModel(null, dirInfo.dirSchemaName, id, null); entry.setProperties(dirInfo.dirSchemaName, map); dirInfo.getSession().updateEntry(entry); } } }
if (entry == null && isOptional && !dirInfo.getSession().isReadOnly()) {
@Override public void deleteEntry(String id) { checkPermission(SecurityConstants.WRITE); checkDeleteConstraints(id); init(); for (SourceInfo sourceInfo : sourceInfos) { for (SubDirectoryInfo dirInfo : sourceInfo.subDirectoryInfos) { if (!dirInfo.getSession().isReadOnly()) { // Check if the platform is able to manage entry if (!sourceInfo.source.creation) { // If not check if entry exist to prevent exception that may // stop the deletion loop to other subdirectories // Do not raise exception, because creation is not managed // by the platform DocumentModel docModel = dirInfo.getSession().getEntry(id); if (docModel == null) { log.warn(String.format( "MultiDirectory '%s' : The entry id '%s' could not be deleted on subdirectory '%s' because it does not exist", getName(), id, dirInfo.dirName)); } else { dirInfo.getSession().deleteEntry(id); } } else { dirInfo.getSession().deleteEntry(id); } } } } }