blob: 80d62fd4720c8714b930a840e344f9e2fd3492d0 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.bugzilla;
import java.net.URL;
import org.netbeans.modules.bugzilla.repository.BugzillaRepository;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
import javax.swing.Icon;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.netbeans.modules.bugzilla.query.BugzillaQuery;
import org.netbeans.modules.bugzilla.util.BugzillaUtil;
import org.netbeans.modules.mylyn.util.MylynSupport;
import org.openide.modules.Places;
import org.openide.util.ImageUtilities;
import org.openide.util.NbPreferences;
/**
*
* @author Tomas Stupka
*/
public class BugzillaConfig {
private static BugzillaConfig instance = null;
private static final String LAST_CHANGE_FROM = "bugzilla.last_change_from"; // NOI18N // XXX
private static final String QUERY_NAME = "bugzilla.query_"; // NOI18N
private static final String QUERY_LAST_REFRESH = "bugzilla.query_last_refresh"; // NOI18N
private static final String DELIMITER = "<=>"; // NOI18N
private static final String ATTACH_LOG = "bugzilla.attach_log"; // NOI18N;
private static final String PREF_SECTION_COLLAPSED = "collapsedSection"; //NOI18N
private static final String PREF_TASK = "task."; //NOI18N
private static final Level LOG_LEVEL = BugzillaUtil.isAssertEnabled() ? Level.SEVERE : Level.INFO;
public static final int DEFAULT_QUERY_REFRESH = 30;
public static final int DEFAULT_ISSUE_REFRESH = 15;
private Map<String, Icon> priorityIcons;
private Map<String, URL> priorityIconsURL;
private BugzillaConfig() { }
public static BugzillaConfig getInstance() {
if(instance == null) {
instance = new BugzillaConfig();
}
return instance;
}
private Preferences getPreferences() {
return NbPreferences.forModule(BugzillaConfig.class);
}
public boolean getAttachLogFile() {
return getPreferences().getBoolean(ATTACH_LOG, true);
}
public void putAttachLogFile(boolean attach) {
getPreferences().putBoolean(ATTACH_LOG, attach);
}
public void putQuery(BugzillaRepository repository, BugzillaQuery query) {
getPreferences().put(
getQueryKey(repository.getID(), query.getDisplayName()),
query.getUrlParameters() + DELIMITER + /* skip query.getLastRefresh() + */ DELIMITER + query.isUrlDefined());
}
public void removeQuery(BugzillaRepository repository, BugzillaQuery query) {
getPreferences().remove(getQueryKey(repository.getID(), query.getDisplayName()));
try {
String storedName = query.getStoredQueryName();
IRepositoryQuery iquery = storedName == null ? null
: MylynSupport.getInstance().getRepositoryQuery(repository.getTaskRepository(), storedName);
if (iquery != null) {
MylynSupport.getInstance().deleteQuery(iquery);
}
} catch (CoreException ex) {
Bugzilla.LOG.log(Level.WARNING, null, ex);
}
}
public BugzillaQuery getQuery(BugzillaRepository repository, String queryName) {
String value = getStoredQuery(repository, queryName);
if(value == null) {
return null;
}
String[] values = value.split(DELIMITER);
assert values.length >= 2 : "wrong amount of stored query data [" + values.length + "] in query '" + queryName + "'"; // NOI18N
String urlParams = values[0];
boolean urlDef = values.length > 2 ? Boolean.parseBoolean(values[2]) : false;
return repository.createPersistentQuery(queryName, urlParams, urlDef);
}
public String getUrlParams(BugzillaRepository repository, String queryName) {
String value = getStoredQuery(repository, queryName);
if(value == null) {
return null;
}
String[] values = value.split(DELIMITER);
assert values.length >= 2;
return values[0];
}
public String[] getQueries(String repoID) {
return getKeysWithPrefix(QUERY_NAME + repoID + DELIMITER);
}
public long getLastQueryRefresh(BugzillaRepository repository, String queryName) {
return getPreferences().getLong(QUERY_LAST_REFRESH + "_" + getQueryKey(repository.getID(), queryName), -1); // NOI18N
}
public void putLastQueryRefresh(BugzillaRepository repository, String queryName, long lastRefresh) {
getPreferences().putLong(QUERY_LAST_REFRESH + "_" + getQueryKey(repository.getID(), queryName), lastRefresh); // NOI18N
}
private String[] getKeysWithPrefix(String prefix) {
String[] keys = null;
try {
keys = getPreferences().keys();
} catch (BackingStoreException ex) {
Bugzilla.LOG.log(Level.SEVERE, null, ex); // XXX
}
if (keys == null || keys.length == 0) {
return new String[0];
}
List<String> ret = new ArrayList<>();
for (String key : keys) {
if (key.startsWith(prefix)) {
ret.add(key.substring(prefix.length()));
}
}
return ret.toArray(new String[ret.size()]);
}
private String getQueryKey(String repositoryID, String queryName) {
return QUERY_NAME + repositoryID + DELIMITER + queryName;
}
private String getStoredQuery(BugzillaRepository repository, String queryName) {
String value = getPreferences().get(getQueryKey(repository.getID(), queryName), null);
return value;
}
public void setLastChangeFrom(String value) {
getPreferences().put(LAST_CHANGE_FROM, value);
}
public String getLastChangeFrom() {
return getPreferences().get(LAST_CHANGE_FROM, ""); // NOI18N
}
public Icon getPriorityIcon(String priority) {
if(priorityIcons == null) {
priorityIcons = new HashMap<String, Icon>();
priorityIcons.put("P1", ImageUtilities.loadImageIcon("org/netbeans/modules/bugzilla/resources/p1.png", true)); // NOI18N
priorityIcons.put("P2", ImageUtilities.loadImageIcon("org/netbeans/modules/bugzilla/resources/p2.png", true)); // NOI18N
priorityIcons.put("P3", ImageUtilities.loadImageIcon("org/netbeans/modules/bugzilla/resources/p3.png", true)); // NOI18N
priorityIcons.put("P4", ImageUtilities.loadImageIcon("org/netbeans/modules/bugzilla/resources/p4.png", true)); // NOI18N
priorityIcons.put("P5", ImageUtilities.loadImageIcon("org/netbeans/modules/bugzilla/resources/p5.png", true)); // NOI18N
}
return priorityIcons.get(priority);
}
public URL getPriorityIconURL(String priority) {
if(priorityIconsURL == null) {
priorityIconsURL = new HashMap<>();
priorityIconsURL.put("P1", BugzillaConfig.class.getClassLoader().getResource("org/netbeans/modules/bugzilla/resources/p1.png")); // NOI18N
priorityIconsURL.put("P2", BugzillaConfig.class.getClassLoader().getResource("org/netbeans/modules/bugzilla/resources/p2.png")); // NOI18N
priorityIconsURL.put("P3", BugzillaConfig.class.getClassLoader().getResource("org/netbeans/modules/bugzilla/resources/p3.png")); // NOI18N
priorityIconsURL.put("P4", BugzillaConfig.class.getClassLoader().getResource("org/netbeans/modules/bugzilla/resources/p4.png")); // NOI18N
priorityIconsURL.put("P5", BugzillaConfig.class.getClassLoader().getResource("org/netbeans/modules/bugzilla/resources/p5.png")); // NOI18N
}
return priorityIconsURL.get(priority);
}
public void setEditorSectionCollapsed (String repositoryId, String taskId, String sectionName, boolean collapsed) {
String key = getTaskKey(repositoryId, taskId) + PREF_SECTION_COLLAPSED + sectionName;
getPreferences().putBoolean(key, collapsed);
}
public boolean isEditorSectionCollapsed (String repositoryId, String taskId, String sectionName, boolean defaultValue) {
String key = getTaskKey(repositoryId, taskId) + PREF_SECTION_COLLAPSED + sectionName;
return getPreferences().getBoolean(key, defaultValue);
}
private String getTaskKey (String repositoryId, String taskId) {
return PREF_TASK + repositoryId + "." + taskId + ".";
}
/**
* Returns the path for the Bugzilla configuration directory.
*
* @return the path
*
*/
private static String getNBConfigPath() {
//T9Y - nb bugzilla confing should be changable
String t9yNbConfigPath = System.getProperty("netbeans.t9y.bugzilla.nb.config.path"); //NOI18N
if (t9yNbConfigPath != null && t9yNbConfigPath.length() > 0) {
return t9yNbConfigPath;
}
String nbHome = Places.getUserDirectory().getAbsolutePath(); //NOI18N
return nbHome + "/config/issue-tracking/org-netbeans-modules-bugzilla"; //NOI18N
}
}