@SuppressWarnings("rawtypes") public static FileIDs searchFileIDs(FleximsDynamicEntityImpl de, String propName, String prefix) { FileIDs fileIDs = new FileIDs(); XMLEntityMappings mappings = JpaMapHelper.getInternaEntityMappings(); Class<?> clz = de.getClass(); String firstName = null; String subName = null; if (propName != null) { int i = propName.indexOf('.'); if (i != -1) { firstName = propName.substring(0, i); subName = propName.substring(i + 1); } else { firstName = propName; } } while (clz != FleximsDynamicEntityImpl.class && clz != Object.class) { ClassAccessor accessor = JpaMapHelper.findClassAccessor(mappings, clz.getSimpleName()); if (accessor != null && accessor.getAttributes() != null) { // single file. for (BasicAccessor prop : accessor.getAttributes().getBasics()) { if (firstName != null && !prop.getName().equals(firstName)) { continue; } Object value = de.get(prop.getName()); if (value == null) { continue; } if (isFileUpload(prop)) { FileID fileID = FileID.valueOf((String) value); if (fileID != null) { fileIDs.getFileIDs().add(fileID); fileID.setPropName(prefix == null ? prop.getName() : prefix + "/" + prop.getName()); } } } for (ElementCollectionAccessor prop : accessor.getAttributes().getElementCollections()) { if (firstName != null && !prop.getName().equals(firstName)) { continue; } Collection values = de.get(prop.getName()); if (values == null || values.isEmpty()) { continue; } if (isFileUpload(prop)) { for (Object value : values) { FileID fileID = FileID.valueOf((String) value); if (fileID != null) { fileIDs.getFileIDs().add(fileID); fileID.setPropName(prefix == null ? prop.getName() : prefix + "/" + prop.getName()); } } continue; } Object firstObject = values.iterator().next(); // collection of embedded if (firstObject instanceof FleximsDynamicEntityImpl) { for (Object obj : values) { FleximsDynamicEntityImpl embeded = (FleximsDynamicEntityImpl) obj; FileIDs iDs = searchFileIDs( embeded, subName, prefix == null ? prop.getName() : prefix + "/" + prop.getName()); fileIDs.getFileIDs().addAll(iDs.getFileIDs()); } } } for (EmbeddedAccessor prop : accessor.getAttributes().getEmbeddeds()) { if (firstName != null && !prop.getName().equals(firstName)) { continue; } FleximsDynamicEntityImpl embeded = de.get(prop.getName()); if (embeded == null) { continue; } if (embeded != null) { FileIDs iDs = searchFileIDs( embeded, subName, prefix == null ? prop.getName() : prefix + "/" + prop.getName()); fileIDs.getFileIDs().addAll(iDs.getFileIDs()); } } } clz = clz.getSuperclass(); } return fileIDs; }
@SuppressWarnings("rawtypes") public static FileInfos searchServerFileInfos( FleximsDynamicEntityImpl de, String propName, Path prefix, Path start) { FileInfos fileInfos = new FileInfos(); if (prefix == null) { prefix = serverFileTopDir(); } if (start == null) { start = serverFileTopDir(); } XMLEntityMappings mappings = JpaMapHelper.getInternaEntityMappings(); Class<?> clz = de.getClass(); String firstName = null; String subName = null; if (propName != null) { int i = propName.indexOf('.'); if (i != -1) { firstName = propName.substring(0, i); subName = propName.substring(i + 1); } else { firstName = propName; } } while (clz != FleximsDynamicEntityImpl.class && clz != Object.class) { ClassAccessor accessor = JpaMapHelper.findClassAccessor(mappings, clz.getSimpleName()); if (accessor != null) { // single file. for (BasicAccessor prop : accessor.getAttributes().getBasics()) { if (firstName != null && !prop.getName().equals(firstName)) { continue; } Object value = de.get(prop.getName()); if (value == null) { continue; } if (isServerFile(prop)) { Path filePath = prefix.resolve((String) value); if (!filePath.startsWith(prefix)) { // you can not navigate out. continue; } FileInfo fileInfo = pathToFileInfo(filePath, start); fileInfos.getFileInfos().add(fileInfo); } } for (ElementCollectionAccessor prop : accessor.getAttributes().getElementCollections()) { if (firstName != null && !prop.getName().equals(firstName)) { continue; } Collection values = de.get(prop.getName()); if (values == null || values.isEmpty()) { continue; } if (isServerFile(prop)) { for (Object value : values) { Path filePath = prefix.resolve((String) value); if (!filePath.startsWith(prefix)) { // you can not navigate out. continue; } FileInfo fileInfo = pathToFileInfo(filePath, start); fileInfos.getFileInfos().add(fileInfo); } continue; } Object firstObject = values.iterator().next(); // collection of embedded if (firstObject instanceof FleximsDynamicEntityImpl) { for (Object obj : values) { FleximsDynamicEntityImpl embeded = (FleximsDynamicEntityImpl) obj; FileInfos fileInfos2 = searchServerFileInfos(embeded, subName, prefix, start); fileInfos.getFileInfos().addAll(fileInfos2.getFileInfos()); } } } for (EmbeddedAccessor prop : accessor.getAttributes().getEmbeddeds()) { if (firstName != null && !prop.getName().equals(firstName)) { continue; } FleximsDynamicEntityImpl embeded = de.get(prop.getName()); if (embeded == null) { continue; } if (embeded != null) { FileInfos fileInfos2 = searchServerFileInfos(embeded, subName, prefix, start); fileInfos.getFileInfos().addAll(fileInfos2.getFileInfos()); } } } clz = clz.getSuperclass(); } return fileInfos; }