private RepositoryFolder getFolder(RepositoryFolder folder, String substring) { String[] directoryNames = substring.split("/"); for (String directoryName : directoryNames) { RepositoryFolder existingFolder = folder.getFolder(directoryName); if (existingFolder == null) { folder = folder.createFolder(directoryName); } else { folder = existingFolder; } } return folder; }
@Override public RepositoryNode getRepositoryNode(final String path) { RepositoryFolder folder = this; final String[] pathParts = path.split("/"); for (int i = 0; i < pathParts.length - 1; i++) { final String pathPart = pathParts[i]; if (!pathPart.isEmpty()) { folder = folder.getFolder(pathPart); if (folder == null) { return null; } } } final String lastPart = pathParts[pathParts.length - 1]; if (lastPart.isEmpty()) { return folder; } final RepositoryFile file = folder.getFile(lastPart); if (file == null) { return folder.getFolder(lastPart); } return file; } }
@Override public Boolean removeDashboardGroup(TenantIdentifier tenant, DashboardGroup timelineGroup) { final RepositoryFolder timelineFolder = _tenantContextFactory.getContext(tenant).getTimelineFolder(); final RepositoryFolder groupFolder = timelineFolder.getFolder(timelineGroup.getName()); if (groupFolder == null) { throw new IllegalArgumentException("Timeline group '" + timelineGroup.getName() + "' does not exist."); } try { groupFolder.delete(); return true; } catch (Exception e) { logger.warn("Failed to delete timeline group folder: " + timelineGroup.getName(), e); return false; } } }
@Override public List<TimelineIdentifier> getTimelines(final TenantIdentifier tenant, final DashboardGroup group) { final RepositoryFolder timelinesFolder = _tenantContextFactory.getContext(tenant).getTimelineFolder(); final List<RepositoryFile> files; final String groupName = (group == null ? null : group.getName()); if (group == null || groupName == null || "".equals(groupName)) { files = timelinesFolder.getFiles(); } else { RepositoryFolder groupFolder = timelinesFolder.getFolder(groupName); files = groupFolder.getFiles(); } final List<TimelineIdentifier> result = new ArrayList<TimelineIdentifier>(); for (RepositoryFile file : files) { if (file.getType() == Type.TIMELINE_SPEC) { String timelineName = file.getName().substring(0, file.getName().length() - FileFilters.ANALYSIS_TIMELINE_XML.getExtension().length()); TimelineIdentifier timeline = new TimelineIdentifier(timelineName, file.getQualifiedPath(), group); result.add(timeline); } } return result; }
@Override public TimelineIdentifier createTimelineDefinition(final TenantIdentifier tenant, final TimelineIdentifier timelineIdentifier, final TimelineDefinition timelineDefinition) { final String name = timelineIdentifier.getName(); final DashboardGroup group = timelineIdentifier.getGroup(); final RepositoryFolder timelinesFolder = _tenantContextFactory.getContext(tenant).getTimelineFolder(); final RepositoryFolder folder; if (group == null) { folder = timelinesFolder; } else { folder = timelinesFolder.getFolder(group.getName()); } final String fileName = name + FileFilters.ANALYSIS_TIMELINE_XML.getExtension(); final RepositoryFile file = folder.createFile(fileName, new WriteTimelineAction(timelineDefinition)); logger.info("Created timeline definition in file: {}", file); return new TimelineIdentifier(timelineIdentifier.getName(), file.getQualifiedPath(), group); }