package com.kenai.redminenb; import com.kenai.redminenb.issue.RedmineIssue; import com.kenai.redminenb.issue.RedmineIssuePriorityProvider; import com.kenai.redminenb.issue.RedmineIssueProvider; import com.kenai.redminenb.issue.RedmineIssueScheduleProvider; import com.kenai.redminenb.query.RedmineQuery; import com.kenai.redminenb.query.RedmineQueryProvider; import com.kenai.redminenb.repository.RedmineRepository; import com.kenai.redminenb.repository.RedmineRepositoryProvider; import java.awt.Image; import java.util.logging.Logger; import org.netbeans.modules.bugtracking.spi.BugtrackingSupport; import org.openide.util.*; /** * RedmineNB integration base class. * * @author Mykolas * @author Anchialas <anchialas@gmail.com> */ public final class Redmine { public static final Logger LOG = Logger.getLogger(Redmine.class.getName()); public static final String IMAGE_PATH = "com/kenai/redminenb/resources/"; public static final String ICON_IMAGE = "redmine.png"; private static RedmineIssuePriorityProvider ipp; private static volatile RedmineIssueScheduleProvider issp; private RedmineIssueProvider rip; private RedmineQueryProvider rqp; private RedmineRepositoryProvider rrp; private BugtrackingSupport<RedmineRepository, RedmineQuery, RedmineIssue> support; private Redmine() { // omitted } public BugtrackingSupport<RedmineRepository, RedmineQuery, RedmineIssue> getSupport() { if (support == null) { support = new BugtrackingSupport<>(getRepositoryProvider(), getQueryProvider(), getIssueProvider()); } return support; } private static class Holder { private static final Redmine SINGLETON = new Redmine(); } public static Redmine getInstance() { return Holder.SINGLETON; } public static Image getIconImage() { return getImage(ICON_IMAGE); } public static Image getImage(String name) { return ImageUtilities.loadImage(IMAGE_PATH + name); } public static String getMessage(String resName, String... param) { return NbBundle.getMessage(Redmine.class, resName, param); } public RedmineIssueProvider getIssueProvider() { if (rip == null) { rip = new RedmineIssueProvider(); } return rip; } public RedmineQueryProvider getQueryProvider() { if (rqp == null) { rqp = new RedmineQueryProvider(); } return rqp; } public RedmineIssueScheduleProvider getIssueScheduleProvider() { if (issp == null) { synchronized (this) { if (issp == null) { issp = new RedmineIssueScheduleProvider(); } } } return issp; } private RedmineRepositoryProvider getRepositoryProvider() { if (rrp == null) { rrp = new RedmineRepositoryProvider(); } return rrp; } }