package de.interseroh.report.services; import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import de.interseroh.report.exception.BirtSystemException; import de.interseroh.report.model.ReportReference; /** * this class give back all reports for current user with correspond role. * Created by hhopf on 06.07.15. */ @Service public class BirtFileReaderServiceBean implements BirtFileReaderService { private static final String REPORT_FILESUFFIX = ".rptdesign"; public static final int REPORT_FILESUFFIX_LENGTH = REPORT_FILESUFFIX .length(); private static final Logger logger = LoggerFactory .getLogger(BirtFileReaderServiceBean.class); @Autowired private SecurityService securityControl; /** * deliver all file names (report names) in specified directory. * * @return names of all files in this directory (only reports) */ @Override public List<ReportReference> getReportReferences() { final File directory = securityControl.getTmpDirectory(); logger.debug("call to get role of current user in directory {}", directory); if (directory == null) { return Collections.emptyList(); } List<ReportReference> reportReferences = new ArrayList<>(); List<String> stripRoleNames = securityControl.getStripRoleNames(); try { if (directory.exists() && directory.canRead() && directory .isDirectory()) { FilenameFilter filter = new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.endsWith(".rptdesign"); } }; File[] files = directory.listFiles(filter); if (files != null) { for (File file : files) { String fileName = file.getName().substring(0, file.getName().length() - REPORT_FILESUFFIX_LENGTH); for (String role : stripRoleNames) { if (role.equalsIgnoreCase(fileName)) { reportReferences .add(new ReportReference(fileName, "reports...")); } } } } } } catch (Exception e) { logger.debug(e.getMessage(), e); throw new BirtSystemException(String.format( "Error during to fill report list in directory: %s", directory), e.getCause()); } return reportReferences; } }