This is an automated email from the ASF dual-hosted git repository.
hansva pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/hop.git
The following commit(s) were added to refs/heads/main by this push:
new 72028f1968 Issue #6042 (clear db cache when switching prj/env) (#6170)
72028f1968 is described below
commit 72028f1968793dcb4f28591382a179da34f0d9e4
Author: Matt Casters <[email protected]>
AuthorDate: Tue Dec 23 14:32:29 2025 +0100
Issue #6042 (clear db cache when switching prj/env) (#6170)
Co-authored-by: Matt Casters <[email protected]>
---
.../src/main/java/org/apache/hop/core/DbCache.java | 135 ++----------
.../apache/hop/projects/config/ProjectsConfig.java | 229 ++-------------------
.../config/ProjectsConfigOptionPlugin.java | 182 +++-------------
.../org/apache/hop/projects/util/ProjectsUtil.java | 10 +
.../config/messages/messages_en_US.properties | 1 +
5 files changed, 78 insertions(+), 479 deletions(-)
diff --git a/core/src/main/java/org/apache/hop/core/DbCache.java
b/core/src/main/java/org/apache/hop/core/DbCache.java
index 0654791348..396a7ce87c 100644
--- a/core/src/main/java/org/apache/hop/core/DbCache.java
+++ b/core/src/main/java/org/apache/hop/core/DbCache.java
@@ -17,20 +17,11 @@
package org.apache.hop.core;
-import java.io.BufferedOutputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
import java.util.Enumeration;
import java.util.Hashtable;
-import org.apache.hop.core.exception.HopEofException;
-import org.apache.hop.core.exception.HopFileException;
-import org.apache.hop.core.logging.ILogChannel;
-import org.apache.hop.core.logging.LogChannel;
+import lombok.Getter;
+import lombok.Setter;
import org.apache.hop.core.row.IRowMeta;
-import org.apache.hop.core.row.RowMeta;
/**
* This class caches database queries so that the same query doesn't get
called twice. Queries are
@@ -40,28 +31,11 @@ public class DbCache {
private static DbCache dbCache;
private Hashtable<DbCacheEntry, IRowMeta> cache;
- private boolean usecache;
- private ILogChannel log;
-
- public void setActive() {
- setActive(true);
- }
-
- public void setInactive() {
- setActive(false);
- }
-
- public void setActive(boolean act) {
- usecache = act;
- }
-
- public boolean isActive() {
- return usecache;
- }
+ @Getter @Setter private boolean active;
public void put(DbCacheEntry entry, IRowMeta fields) {
- if (!usecache) {
+ if (!active) {
return;
}
@@ -76,7 +50,7 @@ public class DbCache {
* @return the fields as a row generated by a database cache entry
*/
public IRowMeta get(DbCacheEntry entry) {
- if (!usecache) {
+ if (!active) {
return null;
}
@@ -101,7 +75,6 @@ public class DbCache {
public void clear(String dbname) {
if (dbname == null) {
cache = new Hashtable<>();
- setActive();
} else {
Enumeration<DbCacheEntry> keys = cache.keys();
while (keys.hasMoreElements()) {
@@ -114,87 +87,9 @@ public class DbCache {
}
}
- public String getFilename() {
- return Const.HOP_AUDIT_FOLDER + Const.FILE_SEPARATOR + "db.cache";
- }
-
- private DbCache() throws HopFileException {
- try {
- clear(null);
-
- // Serialization support for the DB cache
- //
- log = new LogChannel("DbCache");
-
- String filename = getFilename();
- File file = new File(filename);
- if (file.canRead()) {
- log.logDetailed("Loading database cache from file: [" + filename +
"]");
-
- try (FileInputStream fis = new FileInputStream(file);
- DataInputStream dis = new DataInputStream(fis)) {
- int counter = 0;
- try {
- while (true) {
- DbCacheEntry entry = new DbCacheEntry(dis);
- IRowMeta row = new RowMeta(dis);
- cache.put(entry, row);
- counter++;
- }
- } catch (HopEofException eof) {
- log.logDetailed("We read " + counter + " cached rows from the
database cache!");
- }
- } catch (Exception e) {
- throw new Exception(e);
- }
- } else {
- log.logDetailed("The database cache doesn't exist yet.");
- }
- } catch (Exception e) {
- throw new HopFileException("Couldn't read the database cache", e);
- }
- }
-
- public void saveCache() throws HopFileException {
- try {
- // Serialization support for the DB cache
- //
- String filename = getFilename();
- File file = new File(filename);
- if (!file.exists() || file.canWrite()) {
-
- try (FileOutputStream fos = new FileOutputStream(file);
- DataOutputStream dos = new DataOutputStream(new
BufferedOutputStream(fos, 10000))) {
-
- int counter = 0;
-
- Enumeration<DbCacheEntry> keys = cache.keys();
- while (keys.hasMoreElements()) {
- // Save the database cache entry
- DbCacheEntry entry = keys.nextElement();
- entry.write(dos);
-
- // Save the corresponding row as well.
- IRowMeta rowMeta = get(entry);
- if (rowMeta != null) {
- rowMeta.writeMeta(dos);
- counter++;
- } else {
- throw new HopFileException(
- "The database cache contains an empty row. We can't save
this!");
- }
- }
-
- log.logDetailed("We wrote " + counter + " cached rows to the
database cache!");
- } catch (Exception e) {
- throw new Exception(e);
- }
- } else {
- throw new HopFileException("We can't write to the cache file: " +
filename);
- }
- } catch (Exception e) {
- throw new HopFileException("Couldn't write to the database cache", e);
- }
+ private DbCache() {
+ cache = new Hashtable<>();
+ active = true;
}
/**
@@ -202,15 +97,15 @@ public class DbCache {
*
* @return the database cache instance.
*/
- public static final DbCache getInstance() {
- if (dbCache != null) {
- return dbCache;
- }
- try {
+ public static DbCache getInstance() {
+ if (dbCache == null) {
dbCache = new DbCache();
- } catch (HopFileException kfe) {
- throw new RuntimeException("Unable to create the database cache: " +
kfe.getMessage());
}
return dbCache;
}
+
+ /** Clear the whole cache in one go */
+ public static void clearAll() {
+ getInstance().clear(null);
+ }
}
diff --git
a/plugins/misc/projects/src/main/java/org/apache/hop/projects/config/ProjectsConfig.java
b/plugins/misc/projects/src/main/java/org/apache/hop/projects/config/ProjectsConfig.java
index a435acb437..f52b4de15d 100644
---
a/plugins/misc/projects/src/main/java/org/apache/hop/projects/config/ProjectsConfig.java
+++
b/plugins/misc/projects/src/main/java/org/apache/hop/projects/config/ProjectsConfig.java
@@ -42,6 +42,7 @@ public class ProjectsConfig {
private boolean environmentMandatory;
private boolean environmentsForActiveProject;
private boolean sortByNameLastUsedProjects;
+ private boolean clearingDbCacheWhenSwitching;
private String defaultProject;
private String defaultEnvironment;
private String standardParentProject;
@@ -58,6 +59,7 @@ public class ProjectsConfig {
projectConfigurations = new ArrayList<>();
lifecycleEnvironments = new ArrayList<>();
projectLifecycles = new ArrayList<>();
+ clearingDbCacheWhenSwitching = true;
}
public ProjectsConfig(ProjectsConfig config) {
@@ -74,6 +76,7 @@ public class ProjectsConfig {
standardProjectsFolder = config.standardProjectsFolder;
defaultProjectConfigFile = config.defaultProjectConfigFile;
environmentsForActiveProject = config.environmentsForActiveProject;
+ clearingDbCacheWhenSwitching = config.clearingDbCacheWhenSwitching;
sortByNameLastUsedProjects = config.sortByNameLastUsedProjects;
}
@@ -97,13 +100,12 @@ public class ProjectsConfig {
*/
public List<LifecycleEnvironment> findEnvironmentsOfProject(String
projectName) {
List<LifecycleEnvironment> list = new ArrayList<>();
- lifecycleEnvironments.stream()
- .forEach(
- e -> {
- if (e.getProjectName().equals(projectName)) {
- list.add(e);
- }
- });
+ lifecycleEnvironments.forEach(
+ e -> {
+ if (e.getProjectName().equals(projectName)) {
+ list.add(e);
+ }
+ });
return list;
}
@@ -134,7 +136,7 @@ public class ProjectsConfig {
public List<String> listProjectConfigNames() {
List<String> names = new ArrayList<>();
- projectConfigurations.stream().forEach(config ->
names.add(config.getProjectName()));
+ projectConfigurations.forEach(config ->
names.add(config.getProjectName()));
Collections.sort(names);
return names;
}
@@ -177,13 +179,12 @@ public class ProjectsConfig {
public List<String> listEnvironmentNamesForProject(String projectName) {
List<String> names = new ArrayList<>();
- lifecycleEnvironments.stream()
- .forEach(
- env -> {
- if (env.getProjectName().equals(projectName)) {
- names.add(env.getName());
- }
- });
+ lifecycleEnvironments.forEach(
+ env -> {
+ if (env.getProjectName().equals(projectName)) {
+ names.add(env.getName());
+ }
+ });
Collections.sort(names);
return names;
@@ -200,7 +201,7 @@ public class ProjectsConfig {
return null;
}
for (ProjectLifecycle lifecycle : projectLifecycles) {
- if (lifecycle.equals(lifecycleName)) {
+ if (lifecycle.getName().equalsIgnoreCase(lifecycleName)) {
return lifecycle;
}
}
@@ -219,14 +220,14 @@ public class ProjectsConfig {
public ProjectLifecycle removeLifecycle(String lifecycleName) {
ProjectLifecycle lifecycle = findLifecycle(lifecycleName);
if (lifecycle != null) {
- lifecycleEnvironments.remove(lifecycle);
+ projectLifecycles.remove(lifecycle);
}
return lifecycle;
}
public List<String> listLifecycleNames() {
List<String> names = new ArrayList<>();
- projectLifecycles.stream().forEach(lifecycle ->
names.add(lifecycle.getName()));
+ projectLifecycles.forEach(lifecycle -> names.add(lifecycle.getName()));
Collections.sort(names);
return names;
}
@@ -238,196 +239,4 @@ public class ProjectsConfig {
Collections.emptyList(),
Collections.emptyList())); // Only considers the name
}
-
- /**
- * Gets enabled
- *
- * @return value of enabled
- */
- public boolean isEnabled() {
- return enabled;
- }
-
- /**
- * @param enabled The enabled to set
- */
- public void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
-
- /**
- * Gets projectConfigurations
- *
- * @return value of projectConfigurations
- */
- public List<ProjectConfig> getProjectConfigurations() {
- return projectConfigurations;
- }
-
- /**
- * @param projectConfigurations The projectConfigurations to set
- */
- public void setProjectConfigurations(List<ProjectConfig>
projectConfigurations) {
- this.projectConfigurations = projectConfigurations;
- }
-
- /**
- * Gets lifecycleEnvironments
- *
- * @return value of lifecycleEnvironments
- */
- public List<LifecycleEnvironment> getLifecycleEnvironments() {
- return lifecycleEnvironments;
- }
-
- /**
- * @param lifecycleEnvironments The lifecycleEnvironments to set
- */
- public void setLifecycleEnvironments(List<LifecycleEnvironment>
lifecycleEnvironments) {
- this.lifecycleEnvironments = lifecycleEnvironments;
- }
-
- /**
- * Gets defaultProject
- *
- * @return value of defaultProject
- */
- public String getDefaultProject() {
- return defaultProject;
- }
-
- /**
- * @param defaultProject The defaultProject to set
- */
- public void setDefaultProject(String defaultProject) {
- this.defaultProject = defaultProject;
- }
-
- /**
- * Gets projectMandatory
- *
- * @return value of projectMandatory
- */
- public boolean isProjectMandatory() {
- return projectMandatory;
- }
-
- /**
- * @param projectMandatory The projectMandatory to set
- */
- public void setProjectMandatory(boolean projectMandatory) {
- this.projectMandatory = projectMandatory;
- }
-
- /**
- * Gets environmentMandatory
- *
- * @return value of environmentMandatory
- */
- public boolean isEnvironmentMandatory() {
- return environmentMandatory;
- }
-
- /**
- * @param environmentMandatory The environmentMandatory to set
- */
- public void setEnvironmentMandatory(boolean environmentMandatory) {
- this.environmentMandatory = environmentMandatory;
- }
-
- /**
- * Gets defaultEnvironment
- *
- * @return value of defaultEnvironment
- */
- public String getDefaultEnvironment() {
- return defaultEnvironment;
- }
-
- /**
- * @param defaultEnvironment The defaultEnvironment to set
- */
- public void setDefaultEnvironment(String defaultEnvironment) {
- this.defaultEnvironment = defaultEnvironment;
- }
-
- /**
- * Gets standardParentProject
- *
- * @return value of standardParentProject
- */
- public String getStandardParentProject() {
- return standardParentProject;
- }
-
- /**
- * @param standardParentProject The standardParentProject to set
- */
- public void setStandardParentProject(String standardParentProject) {
- this.standardParentProject = standardParentProject;
- }
-
- /**
- * Gets projectLifecycles
- *
- * @return value of projectLifecycles
- */
- public List<ProjectLifecycle> getProjectLifecycles() {
- return projectLifecycles;
- }
-
- /**
- * @param projectLifecycles The projectLifecycles to set
- */
- public void setProjectLifecycles(List<ProjectLifecycle> projectLifecycles) {
- this.projectLifecycles = projectLifecycles;
- }
-
- /**
- * Gets standardProjectsFolder
- *
- * @return value of standardProjectsFolder
- */
- public String getStandardProjectsFolder() {
- return standardProjectsFolder;
- }
-
- /**
- * @param standardProjectsFolder The standardProjectsFolder to set
- */
- public void setStandardProjectsFolder(String standardProjectsFolder) {
- this.standardProjectsFolder = standardProjectsFolder;
- }
-
- /**
- * Gets defaultProjectConfigFile
- *
- * @return value of defaultProjectConfigFile
- */
- public String getDefaultProjectConfigFile() {
- return defaultProjectConfigFile;
- }
-
- /**
- * @param defaultProjectConfigFile The defaultProjectConfigFile to set
- */
- public void setDefaultProjectConfigFile(String defaultProjectConfigFile) {
- this.defaultProjectConfigFile = defaultProjectConfigFile;
- }
-
- /**
- * Gets environmentsForActiveProject
- *
- * @return value of environmentsForActiveProject
- */
- public boolean isEnvironmentsForActiveProject() {
- return environmentsForActiveProject;
- }
-
- /**
- * @param environmentsForActiveProject The environmentMandatory to set
- */
- public void setEnvironmentsForActiveProject(boolean
environmentsForActiveProject) {
- this.environmentsForActiveProject = environmentsForActiveProject;
- }
}
diff --git
a/plugins/misc/projects/src/main/java/org/apache/hop/projects/config/ProjectsConfigOptionPlugin.java
b/plugins/misc/projects/src/main/java/org/apache/hop/projects/config/ProjectsConfigOptionPlugin.java
index f52a6246b9..e6c6414270 100644
---
a/plugins/misc/projects/src/main/java/org/apache/hop/projects/config/ProjectsConfigOptionPlugin.java
+++
b/plugins/misc/projects/src/main/java/org/apache/hop/projects/config/ProjectsConfigOptionPlugin.java
@@ -53,6 +53,8 @@ import picocli.CommandLine;
@GuiPlugin(
description = "i18n::ProjectConfig.Tab.Name" // label in options dialog
)
+@Getter
+@Setter
public class ProjectsConfigOptionPlugin
implements IConfigOptions, IGuiPluginCompositeWidgetsListener {
@@ -67,6 +69,7 @@ public class ProjectsConfigOptionPlugin
private static final String WIDGET_ID_STANDARD_PROJECTS_FOLDER =
"10060-standard-projects-folder";
private static final String
WIDGET_ID_RESTRICT_ENVIRONMENTS_TO_ACTIVE_PROJECT =
"10070-restrict-environments-to-active-project";
+ private static final String WIDGET_ID_CLEAR_DB_CACHE =
"10080-clear-db-cache";
private static final String WIDGET_ID_DEFAULT_PROJECT_CONFIG_FILENAME =
"10070-default-project-config-filename";
private static final String WIDGET_ID_SORT_BY_NAME_LAST_USED_PROJECTS =
@@ -171,6 +174,17 @@ public class ProjectsConfigOptionPlugin
description = "Restrict environment list to active project")
private Boolean environmentsForActiveProject;
+ @GuiWidgetElement(
+ id = WIDGET_ID_CLEAR_DB_CACHE,
+ parentId = ConfigPluginOptionsTab.GUI_WIDGETS_PARENT_ID,
+ type = GuiElementType.CHECKBOX,
+ variables = false,
+ label = "i18n::ProjectConfig.ClearDbCache.Message")
+ @CommandLine.Option(
+ names = {"-cdb", "--clear-db-when-env-switching"},
+ description = "Clear database cache when switching project/environment")
+ private Boolean clearingDbCacheWhenSwitching;
+
@GuiWidgetElement(
id = WIDGET_ID_SORT_BY_NAME_LAST_USED_PROJECTS,
parentId = ConfigPluginOptionsTab.GUI_WIDGETS_PARENT_ID,
@@ -200,6 +214,7 @@ public class ProjectsConfigOptionPlugin
instance.defaultProjectConfigFile = config.getDefaultProjectConfigFile();
instance.environmentsForActiveProject =
config.isEnvironmentsForActiveProject();
instance.sortByNameLastUsedProjects =
config.isSortByNameLastUsedProjects();
+ instance.clearingDbCacheWhenSwitching =
config.isClearingDbCacheWhenSwitching();
return instance;
}
@@ -280,6 +295,17 @@ public class ProjectsConfigOptionPlugin
}
changed = true;
}
+ if (clearingDbCacheWhenSwitching != null) {
+ config.setClearingDbCacheWhenSwitching(clearingDbCacheWhenSwitching);
+ if (clearingDbCacheWhenSwitching) {
+ log.logBasic("Clearing database cache when switching project or
environment.");
+ } else {
+ log.logBasic(
+ "Keeping the database cache when switching between projects or
environments.");
+ }
+ changed = true;
+ }
+
// Save to file if anything changed
//
if (changed) {
@@ -388,6 +414,11 @@ public class ProjectsConfigOptionPlugin
ProjectsConfigSingleton.getConfig()
.setSortByNameLastUsedProjects(sortByNameLastUsedProjects);
break;
+ case WIDGET_ID_CLEAR_DB_CACHE:
+ clearingDbCacheWhenSwitching = ((Button) control).getSelection();
+ ProjectsConfigSingleton.getConfig()
+ .setClearingDbCacheWhenSwitching(clearingDbCacheWhenSwitching);
+ break;
default:
break;
}
@@ -406,151 +437,7 @@ public class ProjectsConfigOptionPlugin
}
/**
- * Gets projectsEnabled
- *
- * @return value of projectsEnabled
- */
- public Boolean getProjectsEnabled() {
- return projectsEnabled;
- }
-
- /**
- * @param projectsEnabled The projectsEnabled to set
- */
- public void setProjectsEnabled(Boolean projectsEnabled) {
- this.projectsEnabled = projectsEnabled;
- }
-
- /**
- * Gets projectMandatory
- *
- * @return value of projectMandatory
- */
- public Boolean getProjectMandatory() {
- return projectMandatory;
- }
-
- /**
- * @param projectMandatory The projectMandatory to set
- */
- public void setProjectMandatory(Boolean projectMandatory) {
- this.projectMandatory = projectMandatory;
- }
-
- /**
- * Gets defaultProject
- *
- * @return value of defaultProject
- */
- public String getDefaultProject() {
- return defaultProject;
- }
-
- /**
- * @param defaultProject The defaultProject to set
- */
- public void setDefaultProject(String defaultProject) {
- this.defaultProject = defaultProject;
- }
-
- /**
- * Gets standardParentProject
- *
- * @return value of standardParentProject
- */
- public String getStandardParentProject() {
- return standardParentProject;
- }
-
- /**
- * @param standardParentProject The standardParentProject to set
- */
- public void setStandardParentProject(String standardParentProject) {
- this.standardParentProject = standardParentProject;
- }
-
- /**
- * Gets environmentMandatory
- *
- * @return value of environmentMandatory
- */
- public Boolean getEnvironmentMandatory() {
- return environmentMandatory;
- }
-
- /**
- * @param environmentMandatory The environmentMandatory to set
- */
- public void setEnvironmentMandatory(Boolean environmentMandatory) {
- this.environmentMandatory = environmentMandatory;
- }
-
- /**
- * Gets defaultEnvironment
- *
- * @return value of defaultEnvironment
- */
- public String getDefaultEnvironment() {
- return defaultEnvironment;
- }
-
- /**
- * @param defaultEnvironment The defaultEnvironment to set
- */
- public void setDefaultEnvironment(String defaultEnvironment) {
- this.defaultEnvironment = defaultEnvironment;
- }
-
- /**
- * Gets standardProjectsFolder
- *
- * @return value of standardProjectsFolder
- */
- public String getStandardProjectsFolder() {
- return standardProjectsFolder;
- }
-
- /**
- * @param standardProjectsFolder The standardProjectsFolder to set
- */
- public void setStandardProjectsFolder(String standardProjectsFolder) {
- this.standardProjectsFolder = standardProjectsFolder;
- }
-
- /**
- * Gets defaultProjectConfigFile
- *
- * @return value of defaultProjectConfigFile
- */
- public String getDefaultProjectConfigFile() {
- return defaultProjectConfigFile;
- }
-
- /**
- * @param defaultProjectConfigFile The defaultProjectConfigFile to set
- */
- public void setDefaultProjectConfigFile(String defaultProjectConfigFile) {
- this.defaultProjectConfigFile = defaultProjectConfigFile;
- }
-
- /**
- * Gets environmentsForActiveProject
- *
- * @return value of environmentsForActiveProject
- */
- public Boolean getEnvironmentsForActiveProject() {
- return environmentsForActiveProject;
- }
-
- /**
- * @param environmentsForActiveProject The environmentsForActiveProject flag
to set
- */
- public void setEnvironmentsForActiveProject(Boolean
environmentsForActiveProject) {
- this.environmentsForActiveProject = environmentsForActiveProject;
- }
-
- /**
- * Used to generate the list that is shown in the mySqlDriverClass GuiWidget
+ * Used to generate the list that is shown in the GUI
*
* @param log Logging object
* @param metadataProvider If shared metadata is needed to get the values
@@ -564,10 +451,7 @@ public class ProjectsConfigOptionPlugin
// Add empty entry for no selection
prjsList.add("");
-
- for (String prj : prjs) {
- prjsList.add(prj);
- }
+ prjsList.addAll(prjs);
return prjsList;
}
diff --git
a/plugins/misc/projects/src/main/java/org/apache/hop/projects/util/ProjectsUtil.java
b/plugins/misc/projects/src/main/java/org/apache/hop/projects/util/ProjectsUtil.java
index c1bd913919..e687b9e492 100644
---
a/plugins/misc/projects/src/main/java/org/apache/hop/projects/util/ProjectsUtil.java
+++
b/plugins/misc/projects/src/main/java/org/apache/hop/projects/util/ProjectsUtil.java
@@ -24,6 +24,7 @@ import org.apache.commons.lang.StringUtils;
import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemException;
import org.apache.hop.core.Const;
+import org.apache.hop.core.DbCache;
import org.apache.hop.core.exception.HopException;
import org.apache.hop.core.extension.ExtensionPointHandler;
import org.apache.hop.core.logging.ILogChannel;
@@ -79,6 +80,15 @@ public class ProjectsUtil {
throw new HopException("Error enabling project " + projectName + ": it
is not configured.");
}
+ // Clear the database cache when switching?
+ if (config.isClearingDbCacheWhenSwitching()) {
+ if (log.isDetailed()) {
+ log.logDetailed(
+ "Clearing the database cache when switching between projects or
environments.");
+ }
+ DbCache.clearAll();
+ }
+
// Variable system variables but also apply them to variables
// We'll use those to change the loaded variables in HopGui
//
diff --git
a/plugins/misc/projects/src/main/resources/org/apache/hop/projects/config/messages/messages_en_US.properties
b/plugins/misc/projects/src/main/resources/org/apache/hop/projects/config/messages/messages_en_US.properties
index 54179949bb..8ddda360c3 100644
---
a/plugins/misc/projects/src/main/resources/org/apache/hop/projects/config/messages/messages_en_US.properties
+++
b/plugins/misc/projects/src/main/resources/org/apache/hop/projects/config/messages/messages_en_US.properties
@@ -35,3 +35,4 @@ ProjectConfig.StdProjectFilename.Message=The project
configuration filename for
ProjectConfig.StdProjectFolder.Description=The standard projects folder for
new projects
ProjectConfig.StdProjectFolder.Message=The standard projects folder for new
projects
ProjectConfig.Tab.Name=Projects
+ProjectConfig.ClearDbCache.Message=Clear DB cache when switching
project/environment
\ No newline at end of file