4242package com .junichi11 .netbeans .modules .github .issues .query ;
4343
4444import com .junichi11 .netbeans .modules .github .issues .repository .GitHubRepository ;
45+ import java .util .Collections ;
46+ import java .util .HashMap ;
47+ import java .util .Map ;
4548import java .util .logging .Level ;
4649import java .util .logging .Logger ;
47- import org .netbeans .api .annotations .common .CheckForNull ;
50+ import org .netbeans .api .annotations .common .NonNull ;
4851
4952/**
5053 *
@@ -68,26 +71,63 @@ public String getOptionKey() {
6871 }
6972
7073 }
74+
75+ private static final Map <GitHubRepository , GitHubDefaultQueries > DEFAULT_QUERIES = Collections .synchronizedMap (new HashMap <GitHubRepository , GitHubDefaultQueries >());
7176 private static final Logger LOGGER = Logger .getLogger (GitHubDefaultQueries .class .getName ());
77+ private final Map <Type , GitHubQuery > defaultQueries = new HashMap <>();
7278
7379 private GitHubDefaultQueries () {
7480 }
7581
76- @ CheckForNull
77- public static GitHubQuery create (GitHubRepository repository , Type type ) {
78- switch (type ) {
79- case ASSIGNED_TO_ME :
80- return new GitHubAssignedToMeQuery (repository );
81- case CREATED_BY_ME :
82- return new GitHubCreatedByMeQuery (repository );
83- default :
84- LOGGER .log (Level .WARNING , "The query type is not supported!" ); // NOI18N
85- return new GitHubDefaultQuery (repository ) {
86- };
82+ private static GitHubDefaultQueries create (GitHubRepository repository ) {
83+ GitHubDefaultQueries gitHubDefaultQueries = DEFAULT_QUERIES .get (repository );
84+ if (gitHubDefaultQueries == null ) {
85+ gitHubDefaultQueries = new GitHubDefaultQueries ();
86+ DEFAULT_QUERIES .put (repository , gitHubDefaultQueries );
8787 }
88+ return gitHubDefaultQueries ;
89+ }
90+
91+ public static GitHubQuery create (GitHubRepository repository , Type type ) {
92+ GitHubDefaultQueries gitHubDefaultQueries = create (repository );
93+ return gitHubDefaultQueries .getQuery (repository , type );
8894 }
8995
9096 public static boolean isDefaultQuery (GitHubQuery query ) {
9197 return query instanceof GitHubDefaultQuery ;
9298 }
99+
100+ public static void remove (GitHubRepository repository ) {
101+ GitHubDefaultQueries gitHubDefaultQueries = create (repository );
102+ if (gitHubDefaultQueries == null ) {
103+ return ;
104+ }
105+ gitHubDefaultQueries .clear ();
106+ DEFAULT_QUERIES .remove (repository );
107+ }
108+
109+ private GitHubQuery getQuery (@ NonNull GitHubRepository repository , @ NonNull Type type ) {
110+ GitHubQuery query = defaultQueries .get (type );
111+ if (query == null ) {
112+ switch (type ) {
113+ case ASSIGNED_TO_ME :
114+ query = new GitHubAssignedToMeQuery (repository );
115+ break ;
116+ case CREATED_BY_ME :
117+ query = new GitHubCreatedByMeQuery (repository );
118+ break ;
119+ default :
120+ LOGGER .log (Level .WARNING , "The query type({0}) is not supported!" , type .name ()); // NOI18N
121+ return new GitHubDefaultQuery (repository ) {
122+ };
123+ }
124+ defaultQueries .put (type , query );
125+ }
126+ return query ;
127+ }
128+
129+ private void clear () {
130+ defaultQueries .clear ();
131+ }
132+
93133}
0 commit comments