* @param recursive Whether to recursively duplicate copy (i.e.: duplicate its children, grand
* children, etc...)
* @return An {@link IEntity}
*/
private static IEntity getDuplicata(IEntity entity, IDirectory parent, boolean recursive) {
IEntity duplicata = null;
if (entity instanceof IConfig<?>) {
ConfigSerializer configSerializer = new ConfigSerializer();
IConfig<?> copyConfig = configSerializer.cloneConfig((IConfig<?>) entity);
copyConfig.setModified(true);
duplicata = copyConfig;
}
else if (entity instanceof IDirectory) {
IDirectory directory = (IDirectory) entity;
IDirectory copyDirectory = new DirectoryModel();
if (recursive) {
List<IConfig<?>> configList = new ArrayList<IConfig<?>>();
for (IConfig<?> config : directory.getConfigList()) {
configList.add((IConfig<?>) getDuplicata(config, copyDirectory, recursive));
}
copyDirectory.setConfigList(configList);
List<IDirectory> subDirectoriesList = new ArrayList<IDirectory>();
for (IDirectory dir : directory.getSubDirectoriesList()) {
subDirectoriesList
.add((IDirectory) getDuplicata(dir, copyDirectory, recursive));
}
copyDirectory.setSubDirectoriesList(subDirectoriesList);
}
duplicata = copyDirectory;
}
if (duplicata != null) {
duplicata.setName(entity.getName());
duplicata.setPositionInDirectory(entity.getPositionInDirectory());
duplicata.setId(null);
duplicata.setDirectory(parent);
}
return duplicata;
}