Merge branch '13.2.1_delivery' into development
Conflicts: edexOsgi/com.raytheon.uf.edex.ohd/src/com/raytheon/uf/edex/ohd/pproc/MpeLightningSrv.java Former-commit-id:407d73a04f
[formerly cda6b1137d9052b0859f2b51f5bdadecad411e43] Former-commit-id:2c9c6b7dde
This commit is contained in:
commit
89f3120c0c
56 changed files with 1910 additions and 438 deletions
|
@ -26,11 +26,11 @@ import com.raytheon.uf.common.datadelivery.event.notification.PendingSubscriptio
|
||||||
import com.raytheon.uf.common.datadelivery.event.notification.SubscriptionNotificationRequest;
|
import com.raytheon.uf.common.datadelivery.event.notification.SubscriptionNotificationRequest;
|
||||||
import com.raytheon.uf.common.datadelivery.registry.InitialPendingSubscription;
|
import com.raytheon.uf.common.datadelivery.registry.InitialPendingSubscription;
|
||||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||||
|
import com.raytheon.uf.common.datadelivery.request.DataDeliveryConstants;
|
||||||
|
import com.raytheon.uf.common.serialization.comm.RequestRouter;
|
||||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
import com.raytheon.uf.common.status.UFStatus;
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||||
import com.raytheon.uf.viz.core.exception.VizException;
|
|
||||||
import com.raytheon.uf.viz.core.requests.ThriftClient;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of {@link ISubscriptionNotificationService} that sends the
|
* Implementation of {@link ISubscriptionNotificationService} that sends the
|
||||||
|
@ -42,7 +42,8 @@ import com.raytheon.uf.viz.core.requests.ThriftClient;
|
||||||
*
|
*
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Jan 4, 2013 1441 djohnson Initial creation
|
* Jan 04, 2013 1441 djohnson Initial creation
|
||||||
|
* Jan 17, 2013 1501 djohnson Route to datadelivery.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -207,8 +208,7 @@ public class SendToServerSubscriptionNotificationService implements
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void sendSubscriptionActivatedNotification(
|
public void sendSubscriptionActivatedNotification(
|
||||||
Subscription subscription,
|
Subscription subscription, String username) {
|
||||||
String username) {
|
|
||||||
SubscriptionNotificationRequest req = new SubscriptionNotificationRequest();
|
SubscriptionNotificationRequest req = new SubscriptionNotificationRequest();
|
||||||
req.setUserId(username);
|
req.setUserId(username);
|
||||||
req.setCategory("Subscription");
|
req.setCategory("Subscription");
|
||||||
|
@ -223,8 +223,7 @@ public class SendToServerSubscriptionNotificationService implements
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void sendSubscriptionDeactivatedNotification(
|
public void sendSubscriptionDeactivatedNotification(
|
||||||
Subscription subscription,
|
Subscription subscription, String username) {
|
||||||
String username) {
|
|
||||||
SubscriptionNotificationRequest req = new SubscriptionNotificationRequest();
|
SubscriptionNotificationRequest req = new SubscriptionNotificationRequest();
|
||||||
req.setUserId(username);
|
req.setUserId(username);
|
||||||
req.setCategory("Subscription");
|
req.setCategory("Subscription");
|
||||||
|
@ -241,8 +240,9 @@ public class SendToServerSubscriptionNotificationService implements
|
||||||
*/
|
*/
|
||||||
private void sendRequest(BaseSubscriptionNotificationRequest<?> req) {
|
private void sendRequest(BaseSubscriptionNotificationRequest<?> req) {
|
||||||
try {
|
try {
|
||||||
ThriftClient.sendRequest(req);
|
RequestRouter
|
||||||
} catch (VizException e) {
|
.route(req, DataDeliveryConstants.DATA_DELIVERY_SERVER);
|
||||||
|
} catch (Exception e) {
|
||||||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
|
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,8 +27,6 @@ import javax.xml.bind.annotation.XmlAccessorType;
|
||||||
import javax.xml.bind.annotation.XmlElement;
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
|
|
||||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
|
||||||
import com.raytheon.uf.common.status.UFStatus;
|
|
||||||
import com.raytheon.uf.viz.datadelivery.system.CreateEditRuleDlg.FreqUnitOptions;
|
import com.raytheon.uf.viz.datadelivery.system.CreateEditRuleDlg.FreqUnitOptions;
|
||||||
import com.raytheon.uf.viz.datadelivery.system.Operator;
|
import com.raytheon.uf.viz.datadelivery.system.Operator;
|
||||||
import com.raytheon.uf.viz.datadelivery.system.OpsNetFieldNames;
|
import com.raytheon.uf.viz.datadelivery.system.OpsNetFieldNames;
|
||||||
|
@ -54,11 +52,6 @@ import com.raytheon.uf.viz.datadelivery.utils.DataSizeUnit;
|
||||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||||
@XmlAccessorType(XmlAccessType.NONE)
|
@XmlAccessorType(XmlAccessType.NONE)
|
||||||
public abstract class RuleXML {
|
public abstract class RuleXML {
|
||||||
|
|
||||||
/** Status Handler */
|
|
||||||
private final IUFStatusHandler statusHandler = UFStatus
|
|
||||||
.getHandler(RuleXML.class);
|
|
||||||
|
|
||||||
/** Rule name */
|
/** Rule name */
|
||||||
@XmlElement
|
@XmlElement
|
||||||
protected String ruleName;
|
protected String ruleName;
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
**/
|
**/
|
||||||
package com.raytheon.uf.viz.datadelivery.system;
|
package com.raytheon.uf.viz.datadelivery.system;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.swt.SWT;
|
||||||
|
@ -227,6 +228,9 @@ public class CreateEditRuleDlg extends CaveSWTDialog {
|
||||||
this(parent, create, null, ruleType);
|
this(parent, create, null, ruleType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the rule header.
|
||||||
|
*/
|
||||||
private void createRuleHeader() {
|
private void createRuleHeader() {
|
||||||
if (create) {
|
if (create) {
|
||||||
if (PRIORITY_TYPE.equals(ruleType)) {
|
if (PRIORITY_TYPE.equals(ruleType)) {
|
||||||
|
@ -269,9 +273,9 @@ public class CreateEditRuleDlg extends CaveSWTDialog {
|
||||||
protected void initializeComponents(Shell shell) {
|
protected void initializeComponents(Shell shell) {
|
||||||
if (!create) {
|
if (!create) {
|
||||||
if (PRIORITY_TYPE.equals(ruleType)) {
|
if (PRIORITY_TYPE.equals(ruleType)) {
|
||||||
ruleXml = srm.loadPriorityRule(ruleName);
|
ruleXml = srm.getPriorityRule(ruleName);
|
||||||
} else {
|
} else {
|
||||||
ruleXml = srm.loadLatencyRule(ruleName);
|
ruleXml = srm.getLatencyRule(ruleName);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DATASET_SIZE.equals(ruleXml.getRuleField())) {
|
if (DATASET_SIZE.equals(ruleXml.getRuleField())) {
|
||||||
|
@ -411,7 +415,6 @@ public class CreateEditRuleDlg extends CaveSWTDialog {
|
||||||
String item = fieldCombo.getItem(index);
|
String item = fieldCombo.getItem(index);
|
||||||
updateSelectionFields(item);
|
updateSelectionFields(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
OpsNetFieldNames[] fieldItems = OpsNetFieldNames.values();
|
OpsNetFieldNames[] fieldItems = OpsNetFieldNames.values();
|
||||||
|
@ -450,7 +453,6 @@ public class CreateEditRuleDlg extends CaveSWTDialog {
|
||||||
createFreqUnitItems();
|
createFreqUnitItems();
|
||||||
}
|
}
|
||||||
unitsCombo.select(0);
|
unitsCombo.select(0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PRIORITY_TYPE.equals(ruleType)) {
|
if (PRIORITY_TYPE.equals(ruleType)) {
|
||||||
|
@ -481,7 +483,6 @@ public class CreateEditRuleDlg extends CaveSWTDialog {
|
||||||
}
|
}
|
||||||
|
|
||||||
priorityCombo.select(0);
|
priorityCombo.select(0);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||||
gl = new GridLayout(3, false);
|
gl = new GridLayout(3, false);
|
||||||
|
@ -507,19 +508,16 @@ public class CreateEditRuleDlg extends CaveSWTDialog {
|
||||||
Label minutesLbl = new Label(latencySelectionComp, SWT.NONE);
|
Label minutesLbl = new Label(latencySelectionComp, SWT.NONE);
|
||||||
minutesLbl.setLayoutData(gd);
|
minutesLbl.setLayoutData(gd);
|
||||||
minutesLbl.setText("Minutes");
|
minutesLbl.setText("Minutes");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
populateFields();
|
populateFields();
|
||||||
ruleDefinitionGroup.pack();
|
ruleDefinitionGroup.pack();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Upon edit, populate the fields.
|
* Upon edit, populate the fields.
|
||||||
*/
|
*/
|
||||||
private void populateFields() {
|
private void populateFields() {
|
||||||
|
|
||||||
if (!create) {
|
if (!create) {
|
||||||
String field = ruleXml.getRuleField();
|
String field = ruleXml.getRuleField();
|
||||||
if (!field.isEmpty()) {
|
if (!field.isEmpty()) {
|
||||||
|
@ -602,7 +600,6 @@ public class CreateEditRuleDlg extends CaveSWTDialog {
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -651,6 +648,13 @@ public class CreateEditRuleDlg extends CaveSWTDialog {
|
||||||
Operator operator = OperatorAdapter.fromString(operationCombo
|
Operator operator = OperatorAdapter.fromString(operationCombo
|
||||||
.getItem(operationCombo.getSelectionIndex()));
|
.getItem(operationCombo.getSelectionIndex()));
|
||||||
|
|
||||||
|
List<String> ruleNames = null;
|
||||||
|
if (PRIORITY_TYPE.equals(ruleType)) {
|
||||||
|
ruleNames = srm.getPriorityRuleNames();
|
||||||
|
} else {
|
||||||
|
ruleNames = srm.getLatencyRuleNames();
|
||||||
|
}
|
||||||
|
|
||||||
if (create) {
|
if (create) {
|
||||||
valid = DataDeliveryGUIUtils.hasText(ruleNameText);
|
valid = DataDeliveryGUIUtils.hasText(ruleNameText);
|
||||||
|
|
||||||
|
@ -663,13 +667,29 @@ public class CreateEditRuleDlg extends CaveSWTDialog {
|
||||||
}
|
}
|
||||||
|
|
||||||
ruleName = ruleNameText.getText();
|
ruleName = ruleNameText.getText();
|
||||||
}
|
|
||||||
|
|
||||||
if (INVALID_PATTERN.matcher(ruleName.trim()).find()) {
|
if (INVALID_PATTERN.matcher(ruleName.trim()).find()) {
|
||||||
DataDeliveryUtils.showMessage(getShell(), SWT.ERROR,
|
DataDeliveryUtils.showMessage(getShell(), SWT.ERROR,
|
||||||
INVALID_CHARS_TITLE, INVALID_CHARS_MESSAGE);
|
INVALID_CHARS_TITLE, INVALID_CHARS_MESSAGE);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check for duplicate rule name
|
||||||
|
if (ruleNames.contains(ruleName)) {
|
||||||
|
DataDeliveryUtils
|
||||||
|
.showMessage(
|
||||||
|
shell,
|
||||||
|
SWT.ERROR,
|
||||||
|
"Duplicate Rule",
|
||||||
|
"A rule titled "
|
||||||
|
+ ruleName
|
||||||
|
+ " already exists.\n\nPlease select a different name.");
|
||||||
|
ruleNameText.selectAll();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
String value = null;
|
String value = null;
|
||||||
if (DataDeliveryGUIUtils.hasText(ruleValue)) {
|
if (DataDeliveryGUIUtils.hasText(ruleValue)) {
|
||||||
value = ruleValue.getText();
|
value = ruleValue.getText();
|
||||||
|
@ -770,21 +790,12 @@ public class CreateEditRuleDlg extends CaveSWTDialog {
|
||||||
}
|
}
|
||||||
|
|
||||||
setReturnValue(saved);
|
setReturnValue(saved);
|
||||||
|
|
||||||
if (!saved) {
|
|
||||||
DataDeliveryUtils
|
|
||||||
.showMessage(
|
|
||||||
getShell(),
|
|
||||||
SWT.OK,
|
|
||||||
"Duplicate Name",
|
|
||||||
"A rule named "
|
|
||||||
+ ruleName
|
|
||||||
+ " already exists\n\nPlease select a different name.");
|
|
||||||
ruleNameText.selectAll();
|
|
||||||
}
|
|
||||||
return saved;
|
return saved;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Populate the units combo.
|
||||||
|
*/
|
||||||
private void createSizeUnitItems() {
|
private void createSizeUnitItems() {
|
||||||
unitsCombo.removeAll();
|
unitsCombo.removeAll();
|
||||||
DataSizeUnit[] sizeUnits = DataSizeUnit.values();
|
DataSizeUnit[] sizeUnits = DataSizeUnit.values();
|
||||||
|
@ -793,6 +804,9 @@ public class CreateEditRuleDlg extends CaveSWTDialog {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Populate the operation combo.
|
||||||
|
*/
|
||||||
private void createSizeOpItems() {
|
private void createSizeOpItems() {
|
||||||
operationCombo.removeAll();
|
operationCombo.removeAll();
|
||||||
OperatorTypes[] sizeOps = OperatorTypes.values();
|
OperatorTypes[] sizeOps = OperatorTypes.values();
|
||||||
|
@ -801,6 +815,9 @@ public class CreateEditRuleDlg extends CaveSWTDialog {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Populate the frequency units combo.
|
||||||
|
*/
|
||||||
private void createFreqUnitItems() {
|
private void createFreqUnitItems() {
|
||||||
FreqUnitOptions[] freqUnits = FreqUnitOptions.values();
|
FreqUnitOptions[] freqUnits = FreqUnitOptions.values();
|
||||||
for (FreqUnitOptions fuo : freqUnits) {
|
for (FreqUnitOptions fuo : freqUnits) {
|
||||||
|
@ -808,6 +825,9 @@ public class CreateEditRuleDlg extends CaveSWTDialog {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* populate the operation combo.
|
||||||
|
*/
|
||||||
private void createNameOpItems() {
|
private void createNameOpItems() {
|
||||||
operationCombo.removeAll();
|
operationCombo.removeAll();
|
||||||
NameOperationItems[] nameOperation = NameOperationItems.values();
|
NameOperationItems[] nameOperation = NameOperationItems.values();
|
||||||
|
|
|
@ -17,13 +17,10 @@
|
||||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
* further licensing information.
|
* further licensing information.
|
||||||
**/
|
**/
|
||||||
package com.raytheon.uf.common.datadelivery.retrieval.util;
|
package com.raytheon.uf.viz.datadelivery.system;
|
||||||
|
|
||||||
import com.raytheon.uf.common.datadelivery.retrieval.xml.LevelLookup;
|
|
||||||
import com.raytheon.uf.common.datadelivery.retrieval.xml.ParameterLookup;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Makes parser created XML not write out in test
|
* Rules file update notifier interface.
|
||||||
*
|
*
|
||||||
* <pre>
|
* <pre>
|
||||||
*
|
*
|
||||||
|
@ -31,30 +28,17 @@ import com.raytheon.uf.common.datadelivery.retrieval.xml.ParameterLookup;
|
||||||
*
|
*
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Jan 10, 2013 djohnson Initial creation
|
* Jan 16, 2013 1420 mpduff Initial creation
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author djohnson
|
* @author mpduff
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class NullXmlWriter implements LevelXmlWriter, ParameterXmlWriter {
|
public interface IRulesUpdateListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* Update rules.
|
||||||
*/
|
*/
|
||||||
@Override
|
void update();
|
||||||
public void writeParameterXml(ParameterLookup pl, String modelName)
|
|
||||||
throws Exception {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void writeLevelXml(LevelLookup ll, String modelName)
|
|
||||||
throws Exception {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -263,10 +263,7 @@ public class SystemLatencyTab {
|
||||||
ruleDlg = new CreateEditRuleDlg(parentComp.getShell(),
|
ruleDlg = new CreateEditRuleDlg(parentComp.getShell(),
|
||||||
create, ruleName, LATENCY_TYPE);
|
create, ruleName, LATENCY_TYPE);
|
||||||
}
|
}
|
||||||
boolean reloadFlag = (Boolean) ruleDlg.open();
|
ruleDlg.open();
|
||||||
if (reloadFlag) {
|
|
||||||
loadList();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
ruleDlg.bringToTop();
|
ruleDlg.bringToTop();
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,7 @@ import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
import com.raytheon.uf.common.status.UFStatus;
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||||
import com.raytheon.uf.common.util.StringUtil;
|
import com.raytheon.uf.common.util.StringUtil;
|
||||||
|
import com.raytheon.uf.viz.core.VizApp;
|
||||||
import com.raytheon.uf.viz.datadelivery.subscription.SubscriptionService.ForceApplyPromptResponse;
|
import com.raytheon.uf.viz.datadelivery.subscription.SubscriptionService.ForceApplyPromptResponse;
|
||||||
import com.raytheon.uf.viz.datadelivery.subscription.SubscriptionService.IForceApplyPromptDisplayText;
|
import com.raytheon.uf.viz.datadelivery.subscription.SubscriptionService.IForceApplyPromptDisplayText;
|
||||||
import com.raytheon.uf.viz.datadelivery.utils.DataDeliveryUtils;
|
import com.raytheon.uf.viz.datadelivery.utils.DataDeliveryUtils;
|
||||||
|
@ -64,6 +65,8 @@ import com.raytheon.viz.ui.presenter.IDisplay;
|
||||||
* Oct 23, 2012 1286 djohnson Hook into bandwidth management.
|
* Oct 23, 2012 1286 djohnson Hook into bandwidth management.
|
||||||
* Nov 20, 2012 1286 djohnson Implement IDisplay.
|
* Nov 20, 2012 1286 djohnson Implement IDisplay.
|
||||||
* Jan 04, 2013 1420 mpduff Remove applying of rules.
|
* Jan 04, 2013 1420 mpduff Remove applying of rules.
|
||||||
|
* Jan 17, 2013 1501 djohnson Close the dialog when force apply occurs,
|
||||||
|
* and check whether changes have already been applied when OK is pressed.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -71,7 +74,7 @@ import com.raytheon.viz.ui.presenter.IDisplay;
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
public class SystemManagementDlg extends CaveSWTDialog implements IDisplay,
|
public class SystemManagementDlg extends CaveSWTDialog implements IDisplay,
|
||||||
IForceApplyPromptDisplayText {
|
IForceApplyPromptDisplayText, IRulesUpdateListener {
|
||||||
|
|
||||||
/** Status Handler */
|
/** Status Handler */
|
||||||
private final IUFStatusHandler statusHandler = UFStatus
|
private final IUFStatusHandler statusHandler = UFStatus
|
||||||
|
@ -128,10 +131,18 @@ public class SystemManagementDlg extends CaveSWTDialog implements IDisplay,
|
||||||
/** OK button */
|
/** OK button */
|
||||||
private Button okBtn;
|
private Button okBtn;
|
||||||
|
|
||||||
|
/** Available bandwidth modified flag */
|
||||||
private boolean availableBandwidthModified;
|
private boolean availableBandwidthModified;
|
||||||
|
|
||||||
|
/** Available bandwidth spinner widget */
|
||||||
private Spinner availBandwidthSpinner;
|
private Spinner availBandwidthSpinner;
|
||||||
|
|
||||||
|
/** The system latency tab */
|
||||||
|
private SystemLatencyTab lTab;
|
||||||
|
|
||||||
|
/** The system priority tab */
|
||||||
|
private SystemPriorityTab pTab;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
|
@ -141,6 +152,7 @@ public class SystemManagementDlg extends CaveSWTDialog implements IDisplay,
|
||||||
public SystemManagementDlg(Shell parent) {
|
public SystemManagementDlg(Shell parent) {
|
||||||
super(parent, SWT.DIALOG_TRIM, CAVE.NONE);
|
super(parent, SWT.DIALOG_TRIM, CAVE.NONE);
|
||||||
setText("Data Delivery System Management");
|
setText("Data Delivery System Management");
|
||||||
|
SystemRuleManager.getInstance().registerAsListener(this);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,6 +193,17 @@ public class SystemManagementDlg extends CaveSWTDialog implements IDisplay,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see com.raytheon.viz.ui.dialogs.CaveSWTDialogBase#disposed()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void disposed() {
|
||||||
|
super.disposed();
|
||||||
|
SystemRuleManager.getInstance().deregisterAsListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create top bar route information.
|
* Create top bar route information.
|
||||||
*/
|
*/
|
||||||
|
@ -283,7 +306,7 @@ public class SystemManagementDlg extends CaveSWTDialog implements IDisplay,
|
||||||
priorityComp.setLayout(gl);
|
priorityComp.setLayout(gl);
|
||||||
priorityComp.setLayoutData(gd);
|
priorityComp.setLayoutData(gd);
|
||||||
priorityTab.setControl(priorityComp);
|
priorityTab.setControl(priorityComp);
|
||||||
SystemPriorityTab pTab = new SystemPriorityTab(priorityComp);
|
pTab = new SystemPriorityTab(priorityComp);
|
||||||
|
|
||||||
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||||
gl = new GridLayout(1, false);
|
gl = new GridLayout(1, false);
|
||||||
|
@ -296,7 +319,7 @@ public class SystemManagementDlg extends CaveSWTDialog implements IDisplay,
|
||||||
latencyComp.setLayout(gl);
|
latencyComp.setLayout(gl);
|
||||||
latencyComp.setLayoutData(gd);
|
latencyComp.setLayoutData(gd);
|
||||||
latencyTab.setControl(latencyComp);
|
latencyTab.setControl(latencyComp);
|
||||||
SystemLatencyTab lTab = new SystemLatencyTab(latencyComp);
|
lTab = new SystemLatencyTab(latencyComp);
|
||||||
|
|
||||||
gd = new GridData(SWT.CENTER, SWT.DEFAULT, true, false);
|
gd = new GridData(SWT.CENTER, SWT.DEFAULT, true, false);
|
||||||
gl = new GridLayout(1, false);
|
gl = new GridLayout(1, false);
|
||||||
|
@ -309,6 +332,9 @@ public class SystemManagementDlg extends CaveSWTDialog implements IDisplay,
|
||||||
routingComp.setLayoutData(gd);
|
routingComp.setLayoutData(gd);
|
||||||
routingTab.setControl(routingComp);
|
routingTab.setControl(routingComp);
|
||||||
SystemRoutingTab rTab = new SystemRoutingTab(routingComp);
|
SystemRoutingTab rTab = new SystemRoutingTab(routingComp);
|
||||||
|
|
||||||
|
lTab.loadList();
|
||||||
|
pTab.loadList();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -413,21 +439,26 @@ public class SystemManagementDlg extends CaveSWTDialog implements IDisplay,
|
||||||
sb.append("Would you like to change the bandwidth anyways?.");
|
sb.append("Would you like to change the bandwidth anyways?.");
|
||||||
int response = DataDeliveryUtils.showMessage(getShell(),
|
int response = DataDeliveryUtils.showMessage(getShell(),
|
||||||
SWT.YES | SWT.NO, "Bandwidth Amount", sb.toString());
|
SWT.YES | SWT.NO, "Bandwidth Amount", sb.toString());
|
||||||
|
boolean forceApplied = false;
|
||||||
if (response == SWT.YES) {
|
if (response == SWT.YES) {
|
||||||
boolean forceApplied = SystemRuleManager
|
forceApplied = SystemRuleManager
|
||||||
.forceSetAvailableBandwidth(Network.OPSNET,
|
.forceSetAvailableBandwidth(Network.OPSNET,
|
||||||
bandwidth);
|
bandwidth);
|
||||||
if (!forceApplied) {
|
if (forceApplied) {
|
||||||
|
availableBandwidthModified = false;
|
||||||
|
} else {
|
||||||
statusHandler
|
statusHandler
|
||||||
.handle(Priority.ERROR,
|
.handle(Priority.ERROR,
|
||||||
"Bandwidth Change",
|
"Bandwidth Change",
|
||||||
"Unable to change the bandwidth for network "
|
"Unable to change the bandwidth for network "
|
||||||
+ Network.OPSNET
|
+ Network.OPSNET
|
||||||
+ ". Please check the server for details.");
|
+ ". Please check the server for details.");
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return forceApplied;
|
||||||
|
} else {
|
||||||
|
availableBandwidthModified = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -466,4 +497,17 @@ public class SystemManagementDlg extends CaveSWTDialog implements IDisplay,
|
||||||
"Don't know how to handle option [" + option + "]");
|
"Don't know how to handle option [" + option + "]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
VizApp.runAsync(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (!shell.isDisposed()) {
|
||||||
|
lTab.loadList();
|
||||||
|
pTab.loadList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -268,10 +268,7 @@ public class SystemPriorityTab {
|
||||||
create, ruleName, PRIORITY_TYPE);
|
create, ruleName, PRIORITY_TYPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean reloadFlag = (Boolean) ruleDlg.open();
|
ruleDlg.open();
|
||||||
if (reloadFlag) {
|
|
||||||
loadList();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
ruleDlg.bringToTop();
|
ruleDlg.bringToTop();
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,8 @@ import javax.xml.bind.Unmarshaller;
|
||||||
import com.raytheon.uf.common.datadelivery.bandwidth.IBandwidthService;
|
import com.raytheon.uf.common.datadelivery.bandwidth.IBandwidthService;
|
||||||
import com.raytheon.uf.common.datadelivery.registry.Network;
|
import com.raytheon.uf.common.datadelivery.registry.Network;
|
||||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||||
|
import com.raytheon.uf.common.localization.FileUpdatedMessage;
|
||||||
|
import com.raytheon.uf.common.localization.ILocalizationFileObserver;
|
||||||
import com.raytheon.uf.common.localization.IPathManager;
|
import com.raytheon.uf.common.localization.IPathManager;
|
||||||
import com.raytheon.uf.common.localization.LocalizationContext;
|
import com.raytheon.uf.common.localization.LocalizationContext;
|
||||||
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
|
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
|
||||||
|
@ -89,6 +91,12 @@ public class SystemRuleManager {
|
||||||
private final IUFStatusHandler statusHandler = UFStatus
|
private final IUFStatusHandler statusHandler = UFStatus
|
||||||
.getHandler(SystemRuleManager.class);
|
.getHandler(SystemRuleManager.class);
|
||||||
|
|
||||||
|
/** Latency Rules Localization File */
|
||||||
|
private LocalizationFile latencyRulesLocFile;
|
||||||
|
|
||||||
|
/** Priority Rules Localization File */
|
||||||
|
private LocalizationFile priorityRulesLocFile;
|
||||||
|
|
||||||
/** JAXB context */
|
/** JAXB context */
|
||||||
private JAXBContext jax;
|
private JAXBContext jax;
|
||||||
|
|
||||||
|
@ -101,11 +109,21 @@ public class SystemRuleManager {
|
||||||
/** Bandwidth service */
|
/** Bandwidth service */
|
||||||
private IBandwidthService bandwidthService;
|
private IBandwidthService bandwidthService;
|
||||||
|
|
||||||
|
/** Latency Rules XML object */
|
||||||
|
private LatencyRulesXML latencyRules;
|
||||||
|
|
||||||
|
/** Priority Rules XML object */
|
||||||
|
private PriorityRulesXML priorityRules;
|
||||||
|
|
||||||
|
private final List<IRulesUpdateListener> listeners = new ArrayList<IRulesUpdateListener>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*/
|
*/
|
||||||
private SystemRuleManager() {
|
private SystemRuleManager() {
|
||||||
createContext();
|
createContext();
|
||||||
|
loadLatencyRules();
|
||||||
|
loadPriorityRules();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -144,7 +162,7 @@ public class SystemRuleManager {
|
||||||
* @throws JAXBException
|
* @throws JAXBException
|
||||||
*/
|
*/
|
||||||
public List<String> getPriorityRuleNames() {
|
public List<String> getPriorityRuleNames() {
|
||||||
return getPriorityRules().getRuleNames();
|
return getPriorityRules(false).getRuleNames();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -154,8 +172,8 @@ public class SystemRuleManager {
|
||||||
* the name of the rule
|
* the name of the rule
|
||||||
* @return the PriorityRuleXML object
|
* @return the PriorityRuleXML object
|
||||||
*/
|
*/
|
||||||
public PriorityRuleXML loadPriorityRule(String name) {
|
public PriorityRuleXML getPriorityRule(String name) {
|
||||||
PriorityRulesXML priorityRules = getPriorityRules();
|
PriorityRulesXML priorityRules = getPriorityRules(false);
|
||||||
for (PriorityRuleXML rule : priorityRules.getRules()) {
|
for (PriorityRuleXML rule : priorityRules.getRules()) {
|
||||||
if (rule.getRuleName().equals(name)) {
|
if (rule.getRuleName().equals(name)) {
|
||||||
return rule;
|
return rule;
|
||||||
|
@ -172,8 +190,8 @@ public class SystemRuleManager {
|
||||||
* the name of the rule
|
* the name of the rule
|
||||||
* @return the LatencyRuleXML object
|
* @return the LatencyRuleXML object
|
||||||
*/
|
*/
|
||||||
public LatencyRuleXML loadLatencyRule(String name) {
|
public LatencyRuleXML getLatencyRule(String name) {
|
||||||
LatencyRulesXML latencyRules = getLatencyRules();
|
LatencyRulesXML latencyRules = getLatencyRules(false);
|
||||||
for (LatencyRuleXML rule : latencyRules.getRules()) {
|
for (LatencyRuleXML rule : latencyRules.getRules()) {
|
||||||
if (rule.getRuleName().equals(name)) {
|
if (rule.getRuleName().equals(name)) {
|
||||||
return rule;
|
return rule;
|
||||||
|
@ -190,7 +208,7 @@ public class SystemRuleManager {
|
||||||
* @throws JAXBException
|
* @throws JAXBException
|
||||||
*/
|
*/
|
||||||
public List<String> getLatencyRuleNames() {
|
public List<String> getLatencyRuleNames() {
|
||||||
return getLatencyRules().getRuleNames();
|
return getLatencyRules(false).getRuleNames();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -203,15 +221,22 @@ public class SystemRuleManager {
|
||||||
public boolean savePriorityRules(PriorityRulesXML xmlObj) {
|
public boolean savePriorityRules(PriorityRulesXML xmlObj) {
|
||||||
IPathManager pm = PathManagerFactory.getPathManager();
|
IPathManager pm = PathManagerFactory.getPathManager();
|
||||||
|
|
||||||
|
try {
|
||||||
|
// If site, then write out, otherwise save it as site.
|
||||||
|
if (priorityRulesLocFile.getContext().getLocalizationLevel()
|
||||||
|
.equals(LocalizationLevel.SITE)) {
|
||||||
|
marshaller.marshal(xmlObj, priorityRulesLocFile.getFile());
|
||||||
|
return priorityRulesLocFile.save();
|
||||||
|
} else {
|
||||||
LocalizationContext context = pm.getContext(
|
LocalizationContext context = pm.getContext(
|
||||||
LocalizationType.COMMON_STATIC, LocalizationLevel.SITE);
|
LocalizationType.COMMON_STATIC, LocalizationLevel.SITE);
|
||||||
LocalizationFile priorityRulesLocFile = pm.getLocalizationFile(context,
|
|
||||||
this.PRIORITY_RULE_FILE);
|
|
||||||
|
|
||||||
try {
|
priorityRulesLocFile = pm.getLocalizationFile(context,
|
||||||
|
this.PRIORITY_RULE_FILE);
|
||||||
|
addPriorityRulesFileObserver();
|
||||||
marshaller.marshal(xmlObj, priorityRulesLocFile.getFile());
|
marshaller.marshal(xmlObj, priorityRulesLocFile.getFile());
|
||||||
priorityRulesLocFile.save();
|
return priorityRulesLocFile.save();
|
||||||
return true;
|
}
|
||||||
} catch (JAXBException e) {
|
} catch (JAXBException e) {
|
||||||
statusHandler.handle(Priority.ERROR, e.getLocalizedMessage(), e);
|
statusHandler.handle(Priority.ERROR, e.getLocalizedMessage(), e);
|
||||||
} catch (LocalizationOpFailedException e) {
|
} catch (LocalizationOpFailedException e) {
|
||||||
|
@ -231,15 +256,22 @@ public class SystemRuleManager {
|
||||||
public boolean saveLatencyRules(LatencyRulesXML xmlObj) {
|
public boolean saveLatencyRules(LatencyRulesXML xmlObj) {
|
||||||
IPathManager pm = PathManagerFactory.getPathManager();
|
IPathManager pm = PathManagerFactory.getPathManager();
|
||||||
|
|
||||||
|
try {
|
||||||
|
// If site, then write out, otherwise save it as site.
|
||||||
|
if (latencyRulesLocFile.getContext().getLocalizationLevel()
|
||||||
|
.equals(LocalizationLevel.SITE)) {
|
||||||
|
marshaller.marshal(xmlObj, latencyRulesLocFile.getFile());
|
||||||
|
return latencyRulesLocFile.save();
|
||||||
|
} else {
|
||||||
LocalizationContext context = pm.getContext(
|
LocalizationContext context = pm.getContext(
|
||||||
LocalizationType.COMMON_STATIC, LocalizationLevel.SITE);
|
LocalizationType.COMMON_STATIC, LocalizationLevel.SITE);
|
||||||
LocalizationFile latencyRulesLocFile = pm.getLocalizationFile(context,
|
|
||||||
this.LATENCY_RULE_FILE);
|
|
||||||
|
|
||||||
try {
|
latencyRulesLocFile = pm.getLocalizationFile(context,
|
||||||
|
this.LATENCY_RULE_FILE);
|
||||||
|
addLatencyRulesFileObserver();
|
||||||
marshaller.marshal(xmlObj, latencyRulesLocFile.getFile());
|
marshaller.marshal(xmlObj, latencyRulesLocFile.getFile());
|
||||||
latencyRulesLocFile.save();
|
return latencyRulesLocFile.save();
|
||||||
return true;
|
}
|
||||||
} catch (JAXBException e) {
|
} catch (JAXBException e) {
|
||||||
statusHandler.handle(Priority.ERROR, e.getLocalizedMessage(), e);
|
statusHandler.handle(Priority.ERROR, e.getLocalizedMessage(), e);
|
||||||
} catch (LocalizationOpFailedException e) {
|
} catch (LocalizationOpFailedException e) {
|
||||||
|
@ -256,7 +288,7 @@ public class SystemRuleManager {
|
||||||
* the rule name to delete
|
* the rule name to delete
|
||||||
*/
|
*/
|
||||||
public void deleteLatencyRule(String ruleName) {
|
public void deleteLatencyRule(String ruleName) {
|
||||||
LatencyRulesXML latencyRules = getLatencyRules();
|
LatencyRulesXML latencyRules = getLatencyRules(false);
|
||||||
|
|
||||||
for (LatencyRuleXML rule : latencyRules.getRules()) {
|
for (LatencyRuleXML rule : latencyRules.getRules()) {
|
||||||
if (rule.getRuleName().equals(ruleName)) {
|
if (rule.getRuleName().equals(ruleName)) {
|
||||||
|
@ -274,7 +306,7 @@ public class SystemRuleManager {
|
||||||
* the rule name to delete
|
* the rule name to delete
|
||||||
*/
|
*/
|
||||||
public void deletePriorityRule(String ruleName) {
|
public void deletePriorityRule(String ruleName) {
|
||||||
PriorityRulesXML priorityRules = getPriorityRules();
|
PriorityRulesXML priorityRules = getPriorityRules(false);
|
||||||
|
|
||||||
for (PriorityRuleXML rule : priorityRules.getRules()) {
|
for (PriorityRuleXML rule : priorityRules.getRules()) {
|
||||||
if (rule.getRuleName().equals(ruleName)) {
|
if (rule.getRuleName().equals(ruleName)) {
|
||||||
|
@ -293,7 +325,7 @@ public class SystemRuleManager {
|
||||||
* @return true if updated
|
* @return true if updated
|
||||||
*/
|
*/
|
||||||
public boolean updateRule(LatencyRuleXML rule) {
|
public boolean updateRule(LatencyRuleXML rule) {
|
||||||
LatencyRulesXML rulesXml = getLatencyRules();
|
LatencyRulesXML rulesXml = getLatencyRules(false);
|
||||||
boolean saved = rulesXml.updateRule(rule);
|
boolean saved = rulesXml.updateRule(rule);
|
||||||
if (saved) {
|
if (saved) {
|
||||||
return saveLatencyRules(rulesXml);
|
return saveLatencyRules(rulesXml);
|
||||||
|
@ -310,7 +342,7 @@ public class SystemRuleManager {
|
||||||
* @return true if updated
|
* @return true if updated
|
||||||
*/
|
*/
|
||||||
public boolean updateRule(PriorityRuleXML rule) {
|
public boolean updateRule(PriorityRuleXML rule) {
|
||||||
PriorityRulesXML rulesXml = getPriorityRules();
|
PriorityRulesXML rulesXml = getPriorityRules(false);
|
||||||
boolean saved = rulesXml.updateRule(rule);
|
boolean saved = rulesXml.updateRule(rule);
|
||||||
if (saved) {
|
if (saved) {
|
||||||
saved = savePriorityRules(rulesXml);
|
saved = savePriorityRules(rulesXml);
|
||||||
|
@ -331,7 +363,7 @@ public class SystemRuleManager {
|
||||||
* @return true if updated
|
* @return true if updated
|
||||||
*/
|
*/
|
||||||
public boolean saveRule(PriorityRuleXML rule) {
|
public boolean saveRule(PriorityRuleXML rule) {
|
||||||
PriorityRulesXML rulesXml = getPriorityRules();
|
PriorityRulesXML rulesXml = getPriorityRules(false);
|
||||||
boolean saved = rulesXml.addRule(rule);
|
boolean saved = rulesXml.addRule(rule);
|
||||||
if (saved) {
|
if (saved) {
|
||||||
saved = savePriorityRules(rulesXml);
|
saved = savePriorityRules(rulesXml);
|
||||||
|
@ -352,7 +384,7 @@ public class SystemRuleManager {
|
||||||
* @return true if updated
|
* @return true if updated
|
||||||
*/
|
*/
|
||||||
public boolean saveRule(LatencyRuleXML rule) {
|
public boolean saveRule(LatencyRuleXML rule) {
|
||||||
LatencyRulesXML rulesXml = getLatencyRules();
|
LatencyRulesXML rulesXml = getLatencyRules(false);
|
||||||
boolean saved = rulesXml.addRule(rule);
|
boolean saved = rulesXml.addRule(rule);
|
||||||
if (saved) {
|
if (saved) {
|
||||||
saved = saveLatencyRules(rulesXml);
|
saved = saveLatencyRules(rulesXml);
|
||||||
|
@ -368,19 +400,23 @@ public class SystemRuleManager {
|
||||||
/**
|
/**
|
||||||
* Get the latency rules.
|
* Get the latency rules.
|
||||||
*
|
*
|
||||||
|
* @param reread
|
||||||
|
* true to reread the file from disk
|
||||||
|
*
|
||||||
* @return The latency rules xml object
|
* @return The latency rules xml object
|
||||||
*/
|
*/
|
||||||
private LatencyRulesXML getLatencyRules() {
|
private LatencyRulesXML getLatencyRules(boolean reread) {
|
||||||
LocalizationFile lfile = getRules(this.LATENCY_RULE_FILE);
|
if (latencyRules == null || reread) {
|
||||||
|
if (this.latencyRulesLocFile != null
|
||||||
LatencyRulesXML latencyRules = new LatencyRulesXML();
|
&& latencyRulesLocFile.exists()) {
|
||||||
if (lfile != null && lfile.exists()) {
|
|
||||||
try {
|
try {
|
||||||
latencyRules = (LatencyRulesXML) unmarshaller.unmarshal(lfile
|
latencyRules = (LatencyRulesXML) unmarshaller
|
||||||
.getFile());
|
.unmarshal(latencyRulesLocFile.getFile());
|
||||||
} catch (JAXBException e) {
|
} catch (JAXBException e) {
|
||||||
statusHandler
|
statusHandler.handle(Priority.ERROR,
|
||||||
.handle(Priority.ERROR, e.getLocalizedMessage(), e);
|
e.getLocalizedMessage(), e);
|
||||||
|
latencyRules = new LatencyRulesXML();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -390,34 +426,26 @@ public class SystemRuleManager {
|
||||||
/**
|
/**
|
||||||
* Get the priority rules
|
* Get the priority rules
|
||||||
*
|
*
|
||||||
|
* @param reread
|
||||||
|
* true to reread the file from disk
|
||||||
|
*
|
||||||
* @return The priority rules xml object
|
* @return The priority rules xml object
|
||||||
*/
|
*/
|
||||||
private PriorityRulesXML getPriorityRules() {
|
private PriorityRulesXML getPriorityRules(boolean reread) {
|
||||||
LocalizationFile lfile = getRules(this.PRIORITY_RULE_FILE);
|
if (priorityRules == null || reread)
|
||||||
|
if (this.priorityRulesLocFile != null
|
||||||
PriorityRulesXML priorityRules = new PriorityRulesXML();
|
&& priorityRulesLocFile.exists()) {
|
||||||
if (lfile != null && lfile.exists()) {
|
|
||||||
try {
|
try {
|
||||||
priorityRules = (PriorityRulesXML) unmarshaller.unmarshal(lfile
|
priorityRules = (PriorityRulesXML) unmarshaller
|
||||||
.getFile());
|
.unmarshal(priorityRulesLocFile.getFile());
|
||||||
} catch (JAXBException e) {
|
} catch (JAXBException e) {
|
||||||
statusHandler
|
statusHandler.handle(Priority.ERROR,
|
||||||
.handle(Priority.ERROR, e.getLocalizedMessage(), e);
|
e.getLocalizedMessage(), e);
|
||||||
|
priorityRules = new PriorityRulesXML();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return priorityRules;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
return priorityRules;
|
||||||
* Get the rules files
|
|
||||||
*
|
|
||||||
* @param name
|
|
||||||
* Rules file name to get
|
|
||||||
* @return The localization file
|
|
||||||
*/
|
|
||||||
private LocalizationFile getRules(String name) {
|
|
||||||
IPathManager pm = PathManagerFactory.getPathManager();
|
|
||||||
return pm.getStaticLocalizationFile(name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -442,7 +470,7 @@ public class SystemRuleManager {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public int getLatency(Subscription sub, Set<Integer> cycleTimes) {
|
public int getLatency(Subscription sub, Set<Integer> cycleTimes) {
|
||||||
LatencyRulesXML rulesXml = this.getLatencyRules();
|
LatencyRulesXML rulesXml = this.getLatencyRules(false);
|
||||||
int latency = 999;
|
int latency = 999;
|
||||||
boolean found = false;
|
boolean found = false;
|
||||||
for (LatencyRuleXML rule : rulesXml.getRules()) {
|
for (LatencyRuleXML rule : rulesXml.getRules()) {
|
||||||
|
@ -471,7 +499,7 @@ public class SystemRuleManager {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public int getPriority(Subscription sub, Set<Integer> cycleTimes) {
|
public int getPriority(Subscription sub, Set<Integer> cycleTimes) {
|
||||||
PriorityRulesXML rulesXml = this.getPriorityRules();
|
PriorityRulesXML rulesXml = this.getPriorityRules(false);
|
||||||
int priority = 3;
|
int priority = 3;
|
||||||
boolean found = false;
|
boolean found = false;
|
||||||
for (PriorityRuleXML rule : rulesXml.getRules()) {
|
for (PriorityRuleXML rule : rulesXml.getRules()) {
|
||||||
|
@ -546,4 +574,87 @@ public class SystemRuleManager {
|
||||||
return getInstance().bandwidthService
|
return getInstance().bandwidthService
|
||||||
.setBandwidthForNetworkInKilobytes(network, bandwidth);
|
.setBandwidthForNetworkInKilobytes(network, bandwidth);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read the latency rules file.
|
||||||
|
*/
|
||||||
|
private void loadLatencyRules() {
|
||||||
|
IPathManager pm = PathManagerFactory.getPathManager();
|
||||||
|
this.latencyRulesLocFile = pm
|
||||||
|
.getStaticLocalizationFile(this.LATENCY_RULE_FILE);
|
||||||
|
addLatencyRulesFileObserver();
|
||||||
|
getLatencyRules(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load the priority rules file.
|
||||||
|
*/
|
||||||
|
private void loadPriorityRules() {
|
||||||
|
IPathManager pm = PathManagerFactory.getPathManager();
|
||||||
|
this.priorityRulesLocFile = pm
|
||||||
|
.getStaticLocalizationFile(this.PRIORITY_RULE_FILE);
|
||||||
|
addPriorityRulesFileObserver();
|
||||||
|
getPriorityRules(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a file observer to the latency rules file to get notified when the
|
||||||
|
* file changes.
|
||||||
|
*/
|
||||||
|
private void addLatencyRulesFileObserver() {
|
||||||
|
latencyRulesLocFile
|
||||||
|
.addFileUpdatedObserver(new ILocalizationFileObserver() {
|
||||||
|
@Override
|
||||||
|
public void fileUpdated(FileUpdatedMessage message) {
|
||||||
|
loadLatencyRules();
|
||||||
|
fireUpdates();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a file observer to the priority rules file to get notified when the
|
||||||
|
* file changes.
|
||||||
|
*/
|
||||||
|
private void addPriorityRulesFileObserver() {
|
||||||
|
priorityRulesLocFile
|
||||||
|
.addFileUpdatedObserver(new ILocalizationFileObserver() {
|
||||||
|
@Override
|
||||||
|
public void fileUpdated(FileUpdatedMessage message) {
|
||||||
|
loadPriorityRules();
|
||||||
|
fireUpdates();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notify the listeners the files changed.
|
||||||
|
*/
|
||||||
|
private void fireUpdates() {
|
||||||
|
for (IRulesUpdateListener listener : listeners) {
|
||||||
|
listener.update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register as a listener for rules file changes.
|
||||||
|
*
|
||||||
|
* @param listener
|
||||||
|
*/
|
||||||
|
public void registerAsListener(IRulesUpdateListener listener) {
|
||||||
|
if (!listeners.contains(listener)) {
|
||||||
|
listeners.add(listener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unregister as a listener for rules files changed.
|
||||||
|
*
|
||||||
|
* @param listener
|
||||||
|
*/
|
||||||
|
public void deregisterAsListener(IRulesUpdateListener listener) {
|
||||||
|
if (listeners.contains(listener)) {
|
||||||
|
listeners.remove(listener);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,7 +68,8 @@ import com.raytheon.viz.ui.widgets.duallist.ButtonImages.ButtonImage;
|
||||||
*
|
*
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Oct 3, 2012 728 mpduff Initial creation
|
* Oct 03, 2012 728 mpduff Initial creation.
|
||||||
|
* Jan 18, 2013 1386 mpduff Change menu text.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -315,7 +316,7 @@ public class StatsGraphDlg extends CaveSWTDialog implements IStatsDisplay,
|
||||||
fileMenuItem.setMenu(fileMenu);
|
fileMenuItem.setMenu(fileMenu);
|
||||||
|
|
||||||
saveMI = new MenuItem(fileMenu, SWT.NONE);
|
saveMI = new MenuItem(fileMenu, SWT.NONE);
|
||||||
saveMI.setText("&Save\tCtrl+S");
|
saveMI.setText("&Save Graph Image\tCtrl+S");
|
||||||
saveMI.setAccelerator(SWT.CTRL + 'S');
|
saveMI.setAccelerator(SWT.CTRL + 'S');
|
||||||
saveMI.addSelectionListener(new SelectionAdapter() {
|
saveMI.addSelectionListener(new SelectionAdapter() {
|
||||||
@Override
|
@Override
|
||||||
|
|
23
deltaScripts/13.2.1/aggregateRecordGroupingLength.sh
Normal file
23
deltaScripts/13.2.1/aggregateRecordGroupingLength.sh
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SQL_SCRIPT="increaseAggregateRecordGroupingLength.sql"
|
||||||
|
|
||||||
|
# ensure that the sql script is present
|
||||||
|
if [ ! -f ${SQL_SCRIPT} ]; then
|
||||||
|
echo "ERROR: the required sql script - ${SQL_SCRIPT} was not found."
|
||||||
|
echo "FATAL: the update has failed!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "INFO: update started - increasing the size of the aggregate.grouping column"
|
||||||
|
|
||||||
|
# run the update
|
||||||
|
/awips2/psql/bin/psql -U awips -d metadata -f ${SQL_SCRIPT}
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "FATAL: the update has failed!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "INFO: the update has completed successfully!"
|
||||||
|
|
||||||
|
exit 0
|
23
deltaScripts/13.2.1/convertAggregateRecordGroupToXml.sh
Normal file
23
deltaScripts/13.2.1/convertAggregateRecordGroupToXml.sh
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SQL_SCRIPT="convertAggregateRecordGroupToXml.sql"
|
||||||
|
|
||||||
|
# ensure that the sql script is present
|
||||||
|
if [ ! -f ${SQL_SCRIPT} ]; then
|
||||||
|
echo "ERROR: the required sql script - ${SQL_SCRIPT} was not found."
|
||||||
|
echo "FATAL: the update has failed!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "INFO: update started - converting the aggregate.grouping column to xml"
|
||||||
|
|
||||||
|
# run the update
|
||||||
|
/awips2/psql/bin/psql -U awips -d metadata -f ${SQL_SCRIPT}
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "FATAL: the update has failed!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "INFO: the update has completed successfully!"
|
||||||
|
|
||||||
|
exit 0
|
38
deltaScripts/13.2.1/convertAggregateRecordGroupToXml.sql
Normal file
38
deltaScripts/13.2.1/convertAggregateRecordGroupToXml.sql
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
**/
|
||||||
|
\set ON_ERROR_STOP 1
|
||||||
|
\connect metadata;
|
||||||
|
|
||||||
|
-- Start a transaction
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
-- Temporarily replace dashes in pluginName rows with @@@
|
||||||
|
update events.aggregate set grouping = regexp_replace(grouping, 'pluginName:(.*?)-(.*)', E'pluginName:\\1@@@\\2', 'g');
|
||||||
|
|
||||||
|
-- Convert to XML format
|
||||||
|
update events.aggregate set grouping = regexp_replace(grouping, ':', '" value="', 'g');
|
||||||
|
update events.aggregate set grouping = regexp_replace(grouping, '-', '"/><group name="', 'g');
|
||||||
|
update events.aggregate set grouping = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><stat><group name="' || grouping || '"/></stat>';
|
||||||
|
|
||||||
|
-- Restore dashes from @@@
|
||||||
|
update events.aggregate set grouping = regexp_replace(grouping, '<group name="(.*?)" value="(.*?)@@@(.*?)"', E'<group name="\\1" value="\\2-\\3"', 'g');
|
||||||
|
|
||||||
|
-- Commit the transaction
|
||||||
|
END;
|
|
@ -0,0 +1,22 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
**/
|
||||||
|
\set ON_ERROR_STOP 1
|
||||||
|
\connect metadata;
|
||||||
|
ALTER TABLE events.aggregate ALTER COLUMN grouping TYPE varchar(1024);
|
|
@ -0,0 +1,80 @@
|
||||||
|
##
|
||||||
|
# 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.
|
||||||
|
##
|
||||||
|
|
||||||
|
#
|
||||||
|
# Provides Java implementations of common smart utility functions
|
||||||
|
# to boost performance.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# SOFTWARE HISTORY
|
||||||
|
#
|
||||||
|
# Date Ticket# Engineer Description
|
||||||
|
# ------------ ---------- ----------- --------------------------
|
||||||
|
# 01/14/13 njensen Initial Creation.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
import jep
|
||||||
|
from com.raytheon.uf.common.dataplugin.gfe.util import SmartUtils as JavaSmartUtils
|
||||||
|
import numpy
|
||||||
|
|
||||||
|
|
||||||
|
def __getMaskIndiciesForJava(mask):
|
||||||
|
flatMask = mask.flat #flatten the array
|
||||||
|
flatIndicies = numpy.nonzero(flatMask) # get the indicies of the set cells
|
||||||
|
ysize = mask.shape[1]
|
||||||
|
indexes = []
|
||||||
|
# convert the flat incicies to the x, y indicies
|
||||||
|
for i in flatIndicies:
|
||||||
|
indexes.append((i / ysize, i % ysize))
|
||||||
|
|
||||||
|
# Make two new jarrays to hold the final coordinate tuples
|
||||||
|
size = len(indexes[0][0])
|
||||||
|
xcoords = jep.jarray(size, jep.JINT_ID)
|
||||||
|
ycoords = jep.jarray(size, jep.JINT_ID)
|
||||||
|
|
||||||
|
#===================================================================
|
||||||
|
# Convert the coordinates from a tuple of numpy arrays to a list of
|
||||||
|
# coordinate tuples
|
||||||
|
|
||||||
|
for index in xrange(size):
|
||||||
|
try:
|
||||||
|
x = indexes[0][0][index]
|
||||||
|
y = indexes[0][1][index]
|
||||||
|
xcoords[index] = int(x)
|
||||||
|
ycoords[index] = int(y)
|
||||||
|
except Exception, e:
|
||||||
|
print e
|
||||||
|
|
||||||
|
return xcoords, ycoords
|
||||||
|
|
||||||
|
|
||||||
|
def fillEditArea(grid, fillMask, borderMask):
|
||||||
|
editPointsX, editPointsY = __getMaskIndiciesForJava(fillMask)
|
||||||
|
borderPointsX, borderPointsY = __getMaskIndiciesForJava(borderMask)
|
||||||
|
|
||||||
|
gridObj = JavaSmartUtils.fillEditArea(grid, grid.shape[1], grid.shape[0], \
|
||||||
|
editPointsY, editPointsX, borderPointsY, borderPointsX)
|
||||||
|
|
||||||
|
retObj = gridObj.__numpy__[0]
|
||||||
|
return retObj
|
||||||
|
|
||||||
|
|
|
@ -593,19 +593,19 @@ class GribDecoder():
|
||||||
|
|
||||||
# Special case handling for specific PDS Templates
|
# Special case handling for specific PDS Templates
|
||||||
if pdsTemplateNumber == 1 or pdsTemplateNumber == 11:
|
if pdsTemplateNumber == 1 or pdsTemplateNumber == 11:
|
||||||
typeEnsemble = Integer(pdsTemplate[15])
|
typeEnsemble = Integer(pdsTemplate[15]).intValue()
|
||||||
perturbationNumber = Integer(pdsTemplate[16])
|
perturbationNumber = Integer(pdsTemplate[16]).intValue()
|
||||||
pdsFields['numForecasts'] = Integer(pdsTemplate[17])
|
pdsFields['numForecasts'] = Integer(pdsTemplate[17])
|
||||||
if(typeEnsemble == 0):
|
if(typeEnsemble == 0):
|
||||||
pdsFields['ensembleId'] = "ctlh" + perturbationNumber;
|
pdsFields['ensembleId'] = "ctlh" + str(perturbationNumber);
|
||||||
elif(typeEnsemble == 1):
|
elif(typeEnsemble == 1):
|
||||||
pdsFields['ensembleId'] = "ctll" + perturbationNumber;
|
pdsFields['ensembleId'] = "ctll" + str(perturbationNumber);
|
||||||
elif(typeEnsemble == 2):
|
elif(typeEnsemble == 2):
|
||||||
pdsFields['ensembleId'] = "n" + perturbationNumber;
|
pdsFields['ensembleId'] = "n" + str(perturbationNumber);
|
||||||
elif(typeEnsemble == 3):
|
elif(typeEnsemble == 3):
|
||||||
pdsFields['ensembleId'] = "p" + perturbationNumber;
|
pdsFields['ensembleId'] = "p" + str(perturbationNumber);
|
||||||
else:
|
else:
|
||||||
pdsFields['ensembleId'] = typeEnsemble + "." + perturbationNumber;
|
pdsFields['ensembleId'] = str(typeEnsemble) + "." + str(perturbationNumber);
|
||||||
|
|
||||||
if pdsTemplateNumber == 11:
|
if pdsTemplateNumber == 11:
|
||||||
endTime = GregorianCalendar(pdsTemplate[18], pdsTemplate[19] - 1, pdsTemplate[20], pdsTemplate[21], pdsTemplate[22], pdsTemplate[23])
|
endTime = GregorianCalendar(pdsTemplate[18], pdsTemplate[19] - 1, pdsTemplate[20], pdsTemplate[21], pdsTemplate[22], pdsTemplate[23])
|
||||||
|
|
|
@ -22,6 +22,7 @@ package com.raytheon.edex.plugin.radar;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -95,6 +96,30 @@ public class RadarDecoder extends AbstractDecoder {
|
||||||
private static final IUFStatusHandler theHandler = UFStatus
|
private static final IUFStatusHandler theHandler = UFStatus
|
||||||
.getHandler(RadarDecoder.class);
|
.getHandler(RadarDecoder.class);
|
||||||
|
|
||||||
|
// radar server sends messages from edex to cave, handle that here
|
||||||
|
private final String EDEX = "EDEX";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Constants having to do with certain products
|
||||||
|
*/
|
||||||
|
|
||||||
|
private final List<String> LEVEL_TWO_IDENTS = new ArrayList<String>(
|
||||||
|
Arrays.asList("ARCH", "AR2V"));
|
||||||
|
|
||||||
|
private final String NOUS = "NOUS";
|
||||||
|
|
||||||
|
private final int USER_ALERT_MESSAGE = 73;
|
||||||
|
|
||||||
|
private final int FREE_TEXT_MESSAGE = 75;
|
||||||
|
|
||||||
|
private final int USER_SELECT_ACCUM = 173;
|
||||||
|
|
||||||
|
private final int CLUTTER_FILTER_CONTROL = 34;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* End constants
|
||||||
|
*/
|
||||||
|
|
||||||
private String traceId = "";
|
private String traceId = "";
|
||||||
|
|
||||||
private RadarInfoDict infoDict;
|
private RadarInfoDict infoDict;
|
||||||
|
@ -103,9 +128,6 @@ public class RadarDecoder extends AbstractDecoder {
|
||||||
|
|
||||||
private final String RADAR = "RADAR";
|
private final String RADAR = "RADAR";
|
||||||
|
|
||||||
// radar server sends messages from edex to cave, handle that here
|
|
||||||
private final String EDEX = "EDEX";
|
|
||||||
|
|
||||||
public RadarDecoder() throws DecoderException {
|
public RadarDecoder() throws DecoderException {
|
||||||
|
|
||||||
String dir = "";
|
String dir = "";
|
||||||
|
@ -146,11 +168,11 @@ public class RadarDecoder extends AbstractDecoder {
|
||||||
String arch = new String(messageData, 0, 4);
|
String arch = new String(messageData, 0, 4);
|
||||||
try {
|
try {
|
||||||
// for level2 data, this does not happen very often
|
// for level2 data, this does not happen very often
|
||||||
if ("ARCH".equals(arch) || "AR2V".equals(arch)) {
|
if (LEVEL_TWO_IDENTS.contains(arch)) {
|
||||||
decodeLevelTwoData(messageData, recordList);
|
decodeLevelTwoData(messageData, recordList);
|
||||||
}
|
}
|
||||||
// for free text messages, which come in with the following wmo
|
// for free text messages, which come in with the following wmo
|
||||||
else if ("NOUS".equals(arch)) {
|
else if (NOUS.equals(arch)) {
|
||||||
decodeFreeTextMessage(messageData, headers);
|
decodeFreeTextMessage(messageData, headers);
|
||||||
} else {
|
} else {
|
||||||
if (headers.get("header") != null) {
|
if (headers.get("header") != null) {
|
||||||
|
@ -208,24 +230,19 @@ public class RadarDecoder extends AbstractDecoder {
|
||||||
|
|
||||||
// -- some product specific decode functionality --
|
// -- some product specific decode functionality --
|
||||||
// the general status message product
|
// the general status message product
|
||||||
if (l3Radar.getMessageCode() == 2) {
|
if (l3Radar.getMessageCode() == l3Radar.GSM_MESSAGE) {
|
||||||
record.setGsmMessage(l3Radar.getGsmBlock().getMessage());
|
record.setGsmMessage(l3Radar.getGsmBlock().getMessage());
|
||||||
record.setPrimaryElevationAngle(0.0);
|
record.setPrimaryElevationAngle(0.0);
|
||||||
record.setTrueElevationAngle(0.0f);
|
record.setTrueElevationAngle(0.0f);
|
||||||
handleRadarStatus(record);
|
handleRadarStatus(record);
|
||||||
}
|
}
|
||||||
// the product request response product
|
// the product request response product
|
||||||
else if (l3Radar.getMessageCode() == 3) {
|
else if (l3Radar.getMessageCode() == l3Radar.PRODUCT_REQUEST_RESPONSE_MESSAGE) {
|
||||||
// do nothing with this, it will get excessive otherwise!
|
// do nothing with this, it will get excessive otherwise!
|
||||||
// EDEXUtil.sendMessageAlertViz(Priority.VERBOSE,
|
|
||||||
// RadarConstants.PLUGIN_ID, EDEX, RADAR,
|
|
||||||
// record.getIcao()
|
|
||||||
// + ": Response Request Message Received",
|
|
||||||
// l3Radar.getRequestResponseMessage(), null);
|
|
||||||
return new PluginDataObject[0];
|
return new PluginDataObject[0];
|
||||||
}
|
}
|
||||||
// the user alert message product
|
// the user alert message product
|
||||||
else if (l3Radar.getMessageCode() == 73) {
|
else if (l3Radar.getMessageCode() == USER_ALERT_MESSAGE) {
|
||||||
EDEXUtil.sendMessageAlertViz(Priority.VERBOSE,
|
EDEXUtil.sendMessageAlertViz(Priority.VERBOSE,
|
||||||
RadarConstants.PLUGIN_ID, EDEX, RADAR,
|
RadarConstants.PLUGIN_ID, EDEX, RADAR,
|
||||||
record.getIcao() + ": User Alert Message Received",
|
record.getIcao() + ": User Alert Message Received",
|
||||||
|
@ -233,21 +250,19 @@ public class RadarDecoder extends AbstractDecoder {
|
||||||
return new PluginDataObject[0];
|
return new PluginDataObject[0];
|
||||||
}
|
}
|
||||||
// handle the other case for free text message
|
// handle the other case for free text message
|
||||||
else if (l3Radar.getMessageCode() == 75) {
|
else if (l3Radar.getMessageCode() == FREE_TEXT_MESSAGE) {
|
||||||
// product already stored to the text database, so just send
|
// product already stored to the text database, so just send
|
||||||
// to alertviz
|
// to alertviz
|
||||||
EDEXUtil.sendMessageAlertViz(
|
String formattedMsg = l3Radar.getTabularBlock().toString()
|
||||||
Priority.SIGNIFICANT,
|
.replace("Page 1\n\t", "");
|
||||||
RadarConstants.PLUGIN_ID,
|
EDEXUtil.sendMessageAlertViz(Priority.SIGNIFICANT,
|
||||||
EDEX,
|
RadarConstants.PLUGIN_ID, EDEX, RADAR,
|
||||||
RADAR,
|
|
||||||
record.getIcao() + ": Free Text Message Received",
|
record.getIcao() + ": Free Text Message Received",
|
||||||
l3Radar.getTabularBlock().toString()
|
formattedMsg, null);
|
||||||
.replace("Page 1\n\t", ""), null);
|
|
||||||
return new PluginDataObject[0];
|
return new PluginDataObject[0];
|
||||||
}
|
}
|
||||||
// the alert adaptations parameters product
|
// the alert adaptations parameters product
|
||||||
else if (l3Radar.getMessageCode() == 6) {
|
else if (l3Radar.getMessageCode() == l3Radar.ALERT_ADAPTATION_PARAMETERS) {
|
||||||
record.setAapMessage(l3Radar.getAapMessage());
|
record.setAapMessage(l3Radar.getAapMessage());
|
||||||
record.setPrimaryElevationAngle(0.0);
|
record.setPrimaryElevationAngle(0.0);
|
||||||
record.setTrueElevationAngle(0.0f);
|
record.setTrueElevationAngle(0.0f);
|
||||||
|
@ -261,7 +276,7 @@ public class RadarDecoder extends AbstractDecoder {
|
||||||
l3Radar.getAapMessage().toString(), null);
|
l3Radar.getAapMessage().toString(), null);
|
||||||
}
|
}
|
||||||
// the alert message product
|
// the alert message product
|
||||||
else if (l3Radar.getMessageCode() == 9) {
|
else if (l3Radar.getMessageCode() == l3Radar.ALERT_MESSAGE) {
|
||||||
record.setPrimaryElevationAngle(0.0);
|
record.setPrimaryElevationAngle(0.0);
|
||||||
record.setTrueElevationAngle(0.0f);
|
record.setTrueElevationAngle(0.0f);
|
||||||
AlertMessage msg = l3Radar.getAlertMessage();
|
AlertMessage msg = l3Radar.getAlertMessage();
|
||||||
|
@ -291,6 +306,8 @@ public class RadarDecoder extends AbstractDecoder {
|
||||||
record.setOperationalMode(l3Radar.getOperationalMode());
|
record.setOperationalMode(l3Radar.getOperationalMode());
|
||||||
|
|
||||||
record.setElevationNumber(l3Radar.getElevationNumber());
|
record.setElevationNumber(l3Radar.getElevationNumber());
|
||||||
|
// some products don't have real elevation angles, 0 is a
|
||||||
|
// default value
|
||||||
if (record.getElevationNumber() == 0) {
|
if (record.getElevationNumber() == 0) {
|
||||||
record.setTrueElevationAngle(0f);
|
record.setTrueElevationAngle(0f);
|
||||||
} else {
|
} else {
|
||||||
|
@ -320,13 +337,13 @@ public class RadarDecoder extends AbstractDecoder {
|
||||||
}
|
}
|
||||||
|
|
||||||
// code specific for clutter filter control
|
// code specific for clutter filter control
|
||||||
if (record.getProductCode() == 34) {
|
if (record.getProductCode() == CLUTTER_FILTER_CONTROL) {
|
||||||
int segment = ((int) (Math.log(l3Radar
|
int segment = ((int) (Math.log(l3Radar
|
||||||
.getProductDependentValue(0)) / Math.log(2)));
|
.getProductDependentValue(0)) / Math.log(2)));
|
||||||
record.setLayer((double) segment);
|
record.setLayer((double) segment);
|
||||||
}
|
}
|
||||||
// code specific for user select accum
|
// code specific for user select accum
|
||||||
else if (record.getProductCode() == 173) {
|
else if (record.getProductCode() == USER_SELECT_ACCUM) {
|
||||||
int layer = 0; // Default to zero
|
int layer = 0; // Default to zero
|
||||||
|
|
||||||
int timeSpan = l3Radar.getProductDependentValue(1);
|
int timeSpan = l3Radar.getProductDependentValue(1);
|
||||||
|
@ -491,7 +508,8 @@ public class RadarDecoder extends AbstractDecoder {
|
||||||
|
|
||||||
String[] splits = temp.split(" ");
|
String[] splits = temp.split(" ");
|
||||||
AFOSProductId afos = new AFOSProductId(
|
AFOSProductId afos = new AFOSProductId(
|
||||||
RadarTextProductUtil.createAfosId(75, splits[1].substring(1)));
|
RadarTextProductUtil.createAfosId(FREE_TEXT_MESSAGE,
|
||||||
|
splits[1].substring(1)));
|
||||||
|
|
||||||
// store the product to the text database
|
// store the product to the text database
|
||||||
Calendar cal = (TimeTools.allowArchive() ? header.getHeaderDate()
|
Calendar cal = (TimeTools.allowArchive() ? header.getHeaderDate()
|
||||||
|
@ -510,7 +528,9 @@ public class RadarDecoder extends AbstractDecoder {
|
||||||
record.setPluginName("radar");
|
record.setPluginName("radar");
|
||||||
record.constructDataURI();
|
record.constructDataURI();
|
||||||
record.setInsertTime(TimeTools.getSystemCalendar());
|
record.setInsertTime(TimeTools.getSystemCalendar());
|
||||||
if (record.getProductCode() == 2) {
|
// for GSM, we want all the messages as they have the possibility of
|
||||||
|
// being different
|
||||||
|
if (record.getProductCode() == Level3BaseRadar.GSM_MESSAGE) {
|
||||||
record.setOverwriteAllowed(true);
|
record.setOverwriteAllowed(true);
|
||||||
} else {
|
} else {
|
||||||
record.setOverwriteAllowed(false);
|
record.setOverwriteAllowed(false);
|
||||||
|
@ -669,7 +689,8 @@ public class RadarDecoder extends AbstractDecoder {
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
theHandler.handle(Priority.ERROR,
|
||||||
|
"Unable to query for the radar station", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return station;
|
return station;
|
||||||
|
|
|
@ -28,6 +28,7 @@ import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -178,6 +179,21 @@ public class Level3BaseRadar {
|
||||||
|
|
||||||
private RadarInfoDict dict = null;
|
private RadarInfoDict dict = null;
|
||||||
|
|
||||||
|
private final List<Integer> SPECIAL_PRODS = new ArrayList<Integer>(
|
||||||
|
Arrays.asList(73, 62, 75, 77, 82));
|
||||||
|
|
||||||
|
public static final int GSM_MESSAGE = 2;
|
||||||
|
|
||||||
|
public final int PRODUCT_REQUEST_RESPONSE_MESSAGE = 3;
|
||||||
|
|
||||||
|
public final int ALERT_ADAPTATION_PARAMETERS = 6;
|
||||||
|
|
||||||
|
public final int PRODUCT_LIST = 8;
|
||||||
|
|
||||||
|
public final int RADAR_CODED_MESSAGE = 74;
|
||||||
|
|
||||||
|
public final int ALERT_MESSAGE = 9;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This baseradar constructor accepts a radar file contained within a
|
* This baseradar constructor accepts a radar file contained within a
|
||||||
* java.io.File object.
|
* java.io.File object.
|
||||||
|
@ -251,16 +267,16 @@ public class Level3BaseRadar {
|
||||||
this.parseRadarHeader();
|
this.parseRadarHeader();
|
||||||
|
|
||||||
// Handle the message contents
|
// Handle the message contents
|
||||||
if (this.theMessageCode == 6) {
|
if (this.theMessageCode == ALERT_ADAPTATION_PARAMETERS) {
|
||||||
// Alert Adaptation Params
|
// Alert Adaptation Params
|
||||||
this.parseAAP();
|
this.parseAAP();
|
||||||
} else if (this.theMessageCode == 3) {
|
} else if (this.theMessageCode == PRODUCT_REQUEST_RESPONSE_MESSAGE) {
|
||||||
this.parseRequestResponse();
|
this.parseRequestResponse();
|
||||||
} else if (this.theMessageCode == 8) {
|
} else if (this.theMessageCode == PRODUCT_LIST) {
|
||||||
this.parseProductList(headers);
|
this.parseProductList(headers);
|
||||||
} else if (this.theMessageCode == 2) {
|
} else if (this.theMessageCode == GSM_MESSAGE) {
|
||||||
this.parseGeneralStatusMessage();
|
this.parseGeneralStatusMessage();
|
||||||
} else if (this.theMessageCode == 9) {
|
} else if (this.theMessageCode == ALERT_MESSAGE) {
|
||||||
this.parseAlertMessage(headers);
|
this.parseAlertMessage(headers);
|
||||||
} else {
|
} else {
|
||||||
this.parseRadarMessage(headers);
|
this.parseRadarMessage(headers);
|
||||||
|
@ -593,8 +609,13 @@ public class Level3BaseRadar {
|
||||||
byte[] buf = new byte[lineLen];
|
byte[] buf = new byte[lineLen];
|
||||||
theRadarData.readFully(buf);
|
theRadarData.readFully(buf);
|
||||||
String temp = new String(buf);
|
String temp = new String(buf);
|
||||||
|
// PSM is found in all products that have useful Site Adaptation
|
||||||
|
// Parameters. For this reason, we are dropping every other set of
|
||||||
|
// Site Adaptation Parameters.
|
||||||
if (temp.contains("PSM")) {
|
if (temp.contains("PSM")) {
|
||||||
temp = temp.substring(temp.indexOf("PSM"));
|
temp = temp.substring(temp.indexOf("PSM"));
|
||||||
|
} else {
|
||||||
|
temp = "";
|
||||||
}
|
}
|
||||||
return temp;
|
return temp;
|
||||||
} else {
|
} else {
|
||||||
|
@ -795,15 +816,13 @@ public class Level3BaseRadar {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.theProductCode == 73 || this.theProductCode == 62
|
if (SPECIAL_PRODS.contains(this.theProductCode)) {
|
||||||
|| this.theProductCode == 75 || this.theProductCode == 77
|
|
||||||
|| this.theProductCode == 82) {
|
|
||||||
// The first offset will be to the tabular block
|
// The first offset will be to the tabular block
|
||||||
tabularBlock = readStandaloneTabular(symbologyBlockOffset);
|
tabularBlock = readStandaloneTabular(symbologyBlockOffset);
|
||||||
// The second offset will be to a symbology block with no header
|
// The second offset will be to a symbology block with no header
|
||||||
symbologyBlock = readPseudoSymbologyBlock(graphicBlockOffset);
|
symbologyBlock = readPseudoSymbologyBlock(graphicBlockOffset);
|
||||||
// tabularBlock.getPages().toString();
|
// tabularBlock.getPages().toString();
|
||||||
} else if (this.theProductCode == 74) {
|
} else if (this.theProductCode == RADAR_CODED_MESSAGE) {
|
||||||
tabularBlock = readRadarCodedMessage(symbologyBlockOffset);
|
tabularBlock = readRadarCodedMessage(symbologyBlockOffset);
|
||||||
} else {
|
} else {
|
||||||
symbologyBlock = readSymbologyBlock(symbologyBlockOffset);
|
symbologyBlock = readSymbologyBlock(symbologyBlockOffset);
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<latencyRules>
|
<latencyRules>
|
||||||
<latencyRule>
|
<rule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="latencyRuleXML">
|
||||||
<ruleField>Dataset Frequency</ruleField>
|
<ruleField>Dataset Frequency</ruleField>
|
||||||
<ruleName>Hourly-Products</ruleName>
|
<ruleName>Hourly-Products</ruleName>
|
||||||
<ruleOperator><=</ruleOperator>
|
<ruleOperator><=</ruleOperator>
|
||||||
<ruleUnit>Hrs</ruleUnit>
|
<ruleUnit>Hrs</ruleUnit>
|
||||||
<ruleValue>1</ruleValue>
|
<ruleValue>1</ruleValue>
|
||||||
<latency>40</latency>
|
<latency>40</latency>
|
||||||
</latencyRule>
|
</rule>
|
||||||
<latencyRule>
|
<rule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="latencyRuleXML">
|
||||||
<ruleField>Dataset Frequency</ruleField>
|
<ruleField>Dataset Frequency</ruleField>
|
||||||
<ruleName>MultiHour-Products</ruleName>
|
<ruleName>MultiHour-Products</ruleName>
|
||||||
<ruleOperator>></ruleOperator>
|
<ruleOperator>></ruleOperator>
|
||||||
<ruleUnit>Hrs</ruleUnit>
|
<ruleUnit>Hrs</ruleUnit>
|
||||||
<ruleValue>1</ruleValue>
|
<ruleValue>1</ruleValue>
|
||||||
<latency>115</latency>
|
<latency>115</latency>
|
||||||
</latencyRule>
|
</rule>
|
||||||
</latencyRules>
|
</latencyRules>
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<priorityRules>
|
||||||
|
|
||||||
|
</priorityRules>
|
|
@ -17,4 +17,5 @@ Require-Bundle: javax.persistence;bundle-version="1.0.0",
|
||||||
com.raytheon.uf.common.event;bundle-version="1.0.0",
|
com.raytheon.uf.common.event;bundle-version="1.0.0",
|
||||||
com.raytheon.uf.common.serialization.comm;bundle-version="1.12.1174",
|
com.raytheon.uf.common.serialization.comm;bundle-version="1.12.1174",
|
||||||
com.raytheon.uf.common.time;bundle-version="1.12.1174",
|
com.raytheon.uf.common.time;bundle-version="1.12.1174",
|
||||||
com.raytheon.uf.common.stats;bundle-version="1.0.0"
|
com.raytheon.uf.common.stats;bundle-version="1.0.0",
|
||||||
|
com.raytheon.uf.common.registry.ebxml;bundle-version="1.0.0"
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
package com.raytheon.uf.common.datadelivery.event.notification;
|
package com.raytheon.uf.common.datadelivery.event.notification;
|
||||||
|
|
||||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||||
|
import com.raytheon.uf.common.datadelivery.registry.handlers.IBaseSubscriptionHandler;
|
||||||
import com.raytheon.uf.common.serialization.ISerializableObject;
|
import com.raytheon.uf.common.serialization.ISerializableObject;
|
||||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
||||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
||||||
|
@ -35,6 +36,7 @@ import com.raytheon.uf.common.serialization.comm.IServerRequest;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Sep 20, 2012 1157 mpduff Initial creation
|
* Sep 20, 2012 1157 mpduff Initial creation
|
||||||
|
* Jan 17, 2013 1501 djohnson Allow a response to specify the subscription handler.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -85,4 +87,11 @@ public abstract class BaseSubscriptionNotificationResponse<T extends Subscriptio
|
||||||
this.subscription = subscription;
|
this.subscription = subscription;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the subscription handler that corresponds to the subscription type
|
||||||
|
* for this notification.
|
||||||
|
*
|
||||||
|
* @return the subscription handler
|
||||||
|
*/
|
||||||
|
public abstract IBaseSubscriptionHandler<T> getSubscriptionHandler();
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
package com.raytheon.uf.common.datadelivery.event.notification;
|
package com.raytheon.uf.common.datadelivery.event.notification;
|
||||||
|
|
||||||
import com.raytheon.uf.common.datadelivery.registry.InitialPendingSubscription;
|
import com.raytheon.uf.common.datadelivery.registry.InitialPendingSubscription;
|
||||||
|
import com.raytheon.uf.common.datadelivery.registry.handlers.DataDeliveryHandlers;
|
||||||
|
import com.raytheon.uf.common.datadelivery.registry.handlers.IBaseSubscriptionHandler;
|
||||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -32,6 +34,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Sep 20, 2012 mpduff Initial creation
|
* Sep 20, 2012 mpduff Initial creation
|
||||||
|
* Jan 17, 2013 1501 djohnson Allow a response to specify the subscription handler.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -42,4 +45,12 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
||||||
public class PendingSubscriptionNotificationResponse extends
|
public class PendingSubscriptionNotificationResponse extends
|
||||||
BaseSubscriptionNotificationResponse<InitialPendingSubscription> {
|
BaseSubscriptionNotificationResponse<InitialPendingSubscription> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public IBaseSubscriptionHandler<InitialPendingSubscription> getSubscriptionHandler() {
|
||||||
|
return DataDeliveryHandlers.getPendingSubscriptionHandler();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
package com.raytheon.uf.common.datadelivery.event.notification;
|
package com.raytheon.uf.common.datadelivery.event.notification;
|
||||||
|
|
||||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||||
|
import com.raytheon.uf.common.datadelivery.registry.handlers.DataDeliveryHandlers;
|
||||||
|
import com.raytheon.uf.common.datadelivery.registry.handlers.IBaseSubscriptionHandler;
|
||||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -33,6 +35,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Jun 25, 2012 mpduff Initial creation.
|
* Jun 25, 2012 mpduff Initial creation.
|
||||||
* Aug 21, 2012 712 mpduff Add a Subscription Object.
|
* Aug 21, 2012 712 mpduff Add a Subscription Object.
|
||||||
|
* Jan 17, 2013 1501 djohnson Allow a response to specify the subscription handler.
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author mpduff
|
* @author mpduff
|
||||||
|
@ -41,4 +44,12 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
||||||
@DynamicSerialize
|
@DynamicSerialize
|
||||||
public class SubscriptionNotificationResponse extends
|
public class SubscriptionNotificationResponse extends
|
||||||
BaseSubscriptionNotificationResponse<Subscription>{
|
BaseSubscriptionNotificationResponse<Subscription>{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public IBaseSubscriptionHandler<Subscription> getSubscriptionHandler() {
|
||||||
|
return DataDeliveryHandlers.getSubscriptionHandler();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,110 @@
|
||||||
|
/**
|
||||||
|
* 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.common.dataplugin.gfe.util;
|
||||||
|
|
||||||
|
import jep.INumpyable;
|
||||||
|
|
||||||
|
import com.raytheon.uf.common.python.PythonNumpyFloatArray;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Java port of python utility functions. Ported to Java to boost performance to
|
||||||
|
* surpass python's poor looping performance.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* Jan 11, 2013 njensen Initial creation
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author njensen
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class SmartUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define a method to fill the specified edit area. Ported from python.
|
||||||
|
*
|
||||||
|
* @param grid
|
||||||
|
* @param gridNx
|
||||||
|
* @param gridNy
|
||||||
|
* @param editPointsX
|
||||||
|
* @param editPointsY
|
||||||
|
* @param borderPointsX
|
||||||
|
* @param borderPointsY
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static INumpyable fillEditArea(float[] grid, int gridNx, int gridNy,
|
||||||
|
int[] editPointsX, int[] editPointsY, int[] borderPointsX,
|
||||||
|
int[] borderPointsY) {
|
||||||
|
// edit points and border points are a list of (x,y) indices
|
||||||
|
int[] e = new int[2];
|
||||||
|
int[] b = new int[2];
|
||||||
|
|
||||||
|
for (int i = 0; i < editPointsX.length; i++) {
|
||||||
|
e[0] = editPointsX[i];
|
||||||
|
e[1] = editPointsY[i];
|
||||||
|
double numSum = 0.0;
|
||||||
|
double denomSum = 0.0;
|
||||||
|
|
||||||
|
for (int k = 0; k < borderPointsX.length; k++) {
|
||||||
|
b[0] = borderPointsX[k];
|
||||||
|
b[1] = borderPointsY[k];
|
||||||
|
|
||||||
|
// points in the same row, column or diagonal
|
||||||
|
int xdiff = e[0] - b[0];
|
||||||
|
int ydiff = e[1] - b[1];
|
||||||
|
int absXdiff = (xdiff < 0) ? -xdiff : xdiff;
|
||||||
|
int absYdiff = (ydiff < 0) ? -ydiff : ydiff;
|
||||||
|
if (e[0] == b[0] || e[1] == b[1] || absXdiff == absYdiff) {
|
||||||
|
|
||||||
|
double xdist = xdiff;
|
||||||
|
double ydist = ydiff;
|
||||||
|
|
||||||
|
// calculate the distance to the border point
|
||||||
|
double dist = Math.sqrt(xdist * xdist + ydist * ydist);
|
||||||
|
|
||||||
|
// value = grid[b[0], b[1]]
|
||||||
|
float value = grid[b[0] + (gridNx * b[1])];
|
||||||
|
|
||||||
|
// Accumulate the distance-weighted average
|
||||||
|
numSum = numSum + value / dist;
|
||||||
|
denomSum = denomSum + 1 / dist;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int eIndex = e[0] + (gridNx * e[1]);
|
||||||
|
if (denomSum > 0.0f) {
|
||||||
|
// grid[e[0], e[1]] = numSum / denomSum;
|
||||||
|
grid[eIndex] = (float) (numSum / denomSum);
|
||||||
|
} else {
|
||||||
|
// grid[e[0], e[1]] = 0.0;
|
||||||
|
grid[eIndex] = 0.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return completed grid
|
||||||
|
return new PythonNumpyFloatArray(grid, gridNx, gridNy);
|
||||||
|
}
|
||||||
|
}
|
|
@ -29,6 +29,8 @@ import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import javax.xml.bind.JAXBException;
|
||||||
|
|
||||||
import com.raytheon.uf.common.localization.FileLocker.Type;
|
import com.raytheon.uf.common.localization.FileLocker.Type;
|
||||||
import com.raytheon.uf.common.localization.ILocalizationAdapter.ListResponse;
|
import com.raytheon.uf.common.localization.ILocalizationAdapter.ListResponse;
|
||||||
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
|
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
|
||||||
|
@ -80,6 +82,7 @@ import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||||
* This was added as part of an effort to improve
|
* This was added as part of an effort to improve
|
||||||
* localization performance but caused updated
|
* localization performance but caused updated
|
||||||
* files on the server not to be retrieved.
|
* files on the server not to be retrieved.
|
||||||
|
* Jan 17, 2013 1412 djohnson Add jaxbMarshal.
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author njensen
|
* @author njensen
|
||||||
|
@ -635,6 +638,25 @@ public final class LocalizationFile implements Comparable<LocalizationFile> {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Marshal the specified object into this file.
|
||||||
|
*
|
||||||
|
* @param obj
|
||||||
|
* the object to marshal
|
||||||
|
*
|
||||||
|
* @param jaxbManager
|
||||||
|
* the jaxbManager
|
||||||
|
*/
|
||||||
|
public void jaxbMarshal(Object obj, JAXBManager jaxbManager) throws LocalizationException{
|
||||||
|
try {
|
||||||
|
String xml = jaxbManager.marshalToXml(obj);
|
||||||
|
write(xml.getBytes());
|
||||||
|
} catch (JAXBException e) {
|
||||||
|
throw new LocalizationException(
|
||||||
|
"Unable to marshal the object to the file.", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return context + IPathManager.SEPARATOR + path;
|
return context + IPathManager.SEPARATOR + path;
|
||||||
|
|
|
@ -10,7 +10,8 @@ Require-Bundle: com.raytheon.uf.common.serialization;bundle-version="1.12.2",
|
||||||
com.raytheon.uf.common.auth;bundle-version="1.12.1174",
|
com.raytheon.uf.common.auth;bundle-version="1.12.1174",
|
||||||
com.raytheon.uf.common.status;bundle-version="1.12.1174",
|
com.raytheon.uf.common.status;bundle-version="1.12.1174",
|
||||||
com.raytheon.uf.common.localization;bundle-version="1.12.1174",
|
com.raytheon.uf.common.localization;bundle-version="1.12.1174",
|
||||||
com.raytheon.uf.common.serialization.comm;bundle-version="1.12.1174"
|
com.raytheon.uf.common.serialization.comm;bundle-version="1.12.1174",
|
||||||
|
org.apache.commons.lang;bundle-version="2.3.0"
|
||||||
Export-Package: com.raytheon.uf.common.plugin.nwsauth,
|
Export-Package: com.raytheon.uf.common.plugin.nwsauth,
|
||||||
com.raytheon.uf.common.plugin.nwsauth.exception,
|
com.raytheon.uf.common.plugin.nwsauth.exception,
|
||||||
com.raytheon.uf.common.plugin.nwsauth.user,
|
com.raytheon.uf.common.plugin.nwsauth.user,
|
||||||
|
|
|
@ -302,4 +302,21 @@ public class NwsRoleData implements ISerializableObject {
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see java.lang.Object#toString()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("Application:").append(this.getApplication()).append("\n\n");
|
||||||
|
sb.append("Users:\n").append(this.getUserList()).append("\n\n");
|
||||||
|
sb.append("Permissions:\n").append(this.getPermissionList())
|
||||||
|
.append("\n\n");
|
||||||
|
sb.append("Roles:\n").append(this.getRoleList()).append("\n\n");
|
||||||
|
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,4 +94,16 @@ public class PermissionXML implements ISerializableObject {
|
||||||
public void setDescription(String description) {
|
public void setDescription(String description) {
|
||||||
this.description = (description == null) ? null : description.trim();
|
this.description = (description == null) ? null : description.trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("id:").append(this.getId());
|
||||||
|
sb.append("\ndescription:").append(this.getDescription());
|
||||||
|
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,4 +117,19 @@ public class RoleXML implements ISerializableObject {
|
||||||
public void addPermission(String permission) {
|
public void addPermission(String permission) {
|
||||||
this.permissionList.add(permission);
|
this.permissionList.add(permission);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see java.lang.Object#toString()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("roleId:").append(this.getRoleId());
|
||||||
|
sb.append("\nroleDescription:").append(this.getRoleDescription());
|
||||||
|
sb.append("\npermissionList:").append(this.getPermissionList());
|
||||||
|
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,9 @@ import javax.xml.bind.annotation.XmlAttribute;
|
||||||
import javax.xml.bind.annotation.XmlElement;
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
import javax.xml.bind.annotation.XmlElements;
|
import javax.xml.bind.annotation.XmlElements;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.builder.EqualsBuilder;
|
||||||
|
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||||
|
|
||||||
import com.raytheon.uf.common.auth.user.IAuthenticationData;
|
import com.raytheon.uf.common.auth.user.IAuthenticationData;
|
||||||
import com.raytheon.uf.common.auth.user.IUser;
|
import com.raytheon.uf.common.auth.user.IUser;
|
||||||
import com.raytheon.uf.common.auth.user.IUserId;
|
import com.raytheon.uf.common.auth.user.IUserId;
|
||||||
|
@ -66,6 +69,17 @@ public class UserXML implements IUser, ISerializableObject {
|
||||||
@XmlElements({ @XmlElement(name = "userRole", type = String.class) })
|
@XmlElements({ @XmlElement(name = "userRole", type = String.class) })
|
||||||
private List<String> roleList = new ArrayList<String>();
|
private List<String> roleList = new ArrayList<String>();
|
||||||
|
|
||||||
|
public UserXML() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param userId
|
||||||
|
*/
|
||||||
|
public UserXML(String userId) {
|
||||||
|
setUserId(userId);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the userId
|
* @return the userId
|
||||||
*/
|
*/
|
||||||
|
@ -129,6 +143,30 @@ public class UserXML implements IUser, ISerializableObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (obj instanceof UserXML) {
|
||||||
|
UserXML that = (UserXML) obj;
|
||||||
|
|
||||||
|
EqualsBuilder builder = new EqualsBuilder();
|
||||||
|
builder.append(this.getUserId(), that.getUserId());
|
||||||
|
return builder.isEquals();
|
||||||
|
|
||||||
|
}
|
||||||
|
return super.equals(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return new HashCodeBuilder().append(this.getUserId()).toHashCode();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
@ -136,17 +174,10 @@ public class UserXML implements IUser, ISerializableObject {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
final String nl = "\n";
|
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append(this.getUserId()).append(nl);
|
sb.append("userId:").append(this.getUserId());
|
||||||
|
sb.append("\nroles:").append(this.getRoleList());
|
||||||
for (String role : this.roleList) {
|
sb.append("\npermissions:").append(this.getPermissionList());
|
||||||
sb.append(" ").append(role).append(nl);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (String perm : permissionList) {
|
|
||||||
sb.append(" ").append(perm).append(nl);
|
|
||||||
}
|
|
||||||
|
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Aug 21, 2012 jsanchez Initial creation
|
* Aug 21, 2012 jsanchez Initial creation
|
||||||
* Nov 12, 2012 dhladky Updates some things for stats
|
* Nov 12, 2012 dhladky Updates some things for stats
|
||||||
|
* Jan 15, 2013 1487 djohnson Increase length of grouping to 1024.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -56,7 +57,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
||||||
@XmlRootElement
|
@XmlRootElement
|
||||||
@XmlAccessorType(XmlAccessType.NONE)
|
@XmlAccessorType(XmlAccessType.NONE)
|
||||||
@DynamicSerialize
|
@DynamicSerialize
|
||||||
public class AggregateRecord extends PersistableDataObject {
|
public class AggregateRecord extends PersistableDataObject<Integer> {
|
||||||
private static final long serialVersionUID = -4553588456131256014L;
|
private static final long serialVersionUID = -4553588456131256014L;
|
||||||
|
|
||||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||||
|
@ -77,6 +78,7 @@ public class AggregateRecord extends PersistableDataObject {
|
||||||
private String eventType;
|
private String eventType;
|
||||||
|
|
||||||
@DynamicSerializeElement
|
@DynamicSerializeElement
|
||||||
|
@Column(length = 1024)
|
||||||
private String grouping;
|
private String grouping;
|
||||||
|
|
||||||
@Column(nullable = false)
|
@Column(nullable = false)
|
||||||
|
|
|
@ -0,0 +1,101 @@
|
||||||
|
/**
|
||||||
|
* 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.common.stats;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.XmlAccessType;
|
||||||
|
import javax.xml.bind.annotation.XmlAccessorType;
|
||||||
|
import javax.xml.bind.annotation.XmlAttribute;
|
||||||
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contains a grouping for statistics.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* Jan 15, 2013 1487 djohnson Initial creation
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author djohnson
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
@XmlRootElement
|
||||||
|
@XmlAccessorType(XmlAccessType.NONE)
|
||||||
|
public class StatsGrouping {
|
||||||
|
|
||||||
|
@XmlAttribute(required = true)
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@XmlAttribute(required = true)
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*/
|
||||||
|
public StatsGrouping() {
|
||||||
|
this(null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*
|
||||||
|
* @param name
|
||||||
|
* @param value
|
||||||
|
*/
|
||||||
|
public StatsGrouping(String name, String value) {
|
||||||
|
this.name = name;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the name
|
||||||
|
*/
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param name
|
||||||
|
* the name to set
|
||||||
|
*/
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the value
|
||||||
|
*/
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param value
|
||||||
|
* the value to set
|
||||||
|
*/
|
||||||
|
public void setValue(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,87 @@
|
||||||
|
/**
|
||||||
|
* 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.common.stats;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
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 com.google.common.collect.Lists;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contains a list of groupings for statistics.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* Jan 15, 2013 1487 djohnson Initial creation
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author djohnson
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
@XmlRootElement(name = "stat")
|
||||||
|
@XmlAccessorType(XmlAccessType.NONE)
|
||||||
|
public class StatsGroupingColumn {
|
||||||
|
|
||||||
|
@XmlElement
|
||||||
|
private List<StatsGrouping> group = Lists.newArrayList();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the group
|
||||||
|
*/
|
||||||
|
public List<StatsGrouping> getGroup() {
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param group
|
||||||
|
* the group to set
|
||||||
|
*/
|
||||||
|
public void setGroup(List<StatsGrouping> group) {
|
||||||
|
this.group = group;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a {@link StatsGroupingColumn} to hold the specified
|
||||||
|
* {@link StatsGrouping} instances.
|
||||||
|
*
|
||||||
|
* @param statsGroupings
|
||||||
|
* the groupings
|
||||||
|
* @return the column
|
||||||
|
*/
|
||||||
|
public static StatsGroupingColumn withGroupings(
|
||||||
|
StatsGrouping... statsGroupings) {
|
||||||
|
StatsGroupingColumn column = new StatsGroupingColumn();
|
||||||
|
|
||||||
|
for (StatsGrouping grouping : statsGroupings) {
|
||||||
|
column.group.add(grouping);
|
||||||
|
}
|
||||||
|
|
||||||
|
return column;
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,4 +18,5 @@ Require-Bundle: com.google.guava;bundle-version="1.0.0",
|
||||||
org.springframework;bundle-version="2.5.6",
|
org.springframework;bundle-version="2.5.6",
|
||||||
com.raytheon.uf.common.event;bundle-version="1.0.0",
|
com.raytheon.uf.common.event;bundle-version="1.0.0",
|
||||||
com.raytheon.uf.common.datadelivery.registry;bundle-version="1.0.0",
|
com.raytheon.uf.common.datadelivery.registry;bundle-version="1.0.0",
|
||||||
com.raytheon.uf.common.registry.event;bundle-version="1.0.0"
|
com.raytheon.uf.common.registry.event;bundle-version="1.0.0",
|
||||||
|
com.raytheon.uf.common.registry.ebxml;bundle-version="1.0.0"
|
||||||
|
|
|
@ -25,6 +25,7 @@ import com.raytheon.uf.common.datadelivery.event.notification.BaseSubscriptionNo
|
||||||
import com.raytheon.uf.common.datadelivery.event.notification.BaseSubscriptionNotificationResponse;
|
import com.raytheon.uf.common.datadelivery.event.notification.BaseSubscriptionNotificationResponse;
|
||||||
import com.raytheon.uf.common.datadelivery.event.notification.NotificationRecord;
|
import com.raytheon.uf.common.datadelivery.event.notification.NotificationRecord;
|
||||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||||
|
import com.raytheon.uf.common.datadelivery.registry.handlers.IBaseSubscriptionHandler;
|
||||||
import com.raytheon.uf.common.serialization.comm.IRequestHandler;
|
import com.raytheon.uf.common.serialization.comm.IRequestHandler;
|
||||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
import com.raytheon.uf.common.status.UFStatus;
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
|
@ -44,13 +45,15 @@ import com.raytheon.uf.common.status.UFStatus;
|
||||||
* Aug 31, 2012 1128 mpduff Set priority and category from request.
|
* Aug 31, 2012 1128 mpduff Set priority and category from request.
|
||||||
* Sep 06, 2012 687 mpduff Send a SubscriptionNotificationResponse object.
|
* Sep 06, 2012 687 mpduff Send a SubscriptionNotificationResponse object.
|
||||||
* Sep 24, 2012 1157 mpduff Changed to use BaseSubscriptionNotificationRequest.
|
* Sep 24, 2012 1157 mpduff Changed to use BaseSubscriptionNotificationRequest.
|
||||||
|
* Jan 17, 2013 1501 djohnson If a subscription is still in the registry, use it for the notification response.
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author mpduff
|
* @author mpduff
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class SubscriptionNotificationHandler<T extends Subscription> extends AbstractHandler implements
|
public class SubscriptionNotificationHandler<T extends Subscription> extends
|
||||||
|
AbstractHandler implements
|
||||||
IRequestHandler<BaseSubscriptionNotificationRequest<T>> {
|
IRequestHandler<BaseSubscriptionNotificationRequest<T>> {
|
||||||
|
|
||||||
private static final IUFStatusHandler statusHandler = UFStatus
|
private static final IUFStatusHandler statusHandler = UFStatus
|
||||||
|
@ -87,9 +90,21 @@ public class SubscriptionNotificationHandler<T extends Subscription> extends Abs
|
||||||
|
|
||||||
storeAndSend(record, uri);
|
storeAndSend(record, uri);
|
||||||
|
|
||||||
BaseSubscriptionNotificationResponse<T> response = request.getResponse();
|
BaseSubscriptionNotificationResponse<T> response = request
|
||||||
|
.getResponse();
|
||||||
response.setMessage(request.getMessage());
|
response.setMessage(request.getMessage());
|
||||||
response.setSubscription(request.getSubscription());
|
|
||||||
|
final IBaseSubscriptionHandler<T> subscriptionHandler = response
|
||||||
|
.getSubscriptionHandler();
|
||||||
|
final T requestSubscription = request.getSubscription();
|
||||||
|
final T registryVersion = subscriptionHandler
|
||||||
|
.getByName(requestSubscription.getName());
|
||||||
|
|
||||||
|
// If the subscription is still in the registry, use that version which
|
||||||
|
// will reflect any updates that have occurred since the notification
|
||||||
|
// was sent, otherwise pass along the one provided with the request
|
||||||
|
response.setSubscription((registryVersion != null) ? registryVersion
|
||||||
|
: requestSubscription);
|
||||||
|
|
||||||
send(response, uri);
|
send(response, uri);
|
||||||
|
|
||||||
|
|
|
@ -70,6 +70,7 @@ import com.vividsolutions.jts.geom.Coordinate;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Jan 26, 2011 snaples Initial creation
|
* Jan 26, 2011 snaples Initial creation
|
||||||
|
* Jan 10, 2013 1448 bgonzale Added app context check in processArealQpe().
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -209,6 +210,9 @@ public class ArealQpeGenSrv {
|
||||||
private SimpleDateFormat fdf = new SimpleDateFormat("yyyyMMddHH");
|
private SimpleDateFormat fdf = new SimpleDateFormat("yyyyMMddHH");
|
||||||
|
|
||||||
public Object processArealQpe() {
|
public Object processArealQpe() {
|
||||||
|
if (!AppsDefaults.getInstance().setAppContext(this)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
// Check to see if we need to run
|
// Check to see if we need to run
|
||||||
String gen = appsDefaults.getToken("mpe_generate_areal_qpe");
|
String gen = appsDefaults.getToken("mpe_generate_areal_qpe");
|
||||||
|
|
|
@ -37,6 +37,7 @@ import com.raytheon.uf.common.datastorage.DataStoreFactory;
|
||||||
import com.raytheon.uf.common.datastorage.IDataStore;
|
import com.raytheon.uf.common.datastorage.IDataStore;
|
||||||
import com.raytheon.uf.common.datastorage.StorageException;
|
import com.raytheon.uf.common.datastorage.StorageException;
|
||||||
import com.raytheon.uf.common.hydro.spatial.HRAP;
|
import com.raytheon.uf.common.hydro.spatial.HRAP;
|
||||||
|
import com.raytheon.uf.common.ohd.AppsDefaults;
|
||||||
import com.raytheon.uf.edex.core.EdexException;
|
import com.raytheon.uf.edex.core.EdexException;
|
||||||
import com.raytheon.uf.edex.database.dao.CoreDao;
|
import com.raytheon.uf.edex.database.dao.CoreDao;
|
||||||
import com.raytheon.uf.edex.database.dao.DaoConfig;
|
import com.raytheon.uf.edex.database.dao.DaoConfig;
|
||||||
|
@ -52,6 +53,7 @@ import com.vividsolutions.jts.geom.Coordinate;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Jan 06, 2011 5951 jnjanga Initial creation
|
* Jan 06, 2011 5951 jnjanga Initial creation
|
||||||
|
* Jan 10, 2013 1448 bgonzale Added app context check in runOnSchedule().
|
||||||
* Jan 18, 2013 1469 bkowal Removed the hdf5 data directory.
|
* Jan 18, 2013 1469 bkowal Removed the hdf5 data directory.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
|
@ -212,6 +214,9 @@ public class MpeLightningSrv {
|
||||||
* @throws EdexException
|
* @throws EdexException
|
||||||
*/
|
*/
|
||||||
public void runOnSchedule() throws EdexException {
|
public void runOnSchedule() throws EdexException {
|
||||||
|
if (!AppsDefaults.getInstance().setAppContext(this)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
QueryResultRow[] rows = getMostRecentStrikes();
|
QueryResultRow[] rows = getMostRecentStrikes();
|
||||||
ifhsInsertMostRecentStrikes(rows);
|
ifhsInsertMostRecentStrikes(rows);
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,8 +55,6 @@ import com.raytheon.uf.edex.core.props.PropertiesFactory;
|
||||||
import com.raytheon.uf.edex.dat.utils.FreezingLevel;
|
import com.raytheon.uf.edex.dat.utils.FreezingLevel;
|
||||||
import com.vividsolutions.jts.geom.Coordinate;
|
import com.vividsolutions.jts.geom.Coordinate;
|
||||||
|
|
||||||
public class MpeRUCFreezingLevel {
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MPE RUC calculator
|
* MPE RUC calculator
|
||||||
*
|
*
|
||||||
|
@ -66,12 +64,14 @@ public class MpeRUCFreezingLevel {
|
||||||
* ------------ -------- --------- --------------------------
|
* ------------ -------- --------- --------------------------
|
||||||
* Nov 19, 2011 dhladky Initial Creation.
|
* Nov 19, 2011 dhladky Initial Creation.
|
||||||
* Oct 09, 2012 15168 wkwock Fix incorrect values.
|
* Oct 09, 2012 15168 wkwock Fix incorrect values.
|
||||||
|
* Jan 10, 2013 1448 bgonzale Made methods that are used internally private.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author dhladky
|
* @author dhladky
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
|
public class MpeRUCFreezingLevel {
|
||||||
|
|
||||||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||||
.getHandler(MpeRUCFreezingLevel.class);
|
.getHandler(MpeRUCFreezingLevel.class);
|
||||||
|
@ -441,7 +441,7 @@ public class MpeRUCFreezingLevel {
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public String getAbsoluteTempFileName(int forecastHour, String modelName) {
|
private String getAbsoluteTempFileName(int forecastHour, String modelName) {
|
||||||
return modelOutputFilePath + File.separatorChar + modelName
|
return modelOutputFilePath + File.separatorChar + modelName
|
||||||
+ forecastHour + "zFreezingLevel" + ".bin";
|
+ forecastHour + "zFreezingLevel" + ".bin";
|
||||||
}
|
}
|
||||||
|
@ -451,7 +451,7 @@ public class MpeRUCFreezingLevel {
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public String getAbsoluteOutFileName(Date date, String site) {
|
private String getAbsoluteOutFileName(Date date, String site) {
|
||||||
return modelOutputFilePath + File.separatorChar + "freezing_1_" + site
|
return modelOutputFilePath + File.separatorChar + "freezing_1_" + site
|
||||||
+ "_point_" + getFormattedDate(date);
|
+ "_point_" + getFormattedDate(date);
|
||||||
}
|
}
|
||||||
|
@ -461,7 +461,7 @@ public class MpeRUCFreezingLevel {
|
||||||
*
|
*
|
||||||
* @param FreezingLevelXML
|
* @param FreezingLevelXML
|
||||||
*/
|
*/
|
||||||
public void writeFreezingLevelTemp(FreezingLevelXML freezingLevel,
|
private void writeFreezingLevelTemp(FreezingLevelXML freezingLevel,
|
||||||
String modelName) {
|
String modelName) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -11,7 +11,8 @@ Require-Bundle: com.raytheon.uf.edex.auth;bundle-version="1.12.2",
|
||||||
com.raytheon.uf.common.status;bundle-version="1.12.1174",
|
com.raytheon.uf.common.status;bundle-version="1.12.1174",
|
||||||
com.raytheon.uf.common.localization,
|
com.raytheon.uf.common.localization,
|
||||||
com.raytheon.uf.common.serialization.comm;bundle-version="1.12.1174",
|
com.raytheon.uf.common.serialization.comm;bundle-version="1.12.1174",
|
||||||
com.raytheon.uf.common.useradmin;bundle-version="1.0.0"
|
com.raytheon.uf.common.useradmin;bundle-version="1.0.0",
|
||||||
|
com.raytheon.uf.common.time;bundle-version="1.12.1174"
|
||||||
Import-Package: com.raytheon.uf.common.localization,
|
Import-Package: com.raytheon.uf.common.localization,
|
||||||
com.raytheon.uf.common.serialization,
|
com.raytheon.uf.common.serialization,
|
||||||
com.raytheon.uf.common.status,
|
com.raytheon.uf.common.status,
|
||||||
|
|
|
@ -19,9 +19,11 @@
|
||||||
**/
|
**/
|
||||||
package com.raytheon.uf.edex.plugin.nwsauth;
|
package com.raytheon.uf.edex.plugin.nwsauth;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.concurrent.ConcurrentMap;
|
||||||
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
import javax.xml.bind.JAXBException;
|
import javax.xml.bind.JAXBException;
|
||||||
|
|
||||||
|
@ -40,6 +42,7 @@ import com.raytheon.uf.common.serialization.JAXBManager;
|
||||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
import com.raytheon.uf.common.status.UFStatus;
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||||
|
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Uses localization data to determine role/permissions. Intentionally
|
* Uses localization data to determine role/permissions. Intentionally
|
||||||
|
@ -52,6 +55,8 @@ import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Jan 09, 2013 1412 djohnson Moved file writing from viz plugin to server-side.
|
* Jan 09, 2013 1412 djohnson Moved file writing from viz plugin to server-side.
|
||||||
|
* Jan 17, 2013 1412 djohnson Check files for having been modified each time data is requested,
|
||||||
|
* in case they were written by another member of the cluster.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -69,14 +74,22 @@ class FileManager {
|
||||||
|
|
||||||
private final String ROLE_DIR = "roles";
|
private final String ROLE_DIR = "roles";
|
||||||
|
|
||||||
private final Map<String, NwsRoleData> roleDataMap = new HashMap<String, NwsRoleData>();
|
private final AtomicLong lastReadTime = new AtomicLong(-1L);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Application name -> Role Data.
|
||||||
|
*/
|
||||||
|
private final ConcurrentMap<String, NwsRoleData> roleDataMap = new ConcurrentHashMap<String, NwsRoleData>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Application name -> LocalizationFile map.
|
* Application name -> LocalizationFile map.
|
||||||
*/
|
*/
|
||||||
private final Map<String, LocalizationFile> roleFileMap = new HashMap<String, LocalizationFile>();
|
private final ConcurrentMap<String, LocalizationFile> roleFileMap = new ConcurrentHashMap<String, LocalizationFile>();
|
||||||
|
|
||||||
private FileManager() {
|
/**
|
||||||
|
* Package-level visibility so tests can create new instances.
|
||||||
|
*/
|
||||||
|
FileManager() {
|
||||||
readXML();
|
readXML();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,8 +130,43 @@ class FileManager {
|
||||||
|
|
||||||
private void readXML() {
|
private void readXML() {
|
||||||
try {
|
try {
|
||||||
getJaxbManager();
|
LocalizationFile[] roleFiles = getUserRoleLocalizationFiles();
|
||||||
|
boolean needToReadFiles = false;
|
||||||
|
for (LocalizationFile lf : roleFiles) {
|
||||||
|
final long fileLastModified = lf.getFile().lastModified();
|
||||||
|
final long lastTimeFilesWereRead = lastReadTime.get();
|
||||||
|
|
||||||
|
if (fileLastModified > lastTimeFilesWereRead) {
|
||||||
|
needToReadFiles = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (needToReadFiles) {
|
||||||
|
for (LocalizationFile lf : roleFiles) {
|
||||||
|
final long fileLastModified = lf.getFile().lastModified();
|
||||||
|
final long lastTimeFilesWereRead = lastReadTime.get();
|
||||||
|
|
||||||
|
if (fileLastModified < lastTimeFilesWereRead) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
NwsRoleData roleData = lf.jaxbUnmarshal(NwsRoleData.class,
|
||||||
|
getJaxbManager());
|
||||||
|
|
||||||
|
if (roleData != null) {
|
||||||
|
final String application = roleData.getApplication();
|
||||||
|
this.roleDataMap.put(application, roleData);
|
||||||
|
this.roleFileMap.put(application, lf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lastReadTime.set(TimeUtil.currentTimeMillis());
|
||||||
|
} catch (Exception e) {
|
||||||
|
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private LocalizationFile[] getUserRoleLocalizationFiles() {
|
||||||
IPathManager pm = PathManagerFactory.getPathManager();
|
IPathManager pm = PathManagerFactory.getPathManager();
|
||||||
LocalizationContext[] contexts = new LocalizationContext[2];
|
LocalizationContext[] contexts = new LocalizationContext[2];
|
||||||
contexts[0] = pm.getContext(LocalizationType.COMMON_STATIC,
|
contexts[0] = pm.getContext(LocalizationType.COMMON_STATIC,
|
||||||
|
@ -127,19 +175,7 @@ class FileManager {
|
||||||
LocalizationLevel.SITE);
|
LocalizationLevel.SITE);
|
||||||
LocalizationFile[] roleFiles = pm.listFiles(contexts, ROLE_DIR,
|
LocalizationFile[] roleFiles = pm.listFiles(contexts, ROLE_DIR,
|
||||||
new String[] { ".xml" }, false, true);
|
new String[] { ".xml" }, false, true);
|
||||||
|
return roleFiles;
|
||||||
for (LocalizationFile lf : roleFiles) {
|
|
||||||
NwsRoleData roleData = lf.jaxbUnmarshal(NwsRoleData.class,
|
|
||||||
getJaxbManager());
|
|
||||||
|
|
||||||
if (roleData != null) {
|
|
||||||
this.roleDataMap.put(roleData.getApplication(), roleData);
|
|
||||||
this.roleFileMap.put(roleData.getApplication(), lf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private JAXBManager getJaxbManager() throws JAXBException {
|
private JAXBManager getJaxbManager() throws JAXBException {
|
||||||
|
@ -154,13 +190,15 @@ class FileManager {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public Map<String, NwsRoleData> getRoleDataMap() {
|
public Map<String, NwsRoleData> getRoleDataMap() {
|
||||||
|
readXML();
|
||||||
return roleDataMap;
|
return roleDataMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param roleDataWithChanges
|
* @param roleDataWithChanges
|
||||||
*/
|
*/
|
||||||
public void writeApplicationRoleData(Map<String, NwsRoleData> roleDataWithChanges) {
|
public void writeApplicationRoleData(
|
||||||
|
Map<String, NwsRoleData> roleDataWithChanges) {
|
||||||
for (Entry<String, NwsRoleData> entry : roleDataWithChanges.entrySet()) {
|
for (Entry<String, NwsRoleData> entry : roleDataWithChanges.entrySet()) {
|
||||||
final String application = entry.getKey();
|
final String application = entry.getKey();
|
||||||
roleDataMap.put(application, entry.getValue());
|
roleDataMap.put(application, entry.getValue());
|
||||||
|
|
|
@ -89,6 +89,8 @@
|
||||||
<permission id="com.raytheon.localization.site/common_static/roles">
|
<permission id="com.raytheon.localization.site/common_static/roles">
|
||||||
</permission>
|
</permission>
|
||||||
|
|
||||||
|
<permission id="com.raytheon.localization.site/common_static/datadelivery"/>
|
||||||
|
|
||||||
<user userId="ALL">
|
<user userId="ALL">
|
||||||
<userPermission>com.raytheon.localization.site/common_static/purge</userPermission>
|
<userPermission>com.raytheon.localization.site/common_static/purge</userPermission>
|
||||||
<userPermission>com.raytheon.localization.site/cave_static/colormaps</userPermission>
|
<userPermission>com.raytheon.localization.site/cave_static/colormaps</userPermission>
|
||||||
|
@ -119,6 +121,7 @@
|
||||||
<userPermission>com.raytheon.localization.site/common_static/radar/rmr/rmrAvailableRequests.xml</userPermission>
|
<userPermission>com.raytheon.localization.site/common_static/radar/rmr/rmrAvailableRequests.xml</userPermission>
|
||||||
<userPermission>com.raytheon.localization.site/common_static/shef</userPermission>
|
<userPermission>com.raytheon.localization.site/common_static/shef</userPermission>
|
||||||
<userPermission>com.raytheon.localization.site/common_static/roles</userPermission>
|
<userPermission>com.raytheon.localization.site/common_static/roles</userPermission>
|
||||||
|
<userPermission>com.raytheon.localization.site/common_static/datadelivery</userPermission>
|
||||||
</user>
|
</user>
|
||||||
</nwsRoleData>
|
</nwsRoleData>
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,9 @@
|
||||||
**/
|
**/
|
||||||
package com.raytheon.uf.edex.stats;
|
package com.raytheon.uf.edex.stats;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -28,11 +30,17 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.TimeZone;
|
import java.util.TimeZone;
|
||||||
|
|
||||||
|
import javax.xml.bind.JAXBException;
|
||||||
|
|
||||||
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import com.google.common.collect.ArrayListMultimap;
|
import com.google.common.collect.ArrayListMultimap;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
import com.raytheon.uf.common.event.Event;
|
import com.raytheon.uf.common.event.Event;
|
||||||
|
import com.raytheon.uf.common.serialization.JAXBManager;
|
||||||
import com.raytheon.uf.common.serialization.SerializationUtil;
|
import com.raytheon.uf.common.serialization.SerializationUtil;
|
||||||
import com.raytheon.uf.common.stats.AggregateRecord;
|
import com.raytheon.uf.common.stats.AggregateRecord;
|
||||||
|
import com.raytheon.uf.common.stats.StatsGrouping;
|
||||||
|
import com.raytheon.uf.common.stats.StatsGroupingColumn;
|
||||||
import com.raytheon.uf.common.stats.StatsRecord;
|
import com.raytheon.uf.common.stats.StatsRecord;
|
||||||
import com.raytheon.uf.common.stats.xml.StatisticsAggregate;
|
import com.raytheon.uf.common.stats.xml.StatisticsAggregate;
|
||||||
import com.raytheon.uf.common.stats.xml.StatisticsEvent;
|
import com.raytheon.uf.common.stats.xml.StatisticsEvent;
|
||||||
|
@ -61,6 +69,7 @@ import com.raytheon.uf.edex.stats.util.ConfigLoader;
|
||||||
* Nov 07, 2012 1317 mpduff Updated Configuration Files.
|
* Nov 07, 2012 1317 mpduff Updated Configuration Files.
|
||||||
* Nov 28, 2012 1350 rjpeter Simplied aggregation and added aggregation with current db aggregate records.
|
* Nov 28, 2012 1350 rjpeter Simplied aggregation and added aggregation with current db aggregate records.
|
||||||
* Jan 07, 2013 1451 djohnson Use newGmtCalendar().
|
* Jan 07, 2013 1451 djohnson Use newGmtCalendar().
|
||||||
|
* Jan 15, 2013 1487 djohnson Use xml for the grouping information on an {@link AggregateRecord}.
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author jsanchez
|
* @author jsanchez
|
||||||
|
@ -70,6 +79,17 @@ public class AggregateManager {
|
||||||
private static final IUFStatusHandler statusHandler = UFStatus
|
private static final IUFStatusHandler statusHandler = UFStatus
|
||||||
.getHandler(AggregateManager.class);
|
.getHandler(AggregateManager.class);
|
||||||
|
|
||||||
|
private static final Object[] EMPTY_OBJ_ARR = new Object[0];
|
||||||
|
|
||||||
|
private static final JAXBManager JAXB_MANAGER;
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
JAXB_MANAGER = new JAXBManager(StatsGroupingColumn.class);
|
||||||
|
} catch (JAXBException e) {
|
||||||
|
throw new ExceptionInInitializerError(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** In minutes */
|
/** In minutes */
|
||||||
private int bucketInterval;
|
private int bucketInterval;
|
||||||
|
|
||||||
|
@ -255,8 +275,6 @@ public class AggregateManager {
|
||||||
Map<TimeRange, Multimap<String, Event>> rval = new HashMap<TimeRange, Multimap<String, Event>>();
|
Map<TimeRange, Multimap<String, Event>> rval = new HashMap<TimeRange, Multimap<String, Event>>();
|
||||||
TimeRange timeRange = null;
|
TimeRange timeRange = null;
|
||||||
Multimap<String, Event> eventsByGroup = null;
|
Multimap<String, Event> eventsByGroup = null;
|
||||||
final Object[] EMPTY_OBJ_ARR = new Object[0];
|
|
||||||
StringBuilder group = new StringBuilder();
|
|
||||||
|
|
||||||
for (StatsRecord record : records) {
|
for (StatsRecord record : records) {
|
||||||
if ((timeRange == null)
|
if ((timeRange == null)
|
||||||
|
@ -275,30 +293,11 @@ public class AggregateManager {
|
||||||
Event event = SerializationUtil.transformFromThrift(
|
Event event = SerializationUtil.transformFromThrift(
|
||||||
Event.class, record.getEvent());
|
Event.class, record.getEvent());
|
||||||
|
|
||||||
// determine group
|
String groupAsString = determineGroupRepresentationForEvent(
|
||||||
boolean addDelim = false;
|
statEvent, event);
|
||||||
Iterator<Method> gMethodIter = statEvent.getGroupByMethods()
|
if (groupAsString != null) {
|
||||||
.iterator();
|
eventsByGroup.put(groupAsString, event);
|
||||||
Iterator<StatisticsGroup> gFieldNameIter = statEvent
|
|
||||||
.getGroupList().iterator();
|
|
||||||
group.setLength(0);
|
|
||||||
|
|
||||||
while (gMethodIter.hasNext() && gFieldNameIter.hasNext()) {
|
|
||||||
Method m = gMethodIter.next();
|
|
||||||
String field = gFieldNameIter.next().getName();
|
|
||||||
String gVal = String
|
|
||||||
.valueOf(m.invoke(event, EMPTY_OBJ_ARR));
|
|
||||||
|
|
||||||
if (addDelim) {
|
|
||||||
group.append('-');
|
|
||||||
} else {
|
|
||||||
addDelim = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
group.append(field).append(':').append(gVal);
|
|
||||||
}
|
|
||||||
|
|
||||||
eventsByGroup.put(group.toString(), event);
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
statusHandler
|
statusHandler
|
||||||
.error("Error processing event. Aggregation may be inaccurate. ",
|
.error("Error processing event. Aggregation may be inaccurate. ",
|
||||||
|
@ -309,6 +308,30 @@ public class AggregateManager {
|
||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
static String determineGroupRepresentationForEvent(
|
||||||
|
StatisticsEvent statEvent, Event event)
|
||||||
|
throws IllegalAccessException, InvocationTargetException,
|
||||||
|
JAXBException {
|
||||||
|
Iterator<Method> gMethodIter = statEvent.getGroupByMethods().iterator();
|
||||||
|
Iterator<StatisticsGroup> gFieldNameIter = statEvent.getGroupList()
|
||||||
|
.iterator();
|
||||||
|
List<StatsGrouping> groupings = new ArrayList<StatsGrouping>();
|
||||||
|
|
||||||
|
while (gMethodIter.hasNext() && gFieldNameIter.hasNext()) {
|
||||||
|
Method m = gMethodIter.next();
|
||||||
|
String field = gFieldNameIter.next().getName();
|
||||||
|
String gVal = String.valueOf(m.invoke(event, EMPTY_OBJ_ARR));
|
||||||
|
|
||||||
|
groupings.add(new StatsGrouping(field, gVal));
|
||||||
|
}
|
||||||
|
|
||||||
|
StatsGroupingColumn column = new StatsGroupingColumn();
|
||||||
|
column.setGroup(groupings);
|
||||||
|
|
||||||
|
return JAXB_MANAGER.marshalToXml(column);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests if the bucket interval is a valid value. If value is invalid then
|
* Tests if the bucket interval is a valid value. If value is invalid then
|
||||||
* value will be set to default value.
|
* value will be set to default value.
|
||||||
|
|
|
@ -27,13 +27,18 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
import java.util.TreeSet;
|
|
||||||
import java.util.regex.Pattern;
|
import javax.xml.bind.JAXBException;
|
||||||
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
|
import com.raytheon.uf.common.serialization.JAXBManager;
|
||||||
import com.raytheon.uf.common.serialization.SerializationException;
|
import com.raytheon.uf.common.serialization.SerializationException;
|
||||||
import com.raytheon.uf.common.serialization.SerializationUtil;
|
import com.raytheon.uf.common.serialization.SerializationUtil;
|
||||||
import com.raytheon.uf.common.stats.AggregateRecord;
|
import com.raytheon.uf.common.stats.AggregateRecord;
|
||||||
|
import com.raytheon.uf.common.stats.StatsGrouping;
|
||||||
|
import com.raytheon.uf.common.stats.StatsGroupingColumn;
|
||||||
import com.raytheon.uf.common.stats.data.GraphData;
|
import com.raytheon.uf.common.stats.data.GraphData;
|
||||||
import com.raytheon.uf.common.stats.data.StatsBin;
|
import com.raytheon.uf.common.stats.data.StatsBin;
|
||||||
import com.raytheon.uf.common.stats.data.StatsData;
|
import com.raytheon.uf.common.stats.data.StatsData;
|
||||||
|
@ -44,6 +49,7 @@ import com.raytheon.uf.common.status.UFStatus;
|
||||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||||
import com.raytheon.uf.common.time.TimeRange;
|
import com.raytheon.uf.common.time.TimeRange;
|
||||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||||
|
import com.raytheon.uf.common.util.CollectionUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Accumulates the statistics data.
|
* Accumulates the statistics data.
|
||||||
|
@ -55,6 +61,7 @@ import com.raytheon.uf.common.time.util.TimeUtil;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Nov 15, 2012 728 mpduff Initial creation
|
* Nov 15, 2012 728 mpduff Initial creation
|
||||||
|
* Jan 15, 2013 1487 djohnson Use xml for the grouping information on an {@link AggregateRecord}.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -63,15 +70,21 @@ import com.raytheon.uf.common.time.util.TimeUtil;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class StatsDataAccumulator {
|
public class StatsDataAccumulator {
|
||||||
private static final Pattern COLON_PATTERN = Pattern.compile(":");
|
|
||||||
|
|
||||||
private static final Pattern DASH_PATTERN = Pattern.compile("-");
|
|
||||||
|
|
||||||
private static final String COLON = ":";
|
|
||||||
|
|
||||||
private static final IUFStatusHandler statusHandler = UFStatus
|
private static final IUFStatusHandler statusHandler = UFStatus
|
||||||
.getHandler(StatsDataAccumulator.class);
|
.getHandler(StatsDataAccumulator.class);
|
||||||
|
|
||||||
|
private static final String COLON = ":";
|
||||||
|
|
||||||
|
private static final JAXBManager JAXB_MANAGER;
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
JAXB_MANAGER = new JAXBManager(StatsGroupingColumn.class);
|
||||||
|
} catch (JAXBException e) {
|
||||||
|
throw new ExceptionInInitializerError(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** List of records */
|
/** List of records */
|
||||||
private AggregateRecord[] records;
|
private AggregateRecord[] records;
|
||||||
|
|
||||||
|
@ -122,23 +135,22 @@ public class StatsDataAccumulator {
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public void setupGroupings() {
|
public void setupGroupings() {
|
||||||
for (AggregateRecord aggRec : records) {
|
for (AggregateRecord aggRec : records) {
|
||||||
String grouping = aggRec.getGrouping();
|
StatsGroupingColumn columnValue = unmarshalGroupingColumnFromRecord(aggRec);
|
||||||
String[] groupString = DASH_PATTERN.split(grouping);
|
|
||||||
String group;
|
|
||||||
String member;
|
|
||||||
for (String grp : groupString) {
|
|
||||||
String[] parts = COLON_PATTERN.split(grp);
|
|
||||||
group = parts[0];
|
|
||||||
member = parts[1];
|
|
||||||
if (!groupMemberMap.containsKey(group)) {
|
|
||||||
groupMemberMap.put(group, new TreeSet<String>());
|
|
||||||
}
|
|
||||||
|
|
||||||
groupMemberMap.get(group).add(member);
|
final List<StatsGrouping> groups = columnValue.getGroup();
|
||||||
|
if (CollectionUtil.isNullOrEmpty(groups)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for (StatsGrouping group : groups) {
|
||||||
|
final String groupName = group.getName();
|
||||||
|
if (!groupMemberMap.containsKey(groupName)) {
|
||||||
|
groupMemberMap.put(groupName, Sets.<String> newTreeSet());
|
||||||
|
}
|
||||||
|
groupMemberMap.get(groupName).add(group.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
groups = new ArrayList<String>(groupMemberMap.keySet());
|
groups = Lists.newArrayList(groupMemberMap.keySet());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -202,21 +214,25 @@ public class StatsDataAccumulator {
|
||||||
if (record.getEventType().equals(eventType)
|
if (record.getEventType().equals(eventType)
|
||||||
&& record.getField().equals(dataType)) {
|
&& record.getField().equals(dataType)) {
|
||||||
|
|
||||||
|
StatsGroupingColumn columnValue = unmarshalGroupingColumnFromRecord(record);
|
||||||
|
|
||||||
|
final List<StatsGrouping> columnValueGroups = columnValue
|
||||||
|
.getGroup();
|
||||||
|
if (CollectionUtil.isNullOrEmpty(columnValueGroups)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Have a matching record
|
// Have a matching record
|
||||||
for (String key : keySequenceMap.keySet()) {
|
for (String key : keySequenceMap.keySet()) {
|
||||||
keySequenceMap.put(key, "");
|
keySequenceMap.put(key, "");
|
||||||
}
|
}
|
||||||
String[] groupings = DASH_PATTERN.split(record.getGrouping());
|
|
||||||
|
|
||||||
for (String grouping : groupings) {
|
for (StatsGrouping group : columnValueGroups) {
|
||||||
String[] parts = COLON_PATTERN.split(grouping);
|
|
||||||
String group = parts[0];
|
|
||||||
String groupMember = parts[1];
|
|
||||||
|
|
||||||
for (String key : keySequenceMap.keySet()) {
|
for (String key : keySequenceMap.keySet()) {
|
||||||
if (group.equals(key)) {
|
if (group.getName().equals(key)) {
|
||||||
keySequenceMap.put(key, keySequenceMap.get(key)
|
keySequenceMap.put(key, keySequenceMap.get(key)
|
||||||
.concat(groupMember + COLON));
|
.concat(group.getValue() + COLON));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -242,6 +258,29 @@ public class StatsDataAccumulator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unmarshals the {@link StatsGroupingColumn} from the
|
||||||
|
* {@link AggregateRecord}.
|
||||||
|
*
|
||||||
|
* @param record
|
||||||
|
* the aggregate record
|
||||||
|
* @return the unmarshalled column, or an empty column if unable to
|
||||||
|
* unmarshal
|
||||||
|
*/
|
||||||
|
private static StatsGroupingColumn unmarshalGroupingColumnFromRecord(
|
||||||
|
AggregateRecord record) {
|
||||||
|
String groupingXmlAsString = record.getGrouping();
|
||||||
|
try {
|
||||||
|
return (StatsGroupingColumn) JAXB_MANAGER
|
||||||
|
.unmarshalFromXml(groupingXmlAsString);
|
||||||
|
} catch (JAXBException e) {
|
||||||
|
statusHandler.handle(Priority.PROBLEM,
|
||||||
|
"Unable to unmarshal stats grouping column, returning empty record, xml:\n"
|
||||||
|
+ groupingXmlAsString, e);
|
||||||
|
return new StatsGroupingColumn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gather the data together in each bin.
|
* Gather the data together in each bin.
|
||||||
*
|
*
|
||||||
|
|
|
@ -30,6 +30,7 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import com.raytheon.uf.common.event.Event;
|
import com.raytheon.uf.common.event.Event;
|
||||||
import com.raytheon.uf.common.localization.IPathManager;
|
import com.raytheon.uf.common.localization.IPathManager;
|
||||||
import com.raytheon.uf.common.localization.LocalizationContext;
|
import com.raytheon.uf.common.localization.LocalizationContext;
|
||||||
|
@ -57,6 +58,7 @@ import com.raytheon.uf.common.util.ReflectionUtil;
|
||||||
* Aug 21, 2012 jsanchez Updated error handling and validated config files.
|
* Aug 21, 2012 jsanchez Updated error handling and validated config files.
|
||||||
* Nov 07, 2012 1317 mpduff Update config files.
|
* Nov 07, 2012 1317 mpduff Update config files.
|
||||||
* Nov 29, 2012 1350 rjpeter Updated to static, fixed localization, increased validation.
|
* Nov 29, 2012 1350 rjpeter Updated to static, fixed localization, increased validation.
|
||||||
|
* Jan 15, 2013 1487 djohnson Make validate() static and public, so it can be run independently.
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author jsanchez
|
* @author jsanchez
|
||||||
|
@ -158,7 +160,8 @@ public class ConfigLoader {
|
||||||
*
|
*
|
||||||
* @param config
|
* @param config
|
||||||
*/
|
*/
|
||||||
private void validate(Map<String, StatisticsEvent> eventMap,
|
@VisibleForTesting
|
||||||
|
public static void validate(Map<String, StatisticsEvent> eventMap,
|
||||||
StatisticsConfig config) {
|
StatisticsConfig config) {
|
||||||
for (Iterator<StatisticsEvent> iter = config.getEvents().iterator(); iter
|
for (Iterator<StatisticsEvent> iter = config.getEvents().iterator(); iter
|
||||||
.hasNext();) {
|
.hasNext();) {
|
||||||
|
|
|
@ -42,18 +42,10 @@ echo "------------------------------ " >> $LOGFILE
|
||||||
Dte=`date -u `
|
Dte=`date -u `
|
||||||
echo Starting alarm_whfs at $Dte >> $LOGFILE
|
echo Starting alarm_whfs at $Dte >> $LOGFILE
|
||||||
|
|
||||||
Dte=`date -u`
|
|
||||||
echo Invoking roc_checker at $Dte >> $LOGFILE
|
|
||||||
|
|
||||||
$WHFS_LOCAL_BIN_DIR/run_roc_checker
|
$WHFS_LOCAL_BIN_DIR/run_roc_checker
|
||||||
|
|
||||||
# TODO re-enabled report_alarm if needed
|
$WHFS_LOCAL_BIN_DIR/run_report_alarm
|
||||||
|
|
||||||
#Dte=`date -u`
|
Dte=`date -u `
|
||||||
#echo Invoking report_alarm at $Dte >> $LOGFILE
|
echo Completed alarm_whfs at $Dte >> $LOGFILE
|
||||||
|
|
||||||
#$WHFS_LOCAL_BIN_DIR/run_report_alarm
|
|
||||||
|
|
||||||
#Dte=`date -u `
|
|
||||||
#echo Completed alarm_whfs at $Dte >> $LOGFILE
|
|
||||||
|
|
||||||
|
|
|
@ -67,5 +67,6 @@
|
||||||
<classpathentry combineaccessrules="false" kind="src" path="/com.raytheon.uf.common.stats"/>
|
<classpathentry combineaccessrules="false" kind="src" path="/com.raytheon.uf.common.stats"/>
|
||||||
<classpathentry combineaccessrules="false" kind="src" path="/com.raytheon.uf.edex.stats"/>
|
<classpathentry combineaccessrules="false" kind="src" path="/com.raytheon.uf.edex.stats"/>
|
||||||
<classpathentry combineaccessrules="false" kind="src" path="/com.raytheon.uf.viz.plugin.nwsauth"/>
|
<classpathentry combineaccessrules="false" kind="src" path="/com.raytheon.uf.viz.plugin.nwsauth"/>
|
||||||
|
<classpathentry combineaccessrules="false" kind="src" path="/com.raytheon.uf.edex.plugin.nwsauth"/>
|
||||||
<classpathentry kind="output" path="bin"/>
|
<classpathentry kind="output" path="bin"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
com.raytheon.uf.common.datadelivery.retrieval.util.NullXmlWriter
|
|
|
@ -1 +0,0 @@
|
||||||
com.raytheon.uf.common.datadelivery.retrieval.util.NullXmlWriter
|
|
|
@ -40,6 +40,7 @@ import com.raytheon.uf.common.util.FileUtil;
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Jul 18, 2012 740 djohnson Initial creation
|
* Jul 18, 2012 740 djohnson Initial creation
|
||||||
* Oct 23, 2012 1286 djohnson Change to find more localization files.
|
* Oct 23, 2012 1286 djohnson Change to find more localization files.
|
||||||
|
* Jan 16, 2013 1487 djohnson Avoid adding new localization files to baseline utility directories.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -131,21 +132,44 @@ public class TestPathManager extends PathManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (foundFile == null
|
if (foundFile == null
|
||||||
|| !foundFile.exists()
|
|
||||||
|| foundFile.getAbsolutePath().startsWith(
|
|| foundFile.getAbsolutePath().startsWith(
|
||||||
savedLocalizationFileDir.getAbsolutePath())) {
|
savedLocalizationFileDir.getAbsolutePath())) {
|
||||||
return foundFile;
|
return foundFile;
|
||||||
}
|
}
|
||||||
// Make a copy in the savedFile folder, this way if any
|
|
||||||
// modifications are performed we don't mess with the file in
|
File savedFile = createTestIsolatedVersionOfLocalizationFile(
|
||||||
// the baseline
|
context, fileName, foundFile);
|
||||||
|
return savedFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a test isolated version of the localization file. Allows the
|
||||||
|
* file to be written to, and changes to be read back, without affecting
|
||||||
|
* the baselined version of the file.
|
||||||
|
*
|
||||||
|
* @param context
|
||||||
|
* the context
|
||||||
|
* @param fileName
|
||||||
|
* the file path
|
||||||
|
* @param baselinedVersion
|
||||||
|
* the file reference
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private File createTestIsolatedVersionOfLocalizationFile(
|
||||||
|
LocalizationContext context, String fileName, File baselinedVersion) {
|
||||||
File savedFileBaseDir = new File(savedLocalizationFileDir,
|
File savedFileBaseDir = new File(savedLocalizationFileDir,
|
||||||
context.toPath());
|
context.toPath());
|
||||||
File savedFile = new File(savedFileBaseDir, fileName);
|
File savedFile = new File(savedFileBaseDir, fileName);
|
||||||
savedFile.getParentFile().mkdirs();
|
savedFile.getParentFile().mkdirs();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
FileUtil.copyFile(foundFile, savedFile);
|
if (baselinedVersion.exists()) {
|
||||||
|
if (baselinedVersion.isDirectory()) {
|
||||||
|
FileUtil.copyDirectory(baselinedVersion, savedFile);
|
||||||
|
} else {
|
||||||
|
FileUtil.copyFile(baselinedVersion, savedFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,156 @@
|
||||||
|
/**
|
||||||
|
* 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.plugin.nwsauth;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.xml.bind.JAXBException;
|
||||||
|
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.raytheon.uf.common.localization.IPathManager;
|
||||||
|
import com.raytheon.uf.common.localization.LocalizationContext;
|
||||||
|
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
|
||||||
|
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
|
||||||
|
import com.raytheon.uf.common.localization.LocalizationFile;
|
||||||
|
import com.raytheon.uf.common.localization.PathManagerFactory;
|
||||||
|
import com.raytheon.uf.common.localization.PathManagerFactoryTest;
|
||||||
|
import com.raytheon.uf.common.localization.exception.LocalizationException;
|
||||||
|
import com.raytheon.uf.common.plugin.nwsauth.xml.NwsRoleData;
|
||||||
|
import com.raytheon.uf.common.plugin.nwsauth.xml.UserXML;
|
||||||
|
import com.raytheon.uf.common.serialization.JAXBManager;
|
||||||
|
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||||
|
import com.raytheon.uf.common.time.util.TimeUtilTest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test {@link FileManager}.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* Jan 17, 2013 1412 djohnson Initial creation
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author djohnson
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class FileManagerTest {
|
||||||
|
private static JAXBManager jaxbManager;
|
||||||
|
|
||||||
|
private final UserXML someUser = new UserXML("someUser");
|
||||||
|
|
||||||
|
private FileManager manager;
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void classSetup() throws JAXBException {
|
||||||
|
jaxbManager = new JAXBManager(NwsRoleData.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() {
|
||||||
|
TimeUtilTest.freezeTime();
|
||||||
|
PathManagerFactoryTest.initLocalization();
|
||||||
|
manager = new FileManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void tearDown() {
|
||||||
|
TimeUtilTest.resumeTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void fileNewerOnDiskIsReadBeforeResponse()
|
||||||
|
throws LocalizationException {
|
||||||
|
|
||||||
|
addUserToUserAdminFile();
|
||||||
|
|
||||||
|
verifyUserIsFoundWhenRoleDataRetrieved();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void fileOlderOnDiskIsNotReadBeforeResponse()
|
||||||
|
throws LocalizationException {
|
||||||
|
|
||||||
|
addUserToUserAdminFile();
|
||||||
|
setUserAdminFileModifiedTimeToOneSecondAgo();
|
||||||
|
|
||||||
|
verifyUserIsNotFoundWhenRoleDataRetrieved();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void verifyUserIsFoundWhenRoleDataRetrieved() {
|
||||||
|
final Map<String, NwsRoleData> roleDataMap = manager.getRoleDataMap();
|
||||||
|
assertTrue(
|
||||||
|
"Did not find the user added to the role data map!",
|
||||||
|
roleDataMap.get("TestUserRoles").getUserList()
|
||||||
|
.contains(someUser));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param someUser
|
||||||
|
*/
|
||||||
|
private void verifyUserIsNotFoundWhenRoleDataRetrieved() {
|
||||||
|
final Map<String, NwsRoleData> roleDataMap = manager.getRoleDataMap();
|
||||||
|
assertFalse(
|
||||||
|
"Should not have found the user added to the role data map!",
|
||||||
|
roleDataMap.get("TestUserRoles").getUserList()
|
||||||
|
.contains(someUser));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addUserToUserAdminFile() throws LocalizationException {
|
||||||
|
final LocalizationFile file = getTestUserAdminRolesLocalizationFile();
|
||||||
|
NwsRoleData roleData = file.jaxbUnmarshal(NwsRoleData.class,
|
||||||
|
jaxbManager);
|
||||||
|
|
||||||
|
roleData.getUserList().add(someUser);
|
||||||
|
file.jaxbMarshal(roleData, jaxbManager);
|
||||||
|
file.save();
|
||||||
|
// The file was written out 1 second after we last read it
|
||||||
|
file.getFile().setLastModified(
|
||||||
|
TimeUtil.currentTimeMillis() + TimeUtil.MILLIS_PER_SECOND);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setUserAdminFileModifiedTimeToOneSecondAgo() {
|
||||||
|
// The file was written out 1 second before we last read it
|
||||||
|
getTestUserAdminRolesLocalizationFile().getFile().setLastModified(
|
||||||
|
TimeUtil.currentTimeMillis() - TimeUtil.MILLIS_PER_SECOND);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LocalizationFile getTestUserAdminRolesLocalizationFile() {
|
||||||
|
IPathManager pathManager = PathManagerFactory.getPathManager();
|
||||||
|
final LocalizationFile file = pathManager.getLocalizationFile(
|
||||||
|
new LocalizationContext(LocalizationType.COMMON_STATIC,
|
||||||
|
LocalizationLevel.SITE, "OAX"),
|
||||||
|
"roles/testUserAdminRoles.xml");
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
116
tests/unit/com/raytheon/uf/edex/stats/AggregateManagerTest.java
Normal file
116
tests/unit/com/raytheon/uf/edex/stats/AggregateManagerTest.java
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
/**
|
||||||
|
* 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.stats;
|
||||||
|
|
||||||
|
import static org.hamcrest.CoreMatchers.equalTo;
|
||||||
|
import static org.hamcrest.CoreMatchers.is;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.xml.bind.JAXBException;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
import com.raytheon.uf.common.localization.IPathManager;
|
||||||
|
import com.raytheon.uf.common.localization.LocalizationContext;
|
||||||
|
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
|
||||||
|
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
|
||||||
|
import com.raytheon.uf.common.localization.LocalizationFile;
|
||||||
|
import com.raytheon.uf.common.localization.PathManagerFactory;
|
||||||
|
import com.raytheon.uf.common.localization.PathManagerFactoryTest;
|
||||||
|
import com.raytheon.uf.common.serialization.JAXBManager;
|
||||||
|
import com.raytheon.uf.common.stats.StatsGrouping;
|
||||||
|
import com.raytheon.uf.common.stats.StatsGroupingColumn;
|
||||||
|
import com.raytheon.uf.common.stats.xml.StatisticsConfig;
|
||||||
|
import com.raytheon.uf.common.stats.xml.StatisticsEvent;
|
||||||
|
import com.raytheon.uf.common.util.FileUtil;
|
||||||
|
import com.raytheon.uf.edex.stats.util.ConfigLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test {@link AggregateManager}.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* Jan 15, 2013 1487 djohnson Initial creation
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author djohnson
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class AggregateManagerTest {
|
||||||
|
private static JAXBManager jaxbManager;
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void classSetUp() throws JAXBException {
|
||||||
|
jaxbManager = new JAXBManager(StatisticsConfig.class,
|
||||||
|
StatsGroupingColumn.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() {
|
||||||
|
PathManagerFactoryTest.initLocalization();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDeterminingGroupForEvent() throws Exception {
|
||||||
|
IPathManager pm = PathManagerFactory.getPathManager();
|
||||||
|
final LocalizationFile lf = pm.getLocalizationFile(
|
||||||
|
new LocalizationContext(LocalizationType.EDEX_STATIC,
|
||||||
|
LocalizationLevel.BASE), FileUtil.join("stats",
|
||||||
|
"mockStats.xml"));
|
||||||
|
|
||||||
|
final StatisticsConfig statisticsConfig = lf.jaxbUnmarshal(
|
||||||
|
StatisticsConfig.class, jaxbManager);
|
||||||
|
|
||||||
|
ConfigLoader.validate(Maps.<String, StatisticsEvent> newHashMap(),
|
||||||
|
statisticsConfig);
|
||||||
|
|
||||||
|
MockEvent mockEvent = new MockEvent();
|
||||||
|
mockEvent.setPluginName("somePlugin");
|
||||||
|
mockEvent.setFileName("someFileName");
|
||||||
|
mockEvent.setProcessingTime(1000L);
|
||||||
|
mockEvent.setProcessingLatency(500L);
|
||||||
|
|
||||||
|
List<StatsGrouping> groupList = new ArrayList<StatsGrouping>();
|
||||||
|
groupList.add(new StatsGrouping("pluginName", "somePlugin"));
|
||||||
|
groupList.add(new StatsGrouping("fileName", "someFileName"));
|
||||||
|
StatsGroupingColumn column = new StatsGroupingColumn();
|
||||||
|
column.setGroup(groupList);
|
||||||
|
|
||||||
|
final String expectedGroupRepresentation = jaxbManager
|
||||||
|
.marshalToXml(column);
|
||||||
|
final String actualGroupRepresentation = AggregateManager.determineGroupRepresentationForEvent(
|
||||||
|
statisticsConfig.getEvents().iterator().next(), mockEvent);
|
||||||
|
assertThat(actualGroupRepresentation,
|
||||||
|
is(equalTo(expectedGroupRepresentation)));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
169
tests/unit/com/raytheon/uf/edex/stats/MockEvent.java
Normal file
169
tests/unit/com/raytheon/uf/edex/stats/MockEvent.java
Normal file
|
@ -0,0 +1,169 @@
|
||||||
|
/**
|
||||||
|
* 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.stats;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
||||||
|
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
||||||
|
import com.raytheon.uf.common.stats.ProcessEvent;
|
||||||
|
import com.raytheon.uf.common.stats.StatisticsEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mock event based from {@link ProcessEvent}.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* Jan 15, 2013 1487 djohnson Initial creation
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author djohnson
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
@DynamicSerialize
|
||||||
|
public class MockEvent extends StatisticsEvent {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private static final Map<String, String> FIELD_UNIT_MAP;
|
||||||
|
static {
|
||||||
|
Map<String, String> m = new HashMap<String, String>();
|
||||||
|
m.put("processingLatency", "ms");
|
||||||
|
m.put("processingTime", "ms");
|
||||||
|
FIELD_UNIT_MAP = Collections.unmodifiableMap(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DynamicSerializeElement
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
@DynamicSerializeElement
|
||||||
|
private String pluginName;
|
||||||
|
|
||||||
|
@DynamicSerializeElement
|
||||||
|
private String fileName;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Processing time in milliseconds
|
||||||
|
*/
|
||||||
|
@DynamicSerializeElement
|
||||||
|
private long processingTime;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Processing latency in milliseconds
|
||||||
|
*/
|
||||||
|
@DynamicSerializeElement
|
||||||
|
private long processingLatency;
|
||||||
|
|
||||||
|
public MockEvent() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Map<String, String> getFieldUnitMap() {
|
||||||
|
return FIELD_UNIT_MAP;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the fileName
|
||||||
|
*/
|
||||||
|
public String getFileName() {
|
||||||
|
return fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the message
|
||||||
|
*/
|
||||||
|
public String getMessage() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the pluginName
|
||||||
|
*/
|
||||||
|
public String getPluginName() {
|
||||||
|
return pluginName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the processingLatency in milliseconds
|
||||||
|
*/
|
||||||
|
public long getProcessingLatency() {
|
||||||
|
return processingLatency;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the processingTime in milliseconds
|
||||||
|
*/
|
||||||
|
public long getProcessingTime() {
|
||||||
|
return processingTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param fileName
|
||||||
|
* the fileName to set
|
||||||
|
*/
|
||||||
|
public void setFileName(String fileName) {
|
||||||
|
this.fileName = fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param message
|
||||||
|
* the message to set
|
||||||
|
*/
|
||||||
|
public void setMessage(String message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param pluginName
|
||||||
|
* the pluginName to set
|
||||||
|
*/
|
||||||
|
public void setPluginName(String pluginName) {
|
||||||
|
this.pluginName = pluginName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param processingLatency
|
||||||
|
* the processingLatency in milliseconds to set
|
||||||
|
*/
|
||||||
|
public void setProcessingLatency(long processingLatency) {
|
||||||
|
this.processingLatency = processingLatency;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param processingTime
|
||||||
|
* the processingTime in milliseconds to set
|
||||||
|
*/
|
||||||
|
public void setProcessingTime(long processingTime) {
|
||||||
|
this.processingTime = processingTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return super.toString() + " : " + getMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,38 +1,82 @@
|
||||||
|
/**
|
||||||
|
* 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.stats.data;
|
package com.raytheon.uf.edex.stats.data;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.TimeZone;
|
|
||||||
|
import javax.xml.bind.JAXBException;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
import com.raytheon.uf.common.datadelivery.event.retrieval.DataRetrievalEvent;
|
||||||
|
import com.raytheon.uf.common.datadelivery.event.retrieval.SubscriptionRetrievalEvent;
|
||||||
|
import com.raytheon.uf.common.serialization.JAXBManager;
|
||||||
import com.raytheon.uf.common.stats.AggregateRecord;
|
import com.raytheon.uf.common.stats.AggregateRecord;
|
||||||
|
import com.raytheon.uf.common.stats.StatsGrouping;
|
||||||
|
import com.raytheon.uf.common.stats.StatsGroupingColumn;
|
||||||
|
import com.raytheon.uf.common.stats.data.StatsData;
|
||||||
import com.raytheon.uf.common.stats.util.UnitUtils;
|
import com.raytheon.uf.common.stats.util.UnitUtils;
|
||||||
import com.raytheon.uf.common.time.TimeRange;
|
import com.raytheon.uf.common.time.TimeRange;
|
||||||
|
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Test {@link StatsDataAccumulator}.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* Jan 15, 2013 1487 djohnson Use XML for grouping column.
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author djohnson
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
public class StatsDataAccumulatorTest {
|
public class StatsDataAccumulatorTest {
|
||||||
|
|
||||||
|
private static final JAXBManager JAXB_MANAGER;
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
JAXB_MANAGER = new JAXBManager(StatsGroupingColumn.class);
|
||||||
|
} catch (JAXBException e) {
|
||||||
|
throw new ExceptionInInitializerError(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCalculateBinsCalculatesCorrectly() {
|
public void testCalculateBinsCalculatesCorrectly() {
|
||||||
Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
|
TimeRange tr = new TimeRange(0L, TimeUtil.MILLIS_PER_DAY);
|
||||||
c.set(Calendar.MILLISECOND, 0);
|
|
||||||
c.set(Calendar.SECOND, 0);
|
|
||||||
c.set(Calendar.MINUTE, 0);
|
|
||||||
c.set(Calendar.HOUR_OF_DAY, 0);
|
|
||||||
c.set(Calendar.DAY_OF_MONTH, 1);
|
|
||||||
c.set(Calendar.MONTH, 0);
|
|
||||||
long start = c.getTimeInMillis();
|
|
||||||
|
|
||||||
c.add(Calendar.DAY_OF_MONTH, 1);
|
|
||||||
long end = c.getTimeInMillis();
|
|
||||||
|
|
||||||
TimeRange tr = new TimeRange(start, end);
|
|
||||||
StatsDataAccumulator acc = new StatsDataAccumulator();
|
StatsDataAccumulator acc = new StatsDataAccumulator();
|
||||||
acc.setTimeRange(tr);
|
acc.setTimeRange(tr);
|
||||||
acc.setTimeStep(5);
|
acc.setTimeStep(5);
|
||||||
|
@ -41,7 +85,8 @@ public class StatsDataAccumulatorTest {
|
||||||
|
|
||||||
int expectedBinCount = 288; // 5 minute bins 12 per hour, * 24
|
int expectedBinCount = 288; // 5 minute bins 12 per hour, * 24
|
||||||
int actualBinCount = acc.bins.keySet().size();
|
int actualBinCount = acc.bins.keySet().size();
|
||||||
assertEquals("Bin Counts do not match", expectedBinCount, actualBinCount);
|
assertEquals("Bin Counts do not match", expectedBinCount,
|
||||||
|
actualBinCount);
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (long bin : acc.bins.keySet()) {
|
for (long bin : acc.bins.keySet()) {
|
||||||
|
@ -51,7 +96,7 @@ public class StatsDataAccumulatorTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSetupGroupings() {
|
public void testSetupGroupings() throws JAXBException {
|
||||||
List<AggregateRecord> recordList = getTestRecords();
|
List<AggregateRecord> recordList = getTestRecords();
|
||||||
StatsDataAccumulator acc = new StatsDataAccumulator();
|
StatsDataAccumulator acc = new StatsDataAccumulator();
|
||||||
acc.setRecords(recordList.toArray(new AggregateRecord[recordList.size()]));
|
acc.setRecords(recordList.toArray(new AggregateRecord[recordList.size()]));
|
||||||
|
@ -62,33 +107,39 @@ public class StatsDataAccumulatorTest {
|
||||||
expectedGroups.add("provider");
|
expectedGroups.add("provider");
|
||||||
expectedGroups.add("plugin");
|
expectedGroups.add("plugin");
|
||||||
|
|
||||||
List<String> expectedGroupMembers = new ArrayList<String>();
|
List<String> expectedPlugins = Arrays.asList("grid");
|
||||||
expectedGroupMembers.add("nomads");
|
List<String> expectedProviders = Arrays.asList("nomads", "madis");
|
||||||
expectedGroupMembers.add("madis");
|
List<String> expectedOwners = Arrays.asList("owner0", "owner1",
|
||||||
expectedGroupMembers.add("owner0");
|
"owner2", "owner3", "owner4");
|
||||||
expectedGroupMembers.add("owner1");
|
|
||||||
expectedGroupMembers.add("owner2");
|
|
||||||
expectedGroupMembers.add("owner3");
|
|
||||||
expectedGroupMembers.add("owner4");
|
|
||||||
expectedGroupMembers.add("grid");
|
|
||||||
|
|
||||||
|
Map<String, List<String>> expectedGroupsToValues = Maps.newHashMap();
|
||||||
|
expectedGroupsToValues.put("provider", expectedProviders);
|
||||||
|
expectedGroupsToValues.put("plugin", expectedPlugins);
|
||||||
|
expectedGroupsToValues.put("owner", expectedOwners);
|
||||||
|
|
||||||
// Check the groups
|
// Check the groups
|
||||||
for (String group : acc.groups) {
|
for (String expected : expectedGroups) {
|
||||||
assertTrue(expectedGroups.contains(group));
|
assertTrue("Did not find group [" + expected
|
||||||
|
+ "] in the group collection!",
|
||||||
|
acc.groups.contains(expected));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check the group members
|
// Check the group members
|
||||||
for (String key: acc.groupMemberMap.keySet()) {
|
final Map<String, Set<String>> groupMemberMap = acc.groupMemberMap;
|
||||||
for (String member: acc.groupMemberMap.get(key)) {
|
for (Entry<String, List<String>> entry : expectedGroupsToValues
|
||||||
assertTrue(expectedGroupMembers.contains(member));
|
.entrySet()) {
|
||||||
|
final String groupName = entry.getKey();
|
||||||
|
final Set<String> setToCheck = groupMemberMap.get(groupName);
|
||||||
|
for (String member : entry.getValue()) {
|
||||||
|
assertTrue("Did not find entry [" + member + "] for group ["
|
||||||
|
+ groupName + "]!", setToCheck.contains(member));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCreateStatsDataMapCreation() {
|
public void testCreateStatsDataMapCreation() throws JAXBException {
|
||||||
String eventType = "com.raytheon.uf.common.datadelivery.event.retrieval.DataRetrievalEvent";
|
String eventType = DataRetrievalEvent.class.getName();
|
||||||
String dataType = "bytes";
|
String dataType = "bytes";
|
||||||
String displayUnit = "MB";
|
String displayUnit = "MB";
|
||||||
|
|
||||||
|
@ -116,54 +167,54 @@ public class StatsDataAccumulatorTest {
|
||||||
expectedSet.add("owner3:madis");
|
expectedSet.add("owner3:madis");
|
||||||
expectedSet.add("owner4:madis");
|
expectedSet.add("owner4:madis");
|
||||||
|
|
||||||
for (String key : acc.statsDataMap.keySet()) {
|
final Map<String, StatsData> statsDataMap = acc.statsDataMap;
|
||||||
assertTrue(expectedSet.contains(key));
|
for (String expected : expectedSet) {
|
||||||
|
assertTrue("Did not find expected value (" + expected
|
||||||
|
+ "] as key in the statsDataMap!",
|
||||||
|
statsDataMap.containsKey(expected));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build the Aggregate records
|
// Build the Aggregate records
|
||||||
private List<AggregateRecord> getTestRecords() {
|
private List<AggregateRecord> getTestRecords() throws JAXBException {
|
||||||
String plugin = "plugin";
|
String plugin = "plugin";
|
||||||
String provider = "provider";
|
String provider = "provider";
|
||||||
String nomads = "nomads";
|
String nomads = "nomads";
|
||||||
String madis = "madis";
|
String madis = "madis";
|
||||||
String owner = "owner";
|
String owner = "owner";
|
||||||
String grid = "grid";
|
String grid = "grid";
|
||||||
String dash = "-";
|
|
||||||
String colon = ":";
|
|
||||||
|
|
||||||
List<String> groupings = new ArrayList<String>();
|
List<StatsGroupingColumn> groupingColumns = new ArrayList<StatsGroupingColumn>();
|
||||||
for (int i = 0; i < 5; i++) {
|
for (int i = 0; i < 15; i++) {
|
||||||
groupings.add(plugin + colon + grid + dash + owner + colon + owner + i);
|
groupingColumns.add(StatsGroupingColumn.withGroupings(
|
||||||
|
new StatsGrouping(plugin, grid), new StatsGrouping(owner,
|
||||||
|
owner + i)));
|
||||||
}
|
}
|
||||||
for (int i = 0; i < 5; i++) {
|
for (int i = 0; i < 5; i++) {
|
||||||
groupings.add(plugin + colon + grid + dash + owner + colon + owner + i);
|
groupingColumns.add(StatsGroupingColumn.withGroupings(
|
||||||
|
new StatsGrouping(provider, nomads), new StatsGrouping(
|
||||||
|
owner, owner + i)));
|
||||||
}
|
}
|
||||||
for (int i = 0; i < 5; i++) {
|
for (int i = 0; i < 5; i++) {
|
||||||
groupings.add(plugin + colon + grid + dash + owner + colon + owner + i);
|
groupingColumns.add(StatsGroupingColumn.withGroupings(
|
||||||
}
|
new StatsGrouping(provider, madis), new StatsGrouping(
|
||||||
|
owner, owner + i)));
|
||||||
for (int i = 0; i < 5; i++) {
|
|
||||||
groupings.add(provider + colon + nomads + dash + owner + colon + owner + i);
|
|
||||||
}
|
|
||||||
for (int i = 0; i < 5; i++) {
|
|
||||||
groupings.add(provider + colon + madis + dash + owner + colon + owner + i);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
List<AggregateRecord> records = new ArrayList<AggregateRecord>();
|
List<AggregateRecord> records = new ArrayList<AggregateRecord>();
|
||||||
|
|
||||||
for (String group : groupings) {
|
for (StatsGroupingColumn group : groupingColumns) {
|
||||||
AggregateRecord r = new AggregateRecord();
|
AggregateRecord r = new AggregateRecord();
|
||||||
|
|
||||||
if (group.contains("provider")) {
|
if ("provider".equals(group.getGroup().iterator().next().getName())) {
|
||||||
r.setEventType("com.raytheon.uf.common.datadelivery.event.retrieval.DataRetrievalEvent");
|
r.setEventType(DataRetrievalEvent.class.getName());
|
||||||
r.setField("bytes");
|
r.setField("bytes");
|
||||||
} else {
|
} else {
|
||||||
r.setEventType("com.raytheon.uf.common.datadelivery.event.retrieval.SubscriptionRetrievalEvent");
|
r.setEventType(SubscriptionRetrievalEvent.class.getName());
|
||||||
r.setField("numRecords");
|
r.setField("numRecords");
|
||||||
}
|
}
|
||||||
r.setGrouping(group);
|
r.setGrouping(JAXB_MANAGER.marshalToXml(group));
|
||||||
records.add(r);
|
records.add(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<nwsRoleData xmlns:ns2="group">
|
||||||
|
<!-- AWIPS 2 User Admin Roles/Permissions file -->
|
||||||
|
<application>TestUserRoles</application>
|
||||||
|
<permission id="awips.user.admin">
|
||||||
|
<description>
|
||||||
|
This permission allows the user to access and edit AWIPS 2 User Administration
|
||||||
|
</description>
|
||||||
|
</permission>
|
||||||
|
|
||||||
|
<user userId="ALL">
|
||||||
|
<userPermission>awips.user.admin</userPermission>
|
||||||
|
</user>
|
||||||
|
</nwsRoleData>
|
12
tests/utility/edex_static/base/stats/mockStats.xml
Normal file
12
tests/utility/edex_static/base/stats/mockStats.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<statisticsConfig>
|
||||||
|
<!-- Event Type should be fully qualified name of stat event -->
|
||||||
|
<statisticsEvent type="com.raytheon.uf.edex.stats.MockEvent"
|
||||||
|
displayName="Mock Events" category="Mock Events">
|
||||||
|
<statisticsGroup name="pluginName" displayName="Data Type" />
|
||||||
|
<statisticsGroup name="fileName" displayName="File Name" />
|
||||||
|
<statisticsAggregate field="processingTime"
|
||||||
|
displayName="Processing Time" displayUnit="ms" />
|
||||||
|
<statisticsAggregate field="processingLatency"
|
||||||
|
displayName="Processing Latency" displayUnit="ms" />
|
||||||
|
</statisticsEvent>
|
||||||
|
</statisticsConfig>
|
Loading…
Add table
Reference in a new issue