1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * See LICENSE.txt included in this distribution for the specific 9 * language governing permissions and limitations under the License. 10 * 11 * When distributing Covered Code, include this CDDL HEADER in each 12 * file and include the License file at LICENSE.txt. 13 * If applicable, add the following below this CDDL HEADER, with the 14 * fields enclosed by brackets "[]" replaced with your own identifying 15 * information: Portions Copyright [yyyy] [name of copyright owner] 16 * 17 * CDDL HEADER END 18 */ 19 20 /* 21 * Copyright (c) 2020, Chris Fraire <cfraire@me.com>. 22 */ 23 package org.opengrok.indexer.history; 24 25 import java.util.List; 26 import java.util.Locale; 27 28 /** 29 * Represents a utility to show the user details of supported {@link Repository} 30 * types for -h,--help. 31 */ 32 public class RepositoriesHelp { 33 getText()34 public static String getText() { 35 StringBuilder builder = new StringBuilder(); 36 builder.append("Enabled repositories:"); 37 builder.append(System.lineSeparator()); 38 builder.append(System.lineSeparator()); 39 List<Class<? extends Repository>> clazzes = RepositoryFactory.getRepositoryClasses(); 40 appendClassesHelp(builder, clazzes); 41 42 List<Class<? extends Repository>> disabledClazzes = 43 RepositoryFactory.getDisabledRepositoryClasses(); 44 if (!disabledClazzes.isEmpty()) { 45 if (!clazzes.isEmpty()) { 46 builder.append(System.lineSeparator()); 47 } 48 builder.append("Disabled repositories:"); 49 builder.append(System.lineSeparator()); 50 builder.append(System.lineSeparator()); 51 appendClassesHelp(builder, disabledClazzes); 52 } 53 54 return builder.toString(); 55 } 56 appendClassesHelp( StringBuilder builder, List<Class<? extends Repository>> clazzes)57 private static void appendClassesHelp( 58 StringBuilder builder, List<Class<? extends Repository>> clazzes) { 59 60 clazzes.sort((o1, o2) -> o1.getSimpleName().compareToIgnoreCase(o2.getSimpleName())); 61 for (Class<?> clazz : clazzes) { 62 String simpleName = clazz.getSimpleName(); 63 if (toAka(builder, simpleName)) { 64 builder.append(" ("); 65 builder.append(simpleName); 66 builder.append(")"); 67 } 68 builder.append(System.lineSeparator()); 69 } 70 } 71 toAka(StringBuilder builder, String repoSimpleName)72 private static boolean toAka(StringBuilder builder, String repoSimpleName) { 73 final String REPOSITORY = "Repository"; 74 if (!repoSimpleName.endsWith(REPOSITORY)) { 75 builder.append(repoSimpleName); 76 return false; 77 } else { 78 String aka = repoSimpleName.substring(0, 79 repoSimpleName.length() - REPOSITORY.length()); 80 builder.append(aka.toLowerCase(Locale.ROOT)); 81 return true; 82 } 83 } 84 85 /* private to enforce static */ RepositoriesHelp()86 private RepositoriesHelp() { 87 } 88 } 89