diff --git a/pom.xml b/pom.xml index 7bac79e..7f0f1a0 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ edu.iris.dmc stationxml-validator jar - 1.6.0.3-SNAPSHOT + 1.7.0-RC-01 FDSN StationXML Validator @@ -113,7 +113,7 @@ edu.iris.dmc stationxml-seed-converter - 2.1.0-RC-2-SNAPSHOT + 2.1.0-RC-2 org.apache.commons diff --git a/src/main/java/edu/iris/dmc/station/RuleEngineRegistry.java b/src/main/java/edu/iris/dmc/station/RuleEngineRegistry.java index d48c03b..4bc490d 100644 --- a/src/main/java/edu/iris/dmc/station/RuleEngineRegistry.java +++ b/src/main/java/edu/iris/dmc/station/RuleEngineRegistry.java @@ -81,22 +81,22 @@ private void defaultNetworkRules(Set set) { if (!set.contains(101)) { add(101, new CodeCondition(true, codeRegex, "Network:Code must be assigned a string consisting of 1-2 uppercase A-Z and numeric 0-9 characters."), - Network.class); // + Network.class); } if (!set.contains(110)) { add(110, new StartTimeCondition(true, "If Network:startDate is included then it must occur before Network:endDate if included."), - Network.class); // + Network.class); } if (!set.contains(111)) { add(111, new EpochOverlapCondition(true, "Station:Epoch cannot be partly concurrent with any other Station:Epoch encompassed in parent Network:Epoch."), - Network.class); // + Network.class); } if (!set.contains(112)) { add(112, new EpochRangeCondition(true, "Network:Epoch must encompass all subordinate Station:Epoch"), - Network.class); // + Network.class); } } @@ -105,32 +105,32 @@ private void defaultStationRules(Set set) { if (!set.contains(201)) { add(201, new CodeCondition(true, codeRegex, "Station:Code must be assigned a string consisting of 1-5 uppercase A-Z and numeric 0-9 characters."), - Station.class); // + Station.class); } if (!set.contains(210)) { add(210, new StartTimeCondition(true, "Station:startDate must be included and must occur before Station:endDate if included."), - Station.class); // + Station.class); } if (!set.contains(211)) { add(211, new EpochOverlapCondition(true, "Channel:Epoch cannot be partly concurrent with any other Channel:Epoch encompassed in parent Station:Epoch."), - Station.class); // + Station.class); } if (!set.contains(221)) { add(212, new EpochRangeCondition(true, "Station:Epoch must encompass all subordinate Channel:Epoch."), - Station.class); // + Station.class); } if (!set.contains(222)) { add(222, new DistanceCondition(true, - "Station:Position must be within 1 km of all subordinate Channel:Position.", 1), Station.class); // + "Station:Position must be within 1 km of all subordinate Channel:Position.", 1), Station.class); } if (!set.contains(223)) { add(223, new StationElevationCondition(true, - "Station:Elevation must be within 1 km of all subordinate Channel:Elevation."), Station.class); // + "Station:Elevation must be within 1 km of all subordinate Channel:Elevation."), Station.class); } } @@ -141,56 +141,56 @@ private void defaultChannelRules(Set set) { if (!set.contains(301)) { add(301, new CodeCondition(true, codeRegex, "Channel:Code must be assigned a string consisting of 3 uppercase A-Z and numeric 0-9 characters."), - Channel.class); // + Channel.class); } if (!set.contains(302)) { add(302, new LocationCodeCondition(true, "([A-Z0-9\\*\\ ]{0,2})?", "Channel:locationCode must be assigned a string consisting of 0-2 uppercase A-Z and numeric 0-9 characters OR 2 whitespace characters OR --."), - Channel.class); // + Channel.class); } if (!set.contains(303)) { add(303, new CalibrationUnitCondition(false, "If CalibrationUnits are included then CalibrationUnits:Name must be assigned a value from the IRIS StationXML Unit dictionary, case inconsistencies trigger warnings."), Channel.class); - }// + } if (!set.contains(304)) { add(304, new SensorCondition(true, "Channel:Sensor:Description must be included and assigned a string consisting of 1 <= case insensitive A-Z and numeric 0-9 characters."), Channel.class); - }// + } if (!set.contains(305)) { add(305, new SampleRateCondition(false, "If Channel:SampleRate equals 0 or is not included then Response must not be included.", restrictions), Channel.class); - }// + } if (!set.contains(310)) { add(310, new StartTimeCondition(true, "Channel:startDate must be included and must occur before Channel:endDate if included."), Channel.class); - }// + } if (!set.contains(320)) { add(320, new AzimuthDipCondition(true, "IF Channel:Code[2]==(H | L | M | N) THEN Channel:Azimuth and Channel:Dip must be included."), Channel.class); - }// + } if (!set.contains(321)) { add(321, new InstrumentCodeUnitsCondition(true, " IF Channel:Code[2] == (H | L | M | N) then Stage[1]:InputUnit must equal *m/s* AND Stage[Last]:OutputUnits must equal count*"), Channel.class); - }// + } if (!set.contains(332)) { add(332, new OrientationCondition(true, "If Channel:Code[LAST]==N then Channel:Azimuth must be assigned (>=355.0 or <=5.0) or (>=175.0 and <=185.0) and Channel:Dip must be assigned (>=-5 AND <=5.0).", new Restriction[] { new ChannelCodeRestriction(), new ChannelTypeRestriction() }), Channel.class); - }// + } if (!set.contains(333)) { add(333, new OrientationConditionE(true, "If Channel:Code[LAST]==E then Channel:Azimuth must be assigned (>=85.0 and <=95.0) or (>=265.0 and <=275.0) and Channel:Dip must be assigned (>=-5 and <=5.0).", new Restriction[] { new ChannelCodeRestriction(), new ChannelTypeRestriction() }), Channel.class); - }// + } if (!set.contains(334)) { add(334, new OrientationConditionZ(true, "If Channel:Code[LAST]==Z then Channel:Azimuth must be assigned (>=355.0 or <=5.0) and Channel:Dip must be assigned (>=-85.0 and <=-90.0) or (>=85.0 and <=90.0).", new Restriction[] { new ChannelCodeRestriction(), new ChannelTypeRestriction() }), Channel.class); - }// + } } private void defaultResponseRules(Set s) { @@ -200,83 +200,83 @@ private void defaultResponseRules(Set s) { if (!s.contains(401)) { add(401, new StageSequenceCondition(true, "Stage:number must start at 1 and be sequential.", - restrictions), Response.class); // + restrictions), Response.class); } if (!s.contains(402)) { add(402, new UnitCondition(true, "Stage[N]:InputUnits:Name and Stage[N]:OutputUnits:Name must be assigned a value from the IRIS StationXML Unit dictionary, case inconsistencies trigger warnings.", - restrictions), Response.class); // + restrictions), Response.class); } if (!s.contains(403)) { add(403, new StageUnitCondition(true, "If length(Stage) > 1 then Stage[N]:InputUnits:Name must equal the previously assigned Stage[M]:OutputUnits:Name.", - restrictions), Response.class); // + restrictions), Response.class); } if (!s.contains(404)) { add(404, new DigitalFilterCondition(true, "If Stage[N]:PolesZeros:PzTransferFunctionType:Digital or Stage[N]:FIR or Stage[N]:Coefficients:CfTransferFunctionType:DIGITAL are included then Stage[N] must include Stage[N]:Decimation and Stage[N]:StageGain elements.", - restrictions), Response.class); // + restrictions), Response.class); } if (!s.contains(405)) { add(405, new ResponseListCondition(true, "Stage:ResponseList cannot be the only stage included in a response.", - new ChannelCodeRestriction(), new ChannelTypeRestriction()), Response.class); // + new ChannelCodeRestriction(), new ChannelTypeRestriction()), Response.class); } if (!s.contains(410)) { add(410, new EmptySensitivityCondition(true, "If InstrumentSensitivity is included then InstrumentSensitivity:Value must be assigned a double > 0.0 ", new ChannelCodeRestriction(), new ChannelTypeRestriction(), new ResponsePolynomialRestriction()), - Response.class); // + Response.class); } if (!s.contains(411)) { add(411, new FrequencyCondition(true, "If InstrumentSensitivity is included then InstrumentSensitivity:Frequency must be less than Channel:SampleRate/2 [Nyquist Frequency]. ", new ChannelCodeRestriction(), new ChannelTypeRestriction(), new ResponsePolynomialRestriction()), - Response.class); // + Response.class); } if (!s.contains(412)) { add(412, new StageGainProductCondition(true, "InstrumentSensitivity:Value must equal the product of all StageGain:Value if all StageGain:Frequency are equal to InstrumentSensitivity:Frequency [Normalization Frequency].", new ChannelCodeRestriction(), new ChannelTypeRestriction(), new ResponsePolynomialRestriction()), - Response.class); // + Response.class); } if (!s.contains(413)) { add(413, new StageGainNonZeroCondition(true, "Stage[1:N]:StageGain must be included and Stage[1:N]:StageGain:Value must be assigned a double > 0.0 and Stage[1:N]:StageGain:Frequency must be assigned a double.", new ChannelCodeRestriction(), new ResponsePolynomialRestriction(), new ChannelTypeRestriction()), - Response.class); // + Response.class); } if (!s.contains(414)) { add(414, new PolesZerosCondition(false, "If Stage[N]:PolesZeros contains Zero:Real==0 and Zero:Imaginary==0 then InstrumentSensitivity:Frequency cannot equal 0 and Stage[N]:StageGain:Frequency cannot equal 0.", new ChannelCodeRestriction(), new ChannelTypeRestriction(), new ResponsePolynomialRestriction()), - Response.class); // + Response.class); } if (!s.contains(415)) { add(415, new PolynomialCondition(false, "Response must include InstrumentPolynomial if a Polynomial stage is included.", new ChannelCodeRestriction(), new ChannelTypeRestriction()), Response.class); - }// + } if (!s.contains(416)) { add(416, new InstrumentSensitivityCondition(false, "Response must include InstrumentSensitivity if no Polynomial stages are included.", new ChannelCodeRestriction(), new ChannelTypeRestriction()), Response.class); - } // + } if (!s.contains(417)) { add(417, new PolesZerosSequenceCondition(false, "If Stage[N]:PolesZeros contains Zeros and Poles then Zero:Number and Pole:Number must start at 0 and be sequential.", new ChannelCodeRestriction(), new ChannelTypeRestriction()), Response.class); - } // + } if (!s.contains(420)) { add(420, new MissingDecimationCondition(true, "A Response must contain at least one instance of Response:Stage:Decimation.", new ChannelCodeRestriction(), new ChannelTypeRestriction(), new ResponsePolynomialRestriction()), Response.class); - }// + } if (!s.contains(421)) { add(421, new DecimationSampleRateCondition(true, "Stage[LAST]:Decimation:InputSampleRate divided by Stage[LAST]:Decimation:Factor must equal Channel:SampleRate.", new ChannelCodeRestriction(), new ChannelTypeRestriction(), new ResponsePolynomialRestriction()), Response.class); - }// + } if (!s.contains(422)) { add(422, new DecimationCondition(true, "Stage[N]:Decimation:InputSampleRate must equal the previously assigned Stage[M]:Decimation:InputSampleRate divided by Stage[M]:Decimation:Factor.",