Author: doogie
Date: Thu Apr  1 04:31:37 2010
New Revision: 929813

URL: http://svn.apache.org/viewvc?rev=929813&view=rev
Log:
getMaxSize didn't actually do anything useful, and overlapped with
getMaxInMemory.  Deprecate getMaxSize(it continues to call setLru
underneath everything), and provide a new getSizeLimit method.  This
latter method still does nothing, but at least it no longer overlaps.

Also remove the maxSize parameter in webtools FindUtilCache page,
instead displaying and altering the maxInMemory setting.

Modified:
    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/UtilCache.java
    
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/test/UtilCacheTests.java
    ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml
    ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/UtilCacheEvents.java
    
ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/actions/cache/EditUtilCache.groovy
    
ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/actions/cache/FindUtilCache.groovy
    ofbiz/trunk/framework/webtools/webapp/webtools/cache/editUtilCache.ftl
    ofbiz/trunk/framework/webtools/webapp/webtools/cache/findUtilCache.ftl

Modified: 
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/UtilCache.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/UtilCache.java?rev=929813&r1=929812&r2=929813&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/UtilCache.java 
(original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/UtilCache.java Thu 
Apr  1 04:31:37 2010
@@ -84,7 +84,7 @@ public class UtilCache<K, V> implements 
     /** The maximum number of elements in the cache.
      * If set to 0, there will be no limit on the number of elements in the 
cache.
      */
-    protected int maxSize = 0;
+    protected int sizeLimit = 0;
     protected int maxInMemory = 0;
 
     /** Specifies the amount of time since initial loading before an element 
will be reported as expired.
@@ -102,16 +102,16 @@ public class UtilCache<K, V> implements 
     /** The set of listeners to receive notifcations when items are 
modidfied(either delibrately or because they were expired). */
     protected Set<CacheListener<K, V>> listeners = new 
CopyOnWriteArraySet<CacheListener<K, V>>();
 
-    /** Constructor which specifies the cacheName as well as the maxSize, 
expireTime and useSoftReference.
-     * The passed maxSize, expireTime and useSoftReference will be overridden 
by values from cache.properties if found.
-     * @param maxSize The maxSize member is set to this value
+    /** Constructor which specifies the cacheName as well as the sizeLimit, 
expireTime and useSoftReference.
+     * The passed sizeLimit, expireTime and useSoftReference will be 
overridden by values from cache.properties if found.
+     * @param sizeLimit The sizeLimit member is set to this value
      * @param expireTime The expireTime member is set to this value
      * @param cacheName The name of the cache.
      * @param useSoftReference Specifies whether or not to use soft references 
for this cache.
      */
-    private UtilCache(String cacheName, int maxSize, int maxInMemory, long 
expireTime, boolean useSoftReference, boolean useFileSystemStore, String 
propName, String... propNames) {
+    private UtilCache(String cacheName, int sizeLimit, int maxInMemory, long 
expireTime, boolean useSoftReference, boolean useFileSystemStore, String 
propName, String... propNames) {
         this.name = cacheName;
-        this.maxSize = maxSize;
+        this.sizeLimit = sizeLimit;
         this.maxInMemory = maxInMemory;
         this.expireTime = expireTime;
         this.useSoftReference = useSoftReference;
@@ -119,7 +119,7 @@ public class UtilCache<K, V> implements 
         setPropertiesParams(propName);
         setPropertiesParams(propNames);
         int maxMemSize = this.maxInMemory;
-        if (maxMemSize == 0) maxMemSize = maxSize;
+        if (maxMemSize == 0) maxMemSize = sizeLimit;
         this.cacheLineTable = new CacheLineTable<K, V>(this.fileStore, 
this.name, this.useFileSystemStore, maxMemSize);
     }
 
@@ -166,7 +166,7 @@ public class UtilCache<K, V> implements 
             try {
                 String value = getPropertyParam(res, propNames, "maxSize");
                 if (UtilValidate.isNotEmpty(value)) {
-                    this.maxSize = Integer.parseInt(value);
+                    this.sizeLimit = Integer.parseInt(value);
                 }
             } catch (Exception e) {
                 Debug.logWarning(e, "Error getting maxSize value from 
cache.properties file for propNames: " + propNames, module);
@@ -438,23 +438,37 @@ public class UtilCache<K, V> implements 
     /** Sets the maximum number of elements in the cache.
      * If 0, there is no maximum.
      * @param maxSize The maximum number of elements in the cache
+     * @deprecated Use setMaxInMemory
      */
     public void setMaxSize(int maxSize) {
-        cacheLineTable.setLru(maxSize);
-        this.maxSize = maxSize;
+        setMaxInMemory(maxSize);
     }
 
     /** Returns the current maximum number of elements in the cache
      * @return The maximum number of elements in the cache
+     * @deprecated Use getMaxInMemory
      */
     public int getMaxSize() {
-        return maxSize;
+        return getMaxInMemory();
+    }
+
+    public void setMaxInMemory(int newMaxInMemory) {
+        cacheLineTable.setLru(newMaxInMemory);
+        this.maxInMemory = newMaxInMemory;
     }
 
     public int getMaxInMemory() {
         return maxInMemory;
     }
 
+    public void setSizeLimit(int newSizeLimit) {
+        this.sizeLimit = sizeLimit;
+    }
+
+    public int getSizeLimit() {
+        return sizeLimit;
+    }
+
     /** Sets the expire time for the cache elements.
      * If 0, elements never expire.
      * @param expireTime The expire time for the cache elements
@@ -629,11 +643,11 @@ public class UtilCache<K, V> implements 
     }
 
     @SuppressWarnings("unchecked")
-    public static <K, V> UtilCache<K, V> getOrCreateUtilCache(String name, int 
maxSize, int maxInMemory, long expireTime, boolean useSoftReference, boolean 
useFileSystemStore, String... names) {
+    public static <K, V> UtilCache<K, V> getOrCreateUtilCache(String name, int 
sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, boolean 
useFileSystemStore, String... names) {
         UtilCache<K, V> existingCache = (UtilCache<K, V>) 
utilCacheTable.get(name);
         if (existingCache != null) return existingCache;
         String cacheName = name + getNextDefaultIndex(name);
-        UtilCache<K, V> newCache = new UtilCache<K, V>(cacheName, maxSize, 
maxInMemory, expireTime, useSoftReference, useFileSystemStore, name, names);
+        UtilCache<K, V> newCache = new UtilCache<K, V>(cacheName, sizeLimit, 
maxInMemory, expireTime, useSoftReference, useFileSystemStore, name, names);
         UtilCache<K, V> oldCache = (UtilCache<K, V>) 
utilCacheTable.putIfAbsent(name, newCache);
         if (oldCache == null) {
             return newCache;
@@ -642,29 +656,29 @@ public class UtilCache<K, V> implements 
         }
     }
 
-    public static <K, V> UtilCache<K, V> createUtilCache(String name, int 
maxSize, int maxInMemory, long expireTime, boolean useSoftReference, boolean 
useFileSystemStore, String... names) {
+    public static <K, V> UtilCache<K, V> createUtilCache(String name, int 
sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, boolean 
useFileSystemStore, String... names) {
         String cacheName = name + getNextDefaultIndex(name);
-        return storeCache(new UtilCache<K, V>(cacheName, maxSize, maxInMemory, 
expireTime, useSoftReference, useFileSystemStore, name, names));
+        return storeCache(new UtilCache<K, V>(cacheName, sizeLimit, 
maxInMemory, expireTime, useSoftReference, useFileSystemStore, name, names));
     }
 
-    public static <K, V> UtilCache<K, V> createUtilCache(String name, int 
maxSize, int maxInMemory, long expireTime, boolean useSoftReference, boolean 
useFileSystemStore) {
+    public static <K, V> UtilCache<K, V> createUtilCache(String name, int 
sizeLimit, int maxInMemory, long expireTime, boolean useSoftReference, boolean 
useFileSystemStore) {
         String cacheName = name + getNextDefaultIndex(name);
-        return storeCache(new UtilCache<K, V>(cacheName, maxSize, maxInMemory, 
expireTime, useSoftReference, useFileSystemStore, name));
+        return storeCache(new UtilCache<K, V>(cacheName, sizeLimit, 
maxInMemory, expireTime, useSoftReference, useFileSystemStore, name));
     }
 
-    public static <K,V> UtilCache<K, V> createUtilCache(String name, int 
maxSize, long expireTime, boolean useSoftReference) {
+    public static <K,V> UtilCache<K, V> createUtilCache(String name, int 
sizeLimit, long expireTime, boolean useSoftReference) {
         String cacheName = name + getNextDefaultIndex(name);
-        return storeCache(new UtilCache<K, V>(cacheName, maxSize, maxSize, 
expireTime, useSoftReference, false, name));
+        return storeCache(new UtilCache<K, V>(cacheName, sizeLimit, sizeLimit, 
expireTime, useSoftReference, false, name));
     }
 
-    public static <K,V> UtilCache<K, V> createUtilCache(String name, int 
maxSize, long expireTime) {
+    public static <K,V> UtilCache<K, V> createUtilCache(String name, int 
sizeLimit, long expireTime) {
         String cacheName = name + getNextDefaultIndex(name);
-        return storeCache(new UtilCache<K, V>(cacheName, maxSize, maxSize, 
expireTime, false, false, name));
+        return storeCache(new UtilCache<K, V>(cacheName, sizeLimit, sizeLimit, 
expireTime, false, false, name));
     }
 
-    public static <K,V> UtilCache<K, V> createUtilCache(int maxSize, long 
expireTime) {
+    public static <K,V> UtilCache<K, V> createUtilCache(int sizeLimit, long 
expireTime) {
         String cacheName = "specified" + getNextDefaultIndex("specified");
-        return storeCache(new UtilCache<K, V>(cacheName, maxSize, maxSize, 
expireTime, false, false, "specified"));
+        return storeCache(new UtilCache<K, V>(cacheName, sizeLimit, sizeLimit, 
expireTime, false, false, "specified"));
     }
 
     public static <K,V> UtilCache<K, V> createUtilCache(String name, boolean 
useSoftReference) {

Modified: 
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/test/UtilCacheTests.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/test/UtilCacheTests.java?rev=929813&r1=929812&r2=929813&view=diff
==============================================================================
--- 
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/test/UtilCacheTests.java
 (original)
+++ 
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/test/UtilCacheTests.java
 Thu Apr  1 04:31:37 2010
@@ -157,13 +157,13 @@ public class UtilCacheTests extends Gene
         super(name);
     }
 
-    private <K, V> UtilCache<K, V> createUtilCache(int maxSize, int 
maxInMemory, long ttl, boolean useSoftReference, boolean useFileSystemStore) {
-        return UtilCache.createUtilCache(getClass().getName() + "." + 
getName(), maxSize, maxInMemory, ttl, useSoftReference, useFileSystemStore);
+    private <K, V> UtilCache<K, V> createUtilCache(int sizeLimit, int 
maxInMemory, long ttl, boolean useSoftReference, boolean useFileSystemStore) {
+        return UtilCache.createUtilCache(getClass().getName() + "." + 
getName(), sizeLimit, maxInMemory, ttl, useSoftReference, useFileSystemStore);
     }
 
-    private static <K, V> void assertUtilCacheSettings(UtilCache<K, V> cache, 
Integer maxSize, Integer maxInMemory, Long expireTime, Boolean 
useSoftReference, Boolean useFileSystemStore) {
-        if (maxSize != null) {
-            assertEquals(cache.getName() + ":maxSize", maxSize.intValue(), 
cache.getMaxSize());
+    private static <K, V> void assertUtilCacheSettings(UtilCache<K, V> cache, 
Integer sizeLimit, Integer maxInMemory, Long expireTime, Boolean 
useSoftReference, Boolean useFileSystemStore) {
+        if (sizeLimit != null) {
+            assertEquals(cache.getName() + ":sizeLimit", sizeLimit.intValue(), 
cache.getSizeLimit());
         }
         if (maxInMemory != null) {
             assertEquals(cache.getName() + ":maxInMemory", 
maxInMemory.intValue(), cache.getMaxInMemory());
@@ -246,7 +246,7 @@ public class UtilCacheTests extends Gene
         for (int i = 0; i < 2; i++) {
             assertTrue("UtilCacheTable.keySet", 
UtilCache.getUtilCacheTableKeySet().contains(cache.getName()));
             assertSame("UtilCache.findCache", cache, 
UtilCache.findCache(cache.getName()));
-            assertSame("UtilCache.getOrCreateUtilCache", cache, 
UtilCache.getOrCreateUtilCache(cache.getName(), cache.getMaxSize(), 
cache.getMaxInMemory(), cache.getExpireTime(), cache.getUseSoftReference(), 
cache.getUseFileSystemStore()));
+            assertSame("UtilCache.getOrCreateUtilCache", cache, 
UtilCache.getOrCreateUtilCache(cache.getName(), cache.getSizeLimit(), 
cache.getMaxInMemory(), cache.getExpireTime(), cache.getUseSoftReference(), 
cache.getUseFileSystemStore()));
 
             assertNoSingleKey(cache, "one");
             long origByteSize = cache.getSizeInBytes();
@@ -322,7 +322,7 @@ public class UtilCacheTests extends Gene
         basicTest(cache);
     }
 
-    public void testChangeSize() throws Exception {
+    public void testChangeMemSize() throws Exception {
         int size = 5;
         long ttl = 2000;
         UtilCache<String, Serializable> cache = createUtilCache(size, size, 
ttl, false, false);
@@ -331,7 +331,7 @@ public class UtilCacheTests extends Gene
             String s = Integer.toString(i);
             assertKey(s, cache, s, new String(s), new String(":" + s), i + 1, 
map);
         }
-        cache.setMaxSize(2);
+        cache.setMaxInMemory(2);
         for (int i = 0; i < size - 2; i++) {
             String s = Integer.toString(i);
             map.remove(s);

Modified: ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml?rev=929813&r1=929812&r2=929813&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml (original)
+++ ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml Thu Apr  1 
04:31:37 2010
@@ -2116,6 +2116,9 @@
         <value xml:lang="th">ขนาดสูงสุด</value>
         <value xml:lang="zh">最大大小</value>
     </property>
+    <property key="WebtoolsMaxInMemory">
+        <value xml:lang="en">Max In Memory</value>
+    </property>
     <property key="WebtoolsMemory">
         <value xml:lang="de">Speicher</value>
         <value xml:lang="en">Memory</value>

Modified: 
ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/UtilCacheEvents.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/UtilCacheEvents.java?rev=929813&r1=929812&r2=929813&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/UtilCacheEvents.java 
(original)
+++ ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/UtilCacheEvents.java 
Thu Apr  1 04:31:37 2010
@@ -79,7 +79,7 @@ public class UtilCacheEvents {
         if (utilCache != null) {
             Object key = null;
 
-            if (utilCache.getMaxSize() > 0) {
+            if (utilCache.getMaxInMemory() > 0) {
                 try {
                     key = 
utilCache.getCacheLineTable().getKeyFromMemory(number);
                 } catch (Exception e) {}
@@ -220,15 +220,15 @@ public class UtilCacheEvents {
             request.setAttribute("_ERROR_MESSAGE_", errMsg);
             return "error";
         }
-        String maxSizeStr = request.getParameter("UTIL_CACHE_MAX_SIZE");
+        String maxInMemoryStr = 
request.getParameter("UTIL_CACHE_MAX_IN_MEMORY");
         String expireTimeStr = request.getParameter("UTIL_CACHE_EXPIRE_TIME");
         String useSoftReferenceStr = 
request.getParameter("UTIL_CACHE_USE_SOFT_REFERENCE");
 
-        Integer maxSize = null;
+        Integer maxInMemory = null;
         Long expireTime = null;
 
         try {
-            maxSize = Integer.valueOf(maxSizeStr);
+            maxInMemory = Integer.valueOf(maxInMemoryStr);
         } catch (Exception e) {}
         try {
             expireTime = Long.valueOf(expireTimeStr);
@@ -237,8 +237,8 @@ public class UtilCacheEvents {
         UtilCache<?, ?> utilCache = UtilCache.findCache(name);
 
         if (utilCache != null) {
-            if (maxSize != null)
-                utilCache.setMaxSize(maxSize.intValue());
+            if (maxInMemory != null)
+                utilCache.setMaxInMemory(maxInMemory.intValue());
             if (expireTime != null)
                 utilCache.setExpireTime(expireTime.longValue());
             if (useSoftReferenceStr != null) {

Modified: 
ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/actions/cache/EditUtilCache.groovy
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/actions/cache/EditUtilCache.groovy?rev=929813&r1=929812&r2=929813&view=diff
==============================================================================
--- 
ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/actions/cache/EditUtilCache.groovy
 (original)
+++ 
ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/actions/cache/EditUtilCache.groovy
 Thu Apr  1 04:31:37 2010
@@ -38,7 +38,7 @@ if (cacheName) {
         cache.missCountSoftRef = 
UtilFormatOut.formatQuantity(utilCache.getMissCountSoftRef());
         cache.removeHitCount = 
UtilFormatOut.formatQuantity(utilCache.getRemoveHitCount());
         cache.removeMissCount = 
UtilFormatOut.formatQuantity(utilCache.getRemoveMissCount());
-        cache.maxSize = UtilFormatOut.formatQuantity(utilCache.getMaxSize());
+        cache.maxInMemory = 
UtilFormatOut.formatQuantity(utilCache.getMaxInMemory());
         cache.expireTime = 
UtilFormatOut.formatQuantity(utilCache.getExpireTime());
         cache.useSoftReference = utilCache.getUseSoftReference().toString();
         cache.useFileSystemStore = 
utilCache.getUseFileSystemStore().toString();

Modified: 
ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/actions/cache/FindUtilCache.groovy
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/actions/cache/FindUtilCache.groovy?rev=929813&r1=929812&r2=929813&view=diff
==============================================================================
--- 
ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/actions/cache/FindUtilCache.groovy
 (original)
+++ 
ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/actions/cache/FindUtilCache.groovy
 Thu Apr  1 04:31:37 2010
@@ -43,7 +43,7 @@ names.each { cacheName ->
         cache.missCountSoftRef = 
UtilFormatOut.formatQuantity(utilCache.getMissCountSoftRef());
         cache.removeHitCount = 
UtilFormatOut.formatQuantity(utilCache.getRemoveHitCount());
         cache.removeMissCount = 
UtilFormatOut.formatQuantity(utilCache.getRemoveMissCount());
-        cache.maxSize = UtilFormatOut.formatQuantity(utilCache.getMaxSize());
+        cache.maxInMemory = 
UtilFormatOut.formatQuantity(utilCache.getMaxInMemory());
         cache.expireTime = 
UtilFormatOut.formatQuantity(utilCache.getExpireTime());
         cache.useSoftReference = utilCache.getUseSoftReference().toString();
         cache.useFileSystemStore = 
utilCache.getUseFileSystemStore().toString();

Modified: ofbiz/trunk/framework/webtools/webapp/webtools/cache/editUtilCache.ftl
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/webapp/webtools/cache/editUtilCache.ftl?rev=929813&r1=929812&r2=929813&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/webapp/webtools/cache/editUtilCache.ftl 
(original)
+++ ofbiz/trunk/framework/webtools/webapp/webtools/cache/editUtilCache.ftl Thu 
Apr  1 04:31:37 2010
@@ -74,9 +74,9 @@ under the License.
                     <td colspan="2">${cache.removeMissCount?if_exists}</td>
                 </tr>
                 <tr>
-                    <td class="label">${uiLabelMap.WebtoolsMaxSize}</td>
-                    <td>${cache.maxSize?if_exists}</td>
-                    <td><input type="text" size="15" maxlength="15" 
name="UTIL_CACHE_MAX_SIZE" value="${cache.maxSize?if_exists}"/></td>
+                    <td class="label">${uiLabelMap.WebtoolsMaxInMemory}</td>
+                    <td>${cache.maxInMemory?if_exists}</td>
+                    <td><input type="text" size="15" maxlength="15" 
name="UTIL_CACHE_MAX_IN_MEMORY" value="${cache.maxInMemory?if_exists}"/></td>
                 </tr>
                 <tr>
                     <td class="label">${uiLabelMap.WebtoolsExpireTime}</td>

Modified: ofbiz/trunk/framework/webtools/webapp/webtools/cache/findUtilCache.ftl
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/webapp/webtools/cache/findUtilCache.ftl?rev=929813&r1=929812&r2=929813&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/webapp/webtools/cache/findUtilCache.ftl 
(original)
+++ ofbiz/trunk/framework/webtools/webapp/webtools/cache/findUtilCache.ftl Thu 
Apr  1 04:31:37 2010
@@ -53,7 +53,7 @@ under the License.
                 <td>${uiLabelMap.WebtoolsHits}</td>
                 <td>${uiLabelMap.WebtoolsMisses}</td>
                 <td>${uiLabelMap.WebtoolsRemoves}</td>
-                <td>${uiLabelMap.WebtoolsMaxSize}</td>
+                <td>${uiLabelMap.WebtoolsMaxInMemory}</td>
                 <td>${uiLabelMap.WebtoolsExpireTime}</td>
                 <td align="center">${uiLabelMap.WebtoolsUseSoftRef}</td>
                 <td align="center">${uiLabelMap.WebtoolsUseFileStore}</td>
@@ -67,7 +67,7 @@ under the License.
                     <td>${cache.hitCount?if_exists}</td>
                     
<td>${cache.missCountTot?if_exists}/${cache.missCountNotFound?if_exists}/${cache.missCountExpired?if_exists}/${cache.missCountSoftRef?if_exists}</td>
                     
<td>${cache.removeHitCount?if_exists}/${cache.removeMissCount?if_exists}</td>
-                    <td>${cache.maxSize?if_exists}</td>
+                    <td>${cache.maxInMemory?if_exists}</td>
                     <td>${cache.expireTime?if_exists}</td>
                     <td align="center">${cache.useSoftReference?if_exists}</td>
                     <td 
align="center">${cache.useFileSystemStore?if_exists}</td>


Reply via email to