11package org .jabref .logic .citationkeypattern ;
22
3- import java .lang .reflect .Modifier ;
4- import java .util .Arrays ;
3+ import java .util .ArrayList ;
54import java .util .List ;
6- import java .util .stream .Collectors ;
5+ import java .util .stream .Stream ;
76
87public record CitationKeyPattern (String stringRepresentation , Category category ) {
98 public enum Category {
@@ -12,91 +11,86 @@ public enum Category {
1211
1312 public static final CitationKeyPattern NULL_CITATION_KEY_PATTERN = new CitationKeyPattern ("" , Category .OTHER_FIELDS );
1413
15- // region - Author-related field markers
16- public static final CitationKeyPattern AUTHOR_YEAR = new CitationKeyPattern ("[auth_year]" , Category .AUTHOR_RELATED );
17- public static final CitationKeyPattern AUTHOR_FIRST_FULL = new CitationKeyPattern ("[authFirstFull]" , Category .AUTHOR_RELATED );
18- public static final CitationKeyPattern AUTHOR_FORE_INI = new CitationKeyPattern ("[authForeIni]" , Category .AUTHOR_RELATED );
19- public static final CitationKeyPattern AUTHOR_ETAL = new CitationKeyPattern ("[auth.etal]" , Category .AUTHOR_RELATED );
20- public static final CitationKeyPattern AUTHOR_ET_AL = new CitationKeyPattern ("[authEtAl]" , Category .AUTHOR_RELATED );
21- public static final CitationKeyPattern AUTHOR_AUTH_EA = new CitationKeyPattern ("[auth.auth.ea]" , Category .AUTHOR_RELATED );
22- public static final CitationKeyPattern AUTHORS = new CitationKeyPattern ("[authors]" , Category .AUTHOR_RELATED );
23- public static final CitationKeyPattern AUTHORS_N = new CitationKeyPattern ("[authorsN]" , Category .AUTHOR_RELATED );
24- public static final CitationKeyPattern AUTH_INI_N = new CitationKeyPattern ("[authIniN]" , Category .AUTHOR_RELATED );
25- public static final CitationKeyPattern AUTH_N = new CitationKeyPattern ("[authN]" , Category .AUTHOR_RELATED );
26- public static final CitationKeyPattern AUTH_N_M = new CitationKeyPattern ("[authN_M]" , Category .AUTHOR_RELATED );
27- public static final CitationKeyPattern AUTHOR_INI = new CitationKeyPattern ("[authorIni]" , Category .AUTHOR_RELATED );
28- public static final CitationKeyPattern AUTH_SHORT = new CitationKeyPattern ("[authshort]" , Category .AUTHOR_RELATED );
29- public static final CitationKeyPattern AUTHORS_ALPHA = new CitationKeyPattern ("[authorsAlpha]" , Category .AUTHOR_RELATED );
30- public static final CitationKeyPattern AUTHORS_ALPHA_LNI = new CitationKeyPattern ("[authorsAlphaLNI]" , Category .AUTHOR_RELATED );
31- public static final CitationKeyPattern AUTHORS_LAST = new CitationKeyPattern ("[authorsLast]" , Category .AUTHOR_RELATED );
32- public static final CitationKeyPattern AUTHORS_LAST_FORE_INI = new CitationKeyPattern ("[authorsLastForeIni]" , Category .AUTHOR_RELATED );
33- // endregion
14+ private static final List <CitationKeyPattern > AUTHOR_PATTERNS =
15+ Stream .of ("[auth_year]" ,
16+ "[authFirstFull]" ,
17+ "[authForeIni]" ,
18+ "[auth.etal]" ,
19+ "[authEtAl]" ,
20+ "[auth.auth.ea]" ,
21+ "[authors]" ,
22+ "[authorsN]" ,
23+ "[authIniN]" ,
24+ "[authN]" ,
25+ "[authN_M]" ,
26+ "[authorIni]" ,
27+ "[authshort]" ,
28+ "[authorsAlpha]" ,
29+ "[authorsAlphaLNI]" ,
30+ "[authorsLast]" ,
31+ "[authorsLastForeIni]" )
32+ .map (pattern -> new CitationKeyPattern (pattern , Category .AUTHOR_RELATED ))
33+ .toList ();
3434
35- // region - Editor-related field markers
36- public static final CitationKeyPattern EDTR = new CitationKeyPattern ("[edtr]" , Category .EDITOR_RELATED );
37- public static final CitationKeyPattern EDTR_INI_N = new CitationKeyPattern ("[edtrIniN]" , Category .EDITOR_RELATED );
38- public static final CitationKeyPattern EDITORS = new CitationKeyPattern ("[editors]" , Category .EDITOR_RELATED );
39- public static final CitationKeyPattern EDITOR_LAST = new CitationKeyPattern ("[editorLast]" , Category .EDITOR_RELATED );
40- public static final CitationKeyPattern EDITOR_INI = new CitationKeyPattern ("[editorIni]" , Category .EDITOR_RELATED );
41- public static final CitationKeyPattern EDTR_N = new CitationKeyPattern ("[edtrN]" , Category .EDITOR_RELATED );
42- public static final CitationKeyPattern EDTR_N_M = new CitationKeyPattern ("[edtrN_M]" , Category .EDITOR_RELATED );
43- public static final CitationKeyPattern EDTR_EDTR_EA = new CitationKeyPattern ("[edtr.edtr.ea]" , Category .EDITOR_RELATED );
44- public static final CitationKeyPattern EDTRSHORT = new CitationKeyPattern ("[edtrshort]" , Category .EDITOR_RELATED );
45- public static final CitationKeyPattern EDTR_FORE_INI = new CitationKeyPattern ("[edtrForeIni]" , Category .EDITOR_RELATED );
46- public static final CitationKeyPattern EDITOR_LAST_FORE_INI = new CitationKeyPattern ("[editorLastForeIni]" , Category .EDITOR_RELATED );
47- // endregion
35+ private static final List <CitationKeyPattern > EDITOR_PATTERNS =
36+ Stream .of ("[edtr]" ,
37+ "[edtrIniN]" ,
38+ "[editors]" ,
39+ "[editorLast]" ,
40+ "[editorIni]" ,
41+ "[edtrN]" ,
42+ "[edtrN_M]" ,
43+ "[edtr.edtr.ea]" ,
44+ "[edtrshort]" ,
45+ "[edtrForeIni]" ,
46+ "[editorLastForeIni]" )
47+ .map (pattern -> new CitationKeyPattern (pattern , Category .EDITOR_RELATED ))
48+ .toList ();
4849
49- // region - Title-related field markers
50- public static final CitationKeyPattern SHORTTITLE = new CitationKeyPattern ("[shorttitle]" , Category .TITLE_RELATED );
51- public static final CitationKeyPattern SHORTTITLE_INI = new CitationKeyPattern ("[shorttitleINI]" , Category .TITLE_RELATED );
52- public static final CitationKeyPattern VERYSHORTTITLE = new CitationKeyPattern ("[veryshorttitle]" , Category .TITLE_RELATED );
53- public static final CitationKeyPattern CAMEL = new CitationKeyPattern ("[camel]" , Category .TITLE_RELATED );
54- public static final CitationKeyPattern CAMEL_N = new CitationKeyPattern ("[camelN]" , Category .TITLE_RELATED );
55- public static final CitationKeyPattern TITLE = new CitationKeyPattern ("[title]" , Category .TITLE_RELATED );
56- public static final CitationKeyPattern FULLTITLE = new CitationKeyPattern ("[fulltitle]" , Category .TITLE_RELATED );
57- // endregion
50+ private static final List <CitationKeyPattern > TITLE_PATTERNS =
51+ Stream .of ("[shorttitle]" ,
52+ "[shorttitleINI]" ,
53+ "[veryshorttitle]" ,
54+ "[camel]" ,
55+ "[camelN]" ,
56+ "[title]" ,
57+ "[fulltitle]" )
58+ .map (pattern -> new CitationKeyPattern (pattern , Category .TITLE_RELATED ))
59+ .toList ();
5860
59- // region - Other field markers
60- public static final CitationKeyPattern ENTRYTYPE = new CitationKeyPattern ("[entrytype]" , Category .OTHER_FIELDS );
61- public static final CitationKeyPattern FIRSTPAGE = new CitationKeyPattern ("[firstpage]" , Category .OTHER_FIELDS );
62- public static final CitationKeyPattern PAGEPREFIX = new CitationKeyPattern ("[pageprefix]" , Category .OTHER_FIELDS );
63- public static final CitationKeyPattern KEYWORD_N = new CitationKeyPattern ("[keywordN]" , Category .OTHER_FIELDS );
64- public static final CitationKeyPattern KEYWORDS_N = new CitationKeyPattern ("[keywordsN]" , Category .OTHER_FIELDS );
65- public static final CitationKeyPattern LASTPAGE = new CitationKeyPattern ("[lastpage]" , Category .OTHER_FIELDS );
66- public static final CitationKeyPattern SHORTYEAR = new CitationKeyPattern ("[shortyear]" , Category .OTHER_FIELDS );
67- // endregion
61+ private static final List <CitationKeyPattern > OTHER_FIELD_PATTERNS =
62+ Stream .of ("[entrytype]" ,
63+ "[firstpage]" ,
64+ "[pageprefix]" ,
65+ "[keywordN]" ,
66+ "[keywordsN]" ,
67+ "[lastpage]" ,
68+ "[shortyear]" )
69+ .map (pattern -> new CitationKeyPattern (pattern , Category .OTHER_FIELDS ))
70+ .toList ();
6871
69- // region - Bibentry fields
70- public static final CitationKeyPattern AUTHOR = new CitationKeyPattern ("[AUTHOR]" , Category .BIBENTRY_FIELDS );
71- public static final CitationKeyPattern DATE = new CitationKeyPattern ("[DATE]" , Category .BIBENTRY_FIELDS );
72- public static final CitationKeyPattern DAY = new CitationKeyPattern ("[DAY]" , Category .BIBENTRY_FIELDS );
73- public static final CitationKeyPattern GROUPS = new CitationKeyPattern ("[GROUPS]" , Category .BIBENTRY_FIELDS );
74- public static final CitationKeyPattern MONTH = new CitationKeyPattern ("[MONTH]" , Category .BIBENTRY_FIELDS );
75- public static final CitationKeyPattern YEAR = new CitationKeyPattern ("[YEAR]" , Category .BIBENTRY_FIELDS );
76- // endregion
72+ private static final List <CitationKeyPattern > BIBENTRY_FIELDS =
73+ Stream .of ("[AUTHOR]" ,
74+ "[DATE]" ,
75+ "[DAY]" ,
76+ "[GROUPS]" ,
77+ "[MONTH]" ,
78+ "[YEAR]" )
79+ .map (pattern -> new CitationKeyPattern (pattern , Category .BIBENTRY_FIELDS ))
80+ .toList ();
7781
7882 public CitationKeyPattern (String stringRepresentation ) {
7983 this (stringRepresentation , Category .OTHER_FIELDS );
8084 }
8185
8286 public static List <CitationKeyPattern > getAllPatterns () {
83- return Arrays .stream (CitationKeyPattern .class .getDeclaredFields ())
84- .filter (field -> {
85- int modifiers = field .getModifiers ();
86- return Modifier .isPublic (modifiers ) &&
87- Modifier .isStatic (modifiers ) &&
88- Modifier .isFinal (modifiers ) &&
89- field .getType () == CitationKeyPattern .class &&
90- !field .equals (CitationKeyPattern .NULL_CITATION_KEY_PATTERN );
91- })
92- .map (field -> {
93- try {
94- return (CitationKeyPattern ) field .get (null );
95- } catch (IllegalAccessException e ) {
96- throw new RuntimeException ("Could not access field" , e );
97- }
98- })
99- .collect (Collectors .toList ());
87+ List <CitationKeyPattern > result = new ArrayList <>();
88+ result .addAll (AUTHOR_PATTERNS );
89+ result .addAll (EDITOR_PATTERNS );
90+ result .addAll (TITLE_PATTERNS );
91+ result .addAll (OTHER_FIELD_PATTERNS );
92+ result .addAll (BIBENTRY_FIELDS );
93+ return result ;
10094 }
10195
10296 public Category getCategory () {
0 commit comments