Issue #1257: Update PurgeRules to not be hard linked to path keys

Change-Id: I8eb68c527ddafae2ee2b3af8d22eed905f547ea4

Former-commit-id: 73bca27407552c864765d5924e8609a253493f4c
This commit is contained in:
Richard Peter 2012-10-31 18:16:14 -05:00
parent d92be142ad
commit 275398778f
75 changed files with 1954 additions and 4434 deletions

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>airep</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>24</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>binlightning</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>36</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,69 +1,40 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<purgeRuleSet>
<!-- Default rule for data not covered by any rules -->
<rule>
<id>
<pluginName>bufrmosETA</pluginName>
<key>default</key>
</id>
<defaultRule>
<versionsToKeep>5</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>bufrmosGFS</pluginName>
<key>default</key>
</id>
</defaultRule>
<defaultRule>
<versionsToKeep>5</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>bufrmosAVN</pluginName>
<key>default</key>
</id>
</defaultRule>
<defaultRule>
<versionsToKeep>8</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>bufrmosLAMP</pluginName>
<key>default</key>
</id>
</defaultRule>
<defaultRule>
<versionsToKeep>5</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>bufrmosHPC</pluginName>
<key>default</key>
</id>
</defaultRule>
<defaultRule>
<versionsToKeep>5</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>bufrmosMRF</pluginName>
<key>default</key>
</id>
</defaultRule>
<defaultRule>
<versionsToKeep>4</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>bufrmosNGM</pluginName>
<key>default</key>
</id>
</defaultRule>
<defaultRule>
<versionsToKeep>5</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</defaultRule>
</purgeRuleSet>
</purgeRuleSet>

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>bufrua</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>21</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>ccfp</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>24</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>goessounding</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>33</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>ldadhydro</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>24</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>ldadmanual</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>24</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>ldadprofiler</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>24</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,40 +1,23 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<purgeRuleSet>
<rule>
<id>
<pluginName>obs</pluginName>
<key></key>
</id>
<versionsToKeep>34</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>obs</pluginName>
<key></key>
</id>
<versionsToKeep>38</versionsToKeep>
<delta>=00-03:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>obs</pluginName>
<key></key>
</id>
<versionsToKeep>42</versionsToKeep>
<delta>=00-06:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>obs</pluginName>
<key></key>
</id>
<versionsToKeep>50</versionsToKeep>
<delta>=01-00:00:00</delta>
<round>+00-12:00:00</round>
</rule>
</purgeRuleSet>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>pirep</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>01-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>poessounding</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>12</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>profiler</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>33</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>radar</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>01-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>recco</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>36</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,21 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<purgeRuleSet>
<key>reportType</key>
<!-- Synoptic fixed land -->
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1001</key>
</id>
<keyValue>1001</keyValue>
<versionsToKeep>13</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1001</key>
</id>
<keyValue>1001</keyValue>
<versionsToKeep>50</versionsToKeep>
<delta>=01-00:00:00</delta>
<round>+00-12:00:00</round>
@ -24,217 +18,146 @@
<!-- Synoptic mobile land -->
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1002</key>
</id>
<keyValue>1002</keyValue>
<versionsToKeep>13</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1002</key>
</id>
<keyValue>1002</keyValue>
<versionsToKeep>50</versionsToKeep>
<delta>=01-00:00:00</delta>
<round>+00-12:00:00</round>
</rule>
<!-- End synoptic mobile land -->
<!-- Synoptic ship -->
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1003</key>
</id>
<keyValue>1003</keyValue>
<versionsToKeep>34</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1003</key>
</id>
<keyValue>1003</keyValue>
<versionsToKeep>38</versionsToKeep>
<delta>=00-03:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1003</key>
</id>
<keyValue>1003</keyValue>
<versionsToKeep>42</versionsToKeep>
<delta>=00-06:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1003</key>
</id>
<keyValue>1003</keyValue>
<versionsToKeep>50</versionsToKeep>
<delta>=01-00:00:00</delta>
<round>+00-12:00:00</round>
</rule>
<!-- End synoptic ship -->
<!-- Synoptic cman -->
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1004</key>
</id>
<keyValue>1004</keyValue>
<versionsToKeep>34</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1004</key>
</id>
<keyValue>1004</keyValue>
<versionsToKeep>38</versionsToKeep>
<delta>=00-03:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1004</key>
</id>
<keyValue>1004</keyValue>
<versionsToKeep>42</versionsToKeep>
<delta>=00-06:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1004</key>
</id>
<keyValue>1004</keyValue>
<versionsToKeep>50</versionsToKeep>
<delta>=01-00:00:00</delta>
<round>+00-12:00:00</round>
</rule>
<!-- End synoptic cman -->
<!-- Synoptic moored buoy -->
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1005</key>
</id>
<keyValue>1005</keyValue>
<versionsToKeep>34</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1005</key>
</id>
<keyValue>1005</keyValue>
<versionsToKeep>38</versionsToKeep>
<delta>=00-03:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1005</key>
</id>
<keyValue>1005</keyValue>
<versionsToKeep>42</versionsToKeep>
<delta>=00-06:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1005</key>
</id>
<keyValue>1005</keyValue>
<versionsToKeep>50</versionsToKeep>
<delta>=01-00:00:00</delta>
<round>+00-12:00:00</round>
</rule>
<!-- End synoptic moored buoy -->
<!-- Drifting Buoy -->
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1006</key>
</id>
<keyValue>1006</keyValue>
<versionsToKeep>34</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1006</key>
</id>
<keyValue>1006</keyValue>
<versionsToKeep>38</versionsToKeep>
<delta>=00-03:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1006</key>
</id>
<keyValue>1006</keyValue>
<versionsToKeep>42</versionsToKeep>
<delta>=00-06:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1006</key>
</id>
<keyValue>1006</keyValue>
<versionsToKeep>50</versionsToKeep>
<delta>=01-00:00:00</delta>
<round>+00-12:00:00</round>
</rule>
<!-- End drifting buoy -->
<!-- Synoptic marob -->
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1007</key>
</id>
<keyValue>1007</keyValue>
<versionsToKeep>34</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1007</key>
</id>
<keyValue>1007</keyValue>
<versionsToKeep>38</versionsToKeep>
<delta>=00-03:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1007</key>
</id>
<keyValue>1007</keyValue>
<versionsToKeep>42</versionsToKeep>
<delta>=00-06:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>sfcobs</pluginName>
<key>reportType=1007</key>
</id>
<keyValue>1007</keyValue>
<versionsToKeep>50</versionsToKeep>
<delta>=01-00:00:00</delta>
<round>+00-12:00:00</round>
</rule>
<!-- End synoptic marob -->
</purgeRuleSet>
</purgeRuleSet>

View file

@ -51,31 +51,31 @@ import com.raytheon.uf.edex.database.query.DatabaseQuery;
*/
public class TextDao extends DefaultPluginDao {
public TextDao(String pluginName) throws PluginException {
super(pluginName);
}
@Override
public void purgeAllData() {
logger.warn("purgeAllPluginData not implemented for text. No data will be purged.");
}
protected void loadScripts() throws PluginException {
// no op
}
public TextDao(String pluginName) throws PluginException {
super(pluginName);
}
@Override
public void purgeExpiredData() throws PluginException {
int deletedRecords = 0;
public void purgeAllData() {
logger.warn("purgeAllPluginData not implemented for text. No data will be purged.");
}
// only do full purge every few hours since incremental purge runs every
// minute
if (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) % 3 == 0) {
TextDB.purgeStdTextProducts();
}
protected void loadScripts() throws PluginException {
// no op
}
PurgeLogger.logInfo("Purged " + deletedRecords + " items total.",
"text");
@Override
public void purgeExpiredData() throws PluginException {
int deletedRecords = 0;
// only do full purge every few hours since incremental purge runs every
// minute
if (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) % 3 == 0) {
TextDB.purgeStdTextProducts();
}
PurgeLogger.logInfo("Purged " + deletedRecords + " items total.",
"text");
}
@SuppressWarnings("unchecked")
@ -95,14 +95,17 @@ public class TextDao extends DefaultPluginDao {
}
@Override
public Date getMinInsertTime(String productKey)
public Date getMinInsertTime(String[][] productKeys)
throws DataAccessLayerException {
StdTextProductDao dao = new StdTextProductDao(true);
DatabaseQuery query = new DatabaseQuery(dao.getDaoClass());
List<String[]> keys = this.getProductKeyParameters(productKey);
for (String[] key : keys) {
query.addQueryParam(key[0], key[1]);
if ((productKeys != null) && (productKeys.length > 0)) {
for (String[] key : productKeys) {
query.addQueryParam(key[0], key[1]);
}
}
query.addReturnedField("insertTime");
query.addOrder("insertTime", true);
query.setMaxResults(1);
@ -113,5 +116,5 @@ public class TextDao extends DefaultPluginDao {
} else {
return result.get(0).getTime();
}
}
}
}

View file

@ -51,7 +51,7 @@ public class FFMPRetentionTimeManager implements ILocalizationFileObserver {
*/
protected PurgeRuleSet configXml;
private ArrayList<MonitorConfigListener> listeners = new ArrayList<MonitorConfigListener>();
private final ArrayList<MonitorConfigListener> listeners = new ArrayList<MonitorConfigListener>();
/** Singleton instance of this class */
private static FFMPRetentionTimeManager instance = new FFMPRetentionTimeManager();
@ -166,12 +166,12 @@ public class FFMPRetentionTimeManager implements ILocalizationFileObserver {
* @return
*/
public long getRetentionTime() {
PurgeRule rule = configXml.getDefaultRule();
for (PurgeRule rule : configXml.getRules()) {
if (rule.getId().getPluginName().equals("ffmp")) {
return rule.getPeriodInMillis();
}
if (rule != null) {
return rule.getPeriodInMillis();
}
return 0l;
}
@ -181,12 +181,14 @@ public class FFMPRetentionTimeManager implements ILocalizationFileObserver {
* @param time
*/
public void setRetentionTime(String time) {
for (PurgeRule rule : configXml.getRules()) {
if (rule.getId().getPluginName().equals("ffmp")) {
rule.setPeriod(time);
}
PurgeRule rule = configXml.getDefaultRule();
if (rule == null) {
rule = new PurgeRule();
configXml.setDefaultRule(rule);
}
rule.setPeriod(time);
saveConfigXml();
}
}

View file

@ -2,5 +2,4 @@ com.raytheon.uf.edex.database.cluster.ClusterTask
com.raytheon.uf.edex.database.cluster.ClusterTaskPK
com.raytheon.uf.edex.database.plugin.PluginVersion
com.raytheon.uf.edex.database.purge.PurgeRule
com.raytheon.uf.edex.database.purge.PurgeRulePK
com.raytheon.uf.edex.database.purge.PurgeRuleSet

View file

@ -54,7 +54,7 @@ import com.raytheon.uf.edex.core.dataplugin.PluginRegistry;
public class PluginFactory {
/** The instance of the PluginFactory class */
private static PluginFactory instance;
private static final PluginFactory instance = new PluginFactory();
/**
* Gets the singleton instance of the PluginFactory
@ -64,10 +64,7 @@ public class PluginFactory {
* If errors occur during instantiation of the singleton
* instance
*/
public static synchronized PluginFactory getInstance() {
if (instance == null) {
instance = new PluginFactory();
}
public static PluginFactory getInstance() {
return instance;
}

View file

@ -20,19 +20,17 @@
package com.raytheon.uf.edex.database.purge;
import java.io.Serializable;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlElements;
import com.raytheon.uf.common.dataplugin.persist.IPersistableDataObject;
import com.raytheon.uf.common.serialization.ISerializableObject;
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
@ -55,11 +53,8 @@ import com.raytheon.uf.common.status.UFStatus.Priority;
* @author bphillip
* @version 1
*/
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
@DynamicSerialize
public class PurgeRule implements IPersistableDataObject, Serializable,
ISerializableObject, Cloneable, Comparable<PurgeRule> {
public class PurgeRule {
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(PurgeRule.class);
@ -81,12 +76,12 @@ public class PurgeRule implements IPersistableDataObject, Serializable,
.compile(TIME_PATTERN_STRING);
/**
* The primary key for this rule. The primary key consists of the plugin
* name and a key used for purging
* The keys this rule is to match. Should be equal to a value based on the
* key fields of the record specified in the PurgeRuleSet. Special cases are
* made for keyMatch of value default.
*/
@XmlElement
@DynamicSerializeElement
private PurgeRulePK id;
@XmlElements({ @XmlElement(name = "keyValue", type = String.class) })
private List<String> keyValues;
/** The number of versions to keep */
@XmlElement
@ -154,25 +149,21 @@ public class PurgeRule implements IPersistableDataObject, Serializable,
}
/**
* Creates a new PurgeRule with the given key
* Gets the key values associated with the PurgeRuleSet keys.
*
* @param pk
* The key
* @return
*/
public PurgeRule(PurgeRulePK pk) {
this.id = pk;
public List<String> getKeyValues() {
return keyValues;
}
/**
* Creates a new PurgeRule with the given key elements
* Sets the key values associated with the PurgeRuleSet keys.
*
* @param pluginName
* The plugin name to be used in the PurgeKeyPK
* @param key
* The key to be used in the PurgeKeyPK
* @param keyValues
*/
public PurgeRule(String pluginName, String key) {
this(new PurgeRulePK(pluginName, key));
public void setKeyValues(List<String> keyValues) {
this.keyValues = keyValues;
}
/**
@ -341,11 +332,15 @@ public class PurgeRule implements IPersistableDataObject, Serializable,
return new Date[] { refTime, timeToCompare };
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("[");
builder.append("Plugin: ").append(id.getPluginName()).append(" ");
builder.append("Key: ").append(id.getKey()).append(" ");
for (String kv : keyValues) {
builder.append("KeyValue: ").append(kv).append(" ");
}
builder.append("VersionToKeep: ").append(this.versionsToKeep)
.append(" ");
builder.append("Period: ").append(this.period).append(" ");
@ -361,48 +356,45 @@ public class PurgeRule implements IPersistableDataObject, Serializable,
*
* @return The human readable description of this rule
*/
public String getRuleDescription() {
public String getRuleDescription(List<String> keys) {
if (this.ruleDescription == null) {
StringBuilder builder = new StringBuilder();
if (this.id.getKey().equals("custom")) {
builder.append("The ")
.append(this.id.getPluginName())
.append(" plugin implements a customized purge routine.");
if ((keys == null) || keys.isEmpty() || (keyValues == null)
|| keyValues.isEmpty()) {
builder.append("Default rule, ");
} else {
if (id.getKey().isEmpty()) {
builder.append("For ").append(id.getPluginName())
.append(" data, ");
} else {
builder.append("For ").append(id.getPluginName())
.append(" data matching ").append(id.getKey())
.append(", ");
builder.append("For data matching ");
Iterator<String> keyIter = keys.iterator();
Iterator<String> valueIter = keyValues.iterator();
while (keyIter.hasNext() && valueIter.hasNext()) {
builder.append(keyIter.next()).append("=")
.append(valueIter.next()).append(", ");
}
}
if (isDeltaSpecified()) {
getVersionsClause(builder);
builder.append("at ")
.append(this.getTimeDescription(delta))
.append("intervals ");
getRoundClause(builder);
getPeriodClause(builder);
} else if (!isDeltaSpecified() && isVersionsToKeepSpecified()) {
getVersionsClause(builder);
getPeriodClause(builder);
} else if (!isDeltaSpecified() && !isVersionsToKeepSpecified()
&& isPeriodSpecified()) {
getVersionsClause(builder);
getPeriodClause(builder);
} else {
builder.append("keep all data.");
}
if (isModTimeToWaitSpecified()) {
builder.append(
" Do not purge if most recent version has been modified in the last ")
.append(this.getModTimeToWaitDescription());
}
if (isDeltaSpecified()) {
getVersionsClause(builder);
builder.append("at ").append(this.getTimeDescription(delta))
.append("intervals ");
getRoundClause(builder);
getPeriodClause(builder);
} else if (!isDeltaSpecified() && isVersionsToKeepSpecified()) {
getVersionsClause(builder);
getPeriodClause(builder);
} else if (!isDeltaSpecified() && !isVersionsToKeepSpecified()
&& isPeriodSpecified()) {
getVersionsClause(builder);
getPeriodClause(builder);
} else {
builder.append("keep all data.");
}
if (isModTimeToWaitSpecified()) {
builder.append(
" Do not purge if most recent version has been modified in the last ")
.append(this.getModTimeToWaitDescription());
}
ruleDescription = builder.toString();
}
@ -578,26 +570,6 @@ public class PurgeRule implements IPersistableDataObject, Serializable,
return builder.toString();
}
@Override
public Object getIdentifier() {
return id;
}
/**
* @return the id
*/
public PurgeRulePK getId() {
return id;
}
/**
* @param id
* the id to set
*/
public void setId(PurgeRulePK id) {
this.id = id;
}
/**
* @return the versionsToKeep
*/
@ -687,40 +659,4 @@ public class PurgeRule implements IPersistableDataObject, Serializable,
public void setLogOnly(boolean logOnly) {
this.logOnly = logOnly;
}
public Object clone() {
PurgeRule rval = new PurgeRule();
rval.id = (PurgeRulePK) id.clone();
rval.delta = delta;
rval.logOnly = logOnly;
rval.period = period;
rval.round = round;
rval.versionsToKeep = versionsToKeep;
return rval;
}
public boolean equals(Object obj) {
if (!(obj instanceof PurgeRule)) {
return false;
}
PurgeRule rhs = (PurgeRule) obj;
return this.id.equals(rhs.getId()) && this.delta.equals(rhs.getDelta())
&& this.logOnly == rhs.isLogOnly()
&& this.period.equals(rhs.getPeriod())
&& this.round.equals(rhs.getRound())
&& this.versionsToKeep == rhs.getVersionsToKeep();
}
/*
* (non-Javadoc)
*
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
@Override
public int compareTo(PurgeRule o) {
return this.id.getPluginName().compareTo(o.getId().getPluginName());
}
}

View file

@ -1,209 +0,0 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.edex.database.purge;
import java.io.Serializable;
import javax.persistence.Embeddable;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.apache.commons.lang.builder.HashCodeBuilder;
import com.raytheon.uf.common.serialization.ISerializableObject;
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
/**
* This class defines the primary key for data purge rules stored in the
* database. This key consists of a sequence number, the pluginName to which
* this rule applies and the key to which this rule applies.
* <p>
* The sequence number is a number obtained from the hibernate_sequence on the
* database. This number has no significance other than to distinguish two rules
* which may have the the same pluginName and same key values. The pluginName is
* the plugin to which this purge rule applies. The key servers as a filter for
* purging. The key value corresponds to the productKey field in the plugin data
* object.
*
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 2/15/11 #2469 bphillip Initial creation
*
* </pre>
*
* @author bphillip
* @version 1
*/
@Embeddable
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
@DynamicSerialize
public class PurgeRulePK implements ISerializableObject, Serializable,
Cloneable {
/** The serial number */
private static final long serialVersionUID = 3400703274820497880L;
/**
* A sequence number defined by the database for uniquely identifying this
* rule
*/
@XmlElement
@DynamicSerializeElement
private Long id;
/** The plugin associated with this rule */
@XmlElement
@DynamicSerializeElement
private String pluginName;
/** The key used by this rule for purging */
@XmlElement
@DynamicSerializeElement
private String key;
/**
* Creates a new PurgeRulePK object
*/
public PurgeRulePK() {
}
/**
* Creates a new plugin rule with the given plugin name and an empty key.
*
* @param pluginName
* The plugin to which this purge rule applies
*/
public PurgeRulePK(String pluginName) {
this.pluginName = pluginName;
this.key = "";
}
/**
* Creates a new plugin rule with the given plugin name and key
*
* @param pluginName
* The plugin to which this purge rule applies
* @param key
* The key to use when applying this rule
*/
public PurgeRulePK(String pluginName, String key) {
this(pluginName);
this.key = key;
}
/**
* Creates a new plugin rule with the given plugin name key, and id value
*
* @param pluginName
* The plugin to which this purge rule applies
* @param key
* The key to use when applying this rule
* @param id
* An identifying number
*/
public PurgeRulePK(String pluginName, String key, long id) {
this(pluginName, key);
this.id = id;
}
public String toString() {
return "Plugin:" + pluginName + " Key:" + key;
}
public int hashCode() {
HashCodeBuilder builder = new HashCodeBuilder();
builder.append(pluginName);
builder.append(key);
return builder.toHashCode();
}
public boolean equals(Object rval) {
if (!(rval instanceof PurgeRulePK)) {
return false;
}
PurgeRulePK rhs = (PurgeRulePK) rval;
return this.pluginName.equals(rhs.getPluginName())
&& this.key.equals(rhs.getKey());
}
/**
* @return the pluginName
*/
public String getPluginName() {
return pluginName;
}
/**
* @param pluginName
* the pluginName to set
*/
public void setPluginName(String pluginName) {
this.pluginName = pluginName;
}
/**
* @return the key
*/
public String getKey() {
return key;
}
/**
* @param key
* the key to set
*/
public void setKey(String key) {
this.key = key;
}
public Object clone() {
PurgeRulePK rval = new PurgeRulePK(this.pluginName, this.key);
rval.setId(this.id);
return rval;
}
/**
* @return the id
*/
public Long getId() {
return id;
}
/**
* @param id
* the id to set
*/
public void setId(Long id) {
this.id = id;
}
}

View file

@ -21,7 +21,7 @@
package com.raytheon.uf.edex.database.purge;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@ -33,8 +33,8 @@ import com.raytheon.uf.common.serialization.ISerializableObject;
/**
* A container class used for unmarshalling purge rules. The purge rules are
* stored in xml files in the edex_static/base/purge directory. The rules are
* unmarshalled into this object before being persisted to the database.
* stored in xml files in the common_static/base/purge directory. The rules are
* then organized into a tree for easy look up of closest matching rule.
*
* <pre>
*
@ -52,14 +52,35 @@ import com.raytheon.uf.common.serialization.ISerializableObject;
@XmlRootElement(name = "purgeRuleSet")
@XmlAccessorType(XmlAccessType.NONE)
public class PurgeRuleSet implements ISerializableObject {
@XmlElements({ @XmlElement(name = "key", type = String.class) })
private List<String> keys;
@XmlElement
private PurgeRule defaultRule;
/**
* List of purge rules for/from the XML.
*/
@XmlElements({ @XmlElement(name = "rule", type = PurgeRule.class) })
private ArrayList<PurgeRule> rules;
private PurgeRuleTree purgeTree = null;
public PurgeRuleSet() {
rules = new ArrayList<PurgeRule>();
}
/**
* Returns the default rule.
*
* @return
*/
public PurgeRule getDefaultRule() {
return defaultRule;
}
public void setDefaultRule(PurgeRule defaultRule) {
this.defaultRule = defaultRule;
}
/**
@ -71,32 +92,36 @@ public class PurgeRuleSet implements ISerializableObject {
return rules;
}
/**
* Set the list of purge rules.
*
* @param models
*/
public void setModels(ArrayList<PurgeRule> rules) {
public void setRules(ArrayList<PurgeRule> rules) {
this.rules = rules;
}
/**
* Add a purge rule to this set
* Returns the list of purge keys.
*
* @param rule
* The rule to add
* @return
*/
public void addRule(PurgeRule rule) {
this.rules.add(rule);
public List<String> getKeys() {
return keys;
}
public void setKeys(List<String> keys) {
this.keys = keys;
}
/**
* Adds purge rules to this set
* Returns the purge rule associated with the passed key values.
*
* @param rules
* The rules to add
* @param keyValues
* The values associated with the plugin purge keys to check for
* a purge rule for.
* @return
*/
public void addRules(Collection<PurgeRule> rules) {
this.rules.addAll(rules);
public PurgeRule getRuleForKeys(String[] keyValues) {
if (purgeTree == null) {
purgeTree = new PurgeRuleTree(this);
}
return purgeTree.getRuleForKeys(keyValues);
}
}

View file

@ -0,0 +1,132 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
*/
package com.raytheon.uf.edex.database.purge;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Tree representation of the purge rules. Each Node can contain a PurgeRule as
* well as a collection of other Nodes. Each Node should be a specific purge key
* value based on the PurgeRuleSet keys. A given set of key/value pairs will
* return the most significant purge key that matches.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Oct 29, 2012 rjpeter Initial creation
*
* </pre>
*
* @author rjpeter
* @version 1.0
*/
public class PurgeRuleTree {
private final PurgeNode root;
public PurgeRuleTree(PurgeRuleSet ruleSet) {
root = new PurgeNode();
root.setRule(ruleSet.getDefaultRule());
ArrayList<PurgeRule> rules = ruleSet.getRules();
if (rules != null) {
for (PurgeRule rule : rules) {
PurgeNode curNode = root;
List<String> values = rule.getKeyValues();
if (values != null) {
// descend purge tree
for (String val : values) {
Map<String, PurgeNode> childNodes = curNode
.getChildNodes();
curNode = childNodes.get(val);
if (curNode == null) {
curNode = new PurgeNode();
childNodes.put(val, curNode);
}
}
// set the rule on the leaf node defined by key values
curNode.setRule(rule);
}
}
}
}
/**
* Returns the purge rule associated with the given key value list.
*
* @param keyValues
* @return
*/
public PurgeRule getRuleForKeys(String[] keyValues) {
// default rule is initial closest rule
PurgeRule closestRule = root.getRule();
PurgeNode currentNode = root;
if ((keyValues != null) && (keyValues.length > 0)) {
// iterate over key values, descending tree as far as possible,
// keeping track of closest matching rule.
for (String value : keyValues) {
currentNode = currentNode.getChildNode(value);
// descend node
if (currentNode != null) {
// check node for rule
PurgeRule rule = currentNode.getRule();
if (rule != null) {
// current closest rule
closestRule = rule;
}
} else {
break;
}
}
}
return closestRule;
}
private class PurgeNode {
private PurgeRule rule;
private final Map<String, PurgeNode> childNodes = new HashMap<String, PurgeNode>();
public void setRule(PurgeRule rule) {
this.rule = rule;
}
public PurgeRule getRule() {
return rule;
}
public Map<String, PurgeNode> getChildNodes() {
return childNodes;
}
public PurgeNode getChildNode(String keyValue) {
return childNodes.get(keyValue);
}
}
}

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>default</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>01-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -111,8 +111,8 @@ public class DatabaseArchiver implements IPluginArchiver {
DataArchiveConfig conf) {
PluginProperties props = PluginRegistry.getInstance()
.getRegisteredObject(pluginName);
if (props != null && props.getRecord() != null
&& props.getDao() != null) {
if ((props != null) && (props.getRecord() != null)
&& (props.getDao() != null)) {
Class<?> recordClass = props.getRecord();
if (recordClass != null) {
try {
@ -174,19 +174,19 @@ public class DatabaseArchiver implements IPluginArchiver {
archiveFormatter = pluginArchiveFormatters.get("default");
}
while (startTime != null && endTime != null) {
while ((startTime != null) && (endTime != null)) {
Map<String, List<PersistableDataObject>> pdosToSave = archiveFormatter
.getPdosByFile(pluginName, dao, pdoMap, startTime,
endTime);
if (pdosToSave != null && !pdosToSave.isEmpty()) {
if ((pdosToSave != null) && !pdosToSave.isEmpty()) {
recordCount += savePdoMap(pluginName, archivePath,
pdosToSave, conf.getCompressionEnabled());
for (Map.Entry<String, List<PersistableDataObject>> entry : pdosToSave
.entrySet()) {
List<PersistableDataObject> pdoList = entry.getValue();
if (pdoList != null && !pdoList.isEmpty()
&& pdoList.get(0) instanceof IPersistable) {
if ((pdoList != null) && !pdoList.isEmpty()
&& (pdoList.get(0) instanceof IPersistable)) {
datastoreFilesToArchive.add(entry.getKey());
}
}
@ -196,7 +196,7 @@ public class DatabaseArchiver implements IPluginArchiver {
endTime = determineEndTime(startTime, runTime);
}
if (pdoMap != null && !pdoMap.isEmpty()) {
if ((pdoMap != null) && !pdoMap.isEmpty()) {
recordCount += savePdoMap(pluginName, archivePath, pdoMap,
conf.getCompressionEnabled());
// don't forget to archive the HDF5 for the records that weren't
@ -204,8 +204,8 @@ public class DatabaseArchiver implements IPluginArchiver {
for (Map.Entry<String, List<PersistableDataObject>> entry : pdoMap
.entrySet()) {
List<PersistableDataObject> pdoList = entry.getValue();
if (pdoList != null && !pdoList.isEmpty()
&& pdoList.get(0) instanceof IPersistable) {
if ((pdoList != null) && !pdoList.isEmpty()
&& (pdoList.get(0) instanceof IPersistable)) {
datastoreFilesToArchive.add(entry.getKey());
}
}
@ -217,7 +217,7 @@ public class DatabaseArchiver implements IPluginArchiver {
PluginProperties props = PluginRegistry.getInstance()
.getRegisteredObject(pluginName);
if (props != null && props.getCompression() != null) {
if ((props != null) && (props.getCompression() != null)) {
if (compRequired.equals(Compression.valueOf(props
.getCompression()))) {
// if plugin is already compressed to the correct level,
@ -378,7 +378,7 @@ public class DatabaseArchiver implements IPluginArchiver {
Calendar startTime = null;
// get previous run time
if (extraInfo != null && !extraInfo.isEmpty()) {
if ((extraInfo != null) && !extraInfo.isEmpty()) {
try {
Date prevDate = DATE_FORMAT.parse(extraInfo);
@ -404,7 +404,7 @@ public class DatabaseArchiver implements IPluginArchiver {
}
} else {
// startTime has never been set lookup earliest start time
Date minInsert = dao.getMinInsertTime("");
Date minInsert = dao.getMinInsertTime(null);
if (minInsert != null) {
startTime = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
startTime.setTimeInMillis(minInsert.getTime());

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>acars</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>24</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>acarssounding</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>24</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>bufrascat</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>12</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>bufrhdw</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>33</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>bufrmthdw</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>33</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>bufrncwf</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>288</versionsToKeep>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>bufrquikscat</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>12</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,31 +1,21 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<purgeRuleSet>
<key>wxLayer</key>
<defaultRule>
<versionsToKeep>12</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</defaultRule>
<rule>
<id>
<pluginName>bufrsigwx</pluginName>
<key>default</key>
</id>
<keyValue>SWM</keyValue>
<versionsToKeep>12</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>bufrsigwx</pluginName>
<key>wxLayer=SWM</key>
</id>
<keyValue>SWH</keyValue>
<versionsToKeep>12</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
<rule>
<id>
<pluginName>bufrsigwx</pluginName>
<key>wxLayer=SWH</key>
</id>
<versionsToKeep>12</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</purgeRuleSet>

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>bufrssmi</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>33</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>cwa</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>01-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>cwat</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>01-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -4,12 +4,8 @@ period tag is where you change the time:
ex. 01-00:00:00 is one day or 24 hours of retention
ex. 00-12:00:00 is 12 hours
-->
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>ffmp</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>01-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>ldadmesonet</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>24</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>lsr</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>14-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -31,6 +31,7 @@ import com.raytheon.uf.edex.database.DataAccessLayerException;
import com.raytheon.uf.edex.database.plugin.PluginDao;
import com.raytheon.uf.edex.database.plugin.PluginVersionDao;
import com.raytheon.uf.edex.database.purge.PurgeRule;
import com.raytheon.uf.edex.database.purge.PurgeRuleSet;
/**
* This class is used to route messages intended for the purge service to the
@ -70,20 +71,30 @@ public class PurgeRequest {
List<String> retVal = new ArrayList<String>();
List<String> plugins = getAvailablePlugins();
for (int i = 0; i < plugins.size(); i++) {
List<PurgeRule> rules = PluginDao.getPurgeRulesForPlugin(plugins
.get(i));
if (rules.isEmpty()) {
retVal.add(plugins.get(i));
for (String plugin : plugins) {
PurgeRuleSet rules = PluginDao.getPurgeRulesForPlugin(plugin);
PurgeRule defRule = rules.getDefaultRule();
List<PurgeRule> ruleList = rules.getRules();
List<String> purgeKeys = rules.getKeys();
if ((defRule == null)
&& ((ruleList == null) || ruleList.isEmpty())) {
retVal.add(plugin);
retVal.add("No Rules Specified. Using default.");
}else{
for (PurgeRule rule : rules) {
retVal.add(rule.getId().getPluginName());
retVal.add(rule.getRuleDescription());
} else {
if (defRule != null) {
retVal.add(plugin);
retVal.add(defRule.getRuleDescription(purgeKeys));
}
if (ruleList != null) {
for (PurgeRule rule : ruleList) {
retVal.add(plugin);
retVal.add(rule.getRuleDescription(purgeKeys));
}
}
}
}
return retVal.toArray(new String[] {});
return retVal.toArray(new String[retVal.size()]);
} catch (Exception e) {
throw new EdexException("Error getting plugin purge info", e);
}

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>aggregate</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>30-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>stats</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>00-24:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>airmet</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>atcf</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>aww</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>convsigmet</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>ffg</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>idft</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>intlsigmet</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>mcidas</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>mosaic</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>ncairep</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>ncccfp</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>ncgrib</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>ncpafm</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>ncpirep</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>ncscat</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,12 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>ncscd</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>24</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>nctaf</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>ncuair</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>nonconvsigmet</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>sgwh</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>sgwhv</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>ssha</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>stormtrack</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>99-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>tcm</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>wcp</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<defaultRule>
<period>02-00:00:00</period>
</rule>
</purgeRuleSet>
</defaultRule>
</purgeRuleSet>

View file

@ -1,164 +1,118 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>satellite</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<key>creatingEntity</key>
<key>physicalElement</key>
<defaultRule>
<versionsToKeep>24</versionsToKeep>
</rule>
</defaultRule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=HRPT;physicalElement=Imager 11 micron IR</key>
</id>
<keyValue>HRPT</keyValue>
<keyValue>Imager 11 micron IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=HRPT;physicalElement=Imager Channel 4-5 IR</key>
</id>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=HRPT;physicalElement=Imager 3.9 micron IR</key>
</id>
<keyValue>HRPT</keyValue>
<keyValue>Imager Channel 4-5 IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=HRPT;physicalElement=Imager 3 Channel Diff</key>
</id>
<keyValue>HRPT</keyValue>
<keyValue>Imager 3.9 micron IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=HRPT;physicalElement=Imager Visible</key>
</id>
<keyValue>HRPT</keyValue>
<keyValue>Imager 3 Channel Diff</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=MTSAT;physicalElement=Imager 11 micron IR</key>
</id>
<keyValue>HRPT</keyValue>
<keyValue>Imager Visible</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=MTSAT;physicalElement=Imager Visible</key>
</id>
<keyValue>MTSAT</keyValue>
<keyValue>Imager 11 micron IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=MTSAT;physicalElement=Imager Channel 4-5 IR</key>
</id>
<keyValue>MTSAT</keyValue>
<keyValue>Imager Visible</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=GVAR;physicalElement=Imager 11 micron IR</key>
</id>
<keyValue>MTSAT</keyValue>
<keyValue>Imager Channel 4-5 IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=GVAR;physicalElement=Imager 3.9 micron IR</key>
</id>
<keyValue>GVAR</keyValue>
<keyValue>Imager 11 micron IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=GVAR;physicalElement=Imager Visible</key>
</id>
<keyValue>GVAR</keyValue>
<keyValue>Imager 3.9 micron IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=GVAR;physicalElement=Imager 6.7-6.5 micron IR (WV)</key>
</id>
<keyValue>GVAR</keyValue>
<keyValue>Imager Visible</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=DMSP;physicalElement=Imager Visible</key>
</id>
<keyValue>GVAR</keyValue>
<keyValue>Imager 6.7-6.5 micron IR (WV)</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=DMSP;physicalElement=Imager 11 micron IR</key>
</id>
<keyValue>DMSP</keyValue>
<keyValue>Imager Visible</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=FY1C;physicalElement=Imager 11 micron IR</key>
</id>
<keyValue>DMSP</keyValue>
<keyValue>Imager 11 micron IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=FY1C;physicalElement=Imager Channel 4-5 IR</key>
</id>
<keyValue>FY1C</keyValue>
<keyValue>Imager 11 micron IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=FY1C;physicalElement=Imager 3 Channel Diff</key>
</id>
<keyValue>FY1C</keyValue>
<keyValue>Imager Channel 4-5 IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=FY1C;physicalElement=Imager Visible</key>
</id>
<keyValue>FY1C</keyValue>
<keyValue>Imager 3 Channel Diff</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=FY3C;physicalElement=Imager 11 micron IR</key>
</id>
<keyValue>FY1C</keyValue>
<keyValue>Imager Visible</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=FY3C;physicalElement=Imager Channel 4-5 IR</key>
</id>
<keyValue>FY3C</keyValue>
<keyValue>Imager 11 micron IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=FY3C;physicalElement=Imager 3 Channel Diff</key>
</id>
<keyValue>FY3C</keyValue>
<keyValue>Imager Channel 4-5 IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=FY3C;physicalElement=Imager Visible</key>
</id>
<keyValue>FY3C</keyValue>
<keyValue>Imager 3 Channel Diff</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
</rule>
<rule>
<keyValue>FY3C</keyValue>
<keyValue>Imager Visible</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
</purgeRuleSet>

View file

@ -1,164 +1,118 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet xmlns:ns2="group">
<rule>
<id>
<pluginName>satellite</pluginName>
<key>default</key>
</id>
<purgeRuleSet>
<key>creatingEntity</key>
<key>physicalElement</key>
<defaultRule>
<versionsToKeep>24</versionsToKeep>
</rule>
</defaultRule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=HRPT;physicalElement=Imager 11 micron IR</key>
</id>
<keyValue>HRPT</keyValue>
<keyValue>Imager 11 micron IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=HRPT;physicalElement=Imager Channel 4-5 IR</key>
</id>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=HRPT;physicalElement=Imager 3.9 micron IR</key>
</id>
<keyValue>HRPT</keyValue>
<keyValue>Imager Channel 4-5 IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=HRPT;physicalElement=Imager 3 Channel Diff</key>
</id>
<keyValue>HRPT</keyValue>
<keyValue>Imager 3.9 micron IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=HRPT;physicalElement=Imager Visible</key>
</id>
<keyValue>HRPT</keyValue>
<keyValue>Imager 3 Channel Diff</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=MTSAT;physicalElement=Imager 11 micron IR</key>
</id>
<keyValue>HRPT</keyValue>
<keyValue>Imager Visible</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=MTSAT;physicalElement=Imager Visible</key>
</id>
<keyValue>MTSAT</keyValue>
<keyValue>Imager 11 micron IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=MTSAT;physicalElement=Imager Channel 4-5 IR</key>
</id>
<keyValue>MTSAT</keyValue>
<keyValue>Imager Visible</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=GVAR;physicalElement=Imager 11 micron IR</key>
</id>
<keyValue>MTSAT</keyValue>
<keyValue>Imager Channel 4-5 IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=GVAR;physicalElement=Imager 3.9 micron IR</key>
</id>
<keyValue>GVAR</keyValue>
<keyValue>Imager 11 micron IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=GVAR;physicalElement=Imager Visible</key>
</id>
<keyValue>GVAR</keyValue>
<keyValue>Imager 3.9 micron IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=GVAR;physicalElement=Imager 6.7-6.5 micron IR (WV)</key>
</id>
<keyValue>GVAR</keyValue>
<keyValue>Imager Visible</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=DMSP;physicalElement=Imager Visible</key>
</id>
<keyValue>GVAR</keyValue>
<keyValue>Imager 6.7-6.5 micron IR (WV)</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=DMSP;physicalElement=Imager 11 micron IR</key>
</id>
<keyValue>DMSP</keyValue>
<keyValue>Imager Visible</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=FY1C;physicalElement=Imager 11 micron IR</key>
</id>
<keyValue>DMSP</keyValue>
<keyValue>Imager 11 micron IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=FY1C;physicalElement=Imager Channel 4-5 IR</key>
</id>
<keyValue>FY1C</keyValue>
<keyValue>Imager 11 micron IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=FY1C;physicalElement=Imager 3 Channel Diff</key>
</id>
<keyValue>FY1C</keyValue>
<keyValue>Imager Channel 4-5 IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=FY1C;physicalElement=Imager Visible</key>
</id>
<keyValue>FY1C</keyValue>
<keyValue>Imager 3 Channel Diff</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=FY3C;physicalElement=Imager 11 micron IR</key>
</id>
<keyValue>FY1C</keyValue>
<keyValue>Imager Visible</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=FY3C;physicalElement=Imager Channel 4-5 IR</key>
</id>
<keyValue>FY3C</keyValue>
<keyValue>Imager 11 micron IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=FY3C;physicalElement=Imager 3 Channel Diff</key>
</id>
<keyValue>FY3C</keyValue>
<keyValue>Imager Channel 4-5 IR</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
<rule>
<id>
<pluginName>satellite</pluginName>
<key>creatingEntity=FY3C;physicalElement=Imager Visible</key>
</id>
<keyValue>FY3C</keyValue>
<keyValue>Imager 3 Channel Diff</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
</rule>
<rule>
<keyValue>FY3C</keyValue>
<keyValue>Imager Visible</keyValue>
<versionsToKeep>48</versionsToKeep>
</rule>
</purgeRuleSet>